COMO HACER UN TRIQUI
HOLA
NECESITO POR FAVOR QUE ME COLABOREN YA QUE NO HE PODIDO HACER UN TRIQUI EN LENGUAGE C. ES URGENTE GRACIAS!!!!
NECESITO POR FAVOR QUE ME COLABOREN YA QUE NO HE PODIDO HACER UN TRIQUI EN LENGUAGE C. ES URGENTE GRACIAS!!!!
HOLA!
DISCULPAME EL NO SER TAN PUNTUAL...
EL JUEGO TRIQUI ES PARA DOS PERSONAS, EL CUAL CONSTA DE UN TABLERO 3x3, DONDE DEBES UBICAR TRES FICHAS EN UNA MISMA FILA , COLUMNA O DIAGONALMENTE. SI ME HAGO ENTENDER?
GRACIAS POR RESPORDERME, IGUALMENTE TE AGRADEZCO SI ME PUEDES COLABORAR CON ESTO NO TENGO NI IDEA DE COMO HACERLO.
DISCULPAME EL NO SER TAN PUNTUAL...
EL JUEGO TRIQUI ES PARA DOS PERSONAS, EL CUAL CONSTA DE UN TABLERO 3x3, DONDE DEBES UBICAR TRES FICHAS EN UNA MISMA FILA , COLUMNA O DIAGONALMENTE. SI ME HAGO ENTENDER?
GRACIAS POR RESPORDERME, IGUALMENTE TE AGRADEZCO SI ME PUEDES COLABORAR CON ESTO NO TENGO NI IDEA DE COMO HACERLO.
Este juego tiene muchisimos nombres : ta te ti, tres en raya, tic tac toe, c drix mix, XO, etc, etc.
Te mando un programa que juega contra la computadora. Una vuelta exmpieza la computadora y la siguiente el ser humano, y asi sucesivamente.
La computadora juego tontamente, si la aplicacion de ningun algoritmo que la haga ganar.
Fijate que el programa esta escrito para borland c++
ver 3.1, supongo que correra tambien en Turbo C, pero no lo hara en versiones porteriores al 3.1 sin introducir modificaciones.
Si hay algo que este claro, no dudes en comunicarte.
Suerte ! ! !
// program XO.cpp
// tic tac toe game (ix igul)
// human player versus computer, 'x' for computer and 'o' for player.
// c++, BorlandC, ver 3.1 - january 2001.
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<dos.h>
const int IX = 1;
const int IGUL = 10;
const int xo = 30;
const int yo = 10;
void InitMatrix(int a[3][3])
{
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
a[i][j] = 0;
} // INIT MATRIX
void board(int turn)
{
int x = xo, y = yo;
clrscr();
gotoxy(33,7);
if(turn == IX)
cout << "X";
else
cout << "O";
cout << " starts game";
gotoxy(x,y++); cout << "ÉÍÍÍÍÍËÍÍÍÍÍËÍÍÍÍÍ»";
gotoxy(x,y++); cout << "º º º º";
gotoxy(x,y++); cout << "ÌÍÍÍÍÍÎÍÍÍÍÍÎÍÍÍÍ͹";
gotoxy(x,y++); cout << "º º º º";
gotoxy(x,y++); cout << "ÌÍÍÍÍÍÎÍÍÍÍÍÎÍÍÍÍ͹";
gotoxy(x,y++); cout << "º º º º";
gotoxy(x,y++); cout << "ÈÍÍÍÍÍÊÍÍÍÍÍÊÍÍÍÍͼ";
x = 10;
y += 20;
gotoxy(x,y++); cout << "[x] : computadora";
gotoxy(x,y++); cout << "[o] : cercanamente humano";
gotoxy(x,y++); cout << "[-] : apriete las teclas de numeros a la "
"derecha del teclado";
} // BOARD
void show(int i,int j,int turn)
{
gotoxy(xo+3+6*j,yo+1+2*i);
if(turn==IX)
cout<<"x";
else
cout<<"o";
} // SHOW
int GetChoice(int &i,int &j,int a[3][3])
{
int choice,sw;
for(int found = 0; !found;)
{
for(sw = 0; !sw;)
{
choice = getch();
if (choice == 27)
return choice;
switch(choice)
{
case 55:
case 71: i = 0;
j = 0;
sw++;
break; // [7]
case 56:
case 72: i = 0;
j = 1;
sw++;
break; // [8]
case 57:
case 73: i = 0;
j = 2;
sw++;
break; // [9]
case 52:
case 75: i = 1;
j = 0;
sw++;
break; // [4]
case 53:
case 76: i = 1;
j = 1;
sw++;
break; // [5]
case 54:
case 77: i = 1;
j = 2;
sw++;
break; // [6]
case 49:
case 79: i = 2;
j = 0;
sw++;
break; // [1]
case 50:
case 80: i = 2;
j = 1;
sw++;
break; // [2]
case 51:
case 81: i = 2;
j = 2;
sw++;
break; // [3]
} // SWITCH CHOICE
} // FOR !sw
if(!a[i][j])
found = 1;
} // FOR !FOUND
return choice;
} // GET CHOICE
int check(int turn,int a[3][3])
{
int suma,sumb,i,j;
for(i=0;i<3;i++) // checks rows and columns
{
suma = 0;
sumb = 0;
for(j=0;j<3;j++)
{
suma+=a[i][j];
sumb+=a[j][i];
}
if((suma==3*turn) || (sumb==3*turn))
return turn;
}
suma = sumb = 0;
for(i=0;i<3;i++) // checks diagonals
{
suma += a[i][i];
sumb += a[i][2-i];
}
if((suma==3*turn) || (sumb==3*turn))
return turn;
return 0;
} // CHECK
int GetWinMove(int a[3][3],int &newi,int &newj,int turn)
{
int i,j,sum,holder;
for(i=0; i<3; i++) // rows checker
{
sum = 0;
for(j=0; j<3; j++)
if(!a[i][j])
holder = j;
else
sum += a[i][j];
if(sum == 2*turn)
{
newj = holder;
newi = i;
return 1;
}
}
for(j=0; j<3; j++) // columns checker
{
sum = 0;
for(i=0; i<3; i++)
if(!a[i][j])
holder = i;
else
sum += a[i][j];
if(sum == 2*turn)
{
newi = holder;
newj = j;
return 1;
}
}
sum = 0;
for(i=0; i<3; i++) // principal diagonal checker
if(!a[i][i])
holder = i;
else
sum += a[i][j];
if(sum == 2*turn)
{
newi = newj = holder;
return 1;
}
sum = 0;
for(i=0; i<3; i++) // secondary diagonal checker
if(!a[i][2-i])
holder = i;
else
sum += a[i][2-i];
if(sum == 2*turn)
{
newi = holder;
newj = 2-holder;
return 1;
}
return 0;
} // GET WIN MOVE
int FirstEmptyMove(int a[3][3],int &i,int &j)
{
for(i=0; i<3; i++)
for(j=0; j<3; j++)
if(!a[i][j])
return 1;
return 0;
} // FIRST EMPTY MOVE
void Xmove(int a[3][3],int &i,int &j,int counter,int &corner)
{
static int second_ix;
if(GetWinMove(a,i,j,IX))
return;
if(GetWinMove(a,i,j,IGUL))
return;
switch(counter)
{
case 1 : i = j = 1;
break; // CASE 1
case 2 : if(!a[1][1])
i = j = 1;
else
{
i = j = 0;
corner = 1;
}
break; // CASE 2
case 3 : second_ix = i;
switch(corner)
{
case 1 : switch(3*i+j)
{
case 0 : i = 0;
j = 1;
break;
case 2 : i = 1;
j = 2;
break;
case 6 : i = 1;
j = 0;
break;
case 8 : i = 2;
j = 1;
break;
}
break;
case 0 : if(i+j == 1)
i = j = 0;
else
i = j = 2;
break;
} // SWITCH CORNER
break; // CASE 3
case 4 : if((corner == 1) && (!a[2][0]))
{
i = 2;
j = 0;
}
else
FirstEmptyMove(a,i,j);
break; // CASE 4
case 5 : switch(corner)
{
case 1 : switch(3*i+j)
{
case 1 :
case 7 : if(!a[i][j-1])
j--;
else
j++;
break;
case 3 :
case 5 : if(!a[i-1][j])
i--;
else
i++;
break;
}
break;
case 0 : if(second_ix == 1)
i = 2-i;
else
j = 2-j;
break;
} // SWITCH CORNER
break; // CASE 5
case 6 :
case 7 :
case 8 :
case 9 : FirstEmptyMove(a,i,j);
break; // CASE 6,7,8,9
} // SWITCH COUNTER
} // X MOVE
void Omove(int a[3][3],int &i,int &j,int &choice,int & corner)
{
choice = GetChoice(i,j,a);
if(corner == 99)
corner = !(i+j)%2;
} // O MOVE
void process(int turn)
{
int a[3][3];
int choice = 0,i,j,corner = 99,winner = 0,counter = 1;
for(;(choice !=27) && (!winner) && (counter < 10);)
{
InitMatrix(a);
board(turn);
for(;(counter < 10) && (!winner);)
{
switch(turn)
{
case IX : Xmove(a,i,j,counter,corner);
break;
case IGUL : Omove(a,i,j,choice,corner);
if(choice==27)
{
gotoxy(20,21);
cout << "exit by user";
return;
}
break;
} // SWITCH TURN
a[i][j] = turn;
show(i,j,turn);
winner = check(turn,a);
turn = IX+IGUL - turn;
counter++;
} // FOR COUNTER < 10 AND NOT WINNER
}
gotoxy(20,21);
switch(winner)
{
case 0 : cout << "no winner" << endl;
break;
case IX : cout << "the winner is X" << endl;
break;
case IGUL : cout << "the winner is O" << endl;
break;
} // SWITCH WINNER
} // PROCESS
void main()
{
int choice = 0;
for(int turn = IX; choice != 27;)
{
process(turn);
turn = IX+IGUL-turn;
gotoxy(20,23);
cout << "ESC for exit, press any key for continue " << endl;
choice = getch();
}
} // MAIN
//-------------------------- end of list -----------------------------
Te mando un programa que juega contra la computadora. Una vuelta exmpieza la computadora y la siguiente el ser humano, y asi sucesivamente.
La computadora juego tontamente, si la aplicacion de ningun algoritmo que la haga ganar.
Fijate que el programa esta escrito para borland c++
ver 3.1, supongo que correra tambien en Turbo C, pero no lo hara en versiones porteriores al 3.1 sin introducir modificaciones.
Si hay algo que este claro, no dudes en comunicarte.
Suerte ! ! !
// program XO.cpp
// tic tac toe game (ix igul)
// human player versus computer, 'x' for computer and 'o' for player.
// c++, BorlandC, ver 3.1 - january 2001.
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<dos.h>
const int IX = 1;
const int IGUL = 10;
const int xo = 30;
const int yo = 10;
void InitMatrix(int a[3][3])
{
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
a[i][j] = 0;
} // INIT MATRIX
void board(int turn)
{
int x = xo, y = yo;
clrscr();
gotoxy(33,7);
if(turn == IX)
cout << "X";
else
cout << "O";
cout << " starts game";
gotoxy(x,y++); cout << "ÉÍÍÍÍÍËÍÍÍÍÍËÍÍÍÍÍ»";
gotoxy(x,y++); cout << "º º º º";
gotoxy(x,y++); cout << "ÌÍÍÍÍÍÎÍÍÍÍÍÎÍÍÍÍ͹";
gotoxy(x,y++); cout << "º º º º";
gotoxy(x,y++); cout << "ÌÍÍÍÍÍÎÍÍÍÍÍÎÍÍÍÍ͹";
gotoxy(x,y++); cout << "º º º º";
gotoxy(x,y++); cout << "ÈÍÍÍÍÍÊÍÍÍÍÍÊÍÍÍÍͼ";
x = 10;
y += 20;
gotoxy(x,y++); cout << "[x] : computadora";
gotoxy(x,y++); cout << "[o] : cercanamente humano";
gotoxy(x,y++); cout << "[-] : apriete las teclas de numeros a la "
"derecha del teclado";
} // BOARD
void show(int i,int j,int turn)
{
gotoxy(xo+3+6*j,yo+1+2*i);
if(turn==IX)
cout<<"x";
else
cout<<"o";
} // SHOW
int GetChoice(int &i,int &j,int a[3][3])
{
int choice,sw;
for(int found = 0; !found;)
{
for(sw = 0; !sw;)
{
choice = getch();
if (choice == 27)
return choice;
switch(choice)
{
case 55:
case 71: i = 0;
j = 0;
sw++;
break; // [7]
case 56:
case 72: i = 0;
j = 1;
sw++;
break; // [8]
case 57:
case 73: i = 0;
j = 2;
sw++;
break; // [9]
case 52:
case 75: i = 1;
j = 0;
sw++;
break; // [4]
case 53:
case 76: i = 1;
j = 1;
sw++;
break; // [5]
case 54:
case 77: i = 1;
j = 2;
sw++;
break; // [6]
case 49:
case 79: i = 2;
j = 0;
sw++;
break; // [1]
case 50:
case 80: i = 2;
j = 1;
sw++;
break; // [2]
case 51:
case 81: i = 2;
j = 2;
sw++;
break; // [3]
} // SWITCH CHOICE
} // FOR !sw
if(!a[i][j])
found = 1;
} // FOR !FOUND
return choice;
} // GET CHOICE
int check(int turn,int a[3][3])
{
int suma,sumb,i,j;
for(i=0;i<3;i++) // checks rows and columns
{
suma = 0;
sumb = 0;
for(j=0;j<3;j++)
{
suma+=a[i][j];
sumb+=a[j][i];
}
if((suma==3*turn) || (sumb==3*turn))
return turn;
}
suma = sumb = 0;
for(i=0;i<3;i++) // checks diagonals
{
suma += a[i][i];
sumb += a[i][2-i];
}
if((suma==3*turn) || (sumb==3*turn))
return turn;
return 0;
} // CHECK
int GetWinMove(int a[3][3],int &newi,int &newj,int turn)
{
int i,j,sum,holder;
for(i=0; i<3; i++) // rows checker
{
sum = 0;
for(j=0; j<3; j++)
if(!a[i][j])
holder = j;
else
sum += a[i][j];
if(sum == 2*turn)
{
newj = holder;
newi = i;
return 1;
}
}
for(j=0; j<3; j++) // columns checker
{
sum = 0;
for(i=0; i<3; i++)
if(!a[i][j])
holder = i;
else
sum += a[i][j];
if(sum == 2*turn)
{
newi = holder;
newj = j;
return 1;
}
}
sum = 0;
for(i=0; i<3; i++) // principal diagonal checker
if(!a[i][i])
holder = i;
else
sum += a[i][j];
if(sum == 2*turn)
{
newi = newj = holder;
return 1;
}
sum = 0;
for(i=0; i<3; i++) // secondary diagonal checker
if(!a[i][2-i])
holder = i;
else
sum += a[i][2-i];
if(sum == 2*turn)
{
newi = holder;
newj = 2-holder;
return 1;
}
return 0;
} // GET WIN MOVE
int FirstEmptyMove(int a[3][3],int &i,int &j)
{
for(i=0; i<3; i++)
for(j=0; j<3; j++)
if(!a[i][j])
return 1;
return 0;
} // FIRST EMPTY MOVE
void Xmove(int a[3][3],int &i,int &j,int counter,int &corner)
{
static int second_ix;
if(GetWinMove(a,i,j,IX))
return;
if(GetWinMove(a,i,j,IGUL))
return;
switch(counter)
{
case 1 : i = j = 1;
break; // CASE 1
case 2 : if(!a[1][1])
i = j = 1;
else
{
i = j = 0;
corner = 1;
}
break; // CASE 2
case 3 : second_ix = i;
switch(corner)
{
case 1 : switch(3*i+j)
{
case 0 : i = 0;
j = 1;
break;
case 2 : i = 1;
j = 2;
break;
case 6 : i = 1;
j = 0;
break;
case 8 : i = 2;
j = 1;
break;
}
break;
case 0 : if(i+j == 1)
i = j = 0;
else
i = j = 2;
break;
} // SWITCH CORNER
break; // CASE 3
case 4 : if((corner == 1) && (!a[2][0]))
{
i = 2;
j = 0;
}
else
FirstEmptyMove(a,i,j);
break; // CASE 4
case 5 : switch(corner)
{
case 1 : switch(3*i+j)
{
case 1 :
case 7 : if(!a[i][j-1])
j--;
else
j++;
break;
case 3 :
case 5 : if(!a[i-1][j])
i--;
else
i++;
break;
}
break;
case 0 : if(second_ix == 1)
i = 2-i;
else
j = 2-j;
break;
} // SWITCH CORNER
break; // CASE 5
case 6 :
case 7 :
case 8 :
case 9 : FirstEmptyMove(a,i,j);
break; // CASE 6,7,8,9
} // SWITCH COUNTER
} // X MOVE
void Omove(int a[3][3],int &i,int &j,int &choice,int & corner)
{
choice = GetChoice(i,j,a);
if(corner == 99)
corner = !(i+j)%2;
} // O MOVE
void process(int turn)
{
int a[3][3];
int choice = 0,i,j,corner = 99,winner = 0,counter = 1;
for(;(choice !=27) && (!winner) && (counter < 10);)
{
InitMatrix(a);
board(turn);
for(;(counter < 10) && (!winner);)
{
switch(turn)
{
case IX : Xmove(a,i,j,counter,corner);
break;
case IGUL : Omove(a,i,j,choice,corner);
if(choice==27)
{
gotoxy(20,21);
cout << "exit by user";
return;
}
break;
} // SWITCH TURN
a[i][j] = turn;
show(i,j,turn);
winner = check(turn,a);
turn = IX+IGUL - turn;
counter++;
} // FOR COUNTER < 10 AND NOT WINNER
}
gotoxy(20,21);
switch(winner)
{
case 0 : cout << "no winner" << endl;
break;
case IX : cout << "the winner is X" << endl;
break;
case IGUL : cout << "the winner is O" << endl;
break;
} // SWITCH WINNER
} // PROCESS
void main()
{
int choice = 0;
for(int turn = IX; choice != 27;)
{
process(turn);
turn = IX+IGUL-turn;
gotoxy(20,23);
cout << "ESC for exit, press any key for continue " << endl;
choice = getch();
}
} // MAIN
//-------------------------- end of list -----------------------------
