시간 기반 이벤트는 시간의 흐름에 따라 달라지는 다양한 도전과 목표를 도입하여 전반적인 게임 경험을 크게 향상시킬 수 있습니다. 이 기법에는 카운트다운 타이머, 마감 시간 또는 기타 시간에 민감한 매개 변수를 활용하여 게임에서 흥미롭고 긴박한 분위기를 조성하는 것이 포함됩니다.
간단한 게임 만들기
기본 원리를 익히기 위해 사용자가 혼자서 수평으로 탐색할 수 있는 간단한 게임을 만들어 개발 과정을 시작하세요. “simple-game.py”라는 별도의 파일을 생성하고 게임 빌드에 필요한 다양한 기능을 제공하는 아케이드 라이브러리를 임포트하세요.
다음 단락을 우아한 영어로 번역한 내용을 확인하시기 바랍니다: 이 책에 사용된 코드는 앞서 언급한 GitHub 리포지토리에서 액세스할 수 있으며, MIT 라이선스 조건에 따라 무료로 사용할 수 있습니다.
GameWindow 클래스는 arcade.Window의 파생 클래스이며 게임의 기본 인터페이스 역할을 합니다. TheGame
`on_key_press` 메서드는 왼쪽 또는 오른쪽 화살표 키가 눌렸는지 여부를 식별하는 데 사용됩니다. 왼쪽 화살표 키 누름이 감지되면 `player_x` 값이 10 단위 감소하고, 오른쪽 화살표 키 누름이 감지되면 그 값이 10 단위 증가합니다. 이 기능을 통해 플레이어는 게임 창 내에서 가로로 탐색할 수 있습니다.
게임을 시작하는 주요 함수를 지정하고, 게임창의 예시를 구성하고, 설정 메서드를 호출하여 게임창을 구성한 다음, 마지막으로 arcade.run()을 활용하여 게임 사이클을 시작합니다.
타이머 클래스 구조 설계
게임 내 특정 이벤트의 지속 시간을 추적하기 위해 타이머 클래스를 도입할 수 있습니다. 이 클래스는 현재 시간, 시작 시간, 시간 제한과 같은 속성을 가져야 합니다. 또한 타이머를 시작하고, 진행을 중지하고, 현재 시간과 시작 시간의 차이를 결정하고, 시간 제한을 초과했는지 확인하는 메서드가 있어야 합니다. 타이머 클래스의 일반적인 템플릿은 다음과 비슷할 수 있습니다:
import time
class Timer:
def __init__(self, duration):
self.duration = duration
self.start_time = 0
self.is_running = False
def start(self):
self.start_time = time.time()
self.is_running = True
def stop(self):
self.is_running = False
def get_elapsed_time(self):
if self.is_running:
return time.time() - self.start_time
return 0
def is_expired(self):
return self.get_elapsed_time() >= self.duration
지속 시간 매개변수가 초 단위로 표현된 Timer 클래스를 인스턴스화하면 이 클래스는 start\_time 속성을 통해 타이머의 시작 시간을 저장하고 is\_running 속성을 통해 타이머의 진행 상황을 모니터링합니다.
`start()` 함수는 `time.time()` 메서드를 사용하여 `start_time`을 현재 시간으로 설정하고 `is_running` 플래그도 `True`로 설정합니다. 반대로 `stop()` 함수는 `is_running` 플래그를 `False`로만 설정합니다.마지막으로, `get_elapsed_time()` 메서드는 현재 시간에서 `start_time`을 빼서 실행 기간을 계산합니다.
is\_expired() 함수는 시간 경과가 미리 정해진 제한을 초과하는지 여부를 평가하며, 이는 타이머가 종료되었음을 나타냅니다.
카운트다운 타이머 구현하기
게임 내에서 카운트다운을 구현하려면 플레이어가 스페이스바 등 지정된 키를 누를 때 타이머를 시작하면 됩니다. 카운트다운은 파이썬의 인쇄 함수를 사용하여 콘솔에 표시되어야 합니다. 이 작업을 수행하려면 “timer.py”라는 새 파일을 생성하고 필요한 수정 사항을 통합합니다:
import time
class GameWindow(arcade.Window):
def __init__(self):
super().__init__(WIDTH, HEIGHT, "Simple Game")
self.player_x = WIDTH // 2
self.player_y = HEIGHT // 2
self.timer = Timer(10)
def on_key_press(self, key, modifiers):
if key == arcade.key.SPACE:
self.timer.start()
def on_draw(self):
# Existing code
if self.timer.is_running:
elapsed_time = self.timer.get_elapsed_time()
r_time = self.timer.duration - elapsed_time
remaining_time = max(r_time, 0)
print(f"Countdown: {remaining_time:.1f} seconds")
터미널 창과 게임 창이 동시에 표시되는지 확인한 다음 스페이스바를 눌러 카운트다운 타이머를 활성화합니다.
타이머 이벤트 처리 및 동작 트리거
def on_draw(self):
# Existing code
if self.timer.is_expired():
self.draw_rectangle()
def draw_rectangle(self):
arcade.draw_rectangle_filled(WIDTH // 2, HEIGHT // 2, 100, 100, red)
텍스트는 일상적인 대화 톤으로 작성된 것으로 보이며 간단한 언어를 사용합니다. 간혹 축약어(“나는”, “하지마”)와 구어체 표현(“꽤 멋지다”)이 포함된 짧은 문장으로 구성되어 있습니다. 사용되는 어휘는 일반적이고 접근하기 쉬우므로 독자가 쉽게 이해할 수 있습니다. 전반적으로 글쓰기 스타일은 비공식적이며 일반 독자를 대상으로 합니다.
타이머 일시 중지, 재설정 및 재개
‘타이머’ 클래스에서 일시 중지, 재설정 및 재개 기능을 구현하는 것은 특정 메서드를 추가하여 구현할 수 있습니다. 가능한 접근 방식은 다음과 같습니다:
class Timer:
# Existing code
def pause(self):
self.duration -= self.get_elapsed_time()
self.is_running = False
def reset(self):
self.start_time = 0
self.is_running = False
def resume(self):
self.start_time = time.time()
self.is_running = True
타이머에 시각적 피드백 추가
카운트다운 타이머에 대한 시각적 피드백 구현은 게임 인터페이스 내에 “visual.py”라는 제목의 별도 Python 파일에 텍스트 또는 그래픽 구성 요소를 도입하여 수행할 수 있습니다. 코드를 다음과 같이 수정해야 합니다:
“펠리과에 속하는 길들여진 육식 포유류가 바닥에 엎드린 자세를 취했습니다.
def on_draw(self):
# Existing code
if self.timer.is_running:
text = f"Countdown: {remaining_time:.1f} seconds"
arcade.draw_text(text, 10, 10, black, 18)
타이머가 콘솔에만 표시되지 않고 게임 인터페이스 내에 표시됩니다.
추가 기능 포함
게임에서 시간 기반 이벤트의 경험을 개선하기 위해 추가 기능 구현을 권장합니다.
시간 기반 파워업 또는 보너스
게임 내에서 주기적인 파워업 및 보너스를 도입하여 능력 강화, 추가 점수, 빠른 속도, 강력한 무기 등 일시적인 이점을 제공해야 합니다.
아이템 수집에 시간 제약을 적용하면 플레이어가 우위를 점하는 데 필요한 행동을 신중하게 계획하고 빠르게 생각하도록 장려할 수 있습니다. 이 기능을 포함하면 기대감을 조성하고 부지런히 준비하도록 장려합니다.
시간 제한 도전
정해진 시간 내에 수수께끼를 풀거나 장애물 코스를 통과하는 등 특정 과제를 수행하기 위해 시간적 제약을 도입한 디자인입니다.
이 게임에서 제시되는 퍼즐은 플레이어가 인지 능력을 발휘하고 민첩하게 대응해야 하므로 게임 플레이에 흥미진진한 요소를 부여합니다. 이러한 수수께끼를 성공적으로 풀면 플레이어는 보너스를 받거나 내러티브를 진행할 수 있습니다.
시간 제한 장애물 또는 적
플레이어에게 위험을 초래하는 장애물이나 적의 형태로 시간 제한을 도입하는 것을 고려합니다. 예를 들어 미리 정해진 간격으로 나타났다가 사라지는 모바일 플랫폼이나 일정 시간 동안 무적 상태가 되는 적 등이 있습니다.
기동을 성공적으로 수행하려면 정확한 타이밍과 손재주가 필요하므로 전략적인 계획과 플레이어 간의 조율된 행동이 필요합니다.
시간 기반 이벤트의 모범 사례
게임 디자인에 시간적 사건을 통합할 때는 앞서 언급한 지침과 원칙을 준수해야 최적의 결과를 얻을 수 있습니다.
테스트 및 균형
공정성과 균형을 엄격하게 테스트하여 시간 기반 이벤트의 무결성을 보장합니다. 기간, 도전 수준, 인센티브를 조정하여 매력적인 게임 환경을 조성하세요.
사용자 피드백
타이머 상태 및 시간 기반 이벤트와 관련하여 플레이어에게 제공되는 피드백이 명확하고 인지할 수 있도록 합니다. 이는 청각, 시각 또는 텍스트 단서를 통합하여 달성할 수 있습니다. 이러한 보조 도구의 목적은 플레이어가 시간적 제한과 자신의 행동으로 인한 결과를 이해하는 데 도움을 주는 것입니다.
일관된 시간 측정
모든 타이머 기반 계산 및 내러티브 목적에 초를 분모로 사용하여 게임 전반에 걸쳐 일관된 시간 측정 표준을 활용하도록 합니다. 이러한 접근 방식은 플레이어와 개발팀 모두에게 정확성과 명확성을 높여줍니다.
핸들 에지 케이스
비디오 게임을 설계할 때는 게임이 일시적으로 중단되거나 크기가 축소되거나 백그라운드에서 작동하는 경우를 고려하는 것이 중요합니다.이러한 상황은 게임 타이밍이 정확하게 유지되고 게임이 재개될 때 의도하지 않은 결과가 발생하지 않도록 주의해서 처리해야 합니다.
이러한 권장 접근 방식을 준수하면 공정성과 엔터테인먼트 가치를 유지하면서 플레이어에게 도전 과제를 제공하여 전반적인 플레이 경험을 향상시키는 게임 내 시간 제한 이벤트를 개발할 수 있습니다.
시간 제한 이벤트로 게임의 재미를 더하기
게임플레이에 시간적 사건을 통합하면 플레이어에게 흥미롭고 매력적인 경험을 제공할 수 있습니다. 시간 제한 과제를 구현하면 스릴과 긴박감이 증가하고, 적시에 파워업이나 장애물이 등장하면 전략적인 선택을 유도할 수 있습니다.
광범위한 테스트와 반복적인 개선을 통해 최적의 엔터테인먼트 가치를 달성하기 위해 실험을 수행하고 게임 메커니즘을 개선하여 다양한 시간적 역학을 탐색합니다.