comparison 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
comparison
equal deleted inserted replaced
126:89016abde9fe 127:1da160a2c373
1 import std.stdio;
2 import std.traits;
3
4 enum Piece {
5 King, Queen, Rook, Bishop, Knight, Pawn
6 }
7
8 enum Color {
9 White, Black
10 }
11
12 string unicode(Color color, Piece piece) {
13 string[6][2] table =
14 [
15 [ "\u2654", "\u2655", "\u2656", "\u2657", "\u2658", "\u2659" ],
16 [ "\u265A", "\u265B", "\u265C", "\u265D", "\u265E", "\u265F" ]
17 ];
18 return table[color][piece];
19 }
20
21 struct Square {
22 this(Color color_, Piece piece_) {
23 occupied = true;
24 color = color_;
25 piece = piece_;
26 }
27
28 bool occupied = false;
29 Color color;
30 Piece piece;
31 }
32
33 enum File {
34 _A, _B, _C, _D, _E, _F, _G, _H
35 }
36
37 enum Rank {
38 _1, _2, _3, _4, _5, _6, _7, _8
39 }
40
41 struct Board {
42 Square opCall(File f, Rank r) const {
43 return squares[f][r];
44 }
45
46 private:
47 Square[8][8] squares =
48 [
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) ],
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) ],
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) ],
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) ],
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) ],
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) ],
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) ],
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) ]
57 /*
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) ],
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) ],
60 [ Square(), Square(), Square(), Square(), Square(), Square(), Square(), Square() ],
61 [ Square(), Square(), Square(), Square(), Square(), Square(), Square(), Square() ],
62 [ Square(), Square(), Square(), Square(), Square(), Square(), Square(), Square() ],
63 [ Square(), Square(), Square(), Square(), Square(), Square(), Square(), Square() ],
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) ],
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) ],
66 */
67 ];
68 }
69
70 Square[2][1] s = [ [ Square(), Square() ] ];
71
72 void write(in Board board) {
73 foreach_reverse (r; EnumMembers!Rank) {
74 writef("%s ", r);
75 foreach(f; EnumMembers!File) {
76 Square square = board(f, r);
77 if (square.occupied) {
78 writef("%s", unicode(square.color, square.piece));
79 }
80 else {
81 writef(" ");
82 }
83 }
84 writeln("");
85 }
86
87 foreach(f; EnumMembers!File) {
88 writef("%s", f);
89 }
90 writeln("");
91 }
92
93 void main(string[] args) {
94 Board board;
95 write(board);
96 }