2024年10月20日日曜日

ゲーム・プログラミングの妙

プログラミングは楽しい.少なくとも,自分のために実施するプログラミングはいくら時間があっても足りないくらい.というわけで,今回はゲーム・プログラミングである.

題材はThe Chain Triangle Chess Gameというゲームである. Triggle Gameという名前でも流通しているらしい.Amazonで販売されていたゲーム盤のページから商品画像を引用する.

みてのとおり,ルールはとてもシンプルである.6角形の盤面に,37本の柱が立っている.プレイヤーは,交代でその柱を使って区切りを指定する.区切りの指定方法は,輪ゴムを4本の柱に引っ掛けて直線の区切りを設定するというものである.三角形の小さな区画の3辺が全て区切られたら,区切った人の領土になる(それを示すコマを置ける).

YouTubeのショート動画で楽しそうに遊んでいるのをみて,プログラミングの題材に選んだという次第.

環境の選択

最近であればPythonで書くべき?ゲームならUnityだろうか.まあ,慣れているからということと将来的に分散オンラインゲーム化することを見込んで,シンプルにHTMLとJavaScriptを用いて書くことにした.

GUIはHTMLのCanvasを利用する,Canvas要素に直に描いていく方法である.最も単純なパターンである.余計なライブラリに依存しないぶん,安定してメンテナンスできそうという目論見もある.

プログラミング

というわけで,1日くらいかけて実装した.ソースコードはGitHubに置いておいたので,興味がある人は参照してみてほしい.アプリは下記に置いてある.URLのパラメータを指定して2人〜4人の対戦に対応できるようにしてある.

プログラムを大まかに解説すると,GUI部品としてはWidgetクラスを継承したPole, Wall, Patchというクラスがそれぞれ,柱,壁,三角形の領域を表す.さらに,Containerクラスを継承したPoles,Walls,Patchesというクラスが,柱,壁,三角領域をまとめて管理するという構成になっている.

さらに,それぞれのインスタンスの関係を配列の配列で定義して,適切な参照関係を事前に用意してからゲームを始めている点も重要な点であろう.

遊び方

遊び方は,説明するまでもないのではなかろうか.まずは,どこでもよいから柱をクリックしてみよう.クリックした柱は黄色くなり,そこから直線上に3つ離れた場所にある柱が水色で表示される(次図).

水色で表示された柱以外は選択できない.なお,黄色の柱を再度クリックすると,選択を取り消せる.水色のどれかをクリックすると,最初に選択した黄色の柱と次にクリックした柱の間に区画が作られる.

3個の辺に区画ができた三角形は,その回を担当したプレイヤーの持ち物となる.色で示されるので分かりやすいだろう.全ての区画が誰かのものと定まった時点でゲームは終了,ページの最下部に得点状況が表示される(次図).

今後の課題

一通り実装できたので,今日のところはいったん完成としよう.しかし,まだいろいろと考えるべきところはある.細かな話をするとすでに壁ができているところに同じ壁を作るのを許容するかどうか.いまの実装では,その操作は許されているが,三角領域の獲得には何の寄与もしない.いわば「パス」を許していることになるが,ゲームとしてそれはよいのかどうか.検討が必要であろう.

オンライン対戦化させるのも興味深い.旧来の中央集権的サーバを用意して管理するもよし,WebRTCのような分散型の通信方法を利用するもよし,いろいろと工夫の余地はあろう.卒研生の題材にするってのも面白いかもしれないな.

0 件のコメント:

コメントを投稿