Last active
October 13, 2015 03:57
-
-
Save pauldwhitman/4135168 to your computer and use it in GitHub Desktop.
Part of the "Chess in C" blog post series. The complete code for part 3.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#define EMPTY 0 | |
#define KING 1 | |
#define QUEEN 2 | |
#define ROOK 3 | |
#define KNIGHT 4 | |
#define BISHOP 5 | |
#define PAWN 6 | |
#define BREADCRUMB 9 | |
#define POTENTIAL_MOVE_KING 10 | |
#define POTENTIAL_MOVE_QUEEN 20 | |
#define POTENTIAL_MOVE_ROOK 30 | |
#define POTENTIAL_MOVE_KNIGHT 40 | |
#define POTENTIAL_MOVE_BISHOP 50 | |
#define POTENTIAL_MOVE_PAWN 60 | |
int main(void) { | |
int board[8][8]; | |
int i, j; | |
int boardValue; | |
/* Zero out the board */ | |
for (i = 0; i <= 7; i++) { | |
for (j = 0; j <= 7; j++) { | |
/* Zero out the square */ | |
board[i][j] = 0; | |
} | |
} | |
/* Iterate backward through board | |
* The only reason we're iterating backward through the board is to | |
* show how smart we are. You don't need to. */ | |
for (i = 7; i >= 0; i--) { | |
for (j = 7; j >= 0; j--) { | |
/* Zero out the square */ | |
board[i][j] = 0; | |
} | |
} | |
/* Set initial start positions */ | |
/*board[0][0] = ROOK; | |
board[0][1] = KNIGHT; | |
board[0][2] = BISHOP; | |
board[0][3] = QUEEN; | |
board[0][4] = KING; | |
board[0][5] = BISHOP; | |
board[0][6] = KNIGHT; | |
board[0][7] = ROOK; | |
board[1][0] = PAWN; | |
board[1][1] = ROOK; | |
board[1][2] = PAWN; | |
board[1][3] = PAWN; | |
board[1][4] = PAWN; | |
board[1][5] = PAWN; | |
board[1][6] = ROOK; | |
board[1][7] = PAWN;*/ | |
/* Calculate a rook move */ | |
/* Variables to store rook position of row 3 and column 4 */ | |
int pieceRow = 3; | |
int pieceColumn = 4; | |
board[pieceRow][pieceColumn] = ROOK; | |
/* For every row */ | |
for (i = 0;i <= 7; i++) { | |
/* And every column */ | |
for (j = 0;j <= 7; j++){ | |
/* ...if the row contains the rook, mark the cell | |
* as a possible destination | |
* (except if the cell contains the piece) */ | |
if (i == pieceRow && j != pieceColumn) { | |
board[i][j] = BREADCRUMB; | |
} | |
/* ...if the column contains the rook, mark the cell | |
* as a possible destination | |
* (except if the cell contains the piece) */ | |
if (i != pieceRow && j == pieceColumn) { | |
board[i][j] = BREADCRUMB; | |
} | |
} | |
} | |
/* Print the board */ | |
/* For every row */ | |
for (i = 0;i <= 7; i++) { | |
/* And every column */ | |
for (j = 0;j <= 7; j++){ | |
/* Get the board value */ | |
boardValue = board[i][j]; | |
/* And print the contents */ | |
switch (boardValue) { | |
case EMPTY: printf("."); | |
break; | |
case KING: printf("K"); | |
break; | |
case QUEEN: printf("Q"); | |
break; | |
case ROOK: printf("R"); | |
break; | |
case KNIGHT: printf("N"); | |
break; | |
case BISHOP: printf("B"); | |
break; | |
case PAWN: printf("P"); | |
break; | |
case POTENTIAL_MOVE_KING: printf("+"); | |
break; | |
case POTENTIAL_MOVE_QUEEN: printf("+"); | |
break; | |
case POTENTIAL_MOVE_ROOK: printf("+"); | |
break; | |
case POTENTIAL_MOVE_KNIGHT: printf("+"); | |
break; | |
case POTENTIAL_MOVE_BISHOP: printf("+"); | |
break; | |
case POTENTIAL_MOVE_PAWN: printf("+"); | |
break; | |
case BREADCRUMB: printf("+"); | |
break; | |
} | |
} | |
/* At the end of each row, make a new line */ | |
printf("\n"); | |
} | |
/* Exit the program */ | |
return EXIT_SUCCESS; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment