일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 단어가 품은 세계
- gymnasium
- Python
- 에르난 디아스
- 타이핑 몬스터
- 나는 스물일곱 2등 항해사입니다.
- 어른의 행복은 조용하다
- 쿠바전통음악
- pygame
- 부에노비스타 소셜클럽
- Ai
- 나는 매트로폴리탄 미술관 경비원입니다.
- 아무도 없는 숲속에서
- Stable diffusion
- 인생의 해상도
- 게임개발
- Gym
- 운석피하기 게임
- 운석 피하기 게임
- 고양이발 살인사건
- 트렌드코리아2025
- openAI
- frozen lake
- 시집
- 숨결이 바람이 될 때
- comfyui
- 황선엽
- 타이핑좀비
- 매트로폴리탄
- 타자연습게임
- Today
- Total
스푸79 기록 보관소
운석 피하기 게임 개발(18) - 메뉴 본문
게임 플레이 상으로는 대부분의 코드 완성한 상태이다.
하지만 외적인 면에서 보완할 부분이 사실 많다.
우선 게임은 한번 할게 아니라면 플레이가 죽은 이후에 재도전할지 플레이어가 선택할 수 있어야한다.

종료된 게임을 다시 시작하게 하려면 게임의 상태를 관리 해야한다.
TITLE = 0 #게임 시작 전 메뉴화면
PLAYING = 1 #게임 시작
...
TRYAGAIN = 4 #게임 종료 후 대기
QUIT = 5 #프로그램 종료
우선 상태값을 위와 같이 정의하고, PLAYING(게임 진행) 와 TRYAGAIN(게임 종료 후 대기)를 구분한다.
def try_again_process(self):
if not(self.player.islive):
if self.ANSWER_INDEX == 0:
self.running_menu = True
self.GAME_STATE = env.TRYAGAIN
self.state()
elif self.ANSWER_INDEX == 1:
self.running = False
self.running_menu = True
self.GAME_STATE = env.TITLE
self.state()
ANSWER_INDEX = 0 인 경우는 YES를, ANSWER_INDEX = 1인 경우는 NO 로 정의한다.
이때 YES를 선택한 경우 게임 상태를 TRYAGAIN으로 변경하고, NO를 선택하는 경우 메인화면으로 넘어가도록 했다.
메인화면을 만들어보자. 타이틀과 메뉴를 아래와 같이 넣고
키보드 입력에 따라 텍스트가 노란색으로 강조 되도록 처리했다.
def show_title(self):
title_text = env.GAME_TITLE
self.print_text(title_text, 400, 150, "LARGE", env.WHITE, env.CENTER, True)
self.show_menu()
def show_menu(self):
menu_text = ["Game Start", "Upgrade", "Setting", "Exit"]
margin = 65
text_color = env.WHITE
for i in range(len(menu_text)):
if self.MENU_INDEX == i:
text_color = env.YELLOW
else:
text_color = env.WHITE
self.print_text(menu_text[i], 400, 500 + (margin * i), \
"MIDDLE2", text_color, env.CENTER, True)

TRYAGAIN 상태에서 YES를 선택한 경우는 위의 화면에서 Game Start를 선택하는 경우와 동일하다.
게임 상태값을 관리하는 state라는 메서드를 아래와 같이 작성한다.
def state(self):
if self.GAME_STATE == env.TITLE:
self.title()
elif self.GAME_STATE == env.PLAYING:
self.init()
self.play()
elif self.GAME_STATE == env.SETTING:
...
elif self.GAME_STATE == env.UPGRADE:
...
elif self.GAME_STATE == env.TRYAGAIN:
#TRY AGAIN 메시지 처리, PLAYING 상태로 변경 후 다시 시작하도록 처리한다.
self.GAME_STATE = env.PLAYING
self.init()
self.play()
elif self.GAME_STATE == env.QUIT:
pygame.quit()
sys.exit(0)
운석 피하기 게임은 앞으로 state라는 함수로 모든 상태를 관리하게 된다. 기존 시작 코드를 비교해보자.
기존 Main 시작코드
if __name__ == "__main__":
gameMain = Main()
gameMain.play()
변경한 Main 시작코드
if __name__ == "__main__":
gameMain = Main()
gameMain.state()
state 메서드에서 게임 시작이나 재도전을 하는 경우에 play메서드를 호출하도록 수정했다.
이로써 플레이어가 에너지가 떨어져서 죽더라도 바로 다시 도전할 수 있도록 변경했다.
하지만 이것이 끝이 아니다.
위의 추가된 메뉴를 보면 알겠지만 Setting과 Upgrade가 추가된 것을 확인할 수 있을 것이다.
Setting에서는 사운드와 효과음은 켜고 끄는(ON/OFF) 기능을 넣을 생각이다.
Upgrade에서는 게임 플레이 중에서 모은 보석을 이용해서 플레이어의 능력치를 향상시키는 코드를 넣을 계획이다.
이번에 끝난 줄 알았는데 한방 더 남았다.
소스 코드를 추가한다.
main.py를 보면 깜짝 놀랄 것이다. 메뉴를 추가하다 보니 코드가 지저분해졌다.
player, meteor 클래스를 참고하여
한번 분리해 보는 것도 도움이 될 것이다.
클래스나 메서드가 너무 길어지는 건 좋지 않다.
'게임공작소' 카테고리의 다른 글
타자 연습 게임, 타이핑 몬스터(1) - 게임기획 (100) | 2024.12.08 |
---|---|
운석 피하기 게임 개발(마지막) - 설치파일 (99) | 2024.11.23 |
운석 피하기 게임 개발(17) - 배경음악, 효과음처리 (86) | 2024.10.20 |
운석 피하기 게임 개발(16) - 아이템효과(폭탄, 보석, 에너지 등등) (68) | 2024.10.13 |
운석 피하기 게임 개발(15) - 아이템효과(파워업, 방어막) (54) | 2024.10.07 |