Skip to content

Instantly share code, notes, and snippets.

@ljesparis
Last active August 29, 2015 14:10
Show Gist options
  • Save ljesparis/b44d4fa9be35dfd51b81 to your computer and use it in GitHub Desktop.
Save ljesparis/b44d4fa9be35dfd51b81 to your computer and use it in GitHub Desktop.
tic tac toe against a baby =P
/*
* 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