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

본문 바로가기

사이트 내 전체검색

이전으로Pygame - python GUI module

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

페이지정보

글쓴이 관리자 조회 25,880 조회 날짜 20-03-10 14:27 / U: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

 

댓글목록

댓글이 없습니다

게시물 검색
총 22 건 , 1 페이지
올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구
Copyright © JBMPA.com All rights reserved.
사이트 언어 선택
PC 보기