7 #include "coordinates.h"
10 int row
, col
, errno
= 0, round
= 0, player
= 0, key_pressed
= 0;
11 bool winning_condition
= false;
12 bool loop_exit_condition
= false;
13 const int str_max_length
= 50;
14 /* FIXME: make a strings handling library */
15 char* top_msg
= malloc(str_max_length
* sizeof(char));
16 char* back_msg
= malloc(str_max_length
* sizeof(char));
17 char* exit_msg
= malloc(str_max_length
* sizeof(char));
20 getmaxyx(stdscr
, row
, col
);
24 /* array of the active coordinates in the entered order */
25 coordinates_t coordinates_array
[MAX_COORDINATES
] = {
36 coordinates_t new_coordinates
= {0, 0, 0};
38 /* center base coordinates for the board */
39 int base_y
= row
/2 - 4;
40 int base_x
= col
/2 - 7;
45 top_msg
= "Joueur 2 joue";
48 top_msg
= "Joueur 1 joue";
51 mvprintw(base_y
- 2, (base_x
+ 7 - strlen(top_msg
)/2), top_msg
);
53 print_board(base_y
, base_x
);
55 print_coordinates(coordinates_array
, base_y
, base_x
);
57 /* FIXME: group the winning case code blocks */
58 if (!winning_condition
) {
59 /* getch() is blocking */
60 key_pressed
= getch();
61 switch (key_pressed
) {
63 new_coordinates
= set_coordinates(1, 1, player
);
66 new_coordinates
= set_coordinates(1, 2, player
);
69 new_coordinates
= set_coordinates(1, 3, player
);
72 new_coordinates
= set_coordinates(2, 1, player
);
75 new_coordinates
= set_coordinates(2, 2, player
);
78 new_coordinates
= set_coordinates(2, 3, player
);
81 new_coordinates
= set_coordinates(3, 1, player
);
84 new_coordinates
= set_coordinates(3, 2, player
);
87 new_coordinates
= set_coordinates(3, 3, player
);
90 /* set invalid coordinates */
91 new_coordinates
= set_coordinates(0, 0, player
);
94 errno
= add_coordinates(new_coordinates
, coordinates_array
, round
);
95 winning_condition
= chk_win_conditions(coordinates_array
, round
);
102 if (winning_condition
) {
104 back_msg
= "Joueur 1 gagne !";
106 back_msg
= "Joueur 2 gagne !";
110 if (!winning_condition
) {
112 back_msg
= "Choisir une case vide";
113 } else if (errno
== 3) {
114 back_msg
= "Coordonnees invalides";
115 } else if (errno
== 1) {
116 back_msg
= "Tableau rempli sans gagnant: egalite";
117 } else if (errno
== 4) {
118 back_msg
= "Erreur inconnue";
119 } else if (errno
== 0) {
120 /* FIXME: properly zero the string to avoid the clear() */
126 mvprintw(base_y
+ 10, (base_x
+ 7 - strlen(back_msg
)/2), back_msg
);
128 if (winning_condition
|| errno
== 1) {
129 /* print the updated coordinates before exiting */
130 print_coordinates(coordinates_array
, base_y
, base_x
);
131 exit_msg
= "Pressez une touche pour sortir ou \'r\' pour rejouer";
132 mvprintw(base_y
+ 12, (base_x
+ 7 - strlen(exit_msg
)/2), exit_msg
);
133 loop_exit_condition
= true;
134 if (loop_exit_condition
) {
136 /* getch() is blocking */
138 if (key_exit
== 'r') {
142 zero_coordinates(coordinates_array
);
143 winning_condition
= false;
144 loop_exit_condition
= false;
152 } while (!loop_exit_condition
);