파이썬 (Python)/파이썬 크래시 코스 - 에릭 마테스

[Python] 실습편 - 외계인 침공 : 불을 뿜는 우주선 3

Minkyu Lee 2024. 3. 15. 18:12

 

결과

 

개요

화면에 우주선을 그린다.

 

1. ship.py 이름으로 모듈을 별도로 만든다.

2. 화면을 속성으로 할당하여, 우주선 이미지를 화면 중앙에 배치한다. (midbottom)

3. 파이게임은 게임 요소들을 모두 사각형으로 처리해 효율적이다. (rect)

 

+ 챕터 12.4.2까지의 내용이다.

코드

alien_invasion.py

import sys
import pygame
from settings import Settings
from ship import Ship # 0. 모듈 불러오기

class AlienInvasion :
    """게임 자원과 동작을 전체적으로 관리하는 클래스"""

    def __init__(self) :
        """게임을 초기화하고 게임 자원을 만듭니다"""
        pygame.init()
        self.clock = pygame.time.Clock()
        self.settings = Settings()
        self.screen = pygame.display.set_mode(
            (self.settings.screen_width, self.settings.screen_height))
        pygame.display.set_caption("Alien Invasion")

        self.ship = Ship(self) # 1. Ship 인스턴스 생성

    def run_game(self) :
        """게임의 메인 루프를 시작합니다"""
        while True :
            # 키보드와 마우스 이벤트에 응답합니다.
            for event in pygame.event.get() :
                if event.type == pygame.QUIT :
                    sys.exit()

            # 루프를 반복할 때마다 화면을 다시 그립니다.
            self.screen.fill(self.settings.bg_color)
            self.ship.blitme() # 2. 우주선 그리기

            # 가장 최근에 그린 화면 표시합니다.
            pygame.display.flip()
            self.clock.tick(60)

if __name__ == '__main__' :
    ai = AlienInvasion()
    ai.run_game()

 

ship.py

import pygame

class Ship :
    """우주선을 관리하는 클래스"""

    def __init__(self, ai_game) : # AlienInvasion 클래스에서 정의하는 모든 것에 접근 가능
        '''우주선 초기화, 시작 위치 설정'''
        self.screen = ai_game.screen # 화면을 속성으로 할당
        self.screen_rect = ai_game.screen.get_rect() # 메서드를 사용

        #우주선 이미지를 불러오고 사각형을 가져옵니다.
        self.image = pygame.image.load('images/ship.bmp')
        self.rect = self.image.get_rect() # 우주선 rect 속성 가져오기

        #우주선의 초기 위치는 화면 하단 중앙입니다.
        self.rect.midbottom = self.screen_rect.midbottom # 우주선 위치 설정

    def blitme(self) :
        '''우주선을 현재 위치에 그립니다'''
        self.screen.blit(self.image, self.rect) #지정된 위치에 이미지 그리기