반응형

@36 : 똥 피하기 게임

 

1. 플레이어를 좌우로 움직이기

2. 적에 닿으면 게임 종료하기

3. 똥 그림 입히기


1. 플레이어를 좌우로 움직이기

import sys, pygame
from pygame.locals import *
import random


FPS = 60
MAX_WIDTH = 400 
MAX_HEIGHT = 600

# 파이게임 초기화
pygame.init()
# clock 설정
clock = pygame.time.Clock()
screen = pygame.display.set_mode((MAX_WIDTH, MAX_HEIGHT))

# 플레이어 클래스 만들기
class Player():
    # 클래스 생성되면 무조건 실행되는 함수
    def __init__(self, x, y):
        self.x = x
        self.y = y
        
    # 파란색 사각형을 x,y 좌표에 40x40 크기로 그림
    def draw(self):
        return pygame.draw.rect(screen, (0, 0, 255), (self.x, self.y, 40, 40))
    
    def move(self):
        # 오른쪽 키 눌렀을 때 맨 오른쪽에 닿을 때까지는 +5
        if pressed_keys[K_RIGHT]:
            if self.x < MAX_WIDTH-40:
                self.x += 5
        
        # 왼쪽 키를 눌렀을 때 맨 왼쪽에 닿기 전까지 -5
        if pressed_keys[K_LEFT]:
            if self.x > 0:
                self.x -= 5
        
                
# 플레이어 만들기 (x좌표는 50, y좌표는 바닥)                
player = Player(MAX_WIDTH/2, MAX_HEIGHT - 40)

def main():
    while True:
        # 파이게임에서 발생하는 이벤트 가져옴
        for event in pygame.event.get():
            # x 누르면 꺼짐
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            
        # 1초에 몇 프레임으로 동작할 지 결정
        clock.tick(FPS)
        
        # 화면 흰색으로 채우기
        screen.fill((255,255,255))
        
        global pressed_keys
        # 키 입력 받기
        pressed_keys = pygame.key.get_pressed()
        # 네모 그리기
        player_rect = player.draw()
        # 좌우로 좌표 바꾸기
        player.move()
                
        # 화면 업데이트
        pygame.display.update()
        
if __name__ == '__main__':
    main()

결과.

화살표키를 사용하여 플레이어를 좌우로 움직임


2. 적에 닿으면 게임 종료

import sys, pygame
from pygame.locals import *
import random


FPS = 60
MAX_WIDTH = 400 
MAX_HEIGHT = 600

# 파이게임 초기화
pygame.init()
# clock 설정
clock = pygame.time.Clock()
screen = pygame.display.set_mode((MAX_WIDTH, MAX_HEIGHT))

# 플레이어 클래스 만들기
class Player():
    # 클래스 생성되면 무조건 실행되는 함수
    def __init__(self, x, y):
        self.x = x
        self.y = y
        
    # 파란색 사각형을 x,y 좌표에 40x40 크기로 그림
    def draw(self):
        return pygame.draw.rect(screen, (0, 0, 255), (self.x, self.y, 40, 40))
    
    def move(self):
        # 오른쪽 키 눌렀을 때 맨 오른쪽에 닿을 때까지는 +5
        if pressed_keys[K_RIGHT]:
            if self.x < MAX_WIDTH-40:
                self.x += 5
        
        # 왼쪽 키를 눌렀을 때 맨 왼쪽에 닿기 전까지 -5
        if pressed_keys[K_LEFT]:
            if self.x > 0:
                self.x -= 5
                
# 적 클래스
class Enemy():
    def __init__(self):
        # x좌표는 랜덤으로
        self.x = random.randrange(0, MAX_WIDTH-40)
        self.y = 50
        self.speed = random.randrange(10, 20)
        
    # 빨간색 사각형
    def draw(self):
        return pygame.draw.rect(screen, (255, 0, 0), (self.x, self.y, 20, 20))
    
    # 세로로 떨어지다가 다 떨어지면 새로 나타나기
    def move(self):
        self.y = self.y + self.speed
        if self.y >= MAX_HEIGHT:
            self.y = 50
            self.x = random.randrange(0, MAX_WIDTH-40)
            self.speed = random.randrange(7, 15)
                            
# 플레이어 만들기 (x좌표는 50, y좌표는 바닥)                
player = Player(MAX_WIDTH/2, MAX_HEIGHT - 40)
enemy = Enemy()

def main():
    while True:
        # 파이게임에서 발생하는 이벤트 가져옴
        for event in pygame.event.get():
            # x 누르면 꺼짐
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            
        # 1초에 몇 프레임으로 동작할 지 결정
        clock.tick(FPS)
        
        # 화면 흰색으로 채우기
        screen.fill((255,255,255))
        
        global pressed_keys
        # 키 입력 받기
        pressed_keys = pygame.key.get_pressed()
        # 네모 그리기
        player_rect = player.draw()
        # 좌우로 좌표 바꾸기
        player.move()

        # 똥 표시
        enemy_rect = enemy.draw()
        enemy.move()
        
        # 플레이어를 그리고 반환된 값 (좌표, 크기)가 적을 그리고 반환된 (좌표, 크기)와 
        # 충돌이 나는지 확인한다.
        if player_rect.colliderect(enemy_rect):
            print('충돌')
            pygame.quit()
            sys.exit()

                
        # 화면 업데이트
        pygame.display.update()
        
if __name__ == '__main__':
    main()

결과.

잘 됨


3. 똥 그림 입히기

- 빨간 사각형 대신 똥 그림 입히기

- www.autodraw.com.  에서 그림

# 적 클래스
class Enemy():
    def __init__(self):
        # x좌표는 랜덤으로
        self.x = random.randrange(0, MAX_WIDTH-40)
        self.y = 50
        self.speed = random.randrange(10, 20)
        # 똥 모양 넣기
        self.enemy = pygame.image.load(r'D:\20_공부중\00_Python\파이썬과 40개의 작품들\36_poop\poop.png')
        self.enemy = pygame.transform.scale(self.enemy,(40,40))
        
    # 빨간색 사각형
    def draw(self):
        return screen.blit(self.enemy, (self.x, self.y))
        #return pygame.draw.rect(screen, (255, 0, 0), (self.x, self.y, 20, 20))

결과.

- screen.blit(이미지, 좌표)

 : blit은 block transfer 를 말한다.

 : 지정된 좌표에 특정 이미지를 덮어 쓰는것을 말한다.

 : 여기서는 적이 나타나야할 좌표(원래는 rect)에 그림을 나타낸다는 말이다. (40x40으로 사이즈 변경함)

 


오케이. 

여기까지 게임만들기

 

재밌네~

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기