일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 트렌드코리아2025
- 매트로폴리탄
- 단어가 품은 세계
- 타자연습게임
- 쿠바전통음악
- 시집
- 타이핑 몬스터
- 에르난 디아스
- 황선엽
- 나는 스물일곱 2등 항해사입니다.
- 고양이발 살인사건
- 게임개발
- 아무도 없는 숲속에서
- Gym
- 나는 매트로폴리탄 미술관 경비원입니다.
- Python
- openAI
- 어른의 행복은 조용하다
- 운석피하기 게임
- frozen lake
- comfyui
- gymnasium
- 운석 피하기 게임
- 인생의 해상도
- 숨결이 바람이 될 때
- Stable diffusion
- pygame
- 부에노비스타 소셜클럽
- 타이핑좀비
- Ai
- Today
- Total
스푸79 기록 보관소
운석 피하기 게임 개발(4)- 전역변수 설정 본문
지난 포스트에서 작성한 코드 중 상수로 선언된 부분이 보인다.
지금 하는 건 간단한 게임 개발이기 때문에 사실 그대로 둬도 큰 문제는 없다.
하지만 실제 업무에서는 이렇게 사용하면 추후 유지보수에 문제가 발생할 여지가 많다.
예를 들어 화면 사이즈를 고객의 요청에 의해 800 x 800 이 아니라 1000 x 1000을 변경한다고 가정하면
화면 사이즈를 바탕으로 코딩한 부분들을 모두 찾아서 일일히 수정해야하는 문제가 발생한다.
가급적이면 이런 부분을 방지하기 위해 상수 선언하는 부분을 별도로 만들어서
해당 부분이 수정되면 전체에 적용되도록 처리하는 것이 좋은 방법이다.
기존 코드에 enviroment.py 를 새로 추가하고 아래와 같이 코드를 작성했다.
import os
class Enviroment:
GAME_TITLE = "Meteor Dodger"
GAME_DIR = os.path.dirname(os.path.abspath(__file__))
GAME_IMG_DIR = GAME_DIR + "/img/"
WIDTH = 800
HEIGHT = 800
FPS = 60
START_POS_X = 400
START_POS_Y = 400
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
게임 타이틀부터 기본 경로, 이미지 경로, 화면의 폭과 넓이를 전역변수로 선언하도록 처리했다.
이에 맞춰서 main.py 는 아래와 같이 변경했다.
import pygame
from enviroment import Enviroment as env #enviroment.py 불러오고 alias를 env로 설정
#import os, sys는 더이상 불필요해서 삭제
from player import Player
class Main():
def __init__(self):
self.screen = pygame.display.set_mode((env.WIDTH, env.HEIGHT))
self.clock = pygame.time.Clock()
self.running = True
pygame.display.set_caption(env.GAME_TITLE) # 게임 타이틀 설정
icon = pygame.image.load(env.GAME_DIR + "/meteor_dodger.ico") #게임 경로 설정
pygame.display.set_icon(icon)
self.player_sprites = pygame.sprite.Group()
self.player = Player(env.START_POS_X, env.START_POS_Y) #캐릭터의 시작 위치 X,Y 좌표 설정
self.player_sprites.add(self.player)
def play(self):
while self.running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
# 게임 종료 처리 후 처리를 main에서 처리하기 위해
# while을 벗어나도록 처리함
keys = pygame.key.get_pressed()
self.player_sprites.update(keys)
self.screen.fill(env.BLACK) #색상도 상수로 설정해서 처리
self.player_sprites.draw(self.screen)
pygame.display.flip()
self.clock.tick(env.FPS) #프레임설정도 상수로 처리
if __name__ == "__main__":
gameMain = Main()
gameMain.play()
pygame.quit()
enviorment.py 에 선언된 변수값을 env로 불러와서 숫자로 하드코딩 된 부분을 위와 같이 수정해 보았다.
그거 외에 수정한 부분이 하나 더 있는데
self.running 이라는 Main 클래스의 멤버변수를 하나 더 추가했다.
기존 코드의 while 문은 항상 True로 설정되어 있었는데
이 부분을 self.running으로 변경하고
화면이 종료되는 event가 발생했을때 self.running 값을 False로 변경하여 while에서 벗어나도록 처리했다.
개발이 더 진행되면 대기 상태과 게임 플레이상태가 나눠줘야하기 때문에 미리 이렇게 처리를 했다.
import pygame
from enviroment import Enviroment as env
class Player(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pygame.image.load(env.GAME_IMG_DIR + "player.png")
self.rect = self.image.get_rect()
self.rect.center = (x, y) # 정중앙에 위치하려면 self.rect.center 값으로 설정해야함
self.speed = 3 # 이동 속도 설정
def update(self, keys):
# 화면 밖으로 메인 캐릭터가 벗어나지 않도록 처리
if keys[pygame.K_LEFT] and self.rect.x > 0:
self.rect.x -= self.speed
if keys[pygame.K_RIGHT] and self.rect.x + self.rect.width < env.WIDTH:
self.rect.x += self.speed
if keys[pygame.K_UP] and self.rect.y > 0:
self.rect.y -= self.speed
if keys[pygame.K_DOWN] and self.rect.y + self.rect.height < env.HEIGHT:
self.rect.y += self.speed
player.py도 전역변수로 처리를 했다.
지난 포스트에서 문제로 얘기했던 화면 밖을 벗어나는 문제를
키 이벤트에 따라 WIDTH 와 HEIGHT 값을 기준으로 동작 못하게 처리를 해 두었다.
이런 부분이 전역변수로 설정을 안 하고 숫자로 입력했을 경우
추후 유지보수 시, 일일히 찾아서 수정을 해야하는 부분이 되겠다.
이번 포스트는 크게 작업한 내용이 없다.
그래도 해당 소스코드와 파일 목록 캡쳐해서 올린다.
다음 포스트에서는 배경에 별을 넣고 움직임과 깜빡거림을 만들어 보도록 하겠다.
'게임공작소' 카테고리의 다른 글
운석 피하기 게임 개발(6)- 운석 처리(1) (1) | 2024.08.26 |
---|---|
운석 피하기 게임 개발(5)- 배경 넣기(feat. ChatGPT) (0) | 2024.08.25 |
운석 피하기 게임 개발(3)- 움직임과 Frame (feat. ChatGPT) (1) | 2024.08.21 |
운석 피하기 게임 개발(2)- 기본화면 (feat. ChatGPT) (0) | 2024.08.19 |
운석 피하기 게임 개발(1)- 화면설계 (0) | 2024.08.18 |