summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRaúl Benencia <rul@kalgan.cc>2015-03-27 12:54:30 -0300
committerRaúl Benencia <rul@kalgan.cc>2015-03-27 12:54:30 -0300
commitecd86e1a263a543e395d9e145294103c0fbb7230 (patch)
tree6ba6874675232df33bf1e24286d171bcc94594fd /lib
parent06fa323c65999ce6859bec3e27fa40ca04c17aa5 (diff)
setup piecespieces
Diffstat (limited to 'lib')
-rw-r--r--lib/board.c42
-rw-r--r--lib/piece.c9
2 files changed, 47 insertions, 4 deletions
diff --git a/lib/board.c b/lib/board.c
index 3eb7603..6685b3b 100644
--- a/lib/board.c
+++ b/lib/board.c
@@ -2,9 +2,10 @@
#include <stdio.h>
#include "board.h"
+#include "piece.h"
Board _setup_colors(Board b) {
- int i, j;
+ short i, j;
for (i = 0; i < SIZE; i++)
for (j = 0; j < SIZE; j++)
@@ -23,26 +24,55 @@ Board _setup_colors(Board b) {
}
Board _pawns(Board b) {
+ short white_pawns_row = 1, black_pawns_row = 6, i;
+
+ for (i = 0; i < SIZE; i++)
+ b[white_pawns_row][i].piece = new_piece(WHITE, PAWN);
+
+ for (i = 0; i < SIZE; i++)
+ b[black_pawns_row][i].piece = new_piece(BLACK, PAWN);
+
return b;
}
Board _rocks(Board b) {
+ b[0][0].piece = new_piece(WHITE, ROCK);
+ b[0][7].piece = new_piece(WHITE, ROCK);
+ b[7][0].piece = new_piece(BLACK, ROCK);
+ b[7][7].piece = new_piece(BLACK, ROCK);
+
return b;
}
Board _knights(Board b) {
+ b[0][1].piece = new_piece(WHITE, KNIGHT);
+ b[0][6].piece = new_piece(WHITE, KNIGHT);
+ b[7][1].piece = new_piece(BLACK, KNIGHT);
+ b[7][6].piece = new_piece(BLACK, KNIGHT);
+
return b;
}
Board _bishops(Board b) {
+ b[0][2].piece = new_piece(WHITE, BISHOP);
+ b[0][5].piece = new_piece(WHITE, BISHOP);
+ b[7][2].piece = new_piece(BLACK, BISHOP);
+ b[7][5].piece = new_piece(BLACK, BISHOP);
+
return b;
}
Board _queens(Board b) {
+ b[0][4].piece = new_piece(WHITE, QUEEN);
+ b[7][4].piece = new_piece(BLACK, QUEEN);
+
return b;
}
Board _kings(Board b) {
+ b[0][3].piece = new_piece(WHITE, KING);
+ b[7][3].piece = new_piece(BLACK, KING);
+
return b;
}
@@ -68,11 +98,15 @@ Board board_init() {
return _initial_setup(b);
}
-int board_delete(Board* b) {
- int i;
+int board_delete(Board b) {
+ short i, j;
- for (i = 0; i < SIZE; i++)
+ for (i = 0; i < SIZE; i++) {
+ for (j = 0; j < SIZE; j++)
+ if (b[i][j].piece != NULL)
+ free(b[i][j].piece);
free(b[i]);
+ }
free(b);
diff --git a/lib/piece.c b/lib/piece.c
index bbe0bdc..091d0a5 100644
--- a/lib/piece.c
+++ b/lib/piece.c
@@ -1,4 +1,6 @@
#include <ctype.h>
+#include <stdlib.h>
+
#include "piece.h"
#ifdef UTF8
@@ -51,3 +53,10 @@ int piece_character(Piece p) {
}
#endif
+
+Piece* new_piece(Color c, PieceType t) {
+ Piece* p = malloc(sizeof(Piece));
+ p->color = c; p->type = t;
+
+ return p;
+}
nihil fit ex nihilo