[C con Clase] Juego de la serpiente
Alejandro
alepelexo en yahoo.es
Mar Oct 9 18:33:06 CEST 2007
Hola lista:
Estoy intentando hacer una especie de juego de la serpiente para MS-DOS. Mi problema es que hasta ahora temgo creada la parte que reconoce las teclas y mueve la serpiente. Para probarlo creé un minimapa y puse un rombo como serpiente, y con las teclas mueves al rombo. O esa era mi intención porque lo que quiero es que ese rombo se borre cada vez que el usuario teclee una flecha y se reescriba en la nueva casilla. Este es el codigo hasta ahora:
#include <iostream>//Librería para cout, cin...
#include <cstdio>//Librería para el archivo de texto
#include <ctime>//Librería con las funciones del tiempo
#include <cstring>//Librería con tratamientos para cadenas
#include <conio.h>//Conio para mover la serpiente
#define LEFT 0x4b //izquierda
#define RIGHT 0x4d //derecha
#define UP 0x48 //arriba
#define DOWN 0x50 //abajo
#define ENTER 0x0d //enter
#define TAM_LADO 20
#define TAM_ALTO 10//Dimensiones del mapa
using namespace std;
class Animal
{
public:
void MueveAnimal(int, int);//Función para mover el animal
int CoorX(){return x;};
int CoorY(){return y;};//Devuelven las coordenadas actuales
Animal(int InX = TAM_ALTO / 2, int InY = TAM_LADO / 2);//Constructor
private:
int x;
int y;//Variables con la posicion inicial
}Serpiente;//Clase para crear la serpiente
void Animal::MueveAnimal(int Nx, int Ny)//Función para mover la serpiente
{
x = Nx;
y = Ny;//Cambia las coordendas
}
Animal::Animal(int InX, int InY)//Constructor
{
x = InX;
y = InY;//Inicializa las variables
}
int main()//Función principal
{
char tecla;//Captura la tecla pulsada
bool Salir = false;
int CopX;
int CopY;//Copia de las coordenadas actuales
int x = 5;
int y = 10;//Inicio del jugador
int mapa[TAM_ALTO][TAM_LADO] = {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};//Mapa del juego
mapa[x][y] = 2;//Posición inical del jugador
for(int k = 0; k < TAM_ALTO; k++)
{
for(int y = 0; y < TAM_LADO; y++)
{
if(mapa[k][y] == 0)cout << (char)32;
if(mapa[k][y] == 1)cout << (char)2;
if(mapa[k][y] == 2)cout << (char)4;
}
cout << endl;
}//Inicialización del mapa
while(tecla != ENTER)//Game loop central
{
CopX = x;
CopY = y;//Hace copias de las coordenadas
do
{
tecla = getch();
switch(tecla)
{
case UP:
Serpiente.MueveAnimal((x--), y);
Salir = true;
break;
case DOWN:
Serpiente.MueveAnimal((x++), y);
Salir = true;
break;
case LEFT:
Serpiente.MueveAnimal(x, (y--));
Salir = true;
break;
case RIGHT:
Serpiente.MueveAnimal(x, (y++));
Salir = true;
break;
default:
break;
}
}while(!Salir);
mapa[Serpiente.CoorX()][Serpiente.CoorY()] = 2;//Cambia de posicion la serp.
mapa[CopX][CopY] = 0;//Deja libre el anterior hueco
system("cls");//Limpia la pantalla
for(int k = 0; k < TAM_ALTO; k++)
{
for(int y = 0; y < TAM_LADO; y++)
{
if(mapa[k][y] == 0)cout << (char)32;
if(mapa[k][y] == 1)cout << (char)2;
if(mapa[k][y] == 2)cout << (char)4;
}
cout << endl;
}//Dibuja el nuevo mapa
}
cin.get();//Mantiene abierto el programa
return 0;
}
¿Cual es el fallo? No comprendo por qué la pantalla va con retraso de lo que yu hago...:-( Gracias por vuestra atención y un saludo.
Más información sobre la lista de distribución Cconclase