Mercurial > projects > doodle
view 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 |
line wrap: on
line source
import std.stdio; import std.traits; enum Piece { King, Queen, Rook, Bishop, Knight, Pawn } enum Color { White, Black } string unicode(Color color, Piece piece) { string[6][2] table = [ [ "\u2654", "\u2655", "\u2656", "\u2657", "\u2658", "\u2659" ], [ "\u265A", "\u265B", "\u265C", "\u265D", "\u265E", "\u265F" ] ]; return table[color][piece]; } struct Square { this(Color color_, Piece piece_) { occupied = true; color = color_; piece = piece_; } bool occupied = false; Color color; Piece piece; } enum File { _A, _B, _C, _D, _E, _F, _G, _H } enum Rank { _1, _2, _3, _4, _5, _6, _7, _8 } struct Board { Square opCall(File f, Rank r) const { return squares[f][r]; } private: Square[8][8] squares = [ [ Square(Color.White, Piece.Rook), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Rook) ], [ Square(Color.White, Piece.Knight), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Knight) ], [ Square(Color.White, Piece.Bishop), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Bishop) ], [ Square(Color.White, Piece.Queen), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Queen) ], [ Square(Color.White, Piece.King), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.King) ], [ Square(Color.White, Piece.Bishop), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Bishop) ], [ Square(Color.White, Piece.Knight), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Knight) ], [ Square(Color.White, Piece.Rook), Square(Color.White, Piece.Pawn), Square(), Square(), Square(), Square(), Square(Color.Black, Piece.Pawn), Square(Color.Black, Piece.Rook) ] /* [ 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) ], [ 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) ], [ Square(), Square(), Square(), Square(), Square(), Square(), Square(), Square() ], [ Square(), Square(), Square(), Square(), Square(), Square(), Square(), Square() ], [ Square(), Square(), Square(), Square(), Square(), Square(), Square(), Square() ], [ Square(), Square(), Square(), Square(), Square(), Square(), Square(), Square() ], [ 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) ], [ 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) ], */ ]; } Square[2][1] s = [ [ Square(), Square() ] ]; void write(in Board board) { foreach_reverse (r; EnumMembers!Rank) { writef("%s ", r); foreach(f; EnumMembers!File) { Square square = board(f, r); if (square.occupied) { writef("%s", unicode(square.color, square.piece)); } else { writef(" "); } } writeln(""); } foreach(f; EnumMembers!File) { writef("%s", f); } writeln(""); } void main(string[] args) { Board board; write(board); }