Created
May 29, 2013 11:20
-
-
Save db0company/5669582 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdlib.h> | |
#include <unistd.h> | |
enum casem | |
{ | |
EMPTY, | |
ROND, | |
CROIX | |
}; | |
void print_char(char c) | |
{ | |
write(STDOUT_FILENO, &c, sizeof(c)); | |
} | |
void print_string(char * str) | |
{ | |
int i; | |
i = 0; | |
while (str[i] != '\0') | |
{ | |
print_char(str[i]); | |
i++; | |
} | |
} | |
void print_alphabet(void) | |
{ | |
char letter; | |
letter = 'z'; | |
while (letter >= 'a') | |
{ | |
print_char(letter); | |
letter = letter - 1; | |
} | |
print_char('\n'); | |
} | |
void init_grille(enum casem * grille) | |
{ | |
int compteur; | |
compteur = 0; | |
while (compteur < 9) | |
{ | |
grille[compteur] = EMPTY; | |
compteur = compteur + 1; | |
} | |
} | |
void print_case(enum casem cas) | |
{ | |
if (cas == EMPTY) | |
print_char(' '); | |
else if (cas == ROND) | |
print_char('O'); | |
else | |
print_char('X'); | |
} | |
void show_grille(enum casem * grille) | |
{ | |
int compteur; | |
compteur = 0; | |
while (compteur < 9) | |
{ | |
print_case(grille[compteur]); | |
if (compteur == 2 || compteur == 5 || compteur == 8) | |
print_char('\n'); | |
else | |
print_char('|'); | |
compteur = compteur + 1; | |
} | |
} | |
void print_player(int player) | |
{ | |
print_string("Player "); | |
if (player == 1) | |
print_case(ROND); | |
if (player == 2) | |
print_case(CROIX); | |
} | |
int check_answer(char answer, enum casem * grille) | |
{ | |
if (answer >= '1' && answer <= '9' && grille[answer - '0' - 1] == EMPTY) | |
return (0); | |
return (1); | |
} | |
void update_grille(enum casem * grille, int player, char answer) | |
{ | |
if (player == 1) | |
grille[answer - '0' - 1] = ROND; | |
else | |
grille[answer - '0' - 1] = CROIX; | |
} | |
void next_move(int player, enum casem * grille) | |
{ | |
char answer[2]; | |
*answer = 0; | |
while (check_answer(*answer, grille) == 1) | |
{ | |
print_player(player); | |
print_string(" : Ou veux-tu mettre ton pion ? "); | |
read(STDIN_FILENO, answer, 2); | |
} | |
update_grille(grille, player, *answer); | |
} | |
int next_player(int player) | |
{ | |
if (player == 1) | |
return (2); | |
return (1); | |
} | |
void morpion(void) | |
{ | |
enum casem grille[9]; | |
int player; | |
init_grille(grille); | |
player = 1; | |
while (1) | |
{ | |
show_grille(grille); | |
next_move(player, grille); | |
player = next_player(player); | |
} | |
} | |
int main(void) | |
{ | |
morpion(); | |
return (EXIT_SUCCESS); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment