X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=TP_13%2Fexo2%2Fsrc%2Fmain.c;h=390bc40005122a294846808868852871354b1235;hb=04b0afb5d5c81f1d98e98b9a6e532b1d3c868cc4;hp=123ab0862a880c419bb078970e66929de82a1725;hpb=5df3071eec60ca43bc66e1266820de0572d4b629;p=TD_C.git diff --git a/TP_13/exo2/src/main.c b/TP_13/exo2/src/main.c index 123ab08..390bc40 100644 --- a/TP_13/exo2/src/main.c +++ b/TP_13/exo2/src/main.c @@ -7,9 +7,10 @@ #include "coordinates.h" int main() { - int row, col; - char* top_msg = ""; - char* back_msg = ""; + int row, col, errno = 0, round = 0, player = 0, key_pressed; + const int str_max_length = 255; + char* top_msg = malloc(str_max_length * sizeof(char)); + char* back_msg = malloc(str_max_length * sizeof(char)); initscr(); getmaxyx(stdscr, row, col); @@ -19,25 +20,90 @@ int main() { /* array of the active coordinates in the entered order */ coordinates_t coordinates_array[MAX_COORDINATES]; init_coordinates(coordinates_array); + coordinates_t new_coordinates = {0, 0, 0}; /* center base coordinates for the board */ int base_y = row/2 - 4; int base_x = col/2 - 7; - if (!top_msg) mvprintw(base_y - 2, (base_x + 7 - strlen(top_msg)/2), top_msg); print_board(base_y, base_x); - if (!back_msg) mvprintw(base_y + 10, (base_x + 7 - strlen(back_msg)/2), back_msg); - int errno = add_coordinates(set_coordinates(1, 3, 0), coordinates_array); - errno = add_coordinates(set_coordinates(1, 3, 0), coordinates_array); - errno = add_coordinates(set_coordinates(2, 3, 1), coordinates_array); - errno = add_coordinates(set_coordinates(1, 1, 0), coordinates_array); + do { + if (errno == 0) round++; - print_coordinates(coordinates_array, base_y, base_x); - - refresh(); + if (round % 2 == 0) { + player = 1; + top_msg = "Joueur 2 joue"; + } else { + player = 0; + top_msg = "Joueur 1 joue"; + } - while (getch() != 'q'); + mvprintw(base_y - 2, (base_x + 7 - strlen(top_msg)/2), top_msg); + + print_coordinates(coordinates_array, base_y, base_x); + + /* getch() is blocking */ + key_pressed = getch(); + switch (key_pressed) { + case 'a': + new_coordinates = set_coordinates(1, 1, player); + break; + case 'z': + new_coordinates = set_coordinates(1, 2, player); + break; + case 'e': + new_coordinates = set_coordinates(1, 3, player); + break; + case 'q': + new_coordinates = set_coordinates(2, 1, player); + break; + case 's': + new_coordinates = set_coordinates(2, 2, player); + break; + case 'd': + new_coordinates = set_coordinates(2, 3, player); + break; + case 'w': + new_coordinates = set_coordinates(3, 1, player); + break; + case 'x': + new_coordinates = set_coordinates(3, 2, player); + break; + case 'c': + new_coordinates = set_coordinates(3, 3, player); + break; + default: + /* set invalid coordinates */ + new_coordinates = set_coordinates(0, 0, player); + break; + } + + errno = add_coordinates(new_coordinates, coordinates_array, round); + + if (errno == 2) { + back_msg = "Choisir une case vide"; + } else if (errno == 3) { + back_msg = "Coordonnees invalides"; + } else if (errno == 1) { + back_msg = "Tableau rempli sans gagnant: egalite"; + } else if (errno == 4) { + back_msg = "Erreur inconnue"; + } else if (errno == 0) { + /* FIXME: properly zero the string */ + back_msg = ""; + } + + mvprintw(base_y + 10, (base_x + 7 - strlen(back_msg)/2), back_msg); + + refresh(); + + } while (errno != 1); + + if (!top_msg) + free(top_msg); + if (!back_msg) + free(back_msg); endwin();