ポーカーゲーム作成講座

Pythonistaのポーカーゲームにカード交換機能を追加する~ポーカー作成講座3~

こんにちは、みやびのです。

本講座はPythonistaを活用してポーカーゲームを作成する方法について解説するものです。(全5回を予定)

第2回「Pythonistaでポーカーゲームを画面表示する~Pythonista+sceneポーカー作成講座2~」ではポーカーゲームの画面表示の基本処理を作成しました。

第3回となる今回は、Pythonでポーカーのカード交換機能を追加する方法を紹介します。
本記事の内容は以下の通り。

・Pythonistaのポーカー交換機能の追加方法
・Pythonistaのポーカー交換機能の実装例と実行例

Pythonistaのポーカー交換機能の追加方法

今回の修正内容は以下の通りです。

・カードをタッチすると反転する処理の追加
・カードを交換する処理を追加
・ゲームの状態と結果表示
・残り交換回数の表示

カードをタッチすると反転する処理の追加

カードをタッチした時に反転する処理を追加します。
itemにリバースのフラグを追加。

Trueの場合は裏にします。

トランプの裏のカード画像はPythonista側で用意されているのでこちらを使いましょう。
カラーは赤・青・緑の3パターン、柄は5パターン計15パターンあります。

トランプの裏

裏表の設定はset_item()を改造して追加。

引数に「direction」を追加します。
引数に指定する値は以下の通り。

None:そのまま
'front':表にする
'back':裏にする
'reverse':裏表を反転する

カードを交換する処理を追加

交換の方法としては以下の2つがあります。

方法1:交換するカードを「remove()」で除外して新しいカードを「append()」で追加する方法
方法2:交換するカードの情報を新しいカードの情報で上書きする方法

方法1だとdraw_cardsとitemのインデックスがずれてしまうので調整が少々面倒です。
方法2であればカードの内容を上書きするだけですむため、今回は方法2を採用しました。

ゲームの状態と結果表示

交換回数の上限した時に「Game Over」という文字と結果を表示するようにします。
また、プログラムを再起動せずに新しいゲームができるように「New Game」ボタンを追加すると便利です。

上記機能を持たせるためにゲームの状態を新たに追加します。
今回作成する状態は以下の3つです。

standby:ゲーム開始前
run:ゲーム中
pause:ゲーム中断

ゲームの状態は以下のように遷移します。

・ゲーム開始時は「standby」
・「Start」ボタンを押すとゲーム開始
・交換回数に到達したら状態「pause」
・ゲームオーバーの状態で「New Game」ボタンを押すと「standby」に移行し新しいゲームを開始

状態に応じてボタンの文字も変更します。

standby:Start
run:Change
pause:New Game

ボタン名は「button_label.text」を変更すれば修正できます。

また、残り回数を表示してユーザーにあと何回交換できるか見えるようにしましょう。

残り回数は「交換可能回数 - 交換した回数」で計算できます。

Pythonistaのポーカー交換機能の実装例と実行例

setup()メソッドに交換可能回数を追加します。

◆setup_object()関数の修正
前回作成したsetup_object()関数を修正します。

ボタンの初期文字を'reset'から'Start'に変更。

残り回数の行を追記します。

◆reset_game()の修正
全体的に修正。
各種パラメータのリセットとカードを裏側にする処理を追加しています。

◆set_item()の修正
カードを反転する処理を追加しています。
初期設定時や交換時のために強制的に裏表を書き換える処理も追加しました。

directionが「None」の場合はこれまで通り裏表変更なしの設定です。

touch_began()の処理

touch_began()の処理はカードをタッチした場合とボタンをタッチした時の処理の2つです。
ボタンをタッチした場合はゲームの状態によって3つの処理にわかれます。

◆カードをタッチした場合
表の場合は裏に、裏の場合は表に反転させます。

◆ボタンをタッチした場合
Start:裏側のカードを表にしてゲーム開始
Change:裏側のカードを交換
New Game:ゲームのパラメータを全てリセットして新しいゲームを開始

コードは以下の通りです。

◆reset_draw_cards()の修正
表に書き換えるようにset_item()のパラメータを変更します。

◆テキスト更新用のupdate_text()の新設
役や交換回数を更新する関数「update_text()」を追加しました。

◆クラス「TrumpGame」の修正
新しいメソッド「change_card()」を追加します。

「change_card()」は引数に指定したidのカードを山札から引いた新しいカードの情報で上書きします。
コードの実装例は以下の通り。

◆クラス「MyScene」側にも「change_card()」を新設
「MyScene」側にも「change_card()」を追加します。
「tg.change_card()」を呼び出してitemの内容を書き換えればOKです。
交換後のカードは表にしたいのでset_item()の引数には「'front'」を指定します。

修正後ソースコード全文と実行例

修正後のソースコードの全文は以下の通りです。

※長いので非表示にしています。

+マークをクリックするとソースコードを表示できます。

ソースコードの表示・非表示切り替え

>>ソースコードをGitHubで見る

◆実行例

以上、ポーカーの交換処理の追加でした。
今回は処理を詰め込み過ぎですね(汗)。

後日別記事を立てて整理しようと思います。

次回>>第4回:Pythonistaのポーカーゲームにジョーカーの処理を追加する

ポーカー講座TOP>>Pythonista+sceneポーカー作成講座

こちらの記事も読まれています

  • この記事を書いた人
miyabikno

みやびの

住んでいるところ:神奈川県。 プログラミング歴は13年ほど。 ※プログラミングに関する無料相談・質問への回答は行っていません。

-ポーカーゲーム作成講座
-

Copyright© みやびのどっとぴーわい , 2020 All Rights Reserved Powered by AFFINGER5.