상세 컨텐츠

본문 제목

[Python 파이썬 독학 활용1편 1-1일차]

파이썬 스터디/파이썬-Python 활용편1

by 후즈테크 2020. 10. 18. 22:33

본문

반응형

활용 1 편 게임 만들기 시작.

40시간의 기본편을 마무리하고 활용편에 입문 !!

나도코딩님의 활용1편으로 게임만들기 부터 시작...

 

 

 

 

 

Python 의 가장 강점인 다른 사람이 먼저 개발해 둔 package를 통해 전체가 아닌 필요한 부분만 개발을 하여 더 효율적으로 작업할 수 있다.

 

pygame 패키지로 python으로 게임을 만들 수 있으며, 진행 단계별 py 파일별 기능 및 설정에 대한 정리 및 개념에 대해 내용을 작성할 예정이다.

 

나도코딩님이 중간중간 단계별 file을 작성하여 진행하는 관계로, 

블로그 내용도 전 단계와의 비교 및 신규 기능에 대한 핵심 내용에 대한 정리를 진행할 예정이다.

반응형

 

 

[0] 시작 전 Setting 

 

0.-1 workspace 생성

 

0-2. pygame package 설치(pip install pygame)

 

  - pygame package 정상 설치 확인

 

 

0-3. 설치 후, import pygame 을 실행하여 정상 설치 여부를 확인

 

 

[1]  1_create_frame.py

      : 게임 생성용 기본 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 를 통해 설정한 해상도를 적용할 수 있음.

 - 이벤트 루프 영역을 설정하지 않을 경우(프로그램 동작 중인 상태를 입력하지 않을 경우),

   프로그램이 실행된 후, 창이 고정되지 않고 바로 사라짐!!

 

 

[2] background.py

      :  배경 생성 및 설정

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      에서 확인 가능하다.

 

RGB 색상표

93DAFF 98DFFF 9DE4FF A2E9FF A7EEFF ACF3FF B0F7FF B4FBFF B9FFFF C0FFFF 87CEFA 91D8FA A5D8FA AFDDFA B9E2FA C3E7FA CDECFA D7F1FA E1F6FA EBFBFF 00BFFF 0AC9FF 14D3FF 1EDDFF 28E7FF 32F1FF 3CFBFF 46FFFF 96..

whosetech.tistory.com

 

  2) .blit 사용법 : 정의된 화면명(screen).blit(load된 image 명(background), (가로 시작위치, 세로 시작위치))

    - 해당 위치 값은 캐릭터의 이동 및 경계 등에도 사용되며 해당 좌표 값 기준으로 계산

 - pygame.display.update() 를 통해 화면을 계속 업데이트 해주어야지 화면 표시가 정상적으로 반영되며, 필수 요소이다.!!

 

 

[3] main_sprite.py

      : 캐릭터 생성 및 설정

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(객체명, (가로 시작 위치, 세로 시작 위치)) 로 실제 화면 상에 그려줘야 표시됨. 해당 부분 누락될 경우, 위치 정보는 가지고 있으나 화면상에 보여주지 않음.

 

 

[4] keyboard_event.py

      : 키보드 조작에 따른 동작

      : 경계값 설정

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일차 내용 이해부분이 어렵진 않으며, 실제 패키지의 기능에 대한 이해가 필요한 것 같다.

 

유튜버 '나도코딩' 님의 영상을 보며 공부 및 노트 작성합니다.

 

함께 공부해 나가실 분은 ㄱㄱ

반응형

관련글 더보기

댓글 영역