#include #include #include #define CRUZ 'X' #define CARA 'O' #define VACIO ' ' #define TRES 3 #define ABC "ABC" void imprimirCabecera(); void imprimirTabla(char [][TRES]); char validarJugada(char [][TRES], char, int, char); int fila(char [][TRES]); int columna(char [][TRES]); int diagonalPrincipal(char [][TRES]); int diagonalSecundaria(char [][TRES]); char turnoVal(char); int main(void){ char matriz[TRES][TRES] = {{VACIO, VACIO, VACIO},{VACIO, VACIO, VACIO},{VACIO, VACIO, VACIO}}; char ganador = VACIO; imprimirCabecera(); imprimirTabla(matriz); ganador = validarJugada(matriz, CRUZ, 0, VACIO); if(ganador == VACIO){ printf("\nEMPATE\nFIN DEL JUEGO\n"); }else if(ganador == CRUZ){ printf("\nGANADOR %c: \nFIN DEL JUEGO\n", ganador); }else if(ganador == CARA){ printf("\nGANADOR %c: \nFIN DEL JUEGO\n", ganador); } return 0; } /*IMPRIME LA CABECERA*/ void imprimirCabecera(){ printf("\n Bienvenidos al TA-TE-TI de del BootCamp 008 de Roshka.\n"); } /*IMPRIME LA TABLA DE JUEGO*/ void imprimirTabla(char mat[][TRES]){ printf("\n\t 1 2 3\n"); for(int i = 0; i < TRES; i++){ printf("\n%c\t %c | %c | %c \n", ABC[i], mat[i][0], mat[i][1], mat[i][2]); if(i < 2) { printf("\t---|---|---"); } } printf("\n"); } /*VALIDACIÓN PARCIAL DE LAS JUGADAS*/ char validarJugada(char mat[][TRES], char turno, int contador, char ganador){ char jugada[2]; if((contador >= TRES*TRES) || (ganador != VACIO)){ return ganador; }else{ printf("%c -> Ingrese jugada: ", turno); scanf("%s", jugada); if( strcmp(jugada, "A1") == 0) if(mat[0][0] == VACIO){ mat[0][0] = turno; contador++; }else{ printf("\nERR: Jugada Inválida - Casilla Ocupada\n"); } else if( strcmp(jugada, "A2") == 0 ) if(mat[0][1] == VACIO){ mat[0][1] = turno; contador++; }else{ printf("ERR: Jugada Inválida - Casilla Ocupada"); } else if( strcmp(jugada, "A3") == 0 ) if(mat[0][2] == VACIO){ mat[0][2] = turno; contador++; }else{ printf("ERR: Jugada Inválida - Casilla Ocupada"); } else if( strcmp(jugada, "B1") == 0 ) if(mat[1][0] == VACIO){ mat[1][0] = turno; contador++; }else{ printf("ERR: Jugada Inválida - Casilla Ocupada"); } else if( strcmp(jugada, "B2") == 0 ) if(mat[1][1] == VACIO){ mat[1][1] = turno; contador++; }else{ printf("ERR: Jugada Inválida - Casilla Ocupada"); } else if( strcmp(jugada, "B3") == 0 ) if(mat[1][2] == VACIO){ mat[1][2] = turno; contador++; }else{ printf("ERR: Jugada Inválida - Casilla Ocupada"); } else if( strcmp(jugada, "C1") == 0 ) if(mat[2][0] == VACIO){ mat[2][0] = turno; contador++; }else{ printf("ERR: Jugada Inválida - Casilla Ocupada"); } else if( strcmp(jugada, "C2") == 0 ) if(mat[2][1] == VACIO){ mat[2][1] = turno; contador++; }else{ printf("ERR: Jugada Inválida - Casilla Ocupada"); } else if( strcmp(jugada, "C3") == 0 ) if(mat[2][2] == VACIO){ mat[2][2] = turno; contador++; }else{ printf("ERR: Jugada Inválida - Casilla Ocupada"); } imprimirTabla(mat); if(fila(mat)==0 || columna(mat)==0 || diagonalPrincipal(mat)==0 || diagonalSecundaria(mat)==0){ ganador = turno; } turno = turnoVal(turno); validarJugada(mat, turno, contador++, ganador); } } //Cambia turno de jugador char turnoVal(char t){ if(t == CRUZ){ return CARA; }else{ return CRUZ; } } int fila(char mat[][TRES]){ int contadorX = 0; int contadorO = 0; int bandera = 0; for(int fila = 0; fila < TRES; fila++){ for(int columna = 0; columna < TRES; columna++){ if( mat[fila][columna] == CRUZ ) { contadorX++; }else{ contadorX=0; } if( mat[fila][columna] == CARA ) { contadorO++; }else{ contadorO=0; } } } if((contadorX == TRES) || (contadorO == TRES)){ bandera = 1; } return bandera; } int columna(char mat[][TRES]){ int contadorX = 0; int contadorO = 0; int bandera = 0; for(int fila = 0; fila < TRES; fila++){ for(int columna = 0; columna < TRES; columna++){ if( mat[fila][columna] == CRUZ ) { contadorX++; }else{ contadorX=0; } if( mat[fila][columna] == CARA ) { contadorO++; }else{ contadorO=0; } } } if((contadorX == TRES) || (contadorO == TRES)){ bandera = 1; } return bandera; } int diagonalPrincipal(char mat[][TRES]){ int contadorX = 0; int contadorO = 0; int bandera = 0; for(int fila = 0; fila < TRES; fila++){ if( mat[fila][fila] == CRUZ ) { contadorX++; }else{ contadorX=0; } if( mat[fila][fila] == CARA ) { contadorO++; }else{ contadorO=0; } } if((contadorX == TRES) || (contadorO == TRES)){ bandera = 1; } return bandera; } int diagonalSecundaria(char mat[][TRES]){ int bandera = 0; int contadorX = 0; int contadorO = 0; int contador = 1; int columna = TRES - 1; for(int fila = 0; fila < TRES; fila++){ if( mat[fila][columna-fila] == CRUZ ) { contadorX++; }else{ contadorX=0; } if( mat[fila][fila] == CARA ) { contadorO++; }else{ contadorO=0; } } if((contadorX == TRES) || (contadorO == TRES)){ bandera = 1; } return bandera; }