スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Androidアプリ(ゲーム)「ラムゼーゲーム」開発記

ということで、Androidゲームで「ラムゼーゲーム」というアプリを作りましたので、お知らせいたします。



「ラムゼーゲーム」アイコン「ラムゼーゲーム」
お互いに15本の辺へ色を塗っていき、先に三角形を作ったほうが負け!

https://market.android.com/details?id=com.rea33.android.ramseygame


Android端末からは、以下のQRコードよりダウンロードページに移動できます。
「ラムゼーゲーム」QRコード



ゲームの種類としては既存のものですが、国内ではあまり馴染みがないゲームではないでしょうか。
丁寧な解説をされているページがありますので、URLを記しておきます。
すぐるの算数カルチャー講座

↑実際にゲームをすることもできます。おそらくJavaScriptで実装していると思います。

このブログには書いていないのですが、Androidゲームでは前に「15パズル」も作っていました。タッチ操作が活かせるアプリを作りたいと思い、「マウスでパネルをクリックするよりは指でタッチしたほうが操作性が良さそう」ということで、有名なパズルではありますが作っていたんですね。(15パズルについては、また別の日に開発記を書くと思います。)

同じように、「ラムゼーゲーム」もマウスではなく、指で頂点をタッチして彩色するという操作ができればということで、Androidアプリを作りました。そして、COM対戦では必須の人工知能(AI)の実装を行なうというのが、15パズルとの大きな違いですね。

ラムゼーゲームのルールは単純で、手順としては、お互いに合計15本の辺を彩色していくというものです。コンピュータは赤・自分は青で塗るのですが、先に三角形(頂点どうしを結んでできる三角形)を作ってしまったほうが「負け」になります。つまり、うまく三角形を作らないように辺を選んでいく必要があるのはもちろん、勝つためには、相手に三角形を作らざるを得ない状況に追い込む戦略も立てなければいけません。

適当に辺を塗って勝つ場合ももちろんあると思います。しかし、COMに搭載した人工知能では、難易度が高く設定されるほど、何手先もの手を読んで、戦略的に色を塗る辺を選ぶを選ぶようになっています。


ここから、人工知能(AI)についてですが・・・

辺は合計15本あります。相手(COM)が先手だとすると、最初に選べる辺は15本。次に自分が選ぶ辺は14本になります。その次に、再度相手が選ぶ辺は13本。…このようにして、15本の辺を順に選んで塗っていく方法は、全部で

15! = 15×14×13×・・・×3×2×1 = 1 307 674 368 000 通りあります。

1兆を超えます。

実際は15本塗り終わるまでに決着がつく場合があるので、もっと少ないんでしょうが、COMが先の塗られ方を、塗る前に考えていたら、つまり先読みをしていれば、次にどの辺を選べばよいか、という戦略が立てられるということになります。よく、コンピュータがチェスや将棋で人間と対戦するなんていうニュースがありますが、基本的にこのような先読みを行なっています。人間の方も何手か先までは先読みをしながら戦っていくと思われるので、思考としては似てるかもしれません。

まぁ、このままでは1兆以上という、あまりにも厖大な手の数を調べなければならないので、そこまでは先読みをするのは現実的ではありません。そのため、このゲームもそんなに先の手までは読まないようになっています。

ただ、終盤になると、最後まで手を読むことが現実的にできるようになります(例えば、ラムゼーゲームの場合、10手目あれば、最大で6! = 6×5×4×3×2×1 = 720通りの手を調べるだけでOK)

本ゲームの先読みでは、COMが先読みできる範囲で一番イイ手を打つために、COMの相手(つまり、自分)も一番イイ手を打ってくる、という前提で戦略を立てています。ミニマックス法とよばれる方法です。両者とも同じレベルで先読みをし、一番いい手を打つという前提で次に打つ手を決めることにより、「理詰めで確実な手」を選ぶようになっています。なかなかうまく説明ができませんが、まぁ、ネット上に資料はたくさんありますので・・・(^^;

正確には、さらに効率的に先読みができるアルファベータ法という、ミニマックス法の改良版を実装しています。

実装はこのへんが一番難しかったですかね。先読み方法の説明はわかっても、どうコードを書いていいのかということで、かなり戸惑っていました・・・

後は難易度の調整時でテストを重ねる過程で、AIが思考し過ぎで途中で画面が止まったりとか・・・
端末では種類によってはCPUの性能に差があると思うので、自分ので動作確認が済んでも、他の端末でエラーを起こさないかは不安でもあります。(といっても「強制終了しますか」のメッセージがでるだけで、致命的なエラーではなく、終了させずに待機していれば問題はないと思うのですが・・・)

なにはともあれ、遊んでいただければ幸いです。
(難易度がHARDで、かつ自分が先手だと、かなり勝つのが難しいようになっています…)




コメントの投稿

非公開コメント

義援金募集
FC2「東北地方太平洋沖地震」義援金募集につきまして
プロフィール

れあ

Author:れあ
Twitter(@reakoirer)
数学の問題出題(@mathtam_jp)


ニコ動のユーザーページ


メール:
reakoirer.contact+blog[]gmail.com
([]を@に変えてください。返信不確実;;)

Twitter...A

れあ < > Reload

カレンダー
最新記事
最新コメント
カウンター
月別アーカイブ
カテゴリ
検索フォーム
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。