반응형
이 글은 '나도코딩'님의
'파이썬 코딩 무료 강의 (활용편1) - 추억의 오락실 게임을 만들어 보아요. 3시간이면 충분합니다.'
강의를 보고 따라 만든 내용을 기록해놓은 글입니다.
먼저 강의 영상의 첫 1시간을 공부하며 같이 작성한 코드를 남겨두었습니다.
개인적으로 이벤트 루프 부분 코드 내용이 아직 좀 헷갈리네요
import pygame
##################################################################
pygame.init() # 초기화 (반드시 필요)
# 화면 크기 설정
screen_width = 480 # 가로 크기
screen_height = 640 # 세로 크기
screen = pygame.display.set_mode((screen_width, screen_height))
# 화면 타이틀 설정
pygame.display.set_caption("Nado Game")
# FPS
clock = pygame.time.Clock()
##################################################################
# 1. 사용자 게임 초기화 (배경 화면, 게임 이미지, 좌표, 속도, 폰트 등)
# 배경 이미지 불러오기
background = pygame.image.load("C:/Users/user/Desktop/PythonWorkspace/pygame_basic/background.png")
# 캐릭터(스프라이트) 불러오기
character = pygame.image.load("C:/Users/user/Desktop/PythonWorkspace/pygame_basic/character.png")
character_size = character.get_rect().size # 이미지의 크기를 구해옴
character_width = character_size[0] # 캐릭터의 가로 크기
character_height = character_size[1] # 캐릭터의 세로 크기
character_x_pos = (screen_width - character_width) / 2 # 화면 가로의 절반 크기에 해당하는 곳에 위치
character_y_pos = screen_height - character_height # 화면 세로의 크기 가장 아래에 해당하는 곳에 위치
# 이동할 좌표
to_x = 0
to_y = 0
# 이동 속도
character_speed = 0.6
# 적 enemy 캐릭터
enemy = pygame.image.load("C:/Users/user/Desktop/PythonWorkspace/pygame_basic/enemy.png")
enemy_size = enemy.get_rect().size # 이미지의 크기를 구해옴
enemy_width = enemy_size[0] # 캐릭터의 가로 크기
enemy_height = enemy_size[1] # 캐릭터의 세로 크기
enemy_x_pos = (screen_width - enemy_width) / 2 # 화면 가로의 절반 크기에 해당하는 곳에 위치
enemy_y_pos = (screen_height - enemy_height) / 2 # 화면 세로의 크기 가장 아래에 해당하는 곳에 위치
# 폰트 정의
game_font = pygame.font.Font(None, 40)
# 총 시간
total_time = 10
# 시작 시간
start_ticks = pygame.time.get_ticks()
# 이벤트 루프
running = True
while running:
dt = clock.tick(60) #게임화면의 초당 프레임 수를 설정
# 2. 이벤트 처리 (키보드, 마우스 등)
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
elif event.key == pygame.K_RIGHT: # 캐릭터를 오른쪽으로
to_x += character_speed
elif event.key == pygame.K_UP: # 캐릭터를 위로
to_y -= character_speed
elif event.key == pygame.K_DOWN: # 캐릭터를 아래로
to_y += character_speed
if event.type == pygame.KEYUP: # 방향키를 떼면 멈춤
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
to_x = 0
elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
to_y = 0
# 3. 게임 캐릭터 위치 정의
character_x_pos += to_x * dt
character_y_pos += to_y * dt
# 경계값 처리 (캐릭터가 화면 밖을 벗어나지 않도록)
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 character_y_pos < 0:
character_y_pos = 0
elif character_y_pos > screen_height - character_height:
character_y_pos = screen_height - character_height
# 4. 충돌 처리
# 충돌 처리를 위한 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("충돌했어요")
running = False
# 5. 화면 그리기
screen.blit(background, (0, 0)) # 배경 그리기
screen.blit(character, (character_x_pos, character_y_pos)) #캐릭터 그리기
screen.blit(enemy, (enemy_x_pos, enemy_y_pos)) # 적 그리기
# 타이머 집어 넣기
# 경과 시간 계산
elapsed_time = (pygame.time.get_ticks() - start_ticks) / 1000
# 경과 시간(ms)을 1000으로 나누어서 초 단위로 표시
timer = game_font.render(str(int(total_time - elapsed_time)), True, (255,255,255))
# 출력할 글자, True, 글자 색상
screen.blit(timer, (10,10))
if total_time - elapsed_time <= 0:
print("타임 아웃")
running = False
# 만약 시간이 0 이하이면 게임 종료
pygame.display.update() # 게임화면을 다시 그리기
# 잠시 대기
pygame.time.delay(2000)
# pygame 종료
pygame.quit()
코드 실행 결과를 녹화해 봤습니다.
제한시간이 다 되거나 노란 박스에 제 캐릭터 역할인 빨간 박스가 닿으면
해당 상황의 택스트가 출력되면서 게임이 종료되는 단순한 예제입니다.
여기까지가 예제 연습이었고
밑에 코드는 앞으로의 본격적인 게임 제작을 위해 기본 틀만 남겨놓은 것입니다.
파이썬으로 다른 게임을 만들 때 쓰면 좋다고 하네요.
import pygame
##################################################################
pygame.init() # 초기화 (반드시 필요)
# 화면 크기 설정
screen_width = 480 # 가로 크기
screen_height = 640 # 세로 크기
screen = pygame.display.set_mode((screen_width, screen_height))
# 화면 타이틀 설정
pygame.display.set_caption("Nado Game")
# FPS
clock = pygame.time.Clock()
##################################################################
# 1. 사용자 게임 초기화 (배경 화면, 게임 이미지, 좌표, 속도, 폰트 등)
# 이벤트 루프
running = True
while running:
dt = clock.tick(30) #게임화면의 초당 프레임 수를 설정
# 2. 이벤트 처리 (키보드, 마우스 등)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 3. 게임 캐릭터 위치 정의
# 4. 충돌 처리
# 충돌 처리를 위한 rect 정보 업데이트
# 5. 화면 그리기
# 만약 시간이 0 이하이면 게임 종료
pygame.display.update() # 게임화면을 다시 그리기
# pygame 종료
pygame.quit()
아직 강의를 들으며 공부하는 중이라 오늘은 여기까지..
반응형
'◼ IT Etc. > (Until 2021)' 카테고리의 다른 글
'재미'를 원동력으로 / 좋은 개발자가 되고 싶다 (0) | 2021.04.23 |
---|---|
[파이썬] 기억력 테스트 게임 제작 보면서 따라 만들기 (pygame) - 완성 및 후기 (0) | 2021.04.19 |
[알고리즘] 최대공약수와 최소공배수 - 간단하게 구현해보기 (+ 유클리드 호제법 알고리즘) (C++) (0) | 2021.04.09 |
눈 수술로 인해 잠시 공백기가 있었습니다. (0) | 2021.04.07 |
[C++] 클래스의 private 접근 제어자의 지정 범위 (0) | 2021.03.28 |