ぷぇ

競技プログラミングとかについて書きます。

探索ゲーム ハイパーロボット ( Ricochet Robots ) の紹介

この記事は

 

adventar.org


の15日目の記事です。


プログラマーにはボードゲーム好きが多いような気がします。プログラミングのパズル的側面がボードゲームのプレイ感と似ているからだと私は勝手に思っていますが、まあともあれ楽しいのです。皆さんも是非ボードゲームをしてみませんか?


今回は最近流行りのボードゲームであるところの、ハイパーロボット( Ricochet Robots )を紹介します。

 

 
ハイパーロボットについては論文があったりオフ会各所で遊ばれたりと色々話したいことがあるのですが、とりあえず遊んでみましょう。

2人〜∞人で遊べます。ルールは非常に単純で、奥の深い(というか沼の深い)ゲームになっています。

 

まずは使うモノの説明から。

f:id:Ti11192916:20181215164851j:plain

f:id:Ti11192916:20181215165016j:plain

 盤面と盤面上のマークに対応するコマ、

 

f:id:Ti11192916:20181215165048j:plain

 ロボットとロボットそれぞれに対応するコマがあります。

 

ゲームの目的は、盤面上のマークが1つ指定されるので、なるべく少ない操作回数マークと同色のロボットを指定されたマークまで運ぶことです。

目的地となるマークは、盤面上のマークに対応するコマを裏向きにしてまぜ、ランダムに1枚選ぶことで決定します。

 

f:id:Ti11192916:20181215165349j:plain

盤面上のマークはこんな感じ。中央の4マスは進入不可です。この4マスの外周は壁になります。

 

ただし、ロボットの移動について制約があります。
ロボットは1回の操作で、上下左右いずれかに一直線に、壁か他のロボットにぶつかるまで進みます。氷の上を滑っているような感じですね。

ロボットにぶつかった場合はその直前のマスで停止します。1マスに同時に存在できるロボットは1つまでです。

 

目的地が決定したら、ルートを考えます。

ロボットが目的地まで辿り着けるようなルートを発見したら、その手数を宣言します。7!みたいな感じですね。

誰かが数字を宣言した瞬間、1分の砂時計がひっくり返されます。この砂時計が落ちきるまで、最初に数字を宣言したプレイヤーを含めた全員が続いて数字を宣言することができます。順番はありません。思いついた順に叫びます。

砂時計が落ちきったら、出た数字の中で1番小さい値を宣言した人(同じ値が複数宣言された場合は、早く宣言した人)から順番に、実演します。

実演が正しかった場合はその時点でこの目的地が達成され、成功したプレイヤーが目的地が描かれたコマを得ます。

失敗してしまったら、次に小さな数字を宣言したプレイヤー(同じ値なら、次に早く宣言したプレイヤー)が実演をします。

誰も達成できなかった場合、コマは裏返して山に戻されます。

これがゲームの1ラウンドで、コマの山がなくなるまで繰り返します。ロボットの位置は、前回の移動後の状態から開始します。

コマを一番多く得たプレイヤーの勝ちです。

とりあえずやってみましょう!


最初、ロボットはランダムに配置されます。 

f:id:Ti11192916:20181215170247j:plain

例えばこんな感じ。

目的地が描かれたコマを1枚選び、せーのでめくります。めくった瞬間がスタートです。

 

f:id:Ti11192916:20181215170547j:plain

1枚選んで、せーのっ

 

f:id:Ti11192916:20181215170613j:plain

はい!黄色の歯車が目的地です。黄色のロボットを運びます。

 

f:id:Ti11192916:20181215170714j:plain

目的地は右下のここです。3手では辿りつけませんよ?

 

f:id:Ti11192916:20181215170247j:plain

じっくり考えます。

筆者は1分くらいで11手を見つけました。11!

砂時計をひっくり返して1分待ちます。

 

みなさんはもっといいルートを見つけたかも知れませんが、とりあえず11手を実演します。この時点で、11よりも小さいルートが宣言されていれば、そのルートから実演することになります。

 

f:id:Ti11192916:20181215170936j:plain

まず5手で赤を移動(→↓→↑→)

 

f:id:Ti11192916:20181215171323j:plain

さらに3手で緑を移動(↓→↑)

 

f:id:Ti11192916:20181215171356j:plain

最後に黄色を3手で移動(→↑←)

これで11手で黄色の歯車のマスに黄色いロボットを運ぶことが出来ました!

実演に成功したので、私は盤面中央に置いてある黄色い歯車の目的地コマを獲得します。ロボットの初期位置を表すロボットの各色に対応するコマを現在のロボットの位置に移動して、次のゲームが始まります。

f:id:Ti11192916:20181215171655j:plain

いぇいいぇいいぇい

 

これが、ゲームの一連の流れです。

それでは、数問解いてみましょう!

 

f:id:Ti11192916:20181215171748j:plain

せーのっ

12!

 

f:id:Ti11192916:20181215171906j:plain

せーのっ

9!

 

f:id:Ti11192916:20181215172007j:plain

せーのっ

このぐるぐる渦巻きの目的地は、どの色のロボットでも良いので、その場所まで運びます。


うーんこれは難しいですね…答えは出ませんでした…。


試遊はここまで!

いかがでしたか?僕より良い手数は思いつきましたでしょうか?

 

このゲーム、盤面のタイルは4枚をくっつけて構成するのですが、タイルが8枚入っていて、裏表に盤面が書いてあるので、組み合わせの幅がかなり広いです。

 

加えて、反射板という特殊な要素がある盤面もあります。

f:id:Ti11192916:20181215172519j:plain

 

これは、同色のロボットなら貫通、異色のロボットならその方向に1手で反射してたどり着ける、というものです。

 

f:id:Ti11192916:20181215172811j:plain

赤は貫通、黄色は反射板のマスで下向きに進路を変えて何かにぶつかるまで進みます。ぶつかるまでが1手になります。

 

この盤面でも数問やってみましょう。

f:id:Ti11192916:20181215172950j:plain

えい

 

f:id:Ti11192916:20181215173030j:plain

おりゃ

 

f:id:Ti11192916:20181215173053j:plain

ほい

 

ロボットの位置は適当です。

考えるのがめんどくさくなってしまって…時間の都合です。

 

いかがでしたか?難しいゲームですが、慣れてくると案外解けます。

解けた時はとても楽しいです。それと、たまにバケモノみたいに強い人がいるので、そういった発見もまた面白いです。

ぜひ、皆さんボードゲームをしましょう!

 

明日は ecasdqina くんの ネタ記事を書きます だそうです。楽しみですね。