python으로 게임만들기(pygame) – 키보드 이벤트

###인프런 강의중 나도코딩님의 파이썬 활용편을 참고하여 작성하였습니다.

이번편에서는 앞서 만든 캐릭터를 키보드를 통해서 이동할 수 있도록 키보드 이벤트를 입력받아서 캐릭터를 움직여보도록 하겠습니다

먼저 이동할 좌표의 변수를 지정해줍니다.

그리고 실제 동작하는 부분에 event.type을 받아주는데 여기서 KEYDOWN은 키가 눌려졌는지 확인하는거고 키가 눌린상태에서 방향키 위치에 따라 K_LEFT, RIGHT, UP, DOWN을 확인하게됩니다.

이렇게 키보드가 눌렸을때 좌표를 점점 이동시키는 코드입니다.

그리고 실제 화면에서 캐릭터의 위치를 이동시켜줘야하는데 여기서 처리해줍니다.

이대로 하고 실행하게되면 캐릭터들이 화면 밖으로 가출하게 됩니다.

화면밖으로 나가는 이유는 캐릭터의 X자표와 Y 좌표 경계에 제한을 두지않아 그렇기 때문에 제한을 한번 둬보겠습니다.

풀 코드

import pygame

pygame.init() # 초기화 (반드시 필요)

# 화면 크기 설정
screen_width = 480 # 가로 크기
screen_height = 640 # 세로 크기

screen = pygame.display.set_mode((screen_width, screen_height))

# 화면 타이틀(제목) 설정
pygame.display.set_caption("Dalso Game") #게임 이름

# 배경 이미지 불러오기
background = pygame.image.load("C:/python/game/background.png")

# 캐릭터 불러오기
character = pygame.image.load("C:/python/game/character.png")
character_size = character.get_rect().size # 캐릭터의 사이즈 가져오기
character_width = character_size[0] # 캐릭터의 가로 크기
character_height = character_size[1] # 캐릭터의 세로 크기
character_x_position = (screen_width / 2) - (character_width / 2) # 화면 가로에 중간지점에 캐릭터의 가로 위치
character_y_position = screen_height - character_height # 화면 세로 크기 가장 아래에 캐릭터의 세로 위치

# 이동할 좌표
to_x = 0
to_y = 0



#pygame에서는 이벤트 루프가 있어야 창이 꺼지지않음
# 이벤트 루프
running = True # 게임이 진행중인지 확인하기
while running:
    for event in pygame.event.get(): # running 중 키보드나,마우스 입력값(이벤트)을 체크해주는것
        if event.type == pygame.QUIT: # 창이 닫히는 이벤트가 발생하였는지
            running = False # 게임이 진행중이 아님

        if event.type == pygame.KEYDOWN: #키가 눌러졌는지 확인
            if event.key == pygame.K_LEFT: # 캐릭터를 왼쪽으로
                to_x -= 2 # -5만큼
            elif event.key == pygame.K_RIGHT: # 캐릭터를 오른쪽으로
                to_x += 2
            elif event.key == pygame.K_UP: # 캐릭터를 위로
                to_y -= 2
            elif event.key -- pygame.K_DOWN: # 캐릭터를 아래로
                to_y += 2

        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


    #screen.fill((0, 0, 255)) #RGB형식으로 이미지 로드
    screen.blit(background, (0, 0)) # 배경 그리기(background 가 표시되는 위치)

    screen.blit(character, (character_x_position, character_y_position)) # 캐릭터 그리기

    character_x_position += to_x # 캐릭터의 포지션을 x만큼 실제 움직임
    character_y_position += to_y # 캐릭터의 포지션을 x만큼 실제 움직임

    # X 경계값 설정
    if character_x_position < 0:
        character_x_position = 0
    elif character_x_position > screen_width - character_width:
        character_x_position = screen_width - character_width
    # Y 경계값 설정
    if character_y_position < 0 :
        character_y_position= 0
    elif character_y_position > screen_height - character_height:
        character_y_position = screen_height - character_height
    pygame.display.update() # 게임화면을 지속적으로 그리기(for 문도는동안 계속)

# pygame 종료
pygame.quit()

 

————————————————–

사이트 리뉴얼중입니다~

서버(Linux, ESXi), NAS(헤놀로지, ESXi 및 IT관련 정보, 기타 등등을 공유하는 커뮤니티 SVRFORUM을 새로 만들었습니다.
많은 가입(?) 부탁드립니다~
https://svrforum.com

이전글들은 모두 상단 메뉴의 Blog 글 모음에있습니다!

2 thoughts on “python으로 게임만들기(pygame) – 키보드 이벤트”

  1. 제가 똑같이 따라해서 배경화면이랑 가운데 움직이는 것을 사진으로만 대체하고 코드를 실행했는데 오류는 나지 않았습니다. 근데 실행한 창에는 검은 화면만 나오고 창을 닫을 때 잠깐 제가 구현한 화면이 나오고 바로 꺼집니다. 이건 어떤 오류인가요…?

    그리고 캐릭터 좌표 부분에서
    # 캐릭터 그리기
    screen.blit(character, (round(character_x_position), round(character_y_position)))
    이 부분에 round를 안넣어주면 오류가 나더라구요 이건 왜 추가해야하는 건지 알수 있을까요…?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

홈서버 IT 커뮤니티 SVRFORUM
Link