こんにちは、みやびのです。
今回は、Pythonistaでゲームのタイトル画面を作成する方法を紹介します。

具体的には以下の通り。

・Pythonistaでのタイトル画面の作成とゲーム画面への遷移
・Pythonistaでのタイトル画面作成の実装例と実行例

本記事を読めばタイトル画像の作成を通して画面遷移の方法も理解できます。
画面遷移ができればゲームの幅が一気に広がるので本記事を参考にしつついろいろな画面を作成してみてください。

※本記事はポーカー作成の追加講座ですが、本記事だけでも活用することは可能です。

Pythonのポーカー作成に興味がある方は第1回「Pythonでポーカーゲームを作成する」から順番にお読みください。

Pythonistaでのタイトル画面の作成とゲーム画面への遷移

Pythonistaの画面遷移1

タイトル画面の作成方法

Pythonistaでタイトル画面を作る方法には以下の2つがあります。

・1つの画面でタイトル画面とゲーム画面を表現する方法
・2つの画面(タイトル画面とゲーム画面)を作る方法

今回は後者の「2つの画面を作る方法」を紹介します。

タイトル画面はアニメーションが必須ではないので、文字や画像を追加すればOKです。

今回作成するタイトル画面の仕様は以下の通り。

・タイトル
・サブタイトル
・説明(ユーザに行動を促すもの)
・トランプ画像(飾り)

タイトルに加えてサブタイトルも入れておきます。
また、画面を表示するだけではどうすればゲームが始められるかユーザがわからないので簡単な説明を入れておきましょう。

今回は「画面をタッチしてね」というメッセージを入れておきます。

文字情報だけだと寂しいので画像を追加してもよいでしょう。
今回はトランプの画像を追加しておきます。

タイトル画面にもアニメーションを追加することは可能ですが、必須ではないので今回は入れません。

タイトル画面の完成イメージ。
完成イメージ

ゲーム画面への遷移方法

今回はタイトル画面をタッチした時にゲーム画面に遷移させます。
画面遷移にはsceneView()クラスを使います。

# ゲーム画面に切り替える処理
sv = SceneView()
# パラメータ設定
ui_orientations = None
sv.anti_alias = False
sv.frame_interval = 1
sv.multi_touch_enabled = True
sv.shows_fps = False

# MySceneを読み込む
sv.scene = MyScene()
sv.present(orientations=ui_orientations)

sv.sceneに新たに読み込みたいsceneクラスを設定します。
sv.present()を実行すると読み込んだsceneクラスを画面表示できます。

その他の詳細パラメータの説明は割愛。
機会があれば別記事で説明予定。

Pythonistaでのタイトル画面作成の実装例と実行例

タイトル画面の作成とゲーム起動処理の修正を行います。
第5回までに作成したゲームの修正はありません。

タイトル画面の作成と呼び出し処理の修正

Titleという新規sceneクラスを追加します。
使うメソッドはsetup()とtouch_began()の2つです。

setup()にはタイトルや画像を追加処理、touch_began()ではゲーム画面への遷移処理を記述します。

コードの実装例は以下の通り。MySceneクラスの後に追記します。

# MySceneの後に追記する
class Title (Scene):
	def setup(self):
		self.background_color = '#05982f'
		ground = Node(parent=self)
		# タイトルの表示
		font = ('Chalkboard SE', 50)
		label = LabelNode('Pythonポーカー', font, parent=self, color='yellow')
		label.position = (self.size.w/2, self.size.h - 200)
		label.z_position = 1
	
		# サブタイトルの表示
		font = ('Chalkboard SE', 25)
		subtitle_label = LabelNode('~Pythonistaポーカー作成講座~', font, parent=self, color='white')
		subtitle_label.position = (self.size.w/2, self.size.h -280)
		subtitle_label.z_position = 1
		
		# メッセージ
		font = ('Chalkboard SE', 20)
		text_label = LabelNode('画面をタッチしてね', font, parent=self, color='white')
		text_label.position = (self.size.w/2, 150)
		text_label.z_position = 1
		
		base_w = 90
		base_h = 350
		card = SpriteNode('card:BackRed1', position=( base_w, base_h))
		self.add_child(card)
		
		card = SpriteNode('card:DiamondsA', position=( base_w + 50,base_h))
		self.add_child(card)
		
		card = SpriteNode('card:HeartsA', position=( base_w + 100,base_h))
		self.add_child(card)
		
		card = SpriteNode('card:ClubsA', 
		position=( base_w + 150,base_h))
		self.add_child(card)
		
		card = SpriteNode('card:SpadesA', position=( base_w +200, base_h))
		self.add_child(card)
	
	def touch_began(self, touch):
		# ゲーム画面に切り替える処理
		sv = SceneView()
		# パラメータ設定
		ui_orientations = None
		sv.anti_alias = False
		sv.frame_interval = 1
		sv.multi_touch_enabled = True
		sv.shows_fps = False
		# MySceneを読み込む
		sv.scene = MyScene()
		sv.present(orientations=ui_orientations)

ゲームの起動時はMySceneではなくTitleクラスを呼び出すようにします。

if __name__ == '__main__':
	run(Title(), show_fps=False)

画面遷移の実行例

以上、Pythonista+sceneでのタイトル画面の作成方法でした。
画面遷移ができるとゲームの幅が結構広がりますね。

タイトルだけでなくゲームオーバー画面の作成やクリア時に次のステージに画面を切り替えるなどの操作もできます。
本記事の内容も参考にしつついろいろ試してみてください。

講座TOP>>Pythonistaで作るポーカー作成講座(全5回)