//=========================================================================== // CHESS 2 //=========================================================================== // // Each piece is a bitmap image (.bmp 36 by 36 pixels) // The chessboard is a JPEG image (.jpg 368 by 368 pixels) // The top left square starts at pixel 40, 40 and ends at pixel 76, 76 // // Top and Left of each column and row: // 1 2 3 4 5 6 7 8 // 40 76 112 148 184 220 256 292 //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //=========================================================================== // PRECOMPILER DIRECTIVES //=========================================================================== #define ROOK 1 #define KNIGHT 2 #define BISHOP 3 #define QUEEN 4 #define KING 5 #define PAWN 6 #define WHITE 1 #define BLACK 2 #define HIDE 0 #define SHOW 1 //=========================================================================== // VARIABLE AND CLASS DECLARATIONS //=========================================================================== class clsBoard { // Internal Representation public: bool empty; int piece; void arrange (void) { // }; } board[8][8]; class clsPiece { // Internal Representation int color; int rank; int value; bool inPlay; } piece[32]; int id, btn; int row, col; // The Pixel coordinates of all the rows and columns (margins at the end) int rowColToPixel[10] = {40, 76, 112, 148, 184, 220, 256, 292, 0, 331}; //=========================================================================== // FUNCTIONS //=========================================================================== //-------------------------------------------------------- Hide or Show Piece // Makes each image Visible or not void hideShow (int piece, bool isVisible) { switch (piece) { // Black Pieces case(0): {Form1->bkRook1->Visible = isVisible; break;} case(1): {Form1->bkKnight1->Visible = isVisible; break;} case(2): {Form1->bkBishop1->Visible = isVisible; break;} case(3): {Form1->bkQueen->Visible = isVisible; break;} case(4): {Form1->bkKing->Visible = isVisible; break;} case(5): {Form1->bkBishop2->Visible = isVisible; break;} case(6): {Form1->bkKnight2->Visible = isVisible; break;} case(7): {Form1->bkRook2->Visible = isVisible; break;} case(8): {Form1->bkPawn1->Visible = isVisible; break;} case(9): {Form1->bkPawn2->Visible = isVisible; break;} case(10): {Form1->bkPawn3->Visible = isVisible; break;} case(11): {Form1->bkPawn4->Visible = isVisible; break;} case(12): {Form1->bkPawn5->Visible = isVisible; break;} case(13): {Form1->bkPawn6->Visible = isVisible; break;} case(14): {Form1->bkPawn7->Visible = isVisible; break;} case(15): {Form1->bkPawn8->Visible = isVisible; break;} // White Pieces case(16): {Form1->whPawn1->Visible = isVisible; break;} case(17): {Form1->whPawn2->Visible = isVisible; break;} case(18): {Form1->whPawn3->Visible = isVisible; break;} case(19): {Form1->whPawn4->Visible = isVisible; break;} case(20): {Form1->whPawn5->Visible = isVisible; break;} case(21): {Form1->whPawn6->Visible = isVisible; break;} case(22): {Form1->whPawn7->Visible = isVisible; break;} case(23): {Form1->whPawn8->Visible = isVisible; break;} case(24): {Form1->whRook1->Visible = isVisible; break;} case(25): {Form1->whKnight1->Visible = isVisible; break;} case(26): {Form1->whBishop1->Visible = isVisible; break;} case(27): {Form1->whQueen->Visible = isVisible; break;} case(28): {Form1->whKing->Visible = isVisible; break;} case(29): {Form1->whBishop2->Visible = isVisible; break;} case(30): {Form1->whKnight2->Visible = isVisible; break;} case(31): {Form1->whRook2->Visible = isVisible; break;} } } //---------------------------------------------------------------- Move Piece // Sets the Top and Left of each image void movePiece (int piece, int col, int row) { int left = rowColToPixel[col]; int top = rowColToPixel[row]; switch (piece) { // Black Pieces case(0):{Form1->bkRook1->Left=left;Form1->bkRook1->Top=top;break;} case(1):{Form1->bkKnight1->Left=left;Form1->bkKnight1->Top=top;break;} case(2):{Form1->bkBishop1->Left=left;Form1->bkBishop1->Top=top;break;} case(3):{Form1->bkQueen->Left=left;Form1->bkQueen->Top=top;break;} case(4):{Form1->bkKing->Left=left;Form1->bkKing->Top=top;break;} case(5):{Form1->bkBishop2->Left=left;Form1->bkBishop2->Top=top;break;} case(6):{Form1->bkKnight2->Left=left;Form1->bkKnight2->Top=top;break;} case(7):{Form1->bkRook2->Left=left;Form1->bkRook2->Top=top;break;} case(8):{Form1->bkPawn1->Left=left;Form1->bkPawn1->Top=top;break;} case(9):{Form1->bkPawn2->Left=left;Form1->bkPawn2->Top=top;break;} case(10):{Form1->bkPawn3->Left=left;Form1->bkPawn3->Top=top;break;} case(11):{Form1->bkPawn4->Left=left;Form1->bkPawn4->Top=top;break;} case(12):{Form1->bkPawn5->Left=left;Form1->bkPawn5->Top=top;break;} case(13):{Form1->bkPawn6->Left=left;Form1->bkPawn6->Top=top;break;} case(14):{Form1->bkPawn7->Left=left;Form1->bkPawn7->Top=top;break;} case(15):{Form1->bkPawn8->Left=left;Form1->bkPawn8->Top=top;break;} // White Pieces case(16):{Form1->whPawn1->Left=left;Form1->whPawn1->Top=top;break;} case(17):{Form1->whPawn2->Left=left;Form1->whPawn2->Top=top;break;} case(18):{Form1->whPawn3->Left=left;Form1->whPawn3->Top=top;break;} case(19):{Form1->whPawn4->Left=left;Form1->whPawn4->Top=top;break;} case(20):{Form1->whPawn5->Left=left;Form1->whPawn5->Top=top;break;} case(21):{Form1->whPawn6->Left=left;Form1->whPawn6->Top=top;break;} case(22):{Form1->whPawn7->Left=left;Form1->whPawn7->Top=top;break;} case(23):{Form1->whPawn8->Left=left;Form1->whPawn8->Top=top;break;} case(24):{Form1->whRook1->Left=left;Form1->whRook1->Top=top;break;} case(25):{Form1->whKnight1->Left=left;Form1->whKnight1->Top=top;break;} case(26):{Form1->whBishop1->Left=left;Form1->whBishop1->Top=top;break;} case(27):{Form1->whQueen->Left=left;Form1->whQueen->Top=top;break;} case(28):{Form1->whKing->Left=left;Form1->whKing->Top=top;break;} case(29):{Form1->whBishop2->Left=left;Form1->whBishop2->Top=top;break;} case(30):{Form1->whKnight2->Left=left;Form1->whKnight2->Top=top;break;} case(31):{Form1->whRook2->Left=left;Form1->whRook2->Top=top;break;} } } //---------------------------------------------------------- Setup Begin Game void setupBeginGame (void) { // INTERNAL REPRESENTATION // Set board to empty or not for (row = 0; row < 8; row++) { for (col = 0; col < 8; col++) { if (row > 1 && row < 6) board[row][col].empty = true; else board[row][col].empty = false; } } // INTERNAL REPRESENTATION // Set board.piece to their appropriate IDs for (col = 0; col < 8; col++) { board[0][col].piece = col + 0; board[1][col].piece = col + 8; board[6][col].piece = col + 16; board[7][col].piece = col + 24; } // GRAPHIC USER INTERFACE // Show All Pices for (int i = 0; i < 32; i++) hideShow(i, SHOW); // Move All Pieces to the Starting Position for (int i = 0; i < 32; i++) { if (i < 16) movePiece(i, i%8, i/8); else movePiece(i, i%8, i/8 + 4); } } //------------------------------------ Set Up King Rook vs. King Pawn Endgame void setupKRKPendGame (void) { for (int i = 0; i < 32; i++) hideShow(i, HIDE); hideShow(28, SHOW); // Show White King movePiece(28, 7, 0); // Move White King hideShow(31, SHOW); // Show White Rook movePiece(31, 6, 0); // Move White Rook hideShow(4, SHOW); // Show Black King movePiece(4, 3, 2); // Move Black King hideShow(8, SHOW); // Show Black Pawn movePiece(8, 2, 3); // Move Black Pawn } //----------------------------------------- Set Up King Rook vs. King Endgame void setupKRKendGame (void) { for (int i = 0; i < 32; i++) hideShow(i, HIDE); hideShow(28, SHOW); // Show White King movePiece(28, 4, 5); // Move White King hideShow(31, SHOW); // Show White Rook movePiece(31, 5, 6); // Move White Rook hideShow(4, SHOW); // Show Black King movePiece(4, 4, 3); // Move Black King } //=========================================================================== // EVENT HANDLERS //=========================================================================== //-------------------------------------------------------------- Set Up Board void __fastcall TForm1::ButtonSetUpBoardClick(TObject *Sender) { setupBeginGame(); } //------------------------------------------ King Rook vs. King Pawn End Game void __fastcall TForm1::ButtonKRKPClick(TObject *Sender) { setupKRKPendGame(); } //----------------------------------------------- King Rook vs. King End Game void __fastcall TForm1::ButtonKRKClick(TObject *Sender) { setupKRKendGame(); } //--------------------------------------------------------- Select the Piece // On MouseDown the identity (id) of the piece is remembered void __fastcall TForm1::bkRook1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 0;} void __fastcall TForm1::bkKnight1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 1;} void __fastcall TForm1::bkBishop1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 2;} void __fastcall TForm1::bkQueenMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 3;} void __fastcall TForm1::bkKingMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 4;} void __fastcall TForm1::bkBishop2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 5;} void __fastcall TForm1::bkKnight2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 6;} void __fastcall TForm1::bkRook2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 7;} void __fastcall TForm1::bkPawn1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 8;} void __fastcall TForm1::bkPawn2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 9;} void __fastcall TForm1::bkPawn3MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 10;} void __fastcall TForm1::bkPawn4MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 11;} void __fastcall TForm1::bkPawn5MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 12;} void __fastcall TForm1::bkPawn6MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 13;} void __fastcall TForm1::bkPawn7MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 14;} void __fastcall TForm1::bkPawn8MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 15;} void __fastcall TForm1::whPawn1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 16;} void __fastcall TForm1::whPawn2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 17;} void __fastcall TForm1::whPawn3MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 18;} void __fastcall TForm1::whPawn4MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 19;} void __fastcall TForm1::whPawn5MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 20;} void __fastcall TForm1::whPawn6MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 21;} void __fastcall TForm1::whPawn7MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 22;} void __fastcall TForm1::whPawn8MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 23;} void __fastcall TForm1::whRook1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 24;} void __fastcall TForm1::whKnight1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 25;} void __fastcall TForm1::whBishop1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 26;} void __fastcall TForm1::whQueenMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 27;} void __fastcall TForm1::whKingMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 28;} void __fastcall TForm1::whBishop2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 29;} void __fastcall TForm1::whKnight2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 30;} void __fastcall TForm1::whRook2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {id = 31;} //----------------------------------------------------------- Moves the Piece // Figures out the row and column from the coordinates in pixels. // Also allows pieces to be moved off the board. void __fastcall TForm1::ImageBoardMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (id != 99) { col = (X - 40) / 36; row = (Y - 40) / 36; if (X < 40) col = 8; if (X > 328) col = 9; if (Y < 40) row = 8; if (Y > 328) row = 9; movePiece(id, col, row); id = 99; } } //=========================================================================== // THAT'S ALL FOLKS //===========================================================================