레이싱 게임 만들기 2 - 플레이어 자동차 만들기 > Pygame - python GUI module

본문 바로가기
사이트 내 전체검색

회원로그인

올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구

Pygame - python GUI module

레이싱 게임 만들기 2 - 플레이어 자동차 만들기

페이지정보

글쓴이 관리자 조회 25,166 조회 날짜 20-03-10 14:27 / Update:20-03-11 13:18
댓글 0 댓글

SNS 공유

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기

내용

레이싱 게임 만들기 2

 

 

- 플레이어 자동차 만들기

 

플레이어가 사용할 자동차를 만들어보자.

앞선 강좌에서 자동차를 클래스를 만들어서 자동차를 원하는 만큼 생성할 수 있었다.

https://www.jbmpa.com/pygame/14

 

플레이어 자동차도 같은 클래스를 사용하여 만든다.

다만 플레이어 자동차를 구분해주기 위해 load_car() 메서드의 parameter를 변경하고, 플레이어 호출 코드를 추가해준다.

 

 

 

1. 플레이어 자동차 생성을 위해 load_car() 메서드 변경

 

    def load_car(self, p = ""):
        if p == "p":
            # 플레이어 차량
            self.image = pygame.image.load(DIRCARS + "Player.png")
            # 크기 조정
            self.image = pygame.transform.scale(self.image, (40, 102))
            self.rect = self.image.get_rect()
            self.rect.x = self.x
            self.rect.y = self.y
        else:

            # 상대방 자동차
            self.image = pygame.image.load(DIRCARS + random.choice(self.car_image))
            self.rect = self.image.get_rect()

 

            # 이미지 크기 조절 - 이미지마다 크기가 다 다르므로 가로 세로 비율 유지하면서 변경
            if self.rect.width <= 55:
                carwidth = self.rect.width - 15
                carheight = round((self.rect.height * carwidth) / self.rect.width)
            else:
                carwidth = self.rect.width
                carheight = self.rect.height

 

            self.image = pygame.transform.scale(self.image, (carwidth, carheight))
            self.rect.width = carwidth
            self.rect.height = carheight

 

            # 생성 위치 - 스크린 크기 안에서 랜덤으로 x 좌표 생성. y 좌표는 스크린 밖 위에 생성
            self.rect.x = random.randrange(0, WINDOW_WIDTH - self.rect.width)
            self.rect.y = random.randrange(-150, -50)

 

            # STAGE에 따른 속도 변화, STAGE가 높아짐에 따라 자동차의 속도도 빨라진다.
            # 다양한 속도차이를 위해 5 ~ speed 사이에세 랜덤으로 속도를 선택하게 한다.

            speed = STAGE + 5
            if speed > 15:
                speed = 15
            self.dy = random.randint(5, speed)

 

 

 

2. 플레이어 자동차 생성하기

 

main() 함수 안에 플레이어 자동차를 생성하는 코드를 작성한다.

 

def main():
    ......

    ......

 

    clock = pygame.time.Clock()

 

    # 플레이어 자동차 생성
    player = Car(round(WINDOW_WIDTH / 2), round(WINDOW_HEIGHT - 150), 0, 0)
    player.load_car("p")

 

    ......

    ......

 

 

 

3. 플레이어 자동차 스크린에 그리기

 

게임 루프안에 플레이어 자동차를 그려주는 코드를 작성한다.

플레이어는 키보드로 움직여야 하기 때문에 그려주고, 이동하고, 스크린 화면 벗어났는지 체크하는 메서드를 실행해줘야 한다.

 

    ......

    ......

    while playing:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                playing = False
                pygame.quit()
                sys.exit()

    ......

    ......

        ''' 게임 코드 작성 '''

 

        # 플레이어를 스크린에 표시 및 화면 밖으로 못 벗어나게 하기
        player.draw_car()
        player.move_x()
        player.move_y()
        player.check_screen()

    ......

    ......

 

 

 

4. 플레이어 자동차 조작하기

 

키 이벤트를 이용하여 플레이어 자동차를 조작하는 코드를 작성한다.

 

    ......

    ......

    while playing:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                playing = False
                pygame.quit()
                sys.exit()

 

            # 화살표 키를 이용해서 플레이어의 움직임 거리를 조정해준다.
            # 키를 떼면 움직임 거리를 0으로 한다.

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:
                    player.dx = 5
                elif event.key == pygame.K_LEFT:
                    player.dx = -5

                if event.key == pygame.K_DOWN:
                    player.dy = 5
                elif event.key == pygame.K_UP:
                    player.dy = -5

 

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_RIGHT:
                    player.dx = 0
                elif event.key == pygame.K_LEFT:
                    player.dx = 0

                if event.key == pygame.K_DOWN:
                    player.dy = 0
                elif event.key == pygame.K_UP:
                    player.dy = 0

 

    ......

    ......

 

결과

2921044682_1583874855.5505.gif

충돌 코드를 넣지 않으면 플레이어 자동차와 다른 자동차들은 서로 겹쳐진다.

스크린에서 이미지는 blit() 한 순서대로 보여진다. 따라서 플레이어가 밑에, 다른 자동차들이 위에 겹쳐지게 된다.

 

 

 

5. 플레이어 자동차와 다른 자동차 충돌 감지

 

플레이어 자동차와 다른 자동차들의 충돌을 감지하여 튕겨나가게 하는 코드를 작성한다.

코드의 위치는 다른 자동차들이 도로위에서 움직이게 하는 코드 아래에 작성한다.

    ......

    ......

    while playing:

    ......

    ......

 

        # 다른 자동차들 도로위에 움직이기
        for i in range(CAR_COUNT):
            CARS[i].draw_image()
            CARS[i].rect.y += CARS[i].dy

            # 화면 아래로 내려가면 자동차를 다시 로드한다.
            # 로드시 자동차의 이미지가 랜덤으로 바뀌므로 새로운 자동차가 생긴 듯한 효과가 있다.

            if CARS[i].rect.y > WINDOW_HEIGHT:
                CARS[i].load_car()

 

        # 플레이어와 다른 차량 충돌 감지
        for i in range(CAR_COUNT):
            if player.check_collision(CARS[i], 5):
                # 부딪쳤을 경우 상대방 차량 튕겨나게 함. 좌우 튕김
                if player.rect.x > CARS[i].rect.x:
                    CARS[i].rect.x -= CARS[i].rect.width + 10
                else:
                    CARS[i].rect.x += CARS[i].rect.width + 10

 

                # 위 아래 튕김
                if player.rect.y > CARS[i].rect.y:
                    CARS[i].rect.y -= 30
                else:
                    CARS[i].rect.y += 30

    ......

    ......

 

 

결과

2921044682_1583874890.3078.gif

 

댓글목록 sfs

총 22 건 , 1 페이지
게시물 검색
Pygame - python GUI module 목록
번호 제목 글쓴이 조회 날짜
1 관리자 59753 02-21
2 관리자 33259 02-21
3 관리자 42186 02-21
4 관리자 45836 02-22
5 관리자 49256 02-22
6 관리자 43772 02-22
7 관리자 37457 02-22
8 관리자 38289 02-22
9 관리자 39603 02-23
10 관리자 45691 02-24
11 관리자 33608 02-25
12 관리자 37122 02-27
13 관리자 30540 03-05
14 관리자 37618 03-10
열람중 관리자 25167 03-10
16 관리자 30541 03-11
17 관리자 24130 03-11
18 관리자 26384 03-11
19 관리자 29611 03-11
20 관리자 31922 03-11
21 관리자 33126 04-05
22 관리자 26186 04-05
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.