Last active
August 29, 2015 14:10
-
-
Save ljesparis/b44d4fa9be35dfd51b81 to your computer and use it in GitHub Desktop.
tic tac toe against a baby =P
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
/* | |
* leoxnidas ------------ Leonardo Esparis ---------- L'Esparis | |
*/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <ctype.h> | |
#include <string.h> | |
#include <time.h> | |
#include <unistd.h> | |
#define MAX 3 | |
int esdigito(char* numero); | |
int existe_esa_jugada(int posx,int posy); | |
int empate(); | |
int ganador(char XuO); | |
void pintar_TicTacToe(); | |
void player1(char X_u_O); | |
void player2(char X_u_O); | |
void jugada(int jugada); | |
static char X_u_O_[MAX*MAX] = {'1','2','3','4','5','6','7','8','9',0}; | |
static int pos_x_[MAX*MAX] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; | |
static int pos_y_[MAX*MAX] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; | |
int main(){ | |
char x[MAX],y[MAX],X_u_O_player1,X_u_O_player2; | |
while(1){ | |
printf("\nQue quiere ser X u O? \n"); | |
fflush(stdin);scanf("%c",&X_u_O_player1); | |
X_u_O_player1 = toupper(X_u_O_player1); | |
if(X_u_O_player1 == 'X'){ | |
X_u_O_player2 = 'O'; | |
system("clear"); | |
break; | |
} | |
else if(X_u_O_player1 == 'O'){ | |
X_u_O_player2 = 'X'; | |
system("clear"); | |
break; | |
} | |
system("clear"); | |
} | |
pintar_TicTacToe(); | |
if(X_u_O_player1 == 'X'){ | |
while(1){ | |
player1(X_u_O_player1); | |
if(ganador(X_u_O_player1)){ | |
fprintf(stdout,"\n\n%c es el ganador!!",X_u_O_player1); | |
break; | |
} | |
player2(X_u_O_player2); | |
if(ganador(X_u_O_player2)){ | |
fprintf(stdout,"\n\n%c es el ganador!!",X_u_O_player2); | |
break; | |
} | |
if(empate()){ | |
fprintf(stdout,"\nEMPATE "); | |
break; | |
} | |
} | |
} | |
else if (X_u_O_player1 == 'O'){ | |
while(1){ | |
player2(X_u_O_player2); | |
if(ganador(X_u_O_player2)){ | |
fprintf(stdout,"\n\n%c es el ganador!!",X_u_O_player2); | |
break; | |
} | |
player1(X_u_O_player1); | |
if(ganador(X_u_O_player1)){ | |
fprintf(stdout,"\n\n%c es el ganador!!",X_u_O_player1); | |
break; | |
} | |
if(empate()){ | |
fprintf(stdout,"\nEMPATE "); | |
break; | |
} | |
} | |
} | |
return 0; | |
} | |
int ganador(char XuO){ | |
char campo[MAX][MAX]; | |
int i; | |
for(i=0;i<MAX*MAX;i++) | |
campo[pos_x_[i]][pos_y_[i]] = X_u_O_[i]; | |
if(campo[0][0] == XuO && campo[0][1] == XuO && campo[0][2] == XuO || | |
campo[0][0] == XuO && campo[1][0] == XuO && campo[2][0] == XuO || | |
campo[0][0] == XuO && campo[1][1] == XuO && campo[2][2] == XuO || | |
campo[1][0] == XuO && campo[1][1] == XuO && campo[1][2] == XuO || | |
campo[2][0] == XuO && campo[2][1] == XuO && campo[2][2] == XuO || | |
campo[2][0] == XuO && campo[1][1] == XuO && campo[0][2] == XuO || | |
campo[0][1] == XuO && campo[1][1] == XuO && campo[2][1] == XuO || | |
campo[0][2] == XuO && campo[1][2] == XuO && campo[2][2] == XuO ) | |
return 1; | |
return 0; | |
} | |
int empate(){ | |
int i; | |
for(i=0;i<MAX*MAX;i++) | |
if(X_u_O_[i] == '1'+i) | |
return 0; | |
return 1; | |
} | |
int esdigito(char* numero){ | |
//esta funcion es para saber si el arreglo que se le | |
//pasa como parametro es un digito o numero, si lo es | |
//se transforma a entero y se devuelve ese numero | |
//si no, se devuelve 0 | |
int i, numero_int,longitud,cont=0; | |
longitud = strlen(numero); | |
for(i=0;i<longitud;i++) | |
if(isdigit(numero[i])) | |
cont++; | |
if(cont == longitud){ | |
numero_int = atoi(numero); | |
return numero_int; | |
} | |
else | |
return -1; | |
} | |
int existe_esa_jugada(int posx, int posy){ | |
int i; | |
for(i=0;i<MAX*MAX;i++) | |
if(posx == pos_x_[i] && posy == pos_y_[i]) | |
if(X_u_O_[i] == 'X' || X_u_O_[i] == 'O') | |
return 1; | |
return 0; | |
} | |
void pintar_TicTacToe(){ | |
//esta funcion dibuja el juego, si no se ha jugado... | |
//lo dibuja vacio, si ya se jugo un poco, dibujara | |
//el juego, pero con los lugares ya jugados | |
int i,j,cont=0; | |
char campo[MAX][MAX]; | |
//aqui lleno mi vector con guiones(-) | |
for(i=0;i<MAX;i++) | |
for(j=0;j<MAX;j++){ | |
cont++; | |
campo[i][j] = '0'+cont; | |
} | |
for(i=0;i<MAX*MAX;i++) | |
campo[pos_x_[i]][pos_y_[i]] = X_u_O_[i]; | |
//aqui imprimo mi campo donde jugare | |
for(i=0;i<MAX;i++){ | |
printf("\n"); | |
for(j=0;j<MAX;j++){ | |
printf(" %c ",campo[i][j]); | |
if(j<MAX-1) | |
printf("|"); | |
} | |
if(i<MAX-1) | |
printf("\n-----------\n"); | |
} | |
} | |
void player1(char X_u_O){ | |
char jugada[3]; | |
int i,jugada_int,salir=1; | |
while(salir){ | |
printf("\nDonde Jugaras %c:\n",X_u_O); | |
while(1){ | |
fprintf(stdout,">>> ");fflush(stdin);scanf("%s",&jugada); | |
jugada_int = esdigito(jugada); | |
if(jugada_int < 0 || jugada_int > 9) | |
fprintf(stdout,"WARNING\n"); | |
else | |
break; | |
} | |
switch(jugada_int){ | |
case 1: | |
if(existe_esa_jugada(0,0)) | |
fprintf(stdout,"ALGUIEN YA JUGO AHI!!"); | |
else{ | |
for(i=0;i<MAX*MAX;i++) | |
if(pos_x_[i] == -1 || pos_y_[i] == -1 && X_u_O_[i] == '1'+i){ | |
pos_x_[i] = 0; | |
pos_y_[i] = 0; | |
X_u_O_[i] = X_u_O; | |
salir = 0; | |
break; | |
} | |
} | |
break; | |
case 2: | |
if(existe_esa_jugada(0,1)) | |
fprintf(stdout,"ALGUIEN YA JUGO AHI!!"); | |
else{ | |
for(i=0;i<MAX*MAX;i++) | |
if(pos_x_[i] == -1 || pos_y_[i] == -1 && X_u_O_[i] == '1'+i){ | |
pos_x_[i] = 0; | |
pos_y_[i] = 1; | |
X_u_O_[i] = X_u_O; | |
salir = 0; | |
break; | |
} | |
} | |
break; | |
case 3: | |
if(existe_esa_jugada(0,2)) | |
fprintf(stdout,"ALGUIEN YA JUGO AHI!!"); | |
else{ | |
for(i=0;i<MAX*MAX;i++) | |
if(pos_x_[i] == -1 || pos_y_[i] == -1 && X_u_O_[i] == '1'+i){ | |
pos_x_[i] = 0; | |
pos_y_[i] = 2; | |
X_u_O_[i] = X_u_O; | |
salir = 0; | |
break; | |
} | |
} | |
break; | |
case 4: | |
if(existe_esa_jugada(1,0)) | |
fprintf(stdout,"ALGUIEN YA JUGO AHI!!"); | |
else{ | |
for(i=0;i<MAX*MAX;i++) | |
if(pos_x_[i] == -1 || pos_y_[i] == -1 && X_u_O_[i] == '1'+i){ | |
pos_x_[i] = 1; | |
pos_y_[i] = 0; | |
X_u_O_[i] = X_u_O; | |
salir = 0; | |
break; | |
} | |
} | |
break; | |
case 5: | |
if(existe_esa_jugada(1,1)) | |
fprintf(stdout,"ALGUIEN YA JUGO AHI!!"); | |
else{ | |
for(i=0;i<MAX*MAX;i++) | |
if(pos_x_[i] == -1 || pos_y_[i] == -1 && X_u_O_[i] == '1'+i){ | |
pos_x_[i] = 1; | |
pos_y_[i] = 1; | |
X_u_O_[i] = X_u_O; | |
salir = 0; | |
break; | |
} | |
} | |
break; | |
case 6: | |
if(existe_esa_jugada(1,2)) | |
fprintf(stdout,"ALGUIEN YA JUGO AHI!!"); | |
else{ | |
for(i=0;i<MAX*MAX;i++) | |
if(pos_x_[i] == -1 || pos_y_[i] == -1 && X_u_O_[i] == '1'+i){ | |
pos_x_[i] = 1; | |
pos_y_[i] = 2; | |
X_u_O_[i] = X_u_O; | |
salir = 0; | |
break; | |
} | |
} | |
break; | |
case 7: | |
if(existe_esa_jugada(2,0)) | |
fprintf(stdout,"ALGUIEN YA JUGO AHI!!"); | |
else{ | |
for(i=0;i<MAX*MAX;i++) | |
if(pos_x_[i] == -1 || pos_y_[i] == -1 && X_u_O_[i] == '1'+i){ | |
pos_x_[i] = 2; | |
pos_y_[i] = 0; | |
X_u_O_[i] = X_u_O; | |
salir = 0; | |
break; | |
} | |
} | |
break; | |
case 8: | |
if(existe_esa_jugada(2,1)) | |
fprintf(stdout,"ALGUIEN YA JUGO AHI!!"); | |
else{ | |
for(i=0;i<MAX*MAX;i++) | |
if(pos_x_[i] == -1 || pos_y_[i] == -1 && X_u_O_[i] == '1'+i){ | |
pos_x_[i] = 2; | |
pos_y_[i] = 1; | |
X_u_O_[i] = X_u_O; | |
salir = 0; | |
break; | |
} | |
} | |
break; | |
case 9: | |
if(existe_esa_jugada(2,2)) | |
fprintf(stdout,"ALGUIEN YA JUGO AHI!!"); | |
else{ | |
for(i=0;i<MAX*MAX;i++) | |
if(pos_x_[i] == -1 || pos_y_[i] == -1 && X_u_O_[i] == '1'+i){ | |
pos_x_[i] = 2; | |
pos_y_[i] = 2; | |
X_u_O_[i] = X_u_O; | |
salir = 0; | |
break; | |
} | |
} | |
break; | |
} | |
} | |
system("clear"); | |
pintar_TicTacToe(); | |
} | |
void player2(char X_u_O){ | |
int i,jugada_x,jugada_y,salir=1; | |
printf("\n\n",X_u_O); | |
srand(time(NULL)); | |
while(1){ | |
jugada_x = rand() % 3; | |
jugada_y = rand() % 3; | |
if(existe_esa_jugada(jugada_x,jugada_y)){ | |
if(empate()) | |
break; | |
continue; | |
} | |
else{ | |
for(i=0;i<MAX*MAX;i++) | |
if(pos_x_[i] == -1 || pos_y_[i] == -1 && X_u_O_[i] == '1'+i){ | |
pos_x_[i] = jugada_x; | |
pos_y_[i] = jugada_y; | |
X_u_O_[i] = X_u_O; | |
break; | |
} | |
sleep(1); | |
break; | |
} | |
} | |
system("clear"); | |
pintar_TicTacToe(); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment