Pythonプログラミングで

2048 を作る

Stage 1 プログラムの機能を考える

1-1 盤面の機能を考える

まずは一般的な 2048 の仕様を再確認してみましょう。

UNAVAILABLE

なんだよ「一般的な」って
特殊な場合やる気満々じゃねぇかクソ

ノーマルの 2048 の盤面は 4 マス × 4 マスの正方形ですよね。

UNAVAILABLE
from https://play2048.co

ただ我々こんな目に映えるグラフィックを扱うことはできない(この解説ではできなくて大丈夫)ので、とりあえずこんな形を目指しましょう。

UNAVAILABLE
UNAVAILABLE

うわちゃっちいな

つまりコマンドプロンプト・ターミナルで実行できるゲームを作ります。

UNAVAILABLE

なにそのコマンドとかなんとかって

おそらく「ハッカーのパソコン」と言ってイメージする画面ですよ。

UNAVAILABLE

あんなのムリに決まってんだろ

私も最初はそう思ってましたが、ちょいと慣れれば大したことはありませんよ。Python なんかより簡単です。

~~~~~~~~~~~~~~~

ゲームをコーディングするにあたって、盤上の数字を多重配列で表そうと思います。プログラミングの定石ですね。

UNAVAILABLE

まあ当然やな〜

2048 に限らずありとあらゆるボードゲームで使えるワザなので、ぜひ使いこなせるようにしましょう。普通盤面の大きさは 4 × 4 ですが、あとでサイズを自由に拡張できるように柔軟に設計しておくのがミソですね。

UNAVAILABLE

サイズを拡張...?

こういうゲームもできるようにするということです。

UNAVAILABLE
from https://glebbahmutov.com/2048/
UNAVAILABLE

5 × 5 になったのか

そうですね。こんな具合にサイズを拡張できると、一つのコードで面白さも倍増します。

~~~~~~~~~~~~~~~

ということで盤面は

board = [row][col]

という形にします。ここで row は横長の行(row)、col は縦長の列(column)を表します。

rowcolumn の順番に深い意味はありませんが、強いて言えば 3-4 なんかで便利になりますかね。

UNAVAILABLE

なんだよそのパッとしない理由、シャンとせいシャンと

一度決めた rowcolumn の順番は首尾一貫してください。

~~~~~~~~~~~~~~~

盤面の上に乗る数字はそのまま board[row][col] の値にしてしまいましょう。

UNAVAILABLE

数字ないとこはどうすんのさ
なんも書いてねーよ

そうですね。数字のないところの処理をどうにかしないといけません。

UNAVAILABLE
from https://play2048.co

数字ないところは 0 でいいんじゃないですか?「数字がない」ってのがわかればいいんですが、盤上で 0 なんて数字が出るわけないし、なんてったって他の数字と計算できる。

UNAVAILABLE

他の数字じゃダメなん?

できれば 0 がいいですね。例えば「空いてる [row, col] のマスに 4 を入れる」って

board[row][col] += 4

とかけますが、これに対して「4 が入ってる [row, col] のマスに 4 を動かして 8 にする」っていうのも

board[row][col] += 4

と同じコードで書けるじゃないですか。コードを書く量が減るって考えたら、別に突っかかる理由もないと思うんですけどね。

NEXT 1-2 動きの機能を考える