FLAG

SCOTLAND YARD CONTEST

こんにちは

先日amazonで『スコットランドヤード』というボードゲームを買ってみたのですが、

思った以上に面白いゲームでした。

感想をまとめると、

というわけで、とりあえずルール説明をば

ルール説明

警察5人(ここでは仮に 0~4 の番号を付けておく)が Mr.X を追いつめるゲームです。

人数によっては、複数人の警察を1人でこなす必要があります。



チケットの種類と、最初に各警察・Mr.X に配られる枚数は、

TICKETの種類警察Mr.X
TAXI104
BUS83
UNDERGROUND43
BLACK05
DOUBLE MOVE02

となっています。



ルールブックを読み込んで上げてみました。こっちの説明の方が分かりやすいかもです。

ルールブック1 ルールブック2 ルールブック3 ルールブック4 ルールブック5

このコンテストについて

双方向グラフを見つめていると、無性にAI作成がしたくなってきました

とはいうものの、僕にはあまり技術もないですし、

作っても相手がいないというのは寂しいですし、

なにより他人の作るAIに興味があるので、

AIを募集します!!

どんな方でも、是非とも奮ってご参加ください!

優秀なAIを作られた方には何かある(かも)!?

競技方法

警察の部・Mr.Xの部 に分かれ、リーグ戦を行い、

それぞれの部門ごとに順位を決めます。

詳細は後ほど・・・

締め切り

締め切りは、一応ないです。 いつでもあなたのご参加お待ちしております!

仕様

ダブルムーブを使うとよろしくないことが起きるので、ダブルムーブは使わないでね☆

言語はC++です。

AIはクラスで実装して下さい。ターンごとに呼び出されます。

Mr.X、警察のどちらとも、使用メモリは32MB、各呼び出し毎の実行時間は1秒 が目安です。

(↑場合によっては、「負け」「失格」となります。)

以下ではマップを双方向グラフだと考え、頂点に 1~N の番号を付けることにします。

簡潔のため、

タ:TAXI(TICKET)、バ:BUS(TICKET)、鉄:UNDERGROUND(TICKET)、

船:船、ブ:BLACK TICKET、D:DOUBLE MOVE(TICKET)

と略すことにします。

変数名は変えていただいても構いません。


Mr.X

クラス名 : Mr_X (publicで)

メソッド名 : Mr_X_AI

引数 : 配列やvectorは参照渡しで与えられます。

引数名説明
intN頂点の数
intS初期位置の候補の個数
vector<int>WAY[4][200]各頂点から タ,バ,鉄,船 のそれぞれによって移動できる頂点
vector<int>START初期位置の候補
intTURN現在のターン数
intX_POS現在の Mr.X の位置
intP_POS[5]現在の警察0~4 の位置
intX_TICKET[5]Mr.X が持っている タ,バ,鉄,ブ,D それぞれの枚数
intP_TICKET[5][3]警察0~4 が持っている タ,バ,鉄 それぞれの枚数

返り値:vector<int>

要素数は 2 か 5

通常

DOUBLE MOVEを使う場合

移動手段がない場合

※2回目の移動手段がない場合は、DOUBLE MOVE を使うことは出来ません。


警察

クラス名 : POLICE (publicで)

メソッド名 : POLICE_AI

引数 : 配列やvectorは参照渡しで与えられます。

引数名説明
intN頂点の数
intS初期位置の候補の個数
vector<int>WAY[4][200]各頂点から タ,バ,鉄,船 のそれぞれによって移動できる頂点
vector<int>START初期位置の候補
intTURN現在のターン数
intX_POS現在の Mr.X の位置 (3,8,13,18,24ターン目でなければ0)
intX_USED_TICKET[24]Mr.X が使ったチケット(タ:0, バ:1, 鉄:2, ブ:3, 移動不可:-1)
intP_POS[5]現在の警察0~4 の位置
intX_TICKET[5]Mr.X が持っている タ,バ,鉄,ブ,D それぞれの枚数
intP_TICKET[5][3]警察0~4 が持っている タ,バ,鉄 それぞれの枚数

返り値:vector<int>

要素数は 10

通常

警察iの移動手段がない場合


他に Xの出現ターンを const int APPEAR_TURN[5] = {3,8,13,18,24}; と定義してあるので、使っていただいても構いません。


参考までに補足しておくと、UNDERGROUNDでの移動方法がある地点には必ず、BUSでの移動方法があり、BUSでの移動方法がある地点には必ず、TAXIでの移動方法があります。

サンプル

main.cpp(本体&サンプルAI)

main.cpp(人間Mr.X VS AI警察)

main.cpp(AI Mr.X VS 人間警察)

in(入力データ)

※実行ファイルと同じディレクトリに「in」を置いて下さい。

提出方法

githubの場合は、URLを省略・変換等せずにそのまま貼付けて下さい。

添付データでは送らないでください。

ソースコードを公開するかどうかを書いて下さい。

メールはこちら(メーラーが起動します)

twitterはこちら

その他

質問・要望・訂正等、お問い合わせはこちら(メーラーが起動します)

もしくは僕のtwitter


参考リンク

オンラインでスコットランドヤードを遊べる所

図を交えた解説が載っている所

wikipedia

amazon