티스토리 뷰
1. 게입의 기본 구조 - 입력
2. 키보드 입력 처리하기
3. 마우스 입력 처리하기
💬 코드 생성 가이드라인 적용
# 생성 규칙
1. 질문에서 요청한 행동만 수행
2. 변수명 영어 사용
3. 게임 기본 구조 3-3단계 준수
1) 게임 초기화, 2) 게임 메인 루프(입력 처리 → 게임 업데이트 → 출력처리, 3) 게임 종료
# 가독성
4. 코드는 반드시 함수로 나누어 작성
5. 추가/수정된 소스코드는 #ADDED 표기
# 수업 관련
6. Python 언어 # 게임 개발 관련 7. pygame 라이브러리 기본 사용 8. 게임은 다음 5개 함수로 구분하여 구현 1) 게임 초기화<init()함수>, 2) 게임 입력<handle_input()함수>, 3) 게임 업데이트<update_game()함수>, 4) 출력처리<render()함수>, 5) 실행<run_game()함수>로 나누어 생성
# 생성 규칙
1. 질문에서 요청한 행동만 수행
2. 변수명 영어 사용
3. 게임 기본 구조 3-3단계 준수
1) 게임 초기화, 2) 게임 메인 루프(입력 처리 → 게임 업데이트 → 출력처리, 3) 게임 종료
# 가독성
4. 코드는 반드시 함수로 나누어 작성
5. 추가/수정된 소스코드는 #ADDED 표기
# 수업 관련
6. Python 언어 # 게임 개발 관련 7. pygame 라이브러리 기본 사용 8. 게임은 다음 5개 함수로 구분하여 구현 1) 게임 초기화<init()함수>, 2) 게임 입력<handle_input()함수>, 3) 게임 업데이트<update_game()함수>, 4) 출력처리<render()함수>, 5) 실행<run_game()함수>로 나누어 생성
기본 골격-여기서 이어서 시작하자.
import pygame
import sys
# 전역 변수
WIDTH, HEIGHT = 800, 600
screen = None
clock = None
img1 = None
running = True # ADDED
# 1) 게임 초기화
def init():
global screen, clock, img1
pygame.init() # ADDED
screen = pygame.display.set_mode((WIDTH, HEIGHT)) # ADDED
pygame.display.set_caption("Display Image") # ADDED
clock = pygame.time.Clock() # ADDED
# 이미지 불러오기
try:
img1 = pygame.image.load("asset/img1.png").convert_alpha()
except:
print("이미지 로드 실패")
pygame.quit()
sys.exit()
# 2) 게임 입력
def handle_input():
global running
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False # ADDED
# 3) 게임 업데이트
def update_game():
pass # ADDED (현재 변화 없음)
# 4) 출력 처리
def render():
screen.fill((0, 0, 0)) # ADDED
# 이미지 화면 높이 3/4 위치
img1_rect = img1.get_rect(center=(WIDTH // 2, HEIGHT * 3 // 4)) # ADDED
screen.blit(img1, img1_rect) # ADDED
pygame.display.flip() # ADDED
# 5) 실행
def run_game():
init() # ADDED
while running:
handle_input() # 입력 처리
update_game() # 상태 업데이트
render() # 화면 출력
clock.tick(60) # ADDED
pygame.quit() # ADDED
sys.exit()
# 시작
run_game()
게임의 기본 구조-입력


1.이벤트 시스템이란?

1. 입력 처리는 무엇인가?
게임에서 입력 처리란 사용자가 무엇을 하였는지 프로그램이 알아차리는 과정이다. 예를 들어 사용자가 방향키를 누르거나, 마우스를 클릭하거나, 창 닫기 버튼을 누르면 게임은 그 행동을 감지하여 반응하여야 한다.
게임은 보통 다음 흐름으로 계속 반복된다.
while running:
handle_input() # 입력 처리
update_game() # 게임 상태 변화
render() # 화면 출력
2. 이벤트란 무엇인가?
이벤트(event)는 사용자가 키보드나 마우스로 행동하였을 때 pygame이 만들어 주는 신호이다. 예를 들면 다음과 같다.
| 사용자 행동 | pygame event |
| 키보드 누름 | KEYDOWN |
| 키보드 뗌 | KEYUP |
| 마우스 클릭 | MOUSEBUTTONDOWN |
| 마우스 이동 | MOUSEMOTION |
| 창 닫기 버튼 클릭 | QUIT |
pygame은 이러한 이벤트를 바로 처리하지 않고, 먼저 이벤트 큐(event queue)에 순서대로 쌓아 둔다. 이벤트 큐는 사용자의 입력 신호가 잠시 대기하는 줄이라고 이해하면 된다. pygame 공식 문서에서도 이벤트 메시지는 이벤트 큐를 통해 관리되며, 입력 이벤트를 놓치지 않으려면 매 프레임 이벤트를 처리하여야 한다고 설명한다
3. 큐(Queue)는 무엇인가?
큐(queue)는 먼저 들어온 것이 먼저 나가는 구조이다. 일상생활로 비유하면 은행 대기줄이나 편의점 계산 줄과 같다.
게임에서도 사용자의 입력은 순서대로 발생한다.
1. 오른쪽 방향키 누름
2. 마우스 클릭
3. 창 닫기 버튼 클릭

for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
🎯 키보드 입력 (2가지 방식)
게임에서 키보드 입력을 처리하는 방법은 크게 두 가지이다.
첫 번째는 이벤트 방식이고, 두 번째는 상태 방식이다.
방법 1: 이벤트 방식 (ex01.keydown)
ex01_basic.py이벤트 방식은 키를 누른 순간을 감지하는 방식이다.
예를 들어 사용자가 키보드를 한 번 눌렀을 때, pygame은 KEYDOWN이라는 이벤트를 만든다. 이 이벤트는 이벤트 큐에 들어가고, 게임 루프 안에서 pygame.event.get()을 통해 하나씩 꺼내 처리한다. pygame 공식 문서에서도 pygame의 이벤트 메시지는 이벤트 큐를 통해 관리되며, 입력 이벤트를 놓치지 않으려면 매 프레임 이벤트를 처리하여야 한다고 설명한다
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
print("키 눌림")
방법 2: 상태 방식
상태 방식은 키가 현재 눌려 있는지 계속 확인하는 방식이다.
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
print("왼쪽 이동 중")
이 코드는 왼쪽 방향키가 현재 눌려 있는 동안 계속 "왼쪽 이동 중"을 출력한다.
pygame 공식 문서에 따르면 pygame.key.get_pressed()는 현재 눌린 키들의 상태를 확인하는 함수이다. 다만 텍스트 입력처럼 입력 순서와 문자가 중요한 경우에는 적합하지 않다고 설명한다.
상태 방식은 누르고 있는 동안 계속 실행된다는 점이 핵심이다. 게임에서 캐릭터를 이동시킬 때는 키를 한 번 누른 순간만 중요한 것이 아니다. 사용자가 방향키를 계속 누르고 있으면 캐릭터도 계속 움직여야 한다.
따라서 이동 처리에는 보통 상태 방식을 사용한다.
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player_x -= 5
if keys[pygame.K_RIGHT]:
player_x += 5
🐢 초보자 주의
초보자는 방향키 이동을 만들 때 KEYDOWN만 사용하려고 하는 경우가 많다. 그러나 KEYDOWN은 기본적으로 키를 누르는 순간의 이벤트를 처리하는 방식이다. 그래서 캐릭터 이동처럼 키를 누르고 있는 동안 계속 변화하여야 하는 기능에는 부족하게 느껴질 수 있다. 물론 pygame에는 키 반복 설정 기능이 있지만, pygame 초기 상태에서는 키 반복이 비활성화되어 있다. 키 반복을 활성화하면 누르고 있는 동안 여러 번 KEYDOWN 이벤트가 발생할 수 있지만, 초보자 수업에서는 이동 처리에 pygame.key.get_pressed()를 사용하는 방식이 더 이해하기 쉽다.
키보드 입력 처리하기

이번 실습은 pygame 게임 화면에 이미지 파일을 불러와 원하는 위치에 출력하는 것이 목표이다. 여기서 말하는 “이미지 출력”은 print()처럼 글자를 터미널에 출력하는 것이 아니라, 게임 창 안에 그림을 그리는 것을 의미한다. 이번 예제에서는 img1.png라는 우주선 이미지를 불러와서, 게임 화면의 가로 중앙, 세로 3/4 지점에 출력한다.
이미지 출력의 기본 흐름
pygame에서 이미지를 화면에 보여주려면 다음 순서가 필요하다.
1. 이미지 파일 준비하기
2. 이미지 파일 불러오기
3. 이미지의 위치 정하기
4. 화면에 이미지 그리기
5. 실제 화면에 반영하기
pygame에서 pygame.image.load()는 이미지 파일을 불러와 Surface 객체로 만든다. pygame 공식 문서에서도 이미지는 별도의 Image 클래스가 아니라 Surface 객체로 불러온다고 설명한다. 또한 PNG처럼 투명 배경이 있는 이미지는 convert_alpha()를 사용하여 투명도를 유지할 수 있다.
이미지 출력에 필요한 핵심 코드
img1 = pygame.image.load("img1.png").convert_alpha()
screen.blit(img1, img1_rect)
- 첫 번째 줄은 이미지 파일을 불러오는 코드이다.
- 두 번째 줄은 불러온 이미지를 게임 화면에 그리는 코드이다.
여기서 blit()은 쉽게 말하면 그림을 화면 위에 붙이는 기능이다. pygame의 Surface는 이미지를 표현하는 객체이며, 다른 Surface 위에 그려질 수 있다.
좌표 이해하기
pygame 화면의 좌표는 일반 수학 그래프와 다르다. 왼쪽 위가 시작점이다.
왼쪽 위: (0, 0)
오른쪽으로 갈수록 x 증가
아래쪽으로 갈수록 y 증가
pygame 공식 문서에서도 디스플레이의 원점은 왼쪽 위이며, x축과 y축은 오른쪽 아래 방향으로 증가한다고 설명한다. 따라서 화면 크기가 800 x 600이라면 다음과 같이 생각할 수 있다.
WIDTH = 800
HEIGHT = 600
WIDTH // 2
HEIGHT * 3 // 4
img1_rect = img1.get_rect(center=(WIDTH // 2, HEIGHT * 3 // 4))
전체 예제 코드
아래 코드는 기존 게임 기본 구조에 이미지 출력 기능을 추가한 예제이다.
이미지 파일 img1.png는 파이썬 파일과 같은 폴더에 있어야 한다.
import pygame
import sys
# 전역 변수
WIDTH, HEIGHT = 800, 600
screen = None
clock = None
img1 = None
running = True # ADDED
# 1) 게임 초기화
def init():
global screen, clock, img1
pygame.init() # ADDED
screen = pygame.display.set_mode((WIDTH, HEIGHT)) # ADDED
pygame.display.set_caption("Display Image") # ADDED
clock = pygame.time.Clock() # ADDED
# 이미지 불러오기
try:
img1 = pygame.image.load("asset/img1.png").convert_alpha()
except:
print("이미지 로드 실패")
pygame.quit()
sys.exit()
# 2) 게임 입력
def handle_input():
global running
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False # ADDED
# 3) 게임 업데이트
def update_game():
pass # ADDED (현재 변화 없음)
# 4) 출력 처리
def render():
screen.fill((0, 0, 0)) # ADDED
# 이미지 화면 높이 3/4 위치
img1_rect = img1.get_rect(center=(WIDTH // 2, HEIGHT * 3 // 4)) # ADDED
screen.blit(img1, img1_rect) # ADDED
pygame.display.flip() # ADDED
# 5) 실행
def run_game():
global running
init() # ADDED
while running:
handle_input() # 입력 처리
update_game() # 상태 업데이트
render() # 화면 출력
clock.tick(60) # ADDED
pygame.quit() # ADDED
sys.exit()
# 시작
run_game()
이미지를 출력하려면 먼저 이미지를 담을 변수를 만들고, init() 함수에서 이미지 파일을 불러온다.
그 다음 render() 함수에서 이미지의 위치를 정하고, screen.blit()을 사용하여 화면에 이미지를 그린다.
마지막으로 pygame.display.flip()을 실행하여 그려진 결과를 실제 화면에 보여 준다.

핵심 정리
img1 = None
→ 이미지를 담을 변수 선언
pygame.image.load("img1.png").convert_alpha()
→ 이미지 파일 불러오기
img1.get_rect(center=(WIDTH // 2, HEIGHT * 3 // 4))
→ 이미지 위치 정하기
screen.blit(img1, img1_rect)
→ 화면에 이미지 그리기
pygame.display.flip()
→ 실제 화면에 반영하기
한 문장으로 정리하면 다음과 같다.
이미지 출력은 이미지를 불러온 뒤, 위치를 정하고, 화면에 붙이고, 화면을 갱신하는 과정이다.
키보드 방향키로 이미지 움직이기

이번 실습은 pygame 화면에 출력한 이미지를 키보드 방향키로 움직이는 것이 목표이다.
앞 실습에서는 이미지를 불러와 화면에 출력하였다. 이번에는 여기에 입력 처리 기능을 추가하여 사용자가 방향키를 누르면 우주선 이미지가 이동하도록 만든다.
| 단계 | 기능 |
| 초기화 | 이미지 불러오기, 이미지 초기 위치 설정 |
| 입력 처리 | 키보드 방향키 감지, 좌표 변경 |
| 게임 업데이트 | 이번 예제에서는 별도 처리 없음 |
| 출력 처리 | 변경된 위치에 이미지 다시 그리기 |

방향키 입력 처리 방식
실습에서는 pygame.key.get_pressed()를 사용한다.
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player_rect.x -= 5
💻 전체 코드(ex02_이벤트생성.py)
img1.png 파일은 파이썬 파일과 같은 폴더에 있어야 한다.
import pygame
import sys
# 전역 변수
WIDTH, HEIGHT = 800, 600
screen = None
clock = None
running = True
img1 = None
player_rect = None # ADDED
speed = 5 # ADDED
# 1) 초기화
def init():
global screen, clock, img1, player_rect
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("키보드로 이미지 움직이기")
clock = pygame.time.Clock()
try:
img1 = pygame.image.load("asset/img1.png").convert_alpha()
except pygame.error as e:
print("이미지 로드 실패:", e)
pygame.quit()
sys.exit()
# 이미지의 처음 위치 설정
player_rect = img1.get_rect(center=(WIDTH // 2, HEIGHT*3//4)) # ADDED
# 2) 입력
def handle_input():
global running, player_rect
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed() # ADDED
if keys[pygame.K_LEFT]:
player_rect.x -= speed
if keys[pygame.K_RIGHT]:
player_rect.x += speed
# if keys[pygame.K_DOWN]:
# player_rect.y += speed
# if keys[pygame.K_UP]:
# player_rect.y -= speed
# 3) 업데이트
def update_game():
pass # ADDED (초보 단계에서는 생략)
# 4) 출력
def render():
screen.fill((0, 0, 0))
screen.blit(img1, player_rect) # ADDED
pygame.display.flip()
# 5) 실행
def run_game():
global running
init()
while running:
handle_input()
update_game()
render()
clock.tick(60)
pygame.quit()
sys.exit()
# 시작
run_game()
🔍 코드 설명
이미지 좌표 전역변수 추가
img1 = None
player_rect = None
speed = 5
이미지 불러오기
try:
img1 = pygame.image.load("asset/img1.png").convert_alpha()
except pygame.error as e:
print("이미지 로드 실패:", e)
pygame.quit()
sys.exit()
우주선 초기 위치 설정
# 이미지의 처음 위치 설정
player_rect = img1.get_rect(center=(WIDTH // 2, HEIGHT * 3 // 4))
keys = pygame.key.get_pressed()
# 2) 입력
def handle_input():
global running, img1_x, img1_y
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed() # ADDED
if keys[pygame.K_LEFT]:
img1_x -= speed
if keys[pygame.K_RIGHT]:
img1_x += speed
if keys[pygame.K_LEFT]:
player_rect.x -= SPEED
왼쪽 방향키를 누르면 player_rect.x 값이 줄어든다.
그래서 이미지가 왼쪽으로 이동한다.
# 상하이동
if keys[pygame.K_DOWN]:
img1_y += speed
if keys[pygame.K_UP]:
img1_y -= speed
출력
def render():
screen.fill((0, 0, 0))
screen.blit(img1, player_rect) # ADDED
pygame.display.flip()
🎯 핵심
이미지를 움직인다
= 이미지의 x, y 좌표를 바꾼다
= 바뀐 좌표에 이미지를 다시 그린다
게임 루프가 계속 반복되기 때문에, 방향키를 누르고 있는 동안 handle_input() 함수가 계속 실행된다.그 결과 우주선의 좌표가 조금씩 바뀌고, render() 함수가 바뀐 위치에 우주선을 다시 출력한다.
실습: 게임 창 경계 확인: 이미지가 화면 밖으로 나가지 않게 하기

앞 단계에서는 방향키를 누르면 우주선 이미지가 움직이도록 만들었다. 하지만 그 상태에서는 방향키를 계속 누르면 우주선이 게임 화면 밖으로 사라질 수 있다.
이번 단계에서는 우주선이 게임 창 안에서만 움직이도록 제한한다. 즉, 이미지가 화면의 왼쪽, 오른쪽, 위, 아래 경계를 벗어나지 않도록 만드는 것이 목표이다.
왜 화면 경계 확인이 필요한가?
게임에서 캐릭터가 화면 밖으로 나가면 사용자는 캐릭터를 볼 수 없다. 캐릭터가 보이지 않으면 게임을 조작하기 어렵고, 게임이 오류처럼 느껴질 수 있다. 따라서 이동 기능을 만들 때는 보통 다음 두 가지를 함께 생각하여야 한다.
1. 키보드 입력을 받아 이미지 위치를 변경한다.
2. 변경된 위치가 화면 밖이면 다시 화면 안으로 되돌린다.
🔍 update_game() 함수에 화면 경계 제한 추가
이번 코드에서 새롭게 추가된 핵심은 우주선이 게임 창 밖으로 나가지 않도록 제한하는 기능이다.
이 기능은 update_game() 함수 안에 작성되어 있다.
player_rect를 사용하고 있으므로, clamp_ip()를 쓰면 가장 간단하다.
# 3) 업데이트
def update_game():
global player_rect # ADDED
screen_rect = screen.get_rect() # ADDED
player_rect.clamp_ip(screen_rect) # ADDED
update_game() 함수는 게임 상태를 점검하고 수정하는 역할을 한다.
💻 전체코드(ex4.화면제한. py)
import pygame
import sys
# 전역 변수
WIDTH, HEIGHT = 800, 600
screen = None
clock = None
running = True
img1 = None
player_rect = None # ADDED
speed = 5 # ADDED
# 1) 초기화
def init():
global screen, clock, img1, player_rect
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("키보드로 이미지 움직이기")
clock = pygame.time.Clock()
try:
img1 = pygame.image.load("asset/img1.png").convert_alpha()
except pygame.error as e:
print("이미지 로드 실패:", e)
pygame.quit()
sys.exit()
# 이미지의 처음 위치 설정
player_rect = img1.get_rect(center=(WIDTH // 2, HEIGHT * 3 // 4))
# 2) 입력
def handle_input():
global running, player_rect
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player_rect.x -= speed
if keys[pygame.K_RIGHT]:
player_rect.x += speed
if keys[pygame.K_DOWN]:
player_rect.y += speed
if keys[pygame.K_UP]:
player_rect.y -= speed
# 3) 업데이트
def update_game():
global player_rect # ADDED
screen_rect = screen.get_rect() # ADDED
player_rect.clamp_ip(screen_rect) # ADDED
# 4) 출력
def render():
screen.fill((0, 0, 0))
screen.blit(img1, player_rect)
pygame.display.flip()
# 5) 실행
def run_game():
global running
init()
while running:
handle_input()
update_game()
render()
clock.tick(60)
pygame.quit()
sys.exit()
# 시작
run_game()
추가된 코드 설명
screen_rect = screen.get_rect()
player_rect.clamp_ip(screen_rect)
player_rect가 screen_rect 밖으로 나가지 않게 자동으로 위치를 보정한다.
즉, 우주선이 왼쪽이나 오른쪽 화면 밖으로 나가려고 하면 다시 게임 창 안쪽으로 되돌려준다.
clamp_ip()는 이미지의 사각형 위치가 화면 영역 밖으로 나가지 않도록 자동으로 제한하는 함수이다.
실습: 다른 키 입력 받아보기 (ex05_다른키.py)

handle_input() 함수에 W, A, S, D 키 입력 코드를 추가하면 된다.
# 2) 입력
def handle_input():
global running, player_rect
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
# 방향키 입력
if keys[pygame.K_LEFT]:
player_rect.x -= speed
if keys[pygame.K_RIGHT]:
player_rect.x += speed
if keys[pygame.K_UP]:
player_rect.y -= speed # ADDED
if keys[pygame.K_DOWN]:
player_rect.y += speed # ADDED
# W, A, S, D 입력 추가
if keys[pygame.K_a]: # ADDED
player_rect.x -= speed
if keys[pygame.K_d]: # ADDED
player_rect.x += speed
if keys[pygame.K_w]: # ADDED
player_rect.y -= speed
if keys[pygame.K_s]: # ADDED
player_rect.y += speed
방향키뿐만 아니라 W, A, S, D 키도 같은 방식으로 처리할 수 있다. A는 x좌표 감소, D는 x좌표 증가, W는 y좌표 감소, S는 y좌표 증가를 의미한다.
실습: 키 눌림 감지하기 - KEYDOWN 이벤트 (ex06_키다운. py)

이번 실습의 목표는 키를 누른 시점에만 이미지가 한 번 움직이도록 만드는 것이다. 앞에서 배운 방향키 이동은 pygame.key.get_pressed()를 사용하여 키를 누르고 있는 동안 계속 움직였다. 이번에는 KEYDOWN 이벤트를 사용하여 키를 누른 순간에만 한 번 이동하도록 만든다.
| 방식동작 | 사용 | 예 |
| pygame.key.get_pressed() | 키를 누르고 있는 동안 계속 움직임 | 캐릭터 이동, 비행기 조종 |
| pygame.KEYDOWN | 키를 누른 순간에 한 번만 움직임 | 메뉴 선택, 한 칸 이동, 점프, 발사 |
문제 상황
키를 누를 때 이미지를 움직이기
단, 주의할 점은 다음과 같다.
키를 누른 시점에 한 번만 움직인다.
예를 들어 오른쪽 방향키를 한 번 누르면 우주선이 오른쪽으로 5픽셀 이동한다.계속 누르고 있어도 부드럽게 계속 움직이는 것이 아니라, 키를 누른 순간마다 한 번씩 이동하는 방식이다.
💻 전체 코드
import pygame
import sys
# 전역 변수
WIDTH, HEIGHT = 800, 600
screen = None
clock = None
running = True
img1 = None
player_rect = None # ADDED
speed = 20 # ADDED 한 번 움직일 거리
# 1) 초기화
def init():
global screen, clock, img1, player_rect
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("키 누름 감지하기")
clock = pygame.time.Clock()
try:
img1 = pygame.image.load("asset/img1.png").convert_alpha()
except pygame.error as e:
print("이미지 로드 실패:", e)
pygame.quit()
sys.exit()
# 이미지의 처음 위치 설정
player_rect = img1.get_rect(center=(WIDTH // 2, HEIGHT * 3 // 4))
# 2) 입력
def handle_input():
global running, player_rect
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# ADDED 키를 누른 순간에만 한 번 이동
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player_rect.x -= speed
if event.key == pygame.K_RIGHT:
player_rect.x += speed
if event.key == pygame.K_UP:
player_rect.y -= speed
if event.key == pygame.K_DOWN:
player_rect.y += speed
# 3) 업데이트
def update_game():
global player_rect # ADDED
screen_rect = screen.get_rect() # ADDED
player_rect.clamp_ip(screen_rect) # ADDED
# 4) 출력
def render():
screen.fill((0, 0, 0))
screen.blit(img1, player_rect)
pygame.display.flip()
# 5) 실행
def run_game():
global running
init()
while running:
handle_input()
update_game()
render()
clock.tick(60)
pygame.quit()
sys.exit()
# 시작
run_game()
추가된 핵심 코드
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player_rect.x -= speed
화면 경계 제한
screen_rect = screen.get_rect() # ADDED
player_rect.clamp_ip(screen_rect) # ADDED
제자리 (ex07_esc.py)
#제자리
if event.key == pygame.K_SPACE:
player_rect.x = WIDTH//2
player_rect.y = HEIGHT*3//4
게임 종료
#게임 종료
if event.key == pygame.K_ESCAPE:
running = False- Total
- Today
- Yesterday
- 텍스트 마이닝
- 초보자를 위한 텍스트마이닝
- Idle
- Text Mining
- 데이터R지
- 컴퓨팅사고력
- HCI
- 관계자분석
- UI
- 4차산업혁명
- 피그마
- 프로토타입
- 파이썬기초
- UX
- python
- figma
- 파이썬 기초
- 라이브러리
- 사물인터넷
- 데이타R지
- 챗GPT
- 안드로이드
- 휴리스틱평가
- 챗봇
- 파이썬
- 스마트기술
- HIG
- 텍스트마이닝
- matplotlib
- pygame
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |