TP 13 exo2: preliminary loop for a full tic-tac-toe game for 2 players
[TD_C.git] / TP_13 / exo2 / src / main.c
CommitLineData
7515f897
JB
1#include <stdlib.h>
2#include <stdio.h>
5df3071e 3#include <string.h>
7515f897
JB
4#include <ncurses.h>
5
6#include "display.h"
5df3071e 7#include "coordinates.h"
7515f897
JB
8
9int main() {
2737ed7c 10 int row, col, errno = 0, round = 0, player = 0, key_pressed;
5df3071e
JB
11 char* top_msg = "";
12 char* back_msg = "";
7515f897
JB
13
14 initscr();
5df3071e 15 getmaxyx(stdscr, row, col);
7515f897
JB
16 noecho();
17 curs_set(0);
18
5df3071e
JB
19 /* array of the active coordinates in the entered order */
20 coordinates_t coordinates_array[MAX_COORDINATES];
21 init_coordinates(coordinates_array);
2737ed7c 22 coordinates_t new_coordinates = {0, 0, 0};
5df3071e 23
7515f897 24 /* center base coordinates for the board */
5df3071e
JB
25 int base_y = row/2 - 4;
26 int base_x = col/2 - 7;
7515f897
JB
27
28 print_board(base_y, base_x);
5df3071e 29
2737ed7c
JB
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 }
7515f897 38
2737ed7c
JB
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);
7515f897 41
2737ed7c
JB
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);
7515f897
JB
93
94 endwin();
95
96 exit(EXIT_SUCCESS);
97}