X-Git-Url: https://git.piment-noir.org/?p=Project_algorithmic_C.git;a=blobdiff_plain;f=lib%2Fothello.c;h=b57689483770d73f30c1203e40b77f79c8588eb9;hp=02eac9d82cad3c92011b35f03d4ca30e3e8262fc;hb=54f1c58cef6764fdd611eedc267e7491e777c09b;hpb=74e2b93b658575fa792ada51c3bf1cdc3cfde247 diff --git a/lib/othello.c b/lib/othello.c index 02eac9d..b576894 100644 --- a/lib/othello.c +++ b/lib/othello.c @@ -31,15 +31,16 @@ unsigned int current_player(unsigned int round_count) { } /* for consitency with ncurses, the board coordinates are in the following order: - * --x--> + * O-x--> * | * y * | - * v */ + * v + * The origin O has (1, 1) coordinates */ unsigned int get_box_value(int y, int x, unsigned int pawn_array[board_size][board_size]) { - return pawn_array[y][x]; + return pawn_array[y-1][x-1]; } bool is_box_type(int y, int x, unsigned int pawn_array[board_size][board_size], unsigned int type) { @@ -58,7 +59,7 @@ bool is_box_type(int y, int x, unsigned int pawn_array[board_size][board_size], int** set_pawn(int y, int x, unsigned int type, unsigned int pawn_array[board_size][board_size]) { if (is_box_type(y, x, pawn_array, empty)) { - pawn_array[y][x] = type; + pawn_array[y-1][x-1] = type; return pawn_array; } else { return NULL; @@ -66,8 +67,9 @@ int** set_pawn(int y, int x, unsigned int type, unsigned int pawn_array[board_si } static int** zero_pawns(unsigned int pawn_array[board_size][board_size]) { - for (unsigned int i = 0; i < board_size; i++) { - for (unsigned int j = 0; j < board_size; j++) { + + for (unsigned int i = 1; i <= board_size; i++) { + for (unsigned int j = 1; j <= board_size; j++) { pawn_array = set_pawn(i, j, empty, pawn_array); } } @@ -91,12 +93,48 @@ unsigned int count_pawn_type(unsigned int pawn_array[board_size][board_size], un if (type > 2) { return -1; } - for (unsigned int i = 0; i < board_size; i++) { - for (unsigned int j = 0; j < board_size; j++) { - if (pawn_array[i][j] == type) { + for (unsigned int i = 1; i <= board_size; i++) { + for (unsigned int j = 1; j <= board_size; j++) { + if (get_box_value(i, j, pawn_array) == type) { count++; } } } return count; } + +bool is_valid_input(int y, int x, unsigned int pawn_array[board_size][board_size]) { + + /* FIXME: separate the tests to permit to print explicit error messages */ + if ((y > 0 && y < board_size + 1) && \ + (x > 0 && x < board_size + 1) && \ + is_box_type(y, x, pawn_array, empty)) { + return true; + } else { + return false; + } +} + +bool is_board_full(unsigned int pawn_array[board_size][board_size]) { + + for (unsigned int i = 1; i <= board_size; i++) { + for (unsigned int j = 1; j <= board_size; j++) { + if (is_box_type(i, j, pawn_array , empty)) { + return false; + } + } + } + return true; +} + +void status_pawn(int y, int x, unsigned int pawn_array[board_size][board_size]) { + +} + +bool is_legal_box(int y, int x, int player, unsigned int pawn_array[board_size][board_size]) { + +} + +bool reverse_box(unsigned int pawn_array[board_size][board_size]) { + +}