Stage 1 プログラムの機能を考える
1-2 駒の機能を考える
チェスに限らず、ボードゲームのルールを覚えるというのはほぼ「駒の動き方」を覚えるにほかならないでしょう。これをコンピューターにもさせなければいけません。
こちらに駒の動き方のメモくらいは置いておきますが、
チェスとかやったことねーわ
という方は必ず他所のしっかりした解説をご覧になってください。この解説は「入門は終わった」方々にむけたものですから。
~~~~~~~~~~~~~~~
チェスの棋譜において、駒の動きというのは「この方向に何マス進めますよ」という表し方になります。ですから、チェスの駒は行先と今いる位置の座標がわかれば、正しい動きをしているかがわかります。何列ぶんヨコにズレたかとか、上から下に何行ぶん下がったかとか、そうして正しい動きをしているか判定するわけです。
ポーンが左に1マス動いた!!おかしい!!
ということで、
正しい動きをしているか判定する機能
によって駒の動きをコンピューターに覚えさせましょう。
いや、判定だけしたって動かせねーじゃん
まあその通りですよ。だから動かす機能も付けます。ただ判定できれば board の値をちょこっといじるだけで簡単に動かせます。
その話の前に、考えなければいけないことがあります。チェスには 6 種類の駒が白黒両陣営に 16 個ずつありますね。これをどうやって表しましょうか。
どうしましょうかねえ
1-1 で board っていう名前で 2 重リスト考えたでしょ。あれに値突っ込んでおきゃいいんじゃないですか。例えば WHITE を 1, ROOK を 2 にして
board[a - 1][6 - 1] = WHITE * ROOK
って表すとか。BLACK = -1 ってやれば board の値の正負で駒がどっちのものかわかりますし。ということで
board[file][rank] = PLAYER * PIECE
という構造を使っていきます。
プラスとマイナスで白黒わかるし、外せば何の駒かわかるってわけか
プレーヤーが駒を動かす指示を出すのは、1-1 で言った「棋譜」の書き方でいいと思います。やたらめったら変な書き方じゃ汎用性低いですし、何より数々の名試合の記録をコピペで再現することもできるようになりますからね。
プロの試合を再現できるのはええな
これでチェスのゲームをやるのに最低限必要な機能は揃いました。あとは「これがあるとゲームっぽい」という補助的な機能を加えていきます。