Gato
Gato Versión 0.1
Programado por M4kZ
***************************************************************/
#include
#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 algoadentro, 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';
}
elsetipo_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 laprimera 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...
Regístrate para leer el documento completo.