Pythonプログラミングで

チェスを作る

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

1-2 駒の機能を考える

チェスに限らず、ボードゲームのルールを覚えるというのはほぼ「駒の動き方」を覚えるにほかならないでしょう。これをコンピューターにもさせなければいけません。

こちらに駒の動き方のメモくらいは置いておきますが、

UNAVAILABLE

チェスとかやったことねーわ

という方は必ず他所のしっかりした解説をご覧になってください。この解説は「入門は終わった」方々にむけたものですから。

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

チェスの棋譜において、駒の動きというのは「この方向に何マス進めますよ」という表し方になります。ですから、チェスの駒は行先と今いる位置の座標がわかれば、正しい動きをしているかがわかります。何列ぶんヨコにズレたかとか、上から下に何行ぶん下がったかとか、そうして正しい動きをしているか判定するわけです。

UNAVAILABLE
UNAVAILABLE

ポーンが左に1マス動いた!!おかしい!!

ということで、

正しい動きをしているか判定する機能

によって駒の動きをコンピューターに覚えさせましょう。

UNAVAILABLE

いや、判定だけしたって動かせねーじゃん

まあその通りですよ。だから動かす機能も付けます。ただ判定できれば board の値をちょこっといじるだけで簡単に動かせます。

その話の前に、考えなければいけないことがあります。チェスには 6 種類の駒が白黒両陣営に 16 個ずつありますね。これをどうやって表しましょうか。

UNAVAILABLE

どうしましょうかねえ

1-1 で board っていう名前で 2 重リスト考えたでしょ。あれに値突っ込んでおきゃいいんじゃないですか。例えば WHITE を 1, ROOK を 2 にして

board[a - 1][6 - 1] = WHITE * ROOK

って表すとか。BLACK = -1 ってやれば board の値の正負で駒がどっちのものかわかりますし。ということで

board[file][rank] = PLAYER * PIECE

という構造を使っていきます。

UNAVAILABLE

プラスとマイナスで白黒わかるし、外せば何の駒かわかるってわけか

プレーヤーが駒を動かす指示を出すのは、1-1 で言った「棋譜」の書き方でいいと思います。やたらめったら変な書き方じゃ汎用性低いですし、何より数々の名試合の記録をコピペで再現することもできるようになりますからね。

UNAVAILABLE

プロの試合を再現できるのはええな

これでチェスのゲームをやるのに最低限必要な機能は揃いました。あとは「これがあるとゲームっぽい」という補助的な機能を加えていきます。

NEXT 1-3 運営の機能を考える