対戦型
2048
プログラムの作成
八木原 勇太
1,a) 概要:対戦型2048は、一人用のパズルゲームである2048のルールを変更し、二人用にした ものである。夏のプログラミング・シンポジウム2015で、対戦型2048のプログラム作成・ 対戦会が「お題」のひとつとして選ばれた。また、サンプルとしてMiniMaxPlayerという、 ミニマックス法を用いた対戦プログラムが提供されており、比較的単純なプログラムであり ながら高得点を安定して出す傾向がある。 一方、オリジナルルールの2048には、効率良く大きな数値のパネルを作るための戦略がい くつか知られている。そこで、サンプルプログラムのMiniMaxPlayerに既存の戦略を取る ようなロジックを組み込み、より強いプログラムの作成を試みた。 キーワード:夏のプログラミング・シンポジウム,対戦型20481.
対戦型 2048 のルール
対戦型2048は、一人用のパズルゲームである 2048[1]のルールを変更し、二人用にしたものであ る。数字の書かれたタイルを任意の位置に置ける ようにし、タイルを置く側を攻撃側、上下左右に タイルを動かす側を守備側とする。二人で攻撃・ 守備を1回ずつ行い、ゲームオーバー時点でのス コアの高い方を勝ちとする。2.
人間がプレーする際の戦略
オリジナルルールの2048には、以下のような戦 略が知られている。 (1)数値の大きなタイルを上下左右いずれか一方 の端に降順に並べ、可能な限り動かさないで おく (2)数値の大きな同一のタイルが盤面上に複数存 在する場合は、速やかに合体させる 1 キヤノンソフトウェア株式会社 a) [email protected] 例えば1024を作るには512のタイルを2つ作 る必要があるが、512のタイル2つが離れ離れに なると、それらを合体させることは難しい。そこ で、2つ目の512を作成した直後に合体できるよう に、256を1つ目の512の隣の升で作成する。256 を作成するときも同様に作成直後合体できるよう、 128を256の隣の升で作成する。 このように逆算していくと、図1のように数値 の大きなタイルが降順に並んでいる形が理想の状 態になる。これが先に述べた戦略である。3.
MiniMaxPlayer
の分析
MiniMaxPlayerは、ミニマックス法を使用した 対戦型2048のサンプルプログラムである。評価関 数としてスコア値をそのまま使用しており、2手 先まで先読みを行っている。 MiniMaxPlayerを守備側で動作させると、スコ ア値を高くするために、同数値のタイルをできる だけ合体させるように振舞う。つまり先に述べた 戦略(2)を行うが、戦略(1)のロジックは無いた夏のプログラミング・シンポジウム「プログラム詠み会」 2015.9.4-6
33
図1 1024のタイルの作成手順 め、最大数値のパネルが盤面中央を動き回ること が多い。最大数値のパネルは最優先で合体させて いるが、2番目・3番目のパネルは合体できずに盤 面に複数残ったままになっている状態がしばしば 見受けられる。 そこで、MiniMaxPlayerに戦略(1)を行うよう なロジックを加えることで、より強いプログラム になると考えた。