Mercurial > projects > doodle
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 } |