From 922eef24c4ee4116c51eaf175b55f71e94fce6c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Benencia?= Date: Sat, 28 Mar 2015 17:04:01 -0300 Subject: use coordinates --- lib/print.c | 67 ++++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 25 deletions(-) (limited to 'lib/print.c') diff --git a/lib/print.c b/lib/print.c index 249e486..9282581 100644 --- a/lib/print.c +++ b/lib/print.c @@ -2,8 +2,26 @@ #include #include "print.h" +#include "board.h" +#include "coordinate.h" #include "piece.h" +static void _print_row_separator() { + int j; + + for (j = 0; j < SIZE; j++) + printf("+---"); + + printf("+\n"); +} + +static Coord _next_coord(Coord c, Color side) { + if (side == WHITE) + return coord_next(c); + else + return coord_prev(c); +} + /* Printing related functions */ void print_piece(Piece p) { putchar(piece_character(p)); @@ -11,39 +29,38 @@ void print_piece(Piece p) { void print_square(Square s) { if (s.piece == NULL) - switch (s.color) { - case WHITE: + if (s.color == WHITE) putchar(' '); - break;; - case BLACK: + else putchar('/'); - break; - default: - perror("Wait... what?\n"); - exit(EXIT_FAILURE); - } else print_piece(*s.piece); } -void print_board(Board b) { - int i, j; +/* + * Pretty print the board. The "side" parameter lets you choose the + * orientation. Use WHITE for a white player perspective, BLACK otherwise. + */ +void print_board(Board b, Color side) { + Coord c = _next_coord(coord_null(), side); + char current_row = c.row; - for (i = 0; i < SIZE; i++) { - for (j = 0; j < SIZE; j++) - printf("+---"); - printf("+\n"); + _print_row_separator(); + while (!coord_is_null(c)) { + // Print the square + printf("| "); + print_square(board_get_square(b, c)); + putchar(' '); - for (j = 0; j < SIZE; j++) { - printf("| "); - print_square(b[i][j]); - putchar(' '); - } - printf("|\n"); - } + // Shall we move forward or backwards? + c = _next_coord(c, side); - for (j = 0; j < SIZE; j++) - printf("+---"); - printf("+\n"); + // If the row changed then we must start a new line + if (c.row != current_row) { + printf("|\n"); + _print_row_separator(); + current_row = c.row; + } + } } -- cgit v1.2.3