Fix an off-by-one on the pawn 2D array indexes.
[Project_algorithmic_C.git] / lib / ui.c
index 2673dc96348204ad9931d8f8efac8f9e5750333e..c75e3b01ca69f981a1544455fc6aaf51494968b3 100644 (file)
--- a/lib/ui.c
+++ b/lib/ui.c
@@ -19,6 +19,8 @@
 #include <string.h>
 
 #include "ui.h"
+#include "othello.h"
+#include "debug.h"
 
 /* in all print routine, y and x are the coordinates of the first character of the shape
  * which can be a space ' ' */
@@ -94,27 +96,30 @@ static int remap_y(int y) {
    
     if (y == 1) {
         return 2;
-    } else if (y > 1 && y < board_size + 1) {
+    } else if (y > 1 && y <= board_size) {
         return (remap_y(y - 1) + 3);
+    } else {
+        return -1;
     }
-    return -1;
 }
 
 static int remap_x(int x) {
 
     if (x == 1) {
         return 3;
-    } else if (x > 1 && x < board_size + 1) {
+    } else if (x > 1 && x <= board_size) {
         return (remap_x(x - 1) + 5);
+    } else {
+        return -1;
     }
-    return -1;
 }
 
 void print_pawns(int base_y, int base_x, 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++) {
-            if (pawn_array[i][j] != empty) {
-                print_o(base_y + remap_y(i), base_x + remap_x(j), pawn_array[i][j]);
+
+    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)) {
+                print_o(base_y + remap_y(i), base_x + remap_x(j), get_box_value(i, j, pawn_array));
             }
         }
     }
@@ -138,12 +143,13 @@ int map_col_letter_to_int(char c) {
         return 7;
     } else if (c == 'h' || c == 'H') {
         return 8;
+    } else {
+        return -1;
     }
-    return -1;
 }
 
 int prompt_values(WINDOW* windows, int base_y, int base_x, const char* msg, int* y, char* x) {
     mvwprintw(windows, base_y, base_x, "%s\n", msg);
-    int retVal = mvwscanw(windows, base_y + 1, base_x, "%d%c", y, x);
+    int retVal = mvwscanw(windows, base_y + 1, base_x + strlen(msg)/2, "%d%c", y, x);
     return (retVal == 1) ? 0 : 1;
 }