I am attempting to write a simple chess program (starting with just pawns), and am currently at the stage of initialising the board.
The initial board is declared using an array of numbers, with '0' indicating a white piece, '1' indicating a black piece and '2' indicating an empty square.
I'm then trying to get the initial state of the board printed back to me, but currently all squares are indicated as white (0), so it appears the values are not being assigned in the array correctly.
The code I currently have is:
Main.c
/*
* main.c
* P Chess
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include "defs.h"
#include "boardrep.h"
void init_board()
{
int i;
for (i = 0; i < 64; ++i) {
colour[i] = init_colour[i];
}
}
void print_board()
{
int i;
printf("\n8 ");
for (i = 0; i < 64; ++i) {
switch (colour[i]) {
case EMPTY:
printf(" -");
break;
case BLACK:
printf(" b");
break;
case WHITE:
printf(" w");
break;
}
if ((i + 1) % 8 == 0 && i != 63)
printf("\n%d ", 7 - ROW(i));
}
printf("\n\n a b c d e f g h\n\n");
}
int main()
{
char s[256];
printf("\n");
printf("Pawn Chess - Board representation\n");
printf("version 0.01, 26/10/09\n");
printf("\n");
printf("\"d\" displays the current board state\n");
printf("\n");
return 0;
}
Boardrep.c
/*
* boardrep.c
* P Chess
*
*/
#include "defs.h"
/* the board representation */
int colour[64]; /* WHITE, BLACK, or EMPTY */
int mailbox[120] = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, -1,
-1, 8, 9, 10, 11, 12, 13, 14, 15, -1,
-1, 16, 17, 18, 19, 20, 21, 22, 23, -1,
-1, 24, 25, 26, 27, 28, 29, 30, 31, -1,
-1, 32, 33, 34, 35, 36, 37, 38, 39, -1,
-1, 40, 41, 42, 43, 44, 45, 46, 47, -1,
-1, 48, 49, 50, 51, 52, 53, 54, 55, -1,
-1, 56, 57, 58, 59, 60, 61, 62, 63, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1
};
int mailbox64[64] = {
21, 22, 23, 24, 25, 26, 27, 28,
31, 32, 33, 34, 35, 36, 37, 38,
41, 42, 43, 44, 45, 46, 47, 48,
51, 52, 53, 54, 55, 56, 57, 58,
61, 62, 63, 64, 65, 66, 67, 68,
71, 72, 73, 74, 75, 76, 77, 78,
81, 82, 83, 84, 85, 86, 87, 88,
91, 92, 93, 94, 95, 96, 97, 98
};
int init_colour[64] = {
1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
0, 0, 0, 0, 0, 0, 0, 0
};
boardrep.h
/*
* boardrep.h
* p chess
*/
extern int colour[64];
extern int piece[64];
extern int mailbox[120];
extern int mailbox64[64];
extern int init_colour[64];
defs.h
/*
* DEFS.H
* P Chess
*/
#define WHITE 0
#define BLACK 1
#define EMPTY 2
#define ROW(x) (x >> 3)
It currently just outputs a grid of W's.
Any help much appreciated. Ta. :)