ゲーム状態を導入し、タイトル画面とプレイ画面を切り替えられるようにします。
タイトル画面を作成する
まずは、タイトル画面を作成します。
新しいtitle.pyファイルに、簡単なタイトル画面を記述していきます。
import pygame
from pygame.locals import *
import sys
import cursor
class Title():
def __init__(self):
self.frame = 0
self.select = 0
self.title_font = pygame.font.Font("data/minamoji04.ttf", 48)
self.menu_font = pygame.font.Font("data/minamoji04.ttf", 32)
self.credit_font = pygame.font.SysFont(None, 32)
self.title = self.title_font.render(u"スペースラビップル", True, (255, 255, 255))
self.start = self.menu_font.render(u"はじめる", True, (255, 255, 255))
self.exit = self.menu_font.render(u"やめる", True, (255, 255, 255))
self.credit = self.credit_font.render(u"- Jizo Games 2021 -", True, (255, 255, 255))
self.cursor = cursor.Cursor(220, 230, (255, 255, 255))
def update(self):
self.frame += 1
if self.select == 0:
self.cursor.y = 230
elif self.select == 1:
self.cursor.y = 280
def draw(self, screen):
screen.fill((0, 0, 0))
screen.blit(self.title, ((320 - (self.title.get_width() / 2)), 100))
screen.blit(self.credit, ((320 - (self.credit.get_width() / 2)), 420))
screen.blit(self.start, ((320 - (self.start.get_width() / 2)), 225))
screen.blit(self.exit, ((320 - (self.exit.get_width() / 2)), 275))
self.cursor.draw(screen)
黒い背景に、テキストとカーソルを配置しただけの簡単なタイトル画面です。
ゲーム状態を導入する
ゲーム状態を表すgame_stateという変数を用意します。
game_stateがTITLEのときと、STAGEのときで処理を分岐することで画面を切り替えることができます。
仕組みは簡単ですね。
# タイトル画面をインスタンス化
self.title = title.Title()
global game_state
game_state = TITLE
update()とdraw()内で、処理を分岐していきます。
def update(self):
global game_state
if game_state == TITLE:
self.title.update()
elif game_state == STAGE:
self.bgx = (self.bgx - self.scroll_speed) % SCR_RECT.width
self.all.update()
self.collision_detection()
self.hp.update()
def draw(self, screen):
global game_state
if game_state == TITLE:
self.title.draw(screen)
elif game_state == STAGE:
screen.blit(self.bg, (self.bgx, 0))
screen.blit(self.bg, (self.bgx - SCR_RECT.width, 0))
self.all.draw(screen)
self.hp.draw(screen)
これまでの処理は、game_stateがSTAGEのときの処理にまとめます。
タイトル画面のキー操作についても、追記します。
def key_handler(self):
if game_state == TITLE:
if event.type == KEYUP and event.key == K_SPACE:
if self.title.select == 0:
game_state = STAGE
elif self.title.select == 1:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN and event.key == K_UP:
if self.title.select > 0:
self.title.select -= 1
elif event.type == KEYDOWN and event.key == K_DOWN:
if self.title.select < 1:
self.title.select += 1
もちろん画像を使ったり、色を変えたりすることもできるので、凝ったタイトル画面を作ることもできます。
タイトル画面はゲームの顔なので、納得できるものを作りたいですよね。