Pythonプログラミングで

チェスを作る

Stage 2 プログラムの土台を作る

2-2 定数を設定する

etLogger の直後にある ADDRESS 系は、今はコピペだけして無視してください。

                    
# record files
MAINRECADDRESS = 'mainrecord.txt'
SUBRECADDRESS = 'subrecord.txt'
                    
                

Stage 8 以降で扱います。気になるって?説明にはね、

順番ってもんがあるんですよ、旦那。

下に SIZE ってのがありますよね。

                    
# board size
SIZE = 8
                    
                

これは盤面の大きさを表しています。チェスの盤面は 8 × 8 マスなので「SIZE × SIZE のボードを使っていますよ」という意味。

UNAVAILABLE

別に 8 って書けばいいじゃねえか

コードが複雑になってきて「この 8 って何の 8 だっけ?」とならないように、あえて名前を付けてあげているんです。

                    
# for if switches
OVERSIZE = SIZE * SIZE
                    
                

OVERSIZE は Stage 5 以降で出てきますが、SIZE から圧倒的にはみ出る数を使うことで、意図的にバグ... じゃねえや「場合分け」をしやすくしています。

UNAVAILABLE

バグ作んのか。面白そうじゃねえか

まあ、お楽しみに。

                    
# for index
FILE = 0
RANK = 1
a, b, c, d, e, f, g, h = 1, 2, 3, 4, 5, 6, 7, 8
                    
                

FILE と RANK は board など座標を使ってあらわすもののインデックスに使います。file が縦長、rank が横長でしたね。

今回は board に限らず、いろんなところで盤面の座標を扱う機会があります。そのインデックスにやはり名前を付けてあげることで、コードがわかりやすく、そして読みやすくなります。a から h は棋譜の書き方にのっとった file の番号です。

UNAVAILABLE

んなもんあったか?

と感じた方は 1-1 へ。

下にはプレーヤーと駒の番号が続きます。board の値が PLAYER * PIECE ですから、これを踏まえた設定をしていきましょう。

                    
WHITE = 1
BLACK = -1

EMPTY = 0
P = PAWN = 1
R = ROOK = 2
N = KNIGHT = 3
B = BISHOP = 4
Q = QUEEN = 5
K = KING = 6
                    
                

WHITE と BLACK は 1 と -1 がいいんじゃないですか。-1 をかけるだけでプレーヤーを交代できるのが魅力。また board の値を絶対値 abs つまり PIECE で割れば、プレーヤーに応じて WHITE/BLACK が出てきます。

駒はぶっちゃけ数字がバラバラであればいいのですが、唯一 EMPTY 「駒なし」だけは 0 にしておく必要があります。何も置いてないマスは白黒どちら側のものでもありませんから、WHITE とも BLACK ともつかない数がいいです。

UNAVAILABLE

駒がないっていうのに文字を当てるのか

駒がある場合と一緒にして使いやすいですからね。board の絶対値 abs をとれば駒の番号になるという点でも、使い勝手がとてもいい。

NEXT 2-3 インデックスが適正か判定する機能を設定する