반응형
@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으로 사이즈 변경함)
오케이.
여기까지 게임만들기
재밌네~
반응형
최근댓글