Be more explicit in Makefiles about external libraries linking
[TD_C.git] / TP_13 / exo2 / lib / display.c
CommitLineData
7515f897
JB
1/*
2 * =====================================================================================
3 *
4 * Filename: display.c
5 *
6 * Description: Routines to handle the display
7 *
8 * Version: 1.0
9 * Created: 15/03/2017 20:06:11
10 * Revision: none
11 * Compiler: gcc
12 *
13 * Author: Jerome Benoit (fraggle), jerome.benoit@piment-noir.org
14 * Organization: Piment Noir
15 *
16 * =====================================================================================
17 */
18
19#include <ncurses.h>
20
5df3071e
JB
21#include "display.h"
22
7515f897
JB
23/* in all print routine, y and x are the coordinates of the first character of the shape
24 * which can be a space ' ' */
25
8f8629b2 26/* FIXME: one can split this shape in building blocks and build it using them */
7515f897 27void print_board(int y, int x) {
811d4abe 28
7515f897
JB
29 mvprintw(y, x, " | |");
30 mvprintw(y+1, x, " | |");
31 mvprintw(y+2, x, "----+----+----");
32 mvprintw(y+3, x, " | |");
33 mvprintw(y+4, x, " | |");
34 mvprintw(y+5, x, "----+----+----");
35 mvprintw(y+6, x, " | |");
36 mvprintw(y+7, x, " | |");
37}
38
39/* there's only nine valid (y, x) 2-uplets for this two shapes
40 * that are : - base_y, base_x +1
41 * - base_y, base_x + 6
42 * - base_y, base_x + 11
43 * - base_y + 3, base_x + 1
44 * - base_y + 6, base_x + 1
45 * - base_y + 3, base_x + 6
46 * - base_y + 3, base_x + 11
47 * - base_y + 6, base_x + 6
48 * - base_y + 6, base_x + 11
5df3071e
JB
49 * The added (y, x) couple values can be {0, 3, 6}x{1, 6, 11}
50 */
7515f897 51
811d4abe
JB
52static void print_x(int y, int x) {
53
7515f897
JB
54 mvprintw(y, x, "\\/");
55 mvprintw(y+1, x,"/\\");
56}
57
811d4abe
JB
58static void print_o(int y, int x) {
59
7515f897
JB
60 mvprintw(y, x, "/\\");
61 mvprintw(y+1, x, "\\/");
62}
5df3071e
JB
63
64/* y: 1 -> +0 x: 1 -> +1
65 * 2 -> +3 2 -> +6
66 * 3 -> +6 3 -> +11 */
67static int remap_y(int y) {
811d4abe 68
5df3071e
JB
69 if (y == 1) {
70 return 0;
98edfbe1
JB
71 } else if (y > 1 && y <= 3) {
72 return (remap_y(y - 1) + 3);
73 } else {
74 /* FIXME: return an error value like -1
75 * but for now there a bug somewhere */
5df3071e
JB
76 return 6;
77 }
78}
79
80static int remap_x(int x) {
811d4abe 81
5df3071e
JB
82 if (x == 1) {
83 return 1;
98edfbe1
JB
84 } else if (x > 1 && x <= 3) {
85 return (remap_x(x - 1) + 5);
5df3071e 86 } else {
98edfbe1
JB
87 /* FIXME: return an error value like -1
88 * but for now there a bug somewhere */
5df3071e
JB
89 return 11;
90 }
91}
92
93void print_coordinates(coordinates_t coordinates_array[], int base_y, int base_x) {
94 unsigned i = 0;
811d4abe 95
5df3071e
JB
96 while ((coordinates_array + i)->y != 0 && (coordinates_array + i)->x != 0) {
97 if ((coordinates_array + i)->type == 0) {
98 print_o(base_y + remap_y((coordinates_array + i)->y), base_x + remap_x((coordinates_array + i)->x));
99 } else {
100 print_x(base_y + remap_y((coordinates_array + i)->y), base_x + remap_x((coordinates_array + i)->x));
101 }
102 i++;
103 }
104}