Curso-lenguaje-C/curso-juantxi/Ejercicios/0702tresEnRaya (Sin corregir).c

246 lines
8.0 KiB
C

#include<stdio.h>
#include<stdlib.h>
/*
TRES EN RAYA
*/
#define TAM 3
int main(){
// Variables
int tablero[TAM][TAM]={0};
int i,j,final, fila, columna, tirada=0;
char estado[1]="-";
// Variables de comprobación
int ganador1=3;
int ganador2=15;
do{
//Muestra el estado del tablero
printf("\n |\t0\t1\t2\t<< Columna\n");
printf("_____|____________________________________\n");
printf(" |\n");
for(i=0; i<TAM; i++){
printf(" %d |\t",i);
for(j=0; j<TAM; j++){
if(tablero[i][j]==0){
fflush(stdin);
estado[0] = '-';
}else if(tablero[i][j]==1){
fflush(stdin);
estado[0] = 'X';
}else{
fflush(stdin);
estado[0] = 'O';
}
printf("%s\t", estado);
}
printf("\n");
}
printf(" |\n ^ |\nFila |\n\n");
// TURNO JUGADOR 1
printf("\n ---------------");
printf("\n Turno jugador 1");
printf("\n ---------------");
do{
printf("\n Elige una fila: ");
// Pedir Fila y control de nº fila correcto
do{
scanf("%d", &fila);
if(fila<0||fila>2){
printf("\nSolo hay filas del 0 al 2.");
printf("\nVuelve a intentarlo: ");
}
}while (fila<-1||fila>2);
printf(" Elige una columna: ");
// Pedir Columna y control de nº columna correcto
do{
scanf("%d", &columna);
if(columna<0||columna>2){
printf("\nSolo hay columnas del 0 al 3.");
printf("\nVuelve a intentarlo: ");
}
}while (columna<-1||columna>2);
// Control si la posición está ocupada (error) o es una posición correcta
if(tablero[fila][columna]!=0){
printf("\nCasilla ocupada.");
printf("\nVuelve a intentarlo:\n");
}else{
tablero[fila][columna]=1;
tirada=1;
}
}while(tirada!=1);
tirada=0;
//Comprobar si hay ganador o empate
if(ganador1==tablero[0][0]+tablero[0][1]+tablero[0][2]||
ganador1==tablero[1][0]+tablero[1][1]+tablero[1][2]||
ganador1==tablero[2][0]+tablero[2][1]+tablero[2][2]||
ganador1==tablero[0][0]+tablero[1][0]+tablero[2][0]||
ganador1==tablero[0][1]+tablero[1][1]+tablero[2][1]||
ganador1==tablero[0][2]+tablero[1][2]+tablero[2][2]||
ganador1==tablero[0][0]+tablero[1][1]+tablero[2][2]||
ganador1==tablero[0][2]+tablero[1][1]+tablero[2][0]){
printf("\n#########################");
printf("\n# GANADOR JUGADOR 1 #");
printf("\n#########################\n");
final=1;
}
if(ganador2==tablero[0][0]+tablero[0][1]+tablero[0][2]||
ganador2==tablero[1][0]+tablero[1][1]+tablero[1][2]||
ganador2==tablero[2][0]+tablero[2][1]+tablero[2][2]||
ganador2==tablero[0][0]+tablero[1][0]+tablero[2][0]||
ganador2==tablero[0][1]+tablero[1][1]+tablero[2][1]||
ganador2==tablero[0][2]+tablero[1][2]+tablero[2][2]||
ganador2==tablero[0][0]+tablero[1][1]+tablero[2][2]||
ganador2==tablero[0][2]+tablero[1][1]+tablero[2][0]){
printf("\n#########################");
printf("\n# GANADOR JUGADOR 2 #");
printf("\n#########################\n");
final=1;
}
if(tablero[0][0]!=0&&tablero[1][0]!=0&&tablero[2][0]!=0&&
tablero[0][1]!=0&&tablero[1][1]!=0&&tablero[2][1]!=0&&
tablero[0][2]!=0&&tablero[1][2]!=0&&tablero[2][2]!=0){
printf("\n##############");
printf("\n# EMPATE #");
printf("\n##############\n");
final=1;
}
//Muestra el estado del tablero
printf("\n |\t0\t1\t2\t<< Columna\n");
printf("_____|____________________________________\n");
printf(" |\n");
for(i=0; i<TAM; i++){
printf(" %d |\t",i);
for(j=0; j<TAM; j++){
if(tablero[i][j]==0){
fflush(stdin);
estado[0] = '-';
}else if(tablero[i][j]==1){
fflush(stdin);
estado[0] = 'X';
}else{
fflush(stdin);
estado[0] = 'O';
}
printf("%s\t", estado);
}
printf("\n");
}
printf(" |\n ^ |\nFila |\n\n");
// TURNO JUGADOR 2
printf("\n ---------------");
printf("\n Turno jugador 2");
printf("\n ---------------");
do{
printf("\n Elige una fila: ");
// Pedir Fila y control de nº fila correcto
do{
scanf("%d", &fila);
if(fila<0||fila>2){
printf("\nSolo hay filas del 0 al 2.");
printf("\nVuelve a intentarlo: ");
}
}while (fila<-1||fila>2);
printf(" Elige una columna: ");
// Pedir Columna y control de nº columna correcto
do{
scanf("%d", &columna);
if(columna<0||columna>2){
printf("\nSolo hay columnas del 0 al 3.");
printf("\nVuelve a intentarlo: ");
}
}while (columna<-1||columna>2);
// Control si la posición está ocupada (error) o es una posición correcta
if(tablero[fila][columna]!=0){
printf("\nCasilla ocupada.");
printf("\nVuelve a intentarlo:\n");
}else{
tablero[fila][columna]=5;
tirada=1;
}
}while(tirada!=1);
tirada=0;
//Comprobar si hay ganador o empate
if(ganador1==tablero[0][0]+tablero[0][1]+tablero[0][2]||
ganador1==tablero[1][0]+tablero[1][1]+tablero[1][2]||
ganador1==tablero[2][0]+tablero[2][1]+tablero[2][2]||
ganador1==tablero[0][0]+tablero[1][0]+tablero[2][0]||
ganador1==tablero[0][1]+tablero[1][1]+tablero[2][1]||
ganador1==tablero[0][2]+tablero[1][2]+tablero[2][2]||
ganador1==tablero[0][0]+tablero[1][1]+tablero[2][2]||
ganador1==tablero[0][2]+tablero[1][1]+tablero[2][0]){
printf("\n#########################");
printf("\n# GANADOR JUGADOR 1 #");
printf("\n#########################\n");
final=1;
}
if(ganador2==tablero[0][0]+tablero[0][1]+tablero[0][2]||
ganador2==tablero[1][0]+tablero[1][1]+tablero[1][2]||
ganador2==tablero[2][0]+tablero[2][1]+tablero[2][2]||
ganador2==tablero[0][0]+tablero[1][0]+tablero[2][0]||
ganador2==tablero[0][1]+tablero[1][1]+tablero[2][1]||
ganador2==tablero[0][2]+tablero[1][2]+tablero[2][2]||
ganador2==tablero[0][0]+tablero[1][1]+tablero[2][2]||
ganador2==tablero[0][2]+tablero[1][1]+tablero[2][0]){
printf("\n#########################");
printf("\n# GANADOR JUGADOR 2 #");
printf("\n#########################\n");
final=1;
}
if(tablero[0][0]!=0&&tablero[1][0]!=0&&tablero[2][0]!=0&&
tablero[0][1]!=0&&tablero[1][1]!=0&&tablero[2][1]!=0&&
tablero[0][2]!=0&&tablero[1][2]!=0&&tablero[2][2]!=0){
printf("\n##############");
printf("\n# EMPATE #");
printf("\n##############\n");
final=1;
}
}while(final!=1);
return 0;
}