J'essaye de faire un vérificateur de condition pour un jeu de Tic Tac Toe pour annoncer quand le joueur a gagné. J'ai créé la fonction ci-dessous. Cependant, quand je l'appelle et j'essaie d'appliquer les conditions gagnantes, rien ne se passe. Je sais que c'est une fonction fastidieuse, mais je suis confus sur la façon de le rendre efficace et efficient.Est-ce une fonction de vérification de condition gagnante de Tic Tac Toe valide?
Fonction:
int checker_o(char aray[3][3]){
if(aray[0][0]=='O'&& aray[0][1]=='O'|| aray[0][2]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 1;
}
if(aray[1][0]=='O'&& aray[1][1]=='O' && aray[1][2]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 1;
}
if(aray[2][0]=='O'&& aray[2][1]=='O'&& aray[2][2]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 1;
}
if(aray[0][0]=='O'&& aray[1][0]=='O' && aray[2][0]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 1;
}
if(aray[0][1]=='O'&& aray[1][1]=='O' && aray[2][1]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 1;
}
if(aray[0][2]=='O'&& aray[1][2]=='O' && aray[2][2]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 1;
}
if(aray[0][0]=='O'&& aray[1][1]=='O' && aray[2][2]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 1;
}
if(aray[0][2]=='O'&& aray[1][1]=='O' && aray[2][0]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 1;
}
}
CODE ENTIER:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void map(char a[3][3]){
int row, column;
for(row=0;row<3;row++){
for(column=0;column<3;column++){
printf ("%c ", a[row][column]);
}
printf("\n \n \n \n \n");
}
}
float getRand() {
return ((rand()/(RAND_MAX+1.0))*8)+1;
}
int control(int ui, int kb){
if (kb=='b'){
ui--;
}
if(kb=='c' && 0<ui &&ui<4){
ui+=5;
}
else{
if(kb=='c' && 3<ui &&ui<7){
ui--;
}
else{
if(kb=='c' && 6<ui &&ui<10){
ui-=7;
}
}
}
return ui;
}
int checker_o(char aray[3][3]){
if(aray[0][0]=='O'&& aray[0][1]=='O'&& aray[0][2]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 0;
}
if(aray[1][0]=='O'&& aray[1][1]=='O' && aray[1][2]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 0;
}
if(aray[2][0]=='O'&& aray[2][1]=='O'&& aray[2][2]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 0;
}
if(aray[0][0]=='O'&& aray[1][0]=='O' && aray[2][0]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 0;
}
if(aray[0][1]=='O'&& aray[1][1]=='O' && aray[2][1]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 0;
}
if(aray[0][2]=='O'&& aray[1][2]=='O' && aray[2][2]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 0;
}
if(aray[0][0]=='O'&& aray[1][1]=='O' && aray[2][2]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 0;
}
if(aray[0][2]=='O'&& aray[1][1]=='O' && aray[2][0]=='O'){
system("cls");
printf("Player 'O' Wins!");
getchar();
return 0;
}
}
int checker_x(char aray[3][3]){
if(aray[0][0]=='X'&& aray[0][1]=='X'&& aray[0][2]=='X'){
system("cls");
printf("Player 'X' Wins!");
getchar();
return 0;
}
if(aray[1][0]=='X'&& aray[1][1]=='X' && aray[1][2]=='X'){
system("cls");
printf("Player 'X' Wins!");
getchar();
return 0;
}
if(aray[2][0]=='X'&& aray[2][1]=='X'&& aray[2][2]=='X'){
system("cls");
printf("Player 'X' Wins!");
getchar();
return 0;
}
if(aray[0][0]=='X'&& aray[1][0]=='X' && aray[2][0]=='X'){
system("cls");
printf("Player 'X' Wins!");
getchar();
return 0;
}
if(aray[0][1]=='X'&& aray[1][1]=='X' && aray[2][1]=='X'){
system("cls");
printf("Player 'X' Wins!");
getchar();
return 0;
}
if(aray[0][2]=='X'&& aray[1][2]=='X' && aray[2][2]=='X'){
system("cls");
printf("Player 'X' Wins!");
getchar();
return 0;
}
if(aray[0][0]=='X'&& aray[1][1]=='X' && aray[2][2]=='X'){
system("cls");
printf("Player 'X' Wins!");
getchar();
return 0;
}
if(aray[0][2]=='X'&& aray[1][1]=='X' && aray[2][0]=='X'){
system("cls");
printf("Player 'X' Wins!");
getchar();
return 0;
}
}
int main(){
int r,c,ui,cntr,cntr2,ran,g,x;
char kb, aray[3][3]={{'.','.','.'},{'.','.','.'},{'.','.','.'}};
srand(time(NULL));
getRand();
map(aray);
printf("Which keyboard method would u prefer? \n \n \n");
printf("(a)\t \t (b)\t \t (c)\n \n easy \t \t mobile \t #Pad \n \n 0 1 2 \t \t 1 2 3 \t \t 7 8 9\n \n");
printf(" 3 4 5 \t \t 4 5 6 \t \t 4 5 6 \n \n 6 7 8 \t \t 7 8 9 \t \t 1 2 3 \n \n \n");
scanf("%c", &kb);
system("cls");
map(aray);
do{
printf("Your Move! \n \n");
scanf("%i", &ui);
ui=control(ui,kb);
r=ui/3;
c=ui%3;
if(aray[r][c]=='X'|| aray[r][c]=='O'){
printf("'X/O' Already exists there \n");
getchar();
getchar();
return 0;
}
else{
aray[r][c]='X';
system("cls");
map(aray);
checker_x(aray);
}
ran=getRand();
g=ran/3;
x=ran%3;
if(aray[g][x]=='.'){
aray[g][x]='O';
system("cls");
map(aray);
}else{
do{
ran=getRand();
g=ran/3;
x=ran%3;
}while (aray[g][x]!='.');
aray[g][x]='O';
system("cls");
map(aray);
checker_o(aray);
}
} while (checker_x(aray)!=1 || checker_o(aray)!=1);
getchar();
}
Peut aider à supprimer le même code dans chacun des blocs if en les déplaçant dans une fonction séparée pour le rendre plus propre et plus facile à lire. le modèle pour refactoriser devrait devenir plus facile de voir les conditions communes ... – t0mm13b
Vous pouvez également le faire dans trois boucles 'for' (vérifier les lignes, vérifier les cols, vérifier les diagonales) et comparer' array [i] [0] == array [i] [1] == array [i] [2] 'et ensuite juste' printf ("Player \ '% c \' Wins!", tableau [i] [0]) '... –