8월24일

Win Cha·2026년 8월 24일

현재까지 파이썬의 문법을 가볍게 알려 준 것이다.

  1. 게임 만들기 (간소화 게임)
    -목표 : 1945 게임

    1) 적기 : 상단 특정 영역에서 줄 상에 랜덤하게 나온다.
    .아래로 내려온다
    .특정 상단의 영역에서 램덤하게 생긴다.

    2) 내 비행기 : 좌-우(제한),
    .나의 컨트롤 : 방뱡 (좌우) , 발사 버튼(스페이스), 스페이스바 눌르고 있으면 계속 총알 발사

    3) 액션

  • 적기와 내 총알리 만나면 적기와 총알이 사라짐 (격추한 숫자 증가)

  • 종료 시점 : 적기와 내가 총돌했을 때

    4) 기타

  • 파이썬 슛팅 게임 참조하지 말것.

  1. 게임 엔진 :
  • Pygame(pygame.org) 활용 예정 ==> 외부 라이브러리

  • 유니티 : 작은게임(모바일, 배우기 쉽다)
    .C#
    .국내에서 게임 사례가 많고 안정적이다.
    .그래픽의 표현이 쉽지 않음
    .VR/AR, 산업용 가벼운 시뮬레이션(부두의 타워크레인 원격 조정용)

  • 언리얼 : 대작용,
    .c++, blueprint, verse
    .무료
    .(자료는 적지만 랜더링 기술이 높아 표현력이 좋다, 프러그인이 많아 졌다. 콘솔게임에 특화)
    .건물이나 자동차 디스플레이 화면을 언리얼로 만듦
    .그래픽 기본값이 고퀄리티다

    -FPS(Frames per sec) : 초당 처리 Frame(이미지)의 갯수 (30~133 Hz)

간단한 게임 제작(구현)

전체적인 구성
1. 초기화 -> 변수의 구성
2. 게임 화면 설정 -> 고정값
3. 게임 내에서의 설정 -> 변수로 처리
4. 메인 이벤트
4-1. FPS(Frames per Sec) 설정
4-2. 입력(키보드, 마우스)의 감지
4-3. 입력, 시간에 따른 변화
4-4. 전사작업(그리기)
4-5. 업데이트
5. 종료(x버튼을 클릭해서 종료, game over 종료)

< 코딩 화면 >

import pygame

1. 초기화 -> 변수의 구성

pygame.init()

2. 게임 화면 설정 -> 고정값

sx = 400 #스크린의 가로길이(x)
sy = 900 #스크린의 세로길이(x)
size = [sx, sy]
screen = pygame.display.set_mode(size)

title = "pyGameExample"
pygame.display.set_caption(title)

3. 게임 내에서의 설정 -> 변수로 처리

clock = pygame.time.Clock()

color1 = (145, 222, 164)
color2 = (203, 145, 222)

k = 0

비행기(hero) 이미지 경로

heroImg = pygame.image.load(r'C:\pj\pyGame\hero.png')

비행기의 크기를 30%로 줄이는 코드

heroImg = pygame.transform.scale_by(heroImg, 0.2)

4. 메인 이벤트

system_exit = 0
while system_exit == 0:

#   4-1. FPS(Frames per Sec) 설정
clock.tick(2)
#   4-2. 입력(키보드, 마우스)의 감지
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        system_exit = 1
# #   4-3. 입력, 시간에 따른 변화
# screen.blit(hero1Img,(100,200))

#   4-4. 전사작업(그리기)
if k % 2 == 0:
    screen.fill(color1)
else:
    screen.fill(color2)
k += 1

#   4-3. 입력, 시간에 따른 변화
hero_width = heroImg.get_width() #비행기 이미지의 가로 크기값
center_x = (sx/2) - (hero_width / 2) #가로의 중앙의 위치값 계산
screen.blit(heroImg,(center_x, 800)) #비행기의 정위치 표현 코드

#   4-5. 업데이트
pygame.display.flip()

5. 종료(x버튼을 클릭해서 종료, game over 종료)

pygame.quit()

위 현재까지의 프로그램의 코드를 설명하면, 'Pygame'을 사용해 창을 띄우고, 배경색을 주기적으로 변경하면서 정중앙 하단에 크기를 조절한 비행기(hero) 이미지를 표시하는 기본 구조입니다. 라인별 상세 분석은 다음과 같습니다.


