Skip to content

Instantly share code, notes, and snippets.

@pauldwhitman
Last active October 13, 2015 03:57
Show Gist options
  • Save pauldwhitman/4135168 to your computer and use it in GitHub Desktop.
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.
#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