본문 바로가기
파이썬 (Python)/파이썬 크래시 코스 - 에릭 마테스

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

by Minkyu Lee 2024. 3. 15.

 

결과

 

개요

화면에 우주선을 그린다.

 

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) #지정된 위치에 이미지 그리기

 

댓글