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
];
26 init_coordinates(coordinates_array
);
27 coordinates_t new_coordinates
= {0, 0, 0};
29 /* center base coordinates for the board */
30 int base_y
= row
/2 - 4;
31 int base_x
= col
/2 - 7;
36 top_msg
= "Joueur 2 joue";
39 top_msg
= "Joueur 1 joue";
42 mvprintw(base_y
- 2, (base_x
+ 7 - strlen(top_msg
)/2), top_msg
);
44 print_board(base_y
, base_x
);
46 print_coordinates(coordinates_array
, base_y
, base_x
);
48 /* FIXME: group the winning case code blocks */
49 if (!winning_condition
) {
50 /* getch() is blocking */
51 key_pressed
= getch();
52 switch (key_pressed
) {
54 new_coordinates
= set_coordinates(1, 1, player
);
57 new_coordinates
= set_coordinates(1, 2, player
);
60 new_coordinates
= set_coordinates(1, 3, player
);
63 new_coordinates
= set_coordinates(2, 1, player
);
66 new_coordinates
= set_coordinates(2, 2, player
);
69 new_coordinates
= set_coordinates(2, 3, player
);
72 new_coordinates
= set_coordinates(3, 1, player
);
75 new_coordinates
= set_coordinates(3, 2, player
);
78 new_coordinates
= set_coordinates(3, 3, player
);
81 /* set invalid coordinates */
82 new_coordinates
= set_coordinates(0, 0, player
);
85 errno
= add_coordinates(new_coordinates
, coordinates_array
, round
);
86 winning_condition
= chk_win_conditions(coordinates_array
, round
);
93 if (winning_condition
) {
95 back_msg
= "Joueur 1 gagne !";
97 back_msg
= "Joueur 2 gagne !";
101 if (!winning_condition
) {
103 back_msg
= "Choisir une case vide";
104 } else if (errno
== 3) {
105 back_msg
= "Coordonnees invalides";
106 } else if (errno
== 1) {
107 back_msg
= "Tableau rempli sans gagnant: egalite";
108 } else if (errno
== 4) {
109 back_msg
= "Erreur inconnue";
110 } else if (errno
== 0) {
111 /* FIXME: properly zero the string to avoid the clear() */
117 mvprintw(base_y
+ 10, (base_x
+ 7 - strlen(back_msg
)/2), back_msg
);
119 if (winning_condition
|| errno
== 1) {
120 /* print the updated coordinates before exiting */
121 print_coordinates(coordinates_array
, base_y
, base_x
);
122 exit_msg
= "Pressez une touche pour sortir ou \'r\' pour rejouer";
123 mvprintw(base_y
+ 12, (base_x
+ 7 - strlen(exit_msg
)/2), exit_msg
);
124 loop_exit_condition
= true;
125 if (loop_exit_condition
) {
127 /* getch() is blocking */
129 if (key_exit
== 'r') {
133 reinit_coordinates(coordinates_array
);
134 winning_condition
= false;
135 loop_exit_condition
= false;
143 } while (!loop_exit_condition
);