Python/Pygame

[Pygame] Python(파이썬)으로 비행기 게임만들기 - (4) 비행기 움직이기

잭피 2022. 12. 9. 08:44

💡 if 조건문을 이용해 왼쪽 키를 누르면 왼쪽, 오른쪽 키를 누르면 오른쪽으로 이동하도록 해야합니다

# 4강 - 비행기 움직이기 (왼쪽, 오른쪽 누르면 움직이기)

import pygame

# 이미지 관리 클래스 정의
class imageManager:
    def __init__(self):
        self.x = 0
        self.y = 0
        self.move = 0
    def put_img(self, address):
        self.image = pygame.image.load(address).convert_alpha()
        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
ss.move = 5

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
        if event.type == pygame.KEYDOWN: # 키가 눌렸을 때
            if event.key == pygame.K_LEFT: # 키가 왼쪽키이면 
                ss.x -= ss.move 
            if event.key == pygame.K_RIGHT:
                ss.x += ss.move
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT: # 키가 왼쪽키이면 
                ss.x -= ss.move 
            if event.key == pygame.K_RIGHT:
                ss.x += ss.move            
        
    # 4-3. 입력, 시간에 따른 변화

    # 4-4. 그리기
    screen.fill(black)
    ss.show()
    #screen.blit(plane, (plane_x, plane_y))
    
    # 4-5. 업데이트
    pygame.display.flip()
    
# 5. 게임 종료 
pygame.quit()

if 문을 통해 이벤트의 동작을 예측하여 해당 방향으로 이동시켜줍니다

for event in pygame.event.get():# 키보드나 마우스의 동작을 받아옴
        if event.type == pygame.QUIT: # 게임 종료
            SB = 1
        if event.type == pygame.KEYDOWN: # 키가 눌렸을 때
            if event.key == pygame.K_LEFT: # 키가 왼쪽키이면 
                ss.x -= ss.move 
            if event.key == pygame.K_RIGHT:
                ss.x += ss.move
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT: # 키가 왼쪽키이면 
                ss.x -= ss.move 
            if event.key == pygame.K_RIGHT:
                ss.x += ss.move

2. 비행기 움직이기 (누르고 있으면 쭉 움직이기)

💡 키를 계속 누르고 있으면 해당 방향으로 이동해야하지만, 현재는 이동하지 않습니다 키가 눌러있는 시점을 기억하고 있다가 계속 이동시켜줍니다 만약 키가 눌러있지 않다면 멈춥니다

# 4강 - 비행기 움직이기 (누르면 쭉 움직이기)

import pygame

# 이미지 관리 클래스 정의
class imageManager:
    def __init__(self):
        self.x = 0
        self.y = 0
        self.move = 0
    def put_img(self, address):
        self.image = pygame.image.load(address).convert_alpha()
        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
ss.move = 10

black = (0,0,0)

left_go = False
right_go = False

# 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
        if event.type == pygame.KEYDOWN: # 키가 눌렸을 때
            if event.key == pygame.K_LEFT: # 키가 왼쪽키이면 
                left_go = True
            if event.key == pygame.K_RIGHT:
                right_go = True
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT: # 키가 왼쪽키이면 
                left_go = False
            if event.key == pygame.K_RIGHT:
                right_go = False            
        
    # 4-3. 입력, 시간에 따른 변화
    if left_go == True:
        ss.x -= ss.move
        if ss.x <= 0:
            ss.x = 0
    elif right_go == True:
        ss.x += ss.move
        if ss.x >= size[0] - ss.sx:
            ss.x = size[0] - ss.sx
    
    # 4-4. 그리기
    screen.fill(black)
    ss.show()
    #screen.blit(plane, (plane_x, plane_y))
    
    # 4-5. 업데이트
    pygame.display.flip()
    
# 5. 게임 종료 
pygame.quit()
# 4-2. 각종 입력 감지 
    for event in pygame.event.get():# 키보드나 마우스의 동작을 받아옴
        if event.type == pygame.QUIT: # 게임 종료
            SB = 1
        if event.type == pygame.KEYDOWN: # 키가 눌렸을 때
            if event.key == pygame.K_LEFT: # 키가 왼쪽키이면 
                left_go = True
            if event.key == pygame.K_RIGHT:
                right_go = True
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT: # 키가 왼쪽키이면 
                left_go = False
            if event.key == pygame.K_RIGHT:
                right_go = False            
        
    # 4-3. 입력, 시간에 따른 변화
    if left_go == True:
        ss.x -= ss.move
        if ss.x <= 0:
            ss.x = 0
    elif right_go == True:
        ss.x += ss.move
        if ss.x >= size[0] - ss.sx:
            ss.x = size[0] - ss.sx

💡 이제 비행기를 왼쪽, 오른쪽으로 이동시킬 수 있습니다

심화과정

(1) 비행기를 지금보다 더 느리게 또는 빠르게 움직여보세요

(어떤 변수의 값을 조절하면 될까요?)