TP13 exo2: Fix off-by-one in the pawns displaying loop
[TD_C.git] / TP_13 / exo2 / lib / display.c
index c04b51b1feb5e4ae0dfebbd2d258503e362d3891..c60268a5dd80b783ae0b04ebf2f5a0093ea47ced 100644 (file)
@@ -68,9 +68,11 @@ static int remap_y(int y) {
 
     if (y == 1) {
         return 0;
-    } else if (y == 2) {
-        return 3;
-    } else {
+    } else if (y > 1 && y <= 3) {
+        return (remap_y(y - 1) + 3);
+    }  else {
+        /* FIXME: return an error value like -1
+         * but for now there a bug somewhere */
         return 6;
     }
 }
@@ -79,9 +81,11 @@ static int remap_x(int x) {
 
     if (x == 1) {
         return 1;
-    } else if (x == 2) {
-        return 6;
+    } else if (x > 1 && x <= 3) {
+        return (remap_x(x - 1) + 5);
     } else {
+        /* FIXME: return an error value like -1
+         * but for now there a bug somewhere */
         return 11;
     }
 }
@@ -89,7 +93,7 @@ static int remap_x(int x) {
 void print_coordinates(coordinates_t coordinates_array[], int base_y, int base_x) {
     unsigned i = 0;
 
-    while ((coordinates_array + i)->y != 0 && (coordinates_array + i)->x != 0) {
+    while ((coordinates_array + i)->y != 0 && (coordinates_array + i)->x != 0 && i < MAX_COORDINATES) {
         if ((coordinates_array + i)->type == 0) {
             print_o(base_y + remap_y((coordinates_array + i)->y), base_x + remap_x((coordinates_array + i)->x));
         } else {