*
* Filename: display.c
*
- * Description: Routines to handle the display
+ * Description: Routines to handle the display
*
* Version: 1.0
* Created: 15/03/2017 20:06:11
#include <ncurses.h>
+#include "display.h"
+
/* in all print routine, y and x are the coordinates of the first character of the shape
* which can be a space ' ' */
+/* FIXME: one can split this shape in building blocks and build it using them */
void print_board(int y, int x) {
+
mvprintw(y, x, " | |");
mvprintw(y+1, x, " | |");
mvprintw(y+2, x, "----+----+----");
mvprintw(y+7, x, " | |");
}
-/* there's only nine valid (y, x) 2-uplets for this two shapes
+/* there's only nine valid (y, x) 2-uplets for this two shapes
* that are : - base_y, base_x +1
* - base_y, base_x + 6
- * - base_y, base_x + 11
- * - base_y + 3, base_x + 1
- * - base_y + 6, base_x + 1
- * - base_y + 3, base_x + 6
- * - base_y + 3, base_x + 11
- * - base_y + 6, base_x + 6
- * - base_y + 6, base_x + 11
- * The added y value can be {0, 3, 6}
- * The added x value can be {1, 6, 11} */
-
-void print_x(int y, int x) {
+ * - base_y, base_x + 11
+ * - base_y + 3, base_x + 1
+ * - base_y + 6, base_x + 1
+ * - base_y + 3, base_x + 6
+ * - base_y + 3, base_x + 11
+ * - base_y + 6, base_x + 6
+ * - base_y + 6, base_x + 11
+ * The added (y, x) couple values can be {0, 3, 6}x{1, 6, 11}
+ */
+
+static void print_x(int y, int x) {
+
mvprintw(y, x, "\\/");
mvprintw(y+1, x,"/\\");
}
-void print_o(int y, int x) {
+static void print_o(int y, int x) {
+
mvprintw(y, x, "/\\");
mvprintw(y+1, x, "\\/");
}
+
+/* y: 1 -> +0 x: 1 -> +1
+ * 2 -> +3 2 -> +6
+ * 3 -> +6 3 -> +11 */
+static int remap_y(int y) {
+
+ if (y == 1) {
+ return 0;
+ } else if (y > 1 && y <= 3) {
+ return (remap_y(y - 1) + 3);
+ } else {
+ return -1;
+ }
+}
+
+static int remap_x(int x) {
+
+ if (x == 1) {
+ return 1;
+ } else if (x > 1 && x <= 3) {
+ return (remap_x(x - 1) + 5);
+ } else {
+ return -1;
+ }
+}
+
+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 && \
+ 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 {
+ print_x(base_y + remap_y((coordinates_array + i)->y), base_x + remap_x((coordinates_array + i)->x));
+ }
+ i++;
+ }
+}