TP 13 exo2: preliminary loop for a full tic-tac-toe game for 2 players
[TD_C.git] / TP_13 / exo2 / src / main.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <ncurses.h>
5
6 #include "display.h"
7 #include "coordinates.h"
8
9 int main() {
10 int row, col, errno = 0, round = 0, player = 0, key_pressed;
11 char* top_msg = "";
12 char* back_msg = "";
13
14 initscr();
15 getmaxyx(stdscr, row, col);
16 noecho();
17 curs_set(0);
18
19 /* array of the active coordinates in the entered order */
20 coordinates_t coordinates_array[MAX_COORDINATES];
21 init_coordinates(coordinates_array);
22 coordinates_t new_coordinates = {0, 0, 0};
23
24 /* center base coordinates for the board */
25 int base_y = row/2 - 4;
26 int base_x = col/2 - 7;
27
28 print_board(base_y, base_x);
29
30 do {
31 if (round % 2 == 0 || round == 0) {
32 player = 0;
33 top_msg = "Joueur 1 joue";
34 } else {
35 player = 1;
36 top_msg = "Joueur 2 joue";
37 }
38
39 mvprintw(base_y - 2, (base_x + 7 - strlen(top_msg)/2), top_msg);
40 mvprintw(base_y + 10, (base_x + 7 - strlen(back_msg)/2), back_msg);
41
42 print_coordinates(coordinates_array, base_y, base_x);
43
44 key_pressed = getch();
45 switch (key_pressed) {
46 case 'a':
47 new_coordinates = set_coordinates(1, 1, player);
48 break;
49 case 'z':
50 new_coordinates = set_coordinates(1, 2, player);
51 break;
52 case 'e':
53 new_coordinates = set_coordinates(1, 3, player);
54 break;
55 case 'q':
56 new_coordinates = set_coordinates(2, 1, player);
57 break;
58 case 's':
59 new_coordinates = set_coordinates(2, 2, player);
60 break;
61 case 'd':
62 new_coordinates = set_coordinates(2, 3, player);
63 break;
64 case 'w':
65 new_coordinates = set_coordinates(3, 1, player);
66 break;
67 case 'x':
68 new_coordinates = set_coordinates(3, 2, player);
69 break;
70 case 'c':
71 new_coordinates = set_coordinates(3, 3, player);
72 break;
73 default:
74 continue;
75 break;
76 }
77
78 errno = add_coordinates(new_coordinates, coordinates_array);
79
80 if (errno == 2) {
81 back_msg = "Choisir une case vide";
82 continue;
83 } else if (errno == 3) {
84 back_msg = "Coordonnees invalides";
85 continue;
86 } else if (errno == 0) {
87 back_msg = "";
88 }
89
90 round++;
91
92 } while (errno == 0 || errno == 2);
93
94 endwin();
95
96 exit(EXIT_SUCCESS);
97 }