40시간의 기본편을 마무리하고 활용편에 입문 !!
나도코딩님의 활용1편으로 게임만들기 부터 시작...
Python 의 가장 강점인 다른 사람이 먼저 개발해 둔 package를 통해 전체가 아닌 필요한 부분만 개발을 하여 더 효율적으로 작업할 수 있다.
pygame 패키지로 python으로 게임을 만들 수 있으며, 진행 단계별 py 파일별 기능 및 설정에 대한 정리 및 개념에 대해 내용을 작성할 예정이다.
나도코딩님이 중간중간 단계별 file을 작성하여 진행하는 관계로,
블로그 내용도 전 단계와의 비교 및 신규 기능에 대한 핵심 내용에 대한 정리를 진행할 예정이다.
0.-1 workspace 생성
0-2. pygame package 설치(pip install pygame)
- pygame package 정상 설치 확인
0-3. 설치 후, import pygame 을 실행하여 정상 설치 여부를 확인
: 게임 생성용 기본 frame
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") #게임 이름
# 이벤트 루프
running = True # 게임이 진행중인가?
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT: # 오른쪽 상단 X 버튼, 창이 닫히는 이벤트가(종료) 가 발생하였는가?
running = False # 게임이 진행중이 아님
# pygame 종료
pygame.quit()
- 가장 기본적인 frame form 생성
- pygame import 후, game 을 생성 할 수 있음.(화면 크기 및 화면 타이틀, 이벤트루프, 프로그램 종료에 대한 기본 셋팅)
- pygame.display.set_mode 를 통해 설정한 해상도를 적용할 수 있음.
- 이벤트 루프 영역을 설정하지 않을 경우(프로그램 동작 중인 상태를 입력하지 않을 경우),
프로그램이 실행된 후, 창이 고정되지 않고 바로 사라짐!!
: 배경 생성 및 설정
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")
# 배경 이미지 불러오기
background = pygame.image.load("D:/python/workspace/pygame_basic/background.png")
# 이미지 불러오기, 경로 설정시 '\\' 또는 '/' 폴더 위치 표현 가능
# 이벤트 루프
running = True # 게임이 진행중인가?
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT: # 오른쪽 상단 X 버튼, 창이 닫히는 이벤트가(종료) 가 발생하였는가?
running = False # 게임이 진행중이 아님
#screen.fill((0, 0, 255)) # RGB 형태로도 배경 표시가능
screen.blit(background, (0, 0)) # 배경 그리기 blit 으로 이미지 표시, 튜플 형식으로 표시 위치 설정
pygame.display.update() # 게임 화면을 다시 그리기!! (반드시 필요)
# pygame 종료
pygame.quit()
- background 정의 후, pygame.image.load 를 통해 이미지를 불러 올 수 있다. 이미지를 불러올 때에는 '\\' 또는 '/' 으로 경로를 설정할 수 있으며, 해당 경로는 아래처럼 바로 복사하여 사용할 수 있다.
- pygame.image.load 의 경우, 해당 파일의 경로를 통해 파일을 불러 올 뿐 실제 적용된 상태는 아니다. 따라서 screen.blit 또는 screen.fill 을 통해 실제 적용이 가능 하다.
1) .fill 사용법 : 정의된 화면명(screen).fill(( R, G, B)) 값을 통해 배경색을 정할 수 있다.
- RGB 의 색상 값은 whosetech.tistory.com/18 에서 확인 가능하다.
2) .blit 사용법 : 정의된 화면명(screen).blit(load된 image 명(background), (가로 시작위치, 세로 시작위치))
- 해당 위치 값은 캐릭터의 이동 및 경계 등에도 사용되며 해당 좌표 값 기준으로 계산
- pygame.display.update() 를 통해 화면을 계속 업데이트 해주어야지 화면 표시가 정상적으로 반영되며, 필수 요소이다.!!
: 캐릭터 생성 및 설정
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") #게임 이름
# 배경 이미지 불러오기
background = pygame.image.load("D:/python/workspace/pygame_basic/background.png") # 이미지 불러오기, 경로 설정시 '\\' 또는 '/' 폴더 위치 표현 가능
# 캐릭터(스프라이트) 불러오기
character = pygame.image.load("D:/python/workspace/pygame_basic/character.png") # 이미지 불러오기, 경로 설정시 '\\' 또는 '/' 폴더 위치 표현 가능
character_size = character.get_rect().size # 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 # 캐릭터의 세로 위치, 화면 크기의 가장 아래
# 이벤트 루프
running = True # 게임이 진행중인가?
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT: # 오른쪽 상단 X 버튼, 창이 닫히는 이벤트가(종료) 가 발생하였는가?
running = False # 게임이 진행중이 아님
screen.blit(background, (0, 0)) # 배경 그리기 blit 으로 이미지 표시, 튜플 형식으로 표시 위치 설정
screen.blit(character, (character_x_pos, character_y_pos))
pygame.display.update() # 게임 화면을 다시 그리기!! (반드시 필요)
# pygame 종료
pygame.quit()
- character 변수 생성 및 image.load
- get_rect().size 를 통해 이미지 size 값을 list 형태로 저장
- character_width, character_height 값을 list 형태로 저장된 character_size에서 불러옴
- character_x_pos, character_y_pos 정의하여 시작 위치 설정
: 아래와 같이 캐릭터를 가로 중앙에 두기 위해서는 screen_width /2 가 아닌 character_width 에 대한 고려가 필요함
: 세로의 위치도 screen_height 에서 charcter_height 를 빼주어야지 화면상에 표시됨.
- screen.blit(객체명, (가로 시작 위치, 세로 시작 위치)) 로 실제 화면 상에 그려줘야 표시됨. 해당 부분 누락될 경우, 위치 정보는 가지고 있으나 화면상에 보여주지 않음.
: 키보드 조작에 따른 동작
: 경계값 설정
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") #게임 이름
# 배경 이미지 불러오기
background = pygame.image.load("D:/python/workspace/pygame_basic/background.png") # 이미지 불러오기, 경로 설정시 '\\' 또는 '/' 폴더 위치 표현 가능
# 캐릭터(스프라이트) 불러오기
character = pygame.image.load("D:/python/workspace/pygame_basic/character.png") # 이미지 불러오기, 경로 설정시 '\\' 또는 '/' 폴더 위치 표현 가능
character_size = character.get_rect().size # 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 # 캐릭터의 세로 위치, 화면 크기의 가장 아래
# 이동할 좌표
to_x = 0
to_y = 0
# 이벤트 루프
running = True # 게임이 진행중인가?
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT: # 오른쪽 상단 X 버튼, 창이 닫히는 이벤트가(종료) 가 발생하였는가?
running = False # 게임이 진행중이 아님
if event.type == pygame.KEYDOWN: #(KEYDOWN 대문자) , 키가 눌러졌는지 확인
if event.key == pygame.K_LEFT: # 캐릭터를 왼쪽으로
to_x -= 5 # (to_x 값을 5감소 )
elif event.key == pygame.K_RIGHT: # 캐릭터를 오른쪽으로
to_x += 5 # (to_x 값을 5증가 )
elif event.key == pygame.K_UP: # 캐릭터를 위쪽으로
to_y -= 5 # (to_y 값을 5감소 )
elif event.key == pygame.K_DOWN: # 캐릭터를 아래쪽으로
to_y += 5 # (to_y 값을 5증가 )
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
character_x_pos += to_x
character_y_pos += to_y
# 가로 경계값 처리
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
screen.blit(background, (0, 0)) # 배경 그리기 blit 으로 이미지 표시, 튜플 형식으로 표시 위치 설정
screen.blit(character, (character_x_pos, character_y_pos))
pygame.display.update() # 게임 화면을 다시 그리기!! (반드시 필요)
# pygame 종료
pygame.quit()
- 키보드 입력에 대한 조건문
- 이동할 좌표 to_x, to_y 정의
- pygate.KEYDOWN 을 통해 키보드 입력 상태 확인, 대문자 입력
- K_LEFT, K_RIGHT, K_UP, K_DOWN 을 통해 키보드 방향키에 대한 입력 확인 후, 이동 값 입력
- 각 +5, -5 를 통해 이동한 값을 to_x와 to_y에 입력하고 해당 값은 실제 캐릭터의 위치 정보인 charcter_x_pos, charcter_y_pos 에 반영한다.
- 화면을 벗어날 경우에 대한 경계값을 설정하여 캐릭터가 screen_size 내에서만 움직이도록 제한한다.
- 아래 그림과 같이 charcter 을 그리는 위치와 size를 고려하여 위치 정보의 최대값과 최소값을 설정한다.
활용1편 1-1일차 내용 이해부분이 어렵진 않으며, 실제 패키지의 기능에 대한 이해가 필요한 것 같다.
유튜버 '나도코딩' 님의 영상을 보며 공부 및 노트 작성합니다.
함께 공부해 나가실 분은 ㄱㄱ
[Python 파이썬 독학 활용1편 1-3일차] Quiz (0) | 2020.10.22 |
---|---|
[Python 파이썬 독학 활용1편 1-2일차] (0) | 2020.10.21 |
댓글 영역