マトリョーシカ的日常

ワクワクばらまく明日のブログ。

まずはCODE VS 2.0のゲームルールを理解する。

CODE VSは今年で二回目。テーマは「落ちものパズル」

日本中の学生プログラマが、
アルゴリズム活用力とコーディング技術を競い合う
プログラミングコンテスト「CODE VS(コードバーサス)」。
開催二回目となる今年のテーマは “落ち物パズル”。
ハイスコアを叩き出すアルゴリズムを実装し、
学生日本一になるのはいったい誰だ!?

学生プログラマ日本一決定戦 - CODE VS 2.0(コードバーサス2.0)

 昨日に続いてCODE VSの記事です。CODE VSは今年で開催二回目。昨年はタワーディフェンスを題材にし、押し寄せてくる敵から自分の城を守るためのアルゴリズムをつくったようです。そして今年のテーマは、「落ちものパズル」。C初心者の僕もがんばってプログラムを書こうと思います。
 

タテ・ヨコ・ナナメで10をつくれば消える

 ルールを知るためにとりあえずサンプルゲームで遊んでみる。公式サイト下の「試しにゲームを遊んでみる」をクリックするとPCにゲームがダウンロードされる。やってみるがいまいちルールがつかめない。ブロックの数字はなんだ、色は関係ないのか、同じ色がよっつあつまれば消えるというわけではなさそうだ。

1.2.2 ブロックの消去

全てのブロックが落下した状態になると、所定の条件をみたすようなブロックが全て消去されます。この際、消去された状況に応じてスコアが加算されます。ブロックはそれぞれ数字を持っており、縦、横、斜めのいずれかの方向にブロックが繋がり、かつそのブロックの合計の数字が最初に与えられる数 S になると、その和を構成する全てのブロックが消滅します。

ルールについて|学生プログラマ日本一決定戦 - CODE VS 2.0(コードバーサス2.0)

 いや、わからんし。Sっていくつだよ。試行錯誤しながらゲームを遊び、サンプルゲームの場合はS=10ではないかと気付いた。タイプ:Small場合と同じだ。スコアの計算方法等も載っているがややこしいので今は考えないことにした。

さきに落ちてくるブロック情報が全て与えられる

 

3.1 インプット

最初にフィールドの幅 W、高さ H、投下するブロックの正方形領域の一辺 T、消去のために作るべき和の値 S、与えられるパックの数 N が半角スペースを開けてこの順で一行で与えられます。 次に、投下するべき正方形の領域の構成が以下でN 個与えられます。正方形の領域は、T 行 T 列 の行列の要素 Bx,y の形で、値は半角スペースを開けて与えられます。このうち、一行目が最も天井に近い行、一番最後に与えられる行が最も底に近い行になります。また、0 は空白を意味し、それ以外の値はそのブロックが持つ値を意味します。それぞれのブロックの入力は一行の END と書かれた行で区切られています。これらのパックの情報はゲーム開始時に全て与えられます。

 ちょっとややこしいので図で表してみた。ブロックはT×T個の正方行列の固まり(パック)で落ちてくる。0のときはブロックははいっていない。テトリスをイメージするとわかりやすいかもしれない。

 パックの情報はゲーム開始時に与えられている。一番良いスコアを計算し、そうなるようにパックを詰めばいいのだが、パックの数が多すぎる。SmallでもN=1000パック。

こちらが決めるのはパックを落とす位置と回転角度のみ

 3.2 アウトプット

プログラムはターンごとにパックを落とす位置位置 X と時計回りに 90 度の回転を何回行うかの回数 R の2つの数値をスペースを開けて一行で出力します。例えばパックの左端の列がフィールドの左端の列の一列右にあり、かつパックを 180 度回して落下させる場合は、以下のように一行で出力します。この二つの数より多い、あるいは少ない数の数字を出力した場合は不正な出力をしたとしてゲームが終了します。

 こちらもややこしいので図を貼っておく。(幅:W=15のときのもの)数字の書いてあるブロックが枠の外に落ちるとゲームが終了してしまうので、落ちないようにXに制限をつけないといけない。回転回数もR=4以上にするとだめなのだろう。図の場合、一番右のパックは枠をはみ出しているのでこの数値で落とすのはよくない。

 こちらが決める値はパックを落とす位置Xとそれを時計回りに回転させる回数Rのみ。これをパックごとに指定する。意外とシンプルである。

おわりに

 それにしてもこの公式サイトの説明がいちいちわかりづらい。どれがどのブロックに対応しているのかはじめみたときは分からなかった。ルールを理解することもプログラマーの能力の一つだというのなら、何も言えない。

 明日からはサンプルコードの解読をはじめる。果たしてこのペースで自分のプログラムを書き上げることはできるのか……!?

おまけ

 さいきんはまっている曲。

 

 膳×PARANOiA_Revolution