127
|
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 }
|