1. 모듈 임포트 및 초기화

  • import pygame: Pygame 라이브러리를 불러와 관련 함수 및 객체를 사용할 수 있도록 준비합니다.
  • pygame.init(): Pygame의 내부 모듈들(디스플레이, 사운드 등)을 모두 초기화합니다.

2. 게임 화면 및 창 설정

  • sx = 400: 생성할 게임 창의 가로(X축) 해상도를 400픽셀로 설정합니다.
  • sy = 900: 생성할 게임 창의 세로(Y축) 해상도를 900픽셀로 설정합니다.
  • size = [sx, sy]: 가로와 세로 크기를 리스트로 묶습니다.
  • screen = pygame.display.set_mode(size): 설정한 크기(400x900)로 실제 게임 디스플레이 창(Surface)을 생성하여 screen 변수에 할당합니다.
  • title = "pyGameExample": 창 상단에 표시될 제목 문자열을 정의합니다.
  • pygame.display.set_caption(title): 윈도우 타이틀바의 제목을 "pyGameExample"로 적용합니다.

3. 게임 리소스 및 상태 변수 정의

  • clock = pygame.time.Clock(): 초당 프레임 수(FPS)를 제어하기 위한 시계 객체를 생성합니다.
  • color1 = (145, 222, 164): RGB 값으로 민트/연두 계열 배경색을 정의합니다.
  • color2 = (203, 145, 222): RGB 값으로 연보라 계열 배경색을 정의합니다.
  • k = 0: 프레임마다 배경색을 번갈아 칠하기 위해 사용할 카운트 변수를 초기화합니다.
  • heroImg = pygame.image.load(r'C:\pj\pyGame\hero.png'): 지정된 경로에서 비행기 이미지 파일을 읽어와 Surface 객체로 로드합니다. (r은 백슬래시를 그대로 처리하는 raw string 표기법)
  • heroImg = pygame.transform.scale_by(heroImg, 0.2): 원본 이미지의 가로·세로 크기를 0.2배(20% 크기)로 축소합니다. (원이미지 사이지의 20%로 줄이는 연산을 실행 됩니다)

4. 메인 게임 루프

  • system_exit = 0: 게임 종료 여부를 판단하는 플래그 변수입니다.
  • while system_exit == 0:: 게임이 종료될 때까지 프레임 단위로 반복 실행하는 메인 루프입니다.
  • 4-1. 프레임 제어
  • clock.tick(2): 초당 2프레임(1초에 2번 루프 실행)으로 속도를 제한합니다. (배경이 0.5초마다 깜빡임)
  • 4-2. 이벤트 감지
  • for event in pygame.event.get():: OS에서 전달된 사용자 입력(키보드, 마우스, 창 닫기 등) 이벤트들을 순회합니다.
  • if event.type == pygame.QUIT:: 사용자가 창 닫기 버튼(X)을 눌렀는지 감지합니다.
  • system_exit = 1: 종료 조건을 만족시켜 while 반복문을 탈출하도록 만듭니다.
  • 4-4. 배경 그리기
  • if k % 2 == 0:: k가 짝수인지 확인합니다.
  • screen.fill(color1): 짝수일 경우 화면 전체를 color1으로 채웁니다.
  • else:: k가 홀수인 경우입니다.
  • screen.fill(color2): 홀수일 경우 화면 전체를 color2로 채웁니다.
  • k += 1: 매 프레임마다 k를 1씩 증가시켜 다음 프레임에 색상이 전환되도록 합니다.
  • 4-3. 객체 위치 계산 및 그리기
  • hero_width = heroImg.get_width(): 축소된 비행기 이미지의 실제 가로 픽셀 너비를 구합니다.
  • center_x = (sx/2) - (hero_width / 2): 비행기의 좌측 모서리가 아닌 '이미지 중심'이 화면 가로 중앙(200픽셀)에 위치하도록 X 좌표를 계산합니다.
  • screen.blit(heroImg,(center_x, 800)): 계산된 가로 중앙 좌표와 세로 Y=800 위치에 비행기 이미지를 화면 Surface 위에 그립니다.
  • 4-5. 디스플레이 갱신
  • pygame.display.flip(): 백버퍼에 그려진 전체 화면(배경 및 비행기)을 실제 모니터 창에 반영합니다.

5. 프로그램 종료

  • pygame.quit(): while 문을 빠져나온 후 Pygame 관련 리소스를 정리하고 완전히 종료합니다.

0개의 댓글