人工知能(AI)の開発などで注目を集めるプログラミング言語「Python」では、「Panda3D」というライブラリーを使うことで、3次元(3D)ゲームも開発できる。Panda3Dの基本的な使い方を紹介するとともに、実際に遊べる「ビー玉迷路ゲーム」を開発する。
ステップ5
穴に落ちたら開始地点に戻る
迷路の穴のパーツに衝突したら、ボールが開始地点に戻るプログラムを作ります。
まず、リスト16を記述し、必要なモジュールを読み込みます。
続けて、リスト17を記述し、loseGame関数の定義をします。loseGame関数は、前回の記事にあるリスト14の(4)で、ボールが迷路の穴に衝突したときに呼び出している関数です。
実行結果は前回の記事にある図14と同じです。ボールを転がしてわざと穴に入れてみると、ボールが開始位置に戻ります。
ステップ6
ゴールしたらテキストを表示する
ステップ5までで基本的なゲームの機能はできました。しかし、ゲームは達成感が重要です。ゲームをクリアしたのかどうかをわかりやすくするために、ボールがゴール位置にたどりついたときに、画面に「ゴール!!」というテキストを表示します。画面の右下の位置にある「ボールをゴール地点まで運べ!」という文字列の内容を変更し、「ゴール!!」を表示するプログラムを作ります。
サンプルの迷路の3Dモデルであるmaze.eggには、ボールがゴールに衝突したときに検出できるタグが設定されていません。そこで、Part1で使ったのと同じ立方体のオブジェクトをゴール位置に置き、衝突判定によって、ゴールしたのかを判定します。
リスト18を記述し、処理に必要なモジュールを読み込みます。
続けて、init関数の中にリスト19を記述し、goalという名前の立方体のオブジェクトを追加します。goalは衝突検出オブジェクトを付けるためだけに必要なオブジェクトです。ゲームの見た目上は目立たない方がよいので、setScaleやsetPosの数値の設定で、できるだけ小さくしています。goalに付ける衝突検出オブジェクトの名前は「goalCol」と名付け、goalColの大きさはgoalよりも大きくしています。
続けて、リスト20を記述して、winGame関数を定義します。これはリスト14の(5)で、ボールがgoalCol(ゴールの衝突検出オブジェクト)にぶつかったときに呼び出している関数です。winGame関数は、画面の右下のテキストの内容を「ゴール!!」に書き換え、ボールを非表示にします。(1)のsetTextメソッドでテキストの内容を書き換えることができます。
実行結果を図15に示します。ゴール位置に到達すると、右下の文字が「ゴール!!」に変わります。