Pproyecto Se Sistemas Operativos
Proyecto implementación de juego
En minix.
FECHA:
05/11/2011
CURSO:
Sistemas Operativos
/*************************************************************
Programado por Edgar Geovani Tuluxán Par
***************************************************************/#include <curses.h>
#define VERDADERO -2
#define FALSO -1
/* Cosas que pueden 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 convertircoordenadas 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, intcuadricula[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 lastres
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);...
Regístrate para leer el documento completo.