annotate doodle/main/prog/chess.d @ 127:1da160a2c373

Chess checkpoint
author David Bryant <bagnose@gmail.com>
date Mon, 12 Dec 2011 18:03:07 +1030
parents
children bc4d29c7499c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
127
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
1 import std.stdio;
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
2 import std.traits;
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
3
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
4 enum Piece {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
5 King, Queen, Rook, Bishop, Knight, Pawn
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
6 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
7
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
8 enum Color {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
9 White, Black
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
10 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
11
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
12 string unicode(Color color, Piece piece) {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
13 string[6][2] table =
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
14 [
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
15 [ "\u2654", "\u2655", "\u2656", "\u2657", "\u2658", "\u2659" ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
16 [ "\u265A", "\u265B", "\u265C", "\u265D", "\u265E", "\u265F" ]
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
17 ];
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
18 return table[color][piece];
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
19 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
20
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
21 struct Square {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
22 this(Color color_, Piece piece_) {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
23 occupied = true;
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
24 color = color_;
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
25 piece = piece_;
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
26 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
27
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
28 bool occupied = false;
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
29 Color color;
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
30 Piece piece;
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
31 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
32
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
33 enum File {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
34 _A, _B, _C, _D, _E, _F, _G, _H
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
35 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
36
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
37 enum Rank {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
38 _1, _2, _3, _4, _5, _6, _7, _8
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
39 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
40
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
41 struct Board {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
42 Square opCall(File f, Rank r) const {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
43 return squares[f][r];
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
44 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
45
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
46 private:
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
47 Square[8][8] squares =
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
48 [
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
49 [ Square(Color.White, Piece.Rook), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Rook) ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
50 [ Square(Color.White, Piece.Knight), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Knight) ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
51 [ Square(Color.White, Piece.Bishop), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Bishop) ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
52 [ Square(Color.White, Piece.Queen), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Queen) ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
53 [ Square(Color.White, Piece.King), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.King) ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
54 [ Square(Color.White, Piece.Bishop), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Bishop) ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
55 [ Square(Color.White, Piece.Knight), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Knight) ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
56 [ Square(Color.White, Piece.Rook), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Rook) ]
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
57 /*
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
58 [ Square(Color.White, Piece.Rook), Square(Color.White, Piece.Knight), Square(Color.White, Piece.Bishop), Square(Color.White, Piece.King), Square(Color.White, Piece.Queen), Square(Color.White, Piece.Bishop), Square(Color.White, Piece.Knight), Square(Color.White, Piece.Rook) ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
59 [ Square(Color.White, Piece.Pawn), Square(Color.White, Piece.Pawn), Square(Color.White, Piece.Pawn), Square(Color.White, Piece.Pawn), Square(Color.White, Piece.Pawn), Square(Color.White, Piece.Pawn), Square(Color.White, Piece.Pawn), Square(Color.White, Piece.Pawn) ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
60 [ Square(), Square(), Square(), Square(), Square(), Square(), Square(), Square() ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
61 [ Square(), Square(), Square(), Square(), Square(), Square(), Square(), Square() ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
62 [ Square(), Square(), Square(), Square(), Square(), Square(), Square(), Square() ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
63 [ Square(), Square(), Square(), Square(), Square(), Square(), Square(), Square() ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
64 [ Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Pawn) ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
65 [ Square(Color.Black, Piece.Rook), Square(Color.Black, Piece.Knight), Square(Color.Black, Piece.Bishop), Square(Color.Black, Piece.King), Square(Color.Black, Piece.Queen), Square(Color.Black, Piece.Bishop), Square(Color.Black, Piece.Knight), Square(Color.Black, Piece.Rook) ],
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
66 */
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
67 ];
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
68 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
69
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
70 Square[2][1] s = [ [ Square(), Square() ] ];
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
71
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
72 void write(in Board board) {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
73 foreach_reverse (r; EnumMembers!Rank) {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
74 writef("%s ", r);
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
75 foreach(f; EnumMembers!File) {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
76 Square square = board(f, r);
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
77 if (square.occupied) {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
78 writef("%s", unicode(square.color, square.piece));
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
79 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
80 else {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
81 writef(" ");
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
82 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
83 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
84 writeln("");
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
85 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
86
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
87 foreach(f; EnumMembers!File) {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
88 writef("%s", f);
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
89 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
90 writeln("");
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
91 }
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
92
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
93 void main(string[] args) {
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
94 Board board;
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
95 write(board);
1da160a2c373 Chess checkpoint
David Bryant <bagnose@gmail.com>
parents:
diff changeset
96 }