[Python] 똥피하기_ 고전게임 제작
2021. 1. 9. 16:39ㆍHi/Python
pygame을 이용한 똥피하기 게임입니다.
키보드를 이용하여 캐릭터를 움직여서, 설정된 시간 동안 계속해서 떨어지는 똥을 피하는 게임입니다.
이전에 게임을 제작해보고 싶어서 만들어본 최초의 프로젝트였고,
여러가지 pygame 프로젝트 중 처음으로 만든 최초의 프로젝트입니다.
캐릭터의 이미지와 배경은 사진을 가져와 그림판으로 사이즈 조절을 하였습니다.
아래는 전체코드입니다.
#하늘에서 떨어지는 똥 피하기 게임
#[조건]
#1) 캐릭터는 화면 가장 아래에 위치, 좌우로 이동가능
#2) 똥은 화면 가장 위에서 떨어짐, X좌표는 매번 랜덤으로 설정
#3) 캐릭터가 똥을 피하면 다음 똥이 다시 떨어짐
#4) 캐릭터와 똥이 충돌하면 게임이 종료
#5) FPS는 30으로 고정
#[게임이미지]
#배경 : 480* 640(가로세로)
#캐릭터 : 50*50
#똥 : 50* 50
import pygame #pip install pygame으로 설치
import random
pygame.init()#초기화
#화면크기설정 및 기초설정
screen_width = 480
screen_height = 640
screen = pygame.display.set_mode((screen_width,screen_height))
pygame.display.set_caption("DDong Pihagi~")
clock = pygame.time.Clock()
#캐릭터불러오기
background = pygame.image.load("D:/0/유익/Programming/Python공부/Game/ddong/image/background.png")
character = pygame.image.load("D:/0/유익/Programming/Python공부/Game/ddong/image/rion.png")
character_size = character.get_rect().size
character_width = character_size[0]#가로크기
character_height = character_size[1]#세로크기
character_x_pos = (screen_width/2)-character_width/2 #화면가로의 절반크기에 해당하는 곳에 위치
character_y_pos = screen_height - character_height #화면세로크기가장아래
#적불러오기
enemy = pygame.image.load("Game/ddong/image/ddong.png")
enemy_size = enemy.get_rect().size #이미지크기구하기
enemy_width = enemy_size[0]#가로크기
enemy_height = enemy_size[1]#세로크기
enemy_x_pos = random.randint(0, screen_width - enemy_width) #화면가로의 절반크기에 해당하는 곳에 위치
enemy_y_pos = 0 #화면세로크기가장아래
#이동할 좌표
to_x =0
to_y = 0
#케릭터속도
character_speed = 1
#폰트정의
game_font = pygame.font.Font(None, 40) #폰트객체생성 (폰트(디폴트값), 크기)
#게임 제한시간
total_time = 30
#시간계산
start_ticks = pygame.time.get_ticks() #시작tick 받기
#이벤트루프
running = True #게임실행중인가
while running:
dt = clock.tick(30) #30프레임
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
to_x -=character_speed
if event.key == pygame.K_RIGHT:
to_x += character_speed
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
to_x=0
character_x_pos += to_x* dt
enemy_y_pos += 10
if character_x_pos <0:
character_x_pos = 0
elif character_x_pos > screen_width - character_width:
character_x_pos = screen_width - character_width
if enemy_y_pos > screen_height :
enemy_y_pos = 0
enemy_x_pos = random.randint(0, screen_width - enemy_width)
#rect정보 업데이트
character_rect = character.get_rect()
character_rect.left = character_x_pos
character_rect.top = character_y_pos
enemy_rect = enemy.get_rect()
enemy_rect.left = enemy_x_pos
enemy_rect.top = enemy_y_pos
if character_rect.colliderect(enemy_rect): #만나면 게임종료
print("SSHHHHHIT!!")
running =False
#게임시간 및 타이머
elapsed_time = (pygame.time.get_ticks() - start_ticks) /1000
timer = game_font.render(str(int(total_time - elapsed_time)), True, (0,0,0))
#만약 시간이 0이하면 게임종료
if total_time - elapsed_time <= 0:
print("time out")
running = False
#스크린에 객체 불러오기
screen.blit(background,(0,0)) #배경그리기
screen.blit(character,(character_x_pos,character_y_pos))#캐릭터그리기
screen.blit(enemy,(enemy_x_pos,enemy_y_pos))#적군그리기
screen.blit(timer,(10,10))
pygame.display.update()#게임화면다시그리기
pygame.quit()
728x90
'Hi > Python' 카테고리의 다른 글
[Python] 인스타 크롤링 / 이미지다운 (2) | 2021.01.05 |
---|---|
[python] 카카오톡 테러(매크로) 프로그램 만들기 (3) | 2020.12.29 |
[python] 백과사전 (0) | 2020.12.29 |