클래스와 함수로 분리하면 무엇이 좋을까요?
바로 중복되는 코드를 없앨 수 있고, 코드의 재사용을 더 잘할 수 있어요
이번 시간에는 2강에서 작성했던 코드를 함수와 클래스로 분리해보는 시간을 가져볼게요
# 2강 - 비행기 띄우기
import pygame
# 1. 게임 초기화
pygame.init()
# 2. 게임창 옵션 설정
size = [500, 700]
screen = pygame.display.set_mode(size)
title = "미사일 게임"
pygame.display.set_caption(title)
# 3. 게임 내 필요한 설정
clock = pygame.time.Clock() # FPS를 위한 변수
plane = pygame.image.load("/Users/js/Desktop/수업자료/python/비행기.png").convert_alpha()
plane = pygame.transform.scale(plane, (80, 80))
# 중앙으로
ss_x, ss_y = plane.get_size()
plane_x = round(size[0]/2) - ss_x / 2
plane_y = size[1] - ss_y - 15
# 검정색 배경화면
black = (0,0,0)
# 4. 메인 이벤트
SB = 0
while SB == 0:
# 4-1. FPS 설정
clock.tick(60) # 1초에 60번 while문 반복
# 4-2. 각종 입력 감지
for event in pygame.event.get():# 키보드나 마우스의 동작을 받아옴
if event.type == pygame.QUIT: # 게임 종료
SB = 1
# 4-3. 입력, 시간에 따른 변화
# 4-4. 그리기
screen.fill(black)
screen.blit(plane, (plane_x, plane_y))
# 4-5. 업데이트
pygame.display.flip()
# 5. 게임 종료
pygame.quit()
1. 이미지를 관리하는 클래스 작성
위에서 작성한 코드 중에서 이미지 불러오기, 이미지 크기 조절하기, 이미지 그리기를 관리해주는 코드를 클래스로 분리해볼게요
(1) 클래스 정의
우선 클래스를 정의해볼까요?
# 우선 클래스 이름을 정해서 정의해봅시다
class imageManager:
이 클래스는 어떤 기능이 있을까요?
- 이미지 불러오기
- 이미지 크기 조절하고 중앙으로 움직이기
- 이미지 보여주기
이렇게 3가지 기능으로 정의해볼 수 있어요
(2) 함수 정의
함수에 대해 배웠죠?
이런 기능들은 함수로 만들어야합니다
그리고 그 함수들 전체를 클래스로 관리할 수 있어요
그럼 이제 클래스에 포함되는 함수 기능 명세서를 작성해볼까요?
class imageManager:
# 생성자 초기화 (클래스를 만들 때 항상 먼저 정의해줍니다)
def __init__(self):
# (a) 이미지를 가져와서 위치를 저장합니다
def put_img(self, address):
# (b) 이미지 크기를 조절하고 위치를 저장합니다
def change_size(self, sx, sy):
# (c) 이미지를 보여줍니다
def show(self):
이렇게 4가지 함수로 기능을 분리할 수 있어요
(3) 클래스로 이동해야 하는 코드 살펴보기
전체 코드에서 클래스로 옮겨야하는 코드를 볼까요?
import pygame
pygame.init()
size = [500, 700]
screen = pygame.display.set_mode(size)
title = "미사일 게임"
pygame.display.set_caption(title)
### (a) 이미지를 가져와서 위치를 저장합니다
plane = pygame.image.load("/Users/js/Desktop/수업자료/python/비행기.png").convert_alpha()
ss_x, ss_y = plane.get_size()
### (b) 이미지 크기를 조절하고 위치를 저장합니다
plane = pygame.transform.scale(plane, (80, 80))
plane_x = round(size[0]/2) - ss_x / 2
plane_y = size[1] - ss_y - 15
black = (0,0,0)
SB = 0
while SB == 0:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
SB = 1
### (c) 이미지를 보여줍니다
screen.fill(black)
screen.blit(plane, (plane_x, plane_y))
pygame.display.flip()
pygame.quit()
(4) a, b, c의 기능을 함수로 옮기고 클래스로 관리하기
위에서 이동해야하는 코드를 옮겨볼까요?
class imageManager:
def __init__(self):
self.x = 0
self.y = 0
# (a) 이미지를 가져와서 위치를 저장합니다
def put_img(self, address):
self.image = pygame.image.load(address).convert_alpha()
self.sx, self.sy = self.image.get_size()
### (b) 이미지 크기를 조절하고 위치를 저장합니다
def change_size(self, sx, sy):
self.image = pygame.transform.scale(self.image, (sx, sy))
self.sx, self.sy = self.image.get_size()
### (c) 이미지를 보여줍니다
def show(self):
screen.blit(self.image, (self.x, self.y))
💡 이제 만든 클래스를 사용하여 전체 코드를 변경해봅시다
(5) 클래스 사용
(a) 이미지를 가져와서 위치를 저장합니다
ss = imageManager()
ss.put_img("/Users/js/Desktop/수업자료/python/비행기.png")
(b) 이미지 크기를 조절하고 위치를 저장합니다
ss.change_size(80, 80)
ss.x = round(size[0]/2) - ss.sx / 2
ss.y = size[1] - ss.sy - 15
(c) 이미지를 보여줍니다
ss.show()
전체 코드
# 3강 - 클래스를 사용하여 비행기 띄우기
import pygame
# 클래스를 사용해보자
## 클래스는 따로 있는 변수나 함수를 하나의 이름으로 묶어줍니다
class imageManager:
def __init__(self):
self.x = 0
self.y = 0
def put_img(self, address):
if address[-3:] == "png":
self.image = pygame.image.load(address).convert_alpha()
else:
self.image = pygame.image.load(address)
self.sx, self.sy = self.image.get_size()
def change_size(self, sx, sy):
self.image = pygame.transform.scale(self.image, (sx, sy))
self.sx, self.sy = self.image.get_size()
def show(self):
screen.blit(self.image, (self.x, self.y))
# 1. 게임 초기화
pygame.init()
# 2. 게임창 옵션 설정
size = [500, 700]
screen = pygame.display.set_mode(size)
title = "미사일 게임"
pygame.display.set_caption(title)
# 3. 게임 내 필요한 설정
clock = pygame.time.Clock() # FPS를 위한 변수
########## 클래스를 이용해 변환 #############
ss = imageManager()
ss.put_img("/Users/js/Desktop/수업자료/python/비행기.png")
ss.change_size(80, 80)
ss.x = round(size[0]/2) - ss.sx / 2
ss.y = size[1] - ss.sy - 15
black = (0,0,0)
# 4. 메인 이벤트
SB = 0
while SB == 0:
# 4-1. FPS 설정
clock.tick(60) # 1초에 60번 while문 반복
# 4-2. 각종 입력 감지
for event in pygame.event.get():# 키보드나 마우스의 동작을 받아옴
if event.type == pygame.QUIT: # 게임 종료
SB = 1
# 4-3. 입력, 시간에 따른 변화
# 4-4. 그리기
screen.fill(black)
ss.show()
# 4-5. 업데이트
pygame.display.flip()
# 5. 게임 종료
pygame.quit()
'Python > Pygame' 카테고리의 다른 글
[Pygame] Python(파이썬)으로 비행기 게임만들기 - (6) 외계인 생성 (0) | 2022.12.11 |
---|---|
[Pygame] Python(파이썬)으로 비행기 게임만들기 - (5) 미사일 발사하기 (0) | 2022.12.11 |
[Pygame] Python(파이썬)으로 비행기 게임만들기 - (4) 비행기 움직이기 (0) | 2022.12.09 |
[Pygame] Python(파이썬)으로 비행기 게임만들기 - (2) 비행기 띄우기 (0) | 2022.12.07 |
[Pygame] Python(파이썬)으로 비행기 게임만들기 - (1) 화면 색상 바꾸기 (0) | 2021.12.24 |
댓글