necesito el codigo en c++ del gato
Porfavor si alguien me puede mandar el codigo en lenguaje c++ del juego del gato
me aburri de mandarlo por correo
#include <curses.h>
#define VERDADERO -2
#define FALSO -1
/* Cosas que puden estar en las casillas del tablero */
#define BOLA 1
#define TACHE 2
#define VACIO 0
/* Teclas */
#define ABAJO 258
#define ARRIBA 259
#define IZQUIERDA 260
#define DERECHA 261
#define ENTER 10
#define G 103
typedef int boolean;
void inicializar(int cuadricula[3][3]) {
int renglon, columna;
/* Limpiar pantalla */
clear();
/* Inicializar pantalla con funciones de ncurses */
initscr();
cbreak();
keypad(stdscr, TRUE);
noecho();
/* llenar matriz de espacios vacios */
for(renglon = 0; renglon < 3; renglon++)
for(columna = 0; columna < 3; columna++)
cuadricula[renglon][columna] = VACIO;
}
/* La funcion convertir coordenadas convierte las coordenadas de la pantalla a las de
la matriz, por ejemplo en la pantalla la casilla central esta en renglon 3 columna 3,
pero en la matriz la casilla central es 1, 1. */
void convertir_coordenadas(int *x, int *y) {
/* En la pantalla las casillas estan en las columnas 1, 3 y 5
y en la matriz en 0, 1 y 2 */
switch(*x) {
case(1) :
*x = 0;
break;
case(3) :
*x = 1;
break;
case(5) :
*x = 2;
}
/* En la pantalla las casillas estan en los renglones 1, 3 y 5
y en la matriz en 0, 1 y 2 */
switch(*y) {
case(1) :
*y = 0;
break;
case(3) :
*y = 1;
break;
case(5) :
*y = 2;
break;
}
}
/* Esta función determina si una casilla dada está ocupada*/
boolean esta_ocupado(int y, int x, int cuadricula[3][3]) {
convertir_coordenadas(&x, &y);
if(cuadricula[x][y] == VACIO)
/* Está vacÃa, por lo tanto es falso que está ocupada */
return FALSO;
else
/* Tiene algo adentro, por lo tanto es verdadero que está ocupada */
return VERDADERO;
}
void imp_marca(int marca, int y, int x, int cuadricula[3][3]) {
int tipo_marca;
/* Aqui tipo_marca se usa para la pantalla y marca para la matriz.
tipo_marca se convierte a O o X y marca se queda como un valor
numérico */
if(marca == TACHE) {
tipo_marca = 'X';
}
else
tipo_marca = 'O';
/* Poner la marca en la pantalla */
printw("%c", tipo_marca);
/* Poner la marca en la matriz */
convertir_coordenadas(&x, &y);
cuadricula[x][y] = marca;
}
int cambiar_marca(int marca) {
/* Si ya puso alguien una bola, la proxima sera tache y viceversa */
if(marca == TACHE)
return BOLA;
else
return TACHE;
}
void imp_rayas(void) {
printw(" ----- n");
printw("| | | |n");
printw(" ----- n");
printw("| | | |n");
printw(" ----- n");
printw("| | | |n");
printw(" ----- n");
}
boolean ganar(int marca, int cuadricula[3][3]) {
char tipo_marca;
/* Convertir marca a X ó O */
if(marca == BOLA)
tipo_marca = 'O';
else
tipo_marca = 'X';
/* Siempre que se comprueba que la primera casilla _NO_ esté vacÃa y luego que las
tres sean iguales, si no, puede darse el caso de que alguien gane porque las tres
estén vacÃas, ya que serÃan iguales (las tres = a 0)*/
/* --- Comprobar Filas ---*/
/* Fila 1 */
if(cuadricula[0][0] != VACIO &&
cuadricula[0][0] == cuadricula[1][0] &&
cuadricula[1][0] == cuadricula[2][0])
{
/* Dibujar lÃnea horizontal */
move(1, 1);
printw("-");
move(1, 3);
printw("-");
move(1, 5);
printw("-");
move(8, 0);
printw("¡¡¡ Ha ganado %c!!!", tipo_marca);
return VERDADERO;
}
/* Fila 2 */
if(cuadricula[0][1] != VACIO &&
cuadricula[0][1] == cuadricula[1][1] &&
cuadricula[0][1] == cuadricula[2][1])
{
/* Dibujar lÃnea horizontal */
move(3, 1);
printw("-");
move(3, 3);
printw("-");
move(3, 5);
printw("-");
move(8, 0);
printw("¡¡¡ Ha ganado %c!!!", tipo_marca);
return VERDADERO;
}
/* Fila 3 */
if(cuadricula[0][2] != VACIO &&
cuadricula[0][2] == cuadricula[1][2] &&
cuadricula[0][2] == cuadricula[2][2])
{
/* Dibujar lÃnea horizontal */
move(3, 1);
printw("-");
move(3, 3);
printw("-");
move(3, 5);
printw("-");
move(8, 0);
printw("¡¡¡ Ha ganado %c!!!", tipo_marca);
return VERDADERO;
}
/*--- Comprobar Columnas ---*/
/* Columna 1*/
if(cuadricula[0][0] != VACIO &&
cuadricula[0][0] == cuadricula[0][1] &&
cuadricula[0][0] == cuadricula[0][2])
{
/*Dibujar linea vertical*/
move(1, 1);
printw("|");
move(3, 1);
printw("|");
move(5, 1);
printw("|");
move(8, 0);
printw("¡¡¡ Ha ganado %c!!!", tipo_marca);
return VERDADERO;
}
/* Columna 2 */
if(cuadricula[1][0] != VACIO &&
cuadricula[1][0] == cuadricula[1][1] &&
cuadricula[1][0] == cuadricula[1][2])
{
/*Dibujar linea vertical*/
move(1, 3);
printw("|");
move(3, 3);
printw("|");
move(5, 3);
printw("|");
move(8, 0);
printw("¡¡¡ Ha ganado %c!!!", tipo_marca);
return VERDADERO;
}
/* Columna 3 */
if(cuadricula[2][0] != VACIO &&
cuadricula[2][0] == cuadricula[2][1] &&
cuadricula[2][0] == cuadricula[2][2])
{
/*Dibujar linea vertical*/
move(1, 5);
printw("|");
move(3, 5);
printw("|");
move(5, 5);
printw("|");
move(8, 0);
printw("¡¡¡ Ha ganado %c!!!", tipo_marca);
return VERDADERO;
}
/*--- Diagonales ---*/
/* Diagonal */
if(cuadricula[0][0] != VACIO &&
cuadricula[0][0] == cuadricula[1][1] &&
cuadricula[0][0] == cuadricula[2][2])
{
/*Dibujar , hay que colocar \ porque es para escape de caracteres*/
move(1, 1);
printw("\");
move(3, 3);
printw("\");
move(5, 5);
printw("\");
move(8, 0);
printw("¡¡¡ Ha ganado %c !!!", tipo_marca);
return VERDADERO;
}
/* Diagonal / */
if(cuadricula[2][0] != VACIO &&
cuadricula[2][0] == cuadricula[1][1] &&
cuadricula[2][0] == cuadricula[0][2])
{
/* Dibujar lÃnea / */
move(1, 5);
printw("/");
move(3, 3);
printw("/");
move(5, 1);
printw("/");
move(8, 0);
printw("¡¡¡ Ha ganado %c !!!", tipo_marca);
return VERDADERO;
}
/* Si no se dió ninguno de los casos de arriba regresa falso */
return FALSO;
}
int main(void) {
int tecla;
/* marca se refiere a una bola (0) o un tache (1) */
int marca_actual;
/* Variables para almacenar la posicion del cursor en la
pantalla, x es la columna y y el renglon */
int pos_x;
int pos_y;
/* Matriz de 3x3 (las 9 casillas del juego) para almacenar las bolas y los taches
en sus respectivas casillas según se vayan colocando en la pantalla por los
jugadores */
int cuadricula[3][3];
/* Número de casillas vacÃas, si nadie ha ganado y este número llega a 0, es empate.
disminuye cada vez que alguien coloca una marca */
int casillas_vacias;
boolean juego_terminado;
int renglon;
int columna;
/* Indica si hay que cambiar o no el mensaje "Juega Tal Persona"
que aparece en la parte inferior*/
boolean msj_juega_tal_actualizado;
do {
inicializar(cuadricula);
/* dibuja las rayas que delimitan las casillas en la pantalla*/
imp_rayas();
/* Inicializar algunas variables */
marca_actual = BOLA;
pos_x = 1;
pos_y = 1;
casillas_vacias = 9;
juego_terminado = FALSO;
msj_juega_tal_actualizado = FALSO;
/* Mover cursor a la posicion inicial */
move(pos_x, pos_y);
/* Ciclo que se dedica a leer las pulsaciones de las
teclas (entre otras cosas), esta es la parte
fundamental del programa */
while(juego_terminado == FALSO) {
/* Si el mensaje "Juega tal" está desactualizado
(esto sucede al principio del programa y después de que cada jugador coloca
su marca), hay que poner el nombre de la persona que está jugando este turno */
if(msj_juega_tal_actualizado == FALSO)
{
move(8, 0);
if(marca_actual == BOLA)
printw("Juega On");
else
printw("Juega Xn");
/* Ya cambió el mensaje, ahora ya está actualizado */
msj_juega_tal_actualizado = VERDADERO;
/* Regresar el cursor al lugar donde se puso la última marca, las
variables pos_x y pos_y no han cambiado desde entonces */
move(pos_y, pos_x);
}
tecla = getch();
switch(tecla) {
case(DERECHA) : {
if(pos_x == 5) {
pos_x = 1;
}else {
pos_x += 2;
}
move(pos_y, pos_x);
break;
}
case(IZQUIERDA) : {
if(pos_x == 1) {
pos_x = 5;
}
else {
pos_x -= 2;
}
move(pos_y, pos_x);
break;
}
case(ABAJO) : {
if(pos_y == 5) {
pos_y = 1;
}
else {
pos_y += 2;
}
move(pos_y, pos_x);
break;
}
case(ARRIBA) : {
if(pos_y == 1) {
pos_y = 5;
}
else {
pos_y -= 2;
}
move(pos_y, pos_x);
break;
}
case(ENTER) : {
/*Si está ocupada la casilla no se pone marca, si esta desocupada, se pone
y termina el turno del jugador */
if((esta_ocupado(pos_y, pos_x, cuadricula)) == FALSO) {
imp_marca(marca_actual, pos_y, pos_x, cuadricula);
casillas_vacias--;
juego_terminado = ganar(marca_actual, cuadricula);
/* Se acabaron las casillas y nadie ganó */
if(casillas_vacias == 0 && juego_terminado == FALSO) {
move(8, 0);
printw("¡¡¡ Gato !!!");
juego_terminado = VERDADERO;
}
/* cambiar de jugador, es decir, la proxima marca ya no va a ser bola sino tache
y viceversa */
marca_actual = cambiar_marca(marca_actual);
/* El mensaje "Juega X" o "Juega O" está desactualizado porque ya terminó
este turno */
msj_juega_tal_actualizado = FALSO;
}
break;
}
/* Sólo para depuracion */
case('a') : {
for(renglon = 0; renglon < 3; renglon++)
for(columna = 0; columna < 3; columna++)
printw("%d, %d: %dn", renglon, columna, cuadricula[renglon][columna]);
break;
}
/* Salir */
case('q') : {
endwin();
return 0;
break;
}
}
} //while
move(10, 0);
printw("- Para jugar de nuevo aprieta la letra Gn");
printw("- Para dejar de jugar aprieta cualquier otran");
tecla = getch();
} while(tecla == G);
endwin();
return 0;
}
#include <curses.h>
#define VERDADERO -2
#define FALSO -1
/* Cosas que puden estar en las casillas del tablero */
#define BOLA 1
#define TACHE 2
#define VACIO 0
/* Teclas */
#define ABAJO 258
#define ARRIBA 259
#define IZQUIERDA 260
#define DERECHA 261
#define ENTER 10
#define G 103
typedef int boolean;
void inicializar(int cuadricula[3][3]) {
int renglon, columna;
/* Limpiar pantalla */
clear();
/* Inicializar pantalla con funciones de ncurses */
initscr();
cbreak();
keypad(stdscr, TRUE);
noecho();
/* llenar matriz de espacios vacios */
for(renglon = 0; renglon < 3; renglon++)
for(columna = 0; columna < 3; columna++)
cuadricula[renglon][columna] = VACIO;
}
/* La funcion convertir coordenadas convierte las coordenadas de la pantalla a las de
la matriz, por ejemplo en la pantalla la casilla central esta en renglon 3 columna 3,
pero en la matriz la casilla central es 1, 1. */
void convertir_coordenadas(int *x, int *y) {
/* En la pantalla las casillas estan en las columnas 1, 3 y 5
y en la matriz en 0, 1 y 2 */
switch(*x) {
case(1) :
*x = 0;
break;
case(3) :
*x = 1;
break;
case(5) :
*x = 2;
}
/* En la pantalla las casillas estan en los renglones 1, 3 y 5
y en la matriz en 0, 1 y 2 */
switch(*y) {
case(1) :
*y = 0;
break;
case(3) :
*y = 1;
break;
case(5) :
*y = 2;
break;
}
}
/* Esta función determina si una casilla dada está ocupada*/
boolean esta_ocupado(int y, int x, int cuadricula[3][3]) {
convertir_coordenadas(&x, &y);
if(cuadricula[x][y] == VACIO)
/* Está vacÃa, por lo tanto es falso que está ocupada */
return FALSO;
else
/* Tiene algo adentro, por lo tanto es verdadero que está ocupada */
return VERDADERO;
}
void imp_marca(int marca, int y, int x, int cuadricula[3][3]) {
int tipo_marca;
/* Aqui tipo_marca se usa para la pantalla y marca para la matriz.
tipo_marca se convierte a O o X y marca se queda como un valor
numérico */
if(marca == TACHE) {
tipo_marca = 'X';
}
else
tipo_marca = 'O';
/* Poner la marca en la pantalla */
printw("%c", tipo_marca);
/* Poner la marca en la matriz */
convertir_coordenadas(&x, &y);
cuadricula[x][y] = marca;
}
int cambiar_marca(int marca) {
/* Si ya puso alguien una bola, la proxima sera tache y viceversa */
if(marca == TACHE)
return BOLA;
else
return TACHE;
}
void imp_rayas(void) {
printw(" ----- n");
printw("| | | |n");
printw(" ----- n");
printw("| | | |n");
printw(" ----- n");
printw("| | | |n");
printw(" ----- n");
}
boolean ganar(int marca, int cuadricula[3][3]) {
char tipo_marca;
/* Convertir marca a X ó O */
if(marca == BOLA)
tipo_marca = 'O';
else
tipo_marca = 'X';
/* Siempre que se comprueba que la primera casilla _NO_ esté vacÃa y luego que las
tres sean iguales, si no, puede darse el caso de que alguien gane porque las tres
estén vacÃas, ya que serÃan iguales (las tres = a 0)*/
/* --- Comprobar Filas ---*/
/* Fila 1 */
if(cuadricula[0][0] != VACIO &&
cuadricula[0][0] == cuadricula[1][0] &&
cuadricula[1][0] == cuadricula[2][0])
{
/* Dibujar lÃnea horizontal */
move(1, 1);
printw("-");
move(1, 3);
printw("-");
move(1, 5);
printw("-");
move(8, 0);
printw("¡¡¡ Ha ganado %c!!!", tipo_marca);
return VERDADERO;
}
/* Fila 2 */
if(cuadricula[0][1] != VACIO &&
cuadricula[0][1] == cuadricula[1][1] &&
cuadricula[0][1] == cuadricula[2][1])
{
/* Dibujar lÃnea horizontal */
move(3, 1);
printw("-");
move(3, 3);
printw("-");
move(3, 5);
printw("-");
move(8, 0);
printw("¡¡¡ Ha ganado %c!!!", tipo_marca);
return VERDADERO;
}
/* Fila 3 */
if(cuadricula[0][2] != VACIO &&
cuadricula[0][2] == cuadricula[1][2] &&
cuadricula[0][2] == cuadricula[2][2])
{
/* Dibujar lÃnea horizontal */
move(3, 1);
printw("-");
move(3, 3);
printw("-");
move(3, 5);
printw("-");
move(8, 0);
printw("¡¡¡ Ha ganado %c!!!", tipo_marca);
return VERDADERO;
}
/*--- Comprobar Columnas ---*/
/* Columna 1*/
if(cuadricula[0][0] != VACIO &&
cuadricula[0][0] == cuadricula[0][1] &&
cuadricula[0][0] == cuadricula[0][2])
{
/*Dibujar linea vertical*/
move(1, 1);
printw("|");
move(3, 1);
printw("|");
move(5, 1);
printw("|");
move(8, 0);
printw("¡¡¡ Ha ganado %c!!!", tipo_marca);
return VERDADERO;
}
/* Columna 2 */
if(cuadricula[1][0] != VACIO &&
cuadricula[1][0] == cuadricula[1][1] &&
cuadricula[1][0] == cuadricula[1][2])
{
/*Dibujar linea vertical*/
move(1, 3);
printw("|");
move(3, 3);
printw("|");
move(5, 3);
printw("|");
move(8, 0);
printw("¡¡¡ Ha ganado %c!!!", tipo_marca);
return VERDADERO;
}
/* Columna 3 */
if(cuadricula[2][0] != VACIO &&
cuadricula[2][0] == cuadricula[2][1] &&
cuadricula[2][0] == cuadricula[2][2])
{
/*Dibujar linea vertical*/
move(1, 5);
printw("|");
move(3, 5);
printw("|");
move(5, 5);
printw("|");
move(8, 0);
printw("¡¡¡ Ha ganado %c!!!", tipo_marca);
return VERDADERO;
}
/*--- Diagonales ---*/
/* Diagonal */
if(cuadricula[0][0] != VACIO &&
cuadricula[0][0] == cuadricula[1][1] &&
cuadricula[0][0] == cuadricula[2][2])
{
/*Dibujar , hay que colocar \ porque es para escape de caracteres*/
move(1, 1);
printw("\");
move(3, 3);
printw("\");
move(5, 5);
printw("\");
move(8, 0);
printw("¡¡¡ Ha ganado %c !!!", tipo_marca);
return VERDADERO;
}
/* Diagonal / */
if(cuadricula[2][0] != VACIO &&
cuadricula[2][0] == cuadricula[1][1] &&
cuadricula[2][0] == cuadricula[0][2])
{
/* Dibujar lÃnea / */
move(1, 5);
printw("/");
move(3, 3);
printw("/");
move(5, 1);
printw("/");
move(8, 0);
printw("¡¡¡ Ha ganado %c !!!", tipo_marca);
return VERDADERO;
}
/* Si no se dió ninguno de los casos de arriba regresa falso */
return FALSO;
}
int main(void) {
int tecla;
/* marca se refiere a una bola (0) o un tache (1) */
int marca_actual;
/* Variables para almacenar la posicion del cursor en la
pantalla, x es la columna y y el renglon */
int pos_x;
int pos_y;
/* Matriz de 3x3 (las 9 casillas del juego) para almacenar las bolas y los taches
en sus respectivas casillas según se vayan colocando en la pantalla por los
jugadores */
int cuadricula[3][3];
/* Número de casillas vacÃas, si nadie ha ganado y este número llega a 0, es empate.
disminuye cada vez que alguien coloca una marca */
int casillas_vacias;
boolean juego_terminado;
int renglon;
int columna;
/* Indica si hay que cambiar o no el mensaje "Juega Tal Persona"
que aparece en la parte inferior*/
boolean msj_juega_tal_actualizado;
do {
inicializar(cuadricula);
/* dibuja las rayas que delimitan las casillas en la pantalla*/
imp_rayas();
/* Inicializar algunas variables */
marca_actual = BOLA;
pos_x = 1;
pos_y = 1;
casillas_vacias = 9;
juego_terminado = FALSO;
msj_juega_tal_actualizado = FALSO;
/* Mover cursor a la posicion inicial */
move(pos_x, pos_y);
/* Ciclo que se dedica a leer las pulsaciones de las
teclas (entre otras cosas), esta es la parte
fundamental del programa */
while(juego_terminado == FALSO) {
/* Si el mensaje "Juega tal" está desactualizado
(esto sucede al principio del programa y después de que cada jugador coloca
su marca), hay que poner el nombre de la persona que está jugando este turno */
if(msj_juega_tal_actualizado == FALSO)
{
move(8, 0);
if(marca_actual == BOLA)
printw("Juega On");
else
printw("Juega Xn");
/* Ya cambió el mensaje, ahora ya está actualizado */
msj_juega_tal_actualizado = VERDADERO;
/* Regresar el cursor al lugar donde se puso la última marca, las
variables pos_x y pos_y no han cambiado desde entonces */
move(pos_y, pos_x);
}
tecla = getch();
switch(tecla) {
case(DERECHA) : {
if(pos_x == 5) {
pos_x = 1;
}else {
pos_x += 2;
}
move(pos_y, pos_x);
break;
}
case(IZQUIERDA) : {
if(pos_x == 1) {
pos_x = 5;
}
else {
pos_x -= 2;
}
move(pos_y, pos_x);
break;
}
case(ABAJO) : {
if(pos_y == 5) {
pos_y = 1;
}
else {
pos_y += 2;
}
move(pos_y, pos_x);
break;
}
case(ARRIBA) : {
if(pos_y == 1) {
pos_y = 5;
}
else {
pos_y -= 2;
}
move(pos_y, pos_x);
break;
}
case(ENTER) : {
/*Si está ocupada la casilla no se pone marca, si esta desocupada, se pone
y termina el turno del jugador */
if((esta_ocupado(pos_y, pos_x, cuadricula)) == FALSO) {
imp_marca(marca_actual, pos_y, pos_x, cuadricula);
casillas_vacias--;
juego_terminado = ganar(marca_actual, cuadricula);
/* Se acabaron las casillas y nadie ganó */
if(casillas_vacias == 0 && juego_terminado == FALSO) {
move(8, 0);
printw("¡¡¡ Gato !!!");
juego_terminado = VERDADERO;
}
/* cambiar de jugador, es decir, la proxima marca ya no va a ser bola sino tache
y viceversa */
marca_actual = cambiar_marca(marca_actual);
/* El mensaje "Juega X" o "Juega O" está desactualizado porque ya terminó
este turno */
msj_juega_tal_actualizado = FALSO;
}
break;
}
/* Sólo para depuracion */
case('a') : {
for(renglon = 0; renglon < 3; renglon++)
for(columna = 0; columna < 3; columna++)
printw("%d, %d: %dn", renglon, columna, cuadricula[renglon][columna]);
break;
}
/* Salir */
case('q') : {
endwin();
return 0;
break;
}
}
} //while
move(10, 0);
printw("- Para jugar de nuevo aprieta la letra Gn");
printw("- Para dejar de jugar aprieta cualquier otran");
tecla = getch();
} while(tecla == G);
endwin();
return 0;
}
