Asteriscos agresivos

El programa simula dos especies animales: los asteriscos, que se alimentan de sumas, y las sumas, que huyen de los asteriscos. Se puede dejar que el ordenador juegue solo, jugar contra él o jugar contra otro jugador. Mi direccion de e-mail: [email protected] La direccion de la página donde pongo las modificaciones que le hago y donde pondré los nuevos programas que haga con su código fuente: http://modula.turincon.com.
				//   *** ***************  ASTERISCOS AGRESIVOS v2.2  *************** ***
// * *
// * El programa simula dos especies animales: los asteriscos, que *
// * se alimentan de sumas, y las sumas, que huyen de los *
// * asteriscos. *
// * Se puede dejar ke el ordenador juegue solo, jugar contra él *
// * o jugar contra otro jugador. *
// * *
// * *
// * *
// * *
// * *
// * Programa desarrollado por .Javier Mairena. *
// * *
// * Para más información, ver versiones antiguas o ver si hay *
// * nuevas; visita mi web: *
// * *
// * http://modula.turincon.com *
// * *
// * *
// * *
// * Si tienes alguna sugerencia o pregunta son todas bienvenidas, *
// * escríbeme a: [email protected] *
// * *
// *** ******************* ******************* ******************* ***




//NOTA: en una tabla[filas][columnas] en gotoxy[x=columna][y=fila]
//el eje x va d izkierda a derecha, el eje y va d arriba a abajo

#include <stdio.h>
#include <time.h>
#include <stdlib.h> //para random() y randomize()
#include <dos.h> //para el delay()
#include <conio.h> // para el getch() y para _setcursortype() y textcolor() y cprintf()
#include <string.h> //para las cadenas de caracteres

#define COLORASTERISCO1 YELLOW
#define COLORASTERISCO2 LIGHTBLUE

typedef char mapa[20][80];
typedef char CADENA[11];




int menu_inicial(int *, int *, int *, int *, CADENA, CADENA);
void pintar_flecha(int, int);
void pintar_escenario_vacio(mapa, CADENA, CADENA);
void iniciar_animal(char, int *, int *, mapa);
int buscar( char, int, int, int, mapa);
int mover( char, int *, int *, mapa, int);
int direccion_aleatoria( int);
void poner_nombre2(CADENA);



void main (void)
{
mapa escenario;
int direccion;
int asterisco1x, asterisco1y, suma1x, suma1y;
int asterisco2x, asterisco2y, suma2x, suma2y;
int suma3x, suma3y, suma4x, suma4y;
int vision_asterisco, vision_suma;
int vida_suma1=0, vida_suma2=0, vida_suma3=0, vida_suma4=0; //a 1 est n vivas
int suma1huye=0, suma2huye=0; //si est n a cero no est n huyendo
int suma3huye=0, suma4huye=0;
int direccion_huida_suma1, direccion_huida_suma2;
int direccion_huida_suma3, direccion_huida_suma4;
int opcion='a'; //opcion elegida durante el programa
int asterisco1puntos=0, asterisco2puntos=0; //n£mero de muertes q llevan
int juego; //modo d juego, 1=simulacion, 2=jugar contra ordenador.
int revivir; //si esta a 0 para ke las sumas revivan hay ke darle a
//los n£meros, si est a 1 las sumas reviven nada m s morir.
int numero_de_sumas;
int direccionjugador1=0; //direccion hacia donde kiere ke se mueva el asterisco1, 0 es parado
int direccionjugador2=0;
CADENA nombre1, nombre2; //nombre de los jugadores

randomize();
_setcursortype(_NOCURSOR); //para ke no pinte el cursor _


juego=menu_inicial(&vision_asterisco, &vision_suma, &revivir, &numero_de_sumas, nombre1, nombre2);

while(juego!=4)
{
pintar_escenario_vacio(escenario, nombre1, nombre2);


textcolor(COLORASTERISCO1);
iniciar_animal('*', &asterisco1x, &asterisco1y, escenario);
textcolor(COLORASTERISCO2);
iniciar_animal('*', &asterisco2x, &asterisco2y, escenario);
textcolor(WHITE);
switch (numero_de_sumas) //los pongo sin break porke si es case 4 tiene ke hacer todos, si es 3 pues hara 3...
{
case 4:
iniciar_animal('+', &suma4x, &suma4y, escenario);
vida_suma4=1;
case 3:
iniciar_animal('+', &suma3x, &suma3y, escenario);
vida_suma3=1;
case 2:
iniciar_animal('+', &suma2x, &suma2y, escenario);
vida_suma2=1;
case 1:
iniciar_animal('+', &suma1x, &suma1y, escenario);
vida_suma1=1;
}



while (opcion!='D') //la 'D' es la tecla F10
{
while(!kbhit())
{

//PRIMER ASTERISCO
textcolor(COLORASTERISCO1);
if (juego==1) // solo busca y se mueve si el modo de juego es 1
{
direccion=buscar( '+', vision_asterisco, asterisco1x, asterisco1y, escenario);
if (direccion==0) //si no a encontrado ninguno se mueve en direccion aleatoria
{
direccion=direccion_aleatoria(direccion);
}
mover( '*', &asterisco1x, &asterisco1y, escenario, direccion);
}else //se movera si esta en modo de juego 2 o 3
{
if(direccionjugador1!=0) //se movera si no es igual a 0, ke es parado
{
mover( '*', &asterisco1x, &asterisco1y, escenario, direccionjugador1);
}
}
textcolor(WHITE);

//SEGUNDO ASTERISCO
textcolor(COLORASTERISCO2);
if ((juego==1) || (juego==2)) //solo busca y se mueve si el modo de juego es 1 o 2
{
direccion=buscar( '+', vision_asterisco, asterisco2x, asterisco2y, escenario);
if (direccion==0) //si no a encontrado ninguno se mueve en direccion aleatoria
{
direccion=direccion_aleatoria(direccion);
}
mover( '*', &asterisco2x, &asterisco2y, escenario, direccion);
}else //solo se mover en el modo de juego 3
{
if(direccionjugador2!=0) //se movera si no es igual a 0, ke es parado
{
mover( '*', &asterisco2x, &asterisco2y, escenario, direccionjugador2);
}
}
textcolor(WHITE);




//mira por si un asterisco se ha comido a una suma
if ( (asterisco1x==suma1x) && (asterisco1y==suma1y)
&& (vida_suma1==1) )
{
vida_suma1=0;

if (revivir==0)
{
gotoxy(3,23);
printf("1->Revivir Suma1");
}else
{
vida_suma1=1;
iniciar_animal('+', &suma1x, &suma1y, escenario);
}

asterisco1puntos++;
gotoxy(22,20);
textcolor(COLORASTERISCO1);
cprintf("%d", asterisco1puntos);
textcolor(WHITE);
}

if ( (asterisco2x==suma1x) && (asterisco2y==suma1y)
&& (vida_suma1==1) )
{
vida_suma1=0;

if (revivir==0)
{
gotoxy(3,23);
printf("1->Revivir Suma1");
}else
{
vida_suma1=1;
iniciar_animal('+', &suma1x, &suma1y, escenario);
}

asterisco2puntos++;
gotoxy(50,20);
textcolor(COLORASTERISCO2);
printf("%d", asterisco2puntos);
textcolor(WHITE);
}



if ( (asterisco1x==suma2x) && (asterisco1y==suma2y)
&& (vida_suma2==1) )
{
vida_suma2=0;

if (revivir==0)
{
gotoxy(23,23);
printf("2->Revivir Suma2");
}else
{
vida_suma2=1;
iniciar_animal('+', &suma2x, &suma2y, escenario);
}

asterisco1puntos++;
gotoxy(22,20);
textcolor(COLORASTERISCO1);
cprintf("%d", asterisco1puntos);
textcolor(WHITE);
}

if ( (asterisco2x==suma2x) && (asterisco2y==suma2y)
&& (vida_suma2==1) )
{
vida_suma2=0;

if (revivir==0)
{
gotoxy(23,23);
printf("2->Revivir Suma2");
}else
{
vida_suma2=1;
iniciar_animal('+', &suma2x, &suma2y, escenario);
}

asterisco2puntos++;
gotoxy(50,20);
textcolor(COLORASTERISCO2);
cprintf("%d", asterisco2puntos);
textcolor(WHITE);
}



if ( (asterisco1x==suma3x) && (asterisco1y==suma3y)
&& (vida_suma3==1) )
{
vida_suma3=0;

if (revivir==0)
{
gotoxy(43,23);
printf("3->Revivir Suma3");
}else
{
vida_suma3=1;
iniciar_animal('+', &suma3x, &suma3y, escenario);
}

asterisco1puntos++;
gotoxy(22,20);
textcolor(COLORASTERISCO1);
cprintf("%d", asterisco1puntos);
textcolor(WHITE);
}

if ( (asterisco2x==suma3x) && (asterisco2y==suma3y)
&& (vida_suma3==1) )
{
vida_suma3=0;

if (revivir==0)
{
gotoxy(43,23);
printf("3->Revivir Suma3");
}else
{
vida_suma3=1;
iniciar_animal('+', &suma3x, &suma3y, escenario);
}

asterisco2puntos++;
gotoxy(50,20);
textcolor(COLORASTERISCO2);
cprintf("%d", asterisco2puntos);
textcolor(WHITE);
}



if ( (asterisco1x==suma4x) && (asterisco1y==suma4y)
&& (vida_suma4==1) )
{
vida_suma4=0;

if(revivir==0)
{
gotoxy(63,23);
printf("4->Revivir Suma4");
}else
{
vida_suma4=1;
iniciar_animal('+', &suma4x, &suma4y, escenario);
}

asterisco1puntos++;
gotoxy(22,20);
textcolor(COLORASTERISCO1);
cprintf("%d", asterisco1puntos);
textcolor(WHITE);
}

if ( (asterisco2x==suma4x) && (asterisco2y==suma4y)
&& (vida_suma4==1) )
{
vida_suma4=0;

if (revivir==0)
{
gotoxy(63,23);
printf("4->Revivir Suma4");
}else
{
vida_suma4=1;
iniciar_animal('+', &suma4x, &suma4y, escenario);
}

asterisco2puntos++;
gotoxy(50,20);
textcolor(COLORASTERISCO2);
cprintf("%d", asterisco2puntos);
textcolor(WHITE);
}







//PRIMERA SUMA
if (vida_suma1==1) //solo se mueve si est viva
{
if (suma1huye!=0) //si es distinto de cero seguir huyendo sin mirar a ningun lado
{
mover( '+', &suma1x, &suma1y, escenario, direccion_huida_suma1);
suma1huye--;
}
else
{
direccion=buscar( '*', vision_suma, suma1x, suma1y, escenario);
if (direccion!=0) //solo se mueve cuando ve un asterisco
{
direccion=direccion+4; //para ke valla en la direccion opuesta
if (direccion>8)
direccion=direccion-8; //porke las direcciones son de 1 a 8

if (mover( '+', &suma1x, &suma1y, escenario, direccion) == 0) //por si est acorralada
{
do
{
direccion_huida_suma1=direccion+(random(4)+2); //ej. iba hac¡a direccion 7, ahora escapar hacia 1, 2, 3, 4, o 5
}while(direccion_huida_suma1-4==direccion); //para ke no valla contra el asterisco. en el ej. hacia 3.

if (direccion_huida_suma1>8)
direccion_huida_suma1=direccion_huida_suma1-8;

mover( '+', &suma1x, &suma1y, escenario, direccion_huida_suma1);

suma1huye=(random(3)+2); //n£mero d momivientos d huida q har
}
}
}
}


//SEGUNDA SUMA
if (vida_suma2==1) //solo se mueve si est viva
{
if (suma2huye!=0) //si es distinto de cero seguir huyendo sin mirar a ningun lado
{
mover( '+', &suma2x, &suma2y, escenario, direccion_huida_suma2);
suma2huye--;
}
else
{
direccion=buscar( '*', vision_suma, suma2x, suma2y, escenario);
if (direccion!=0)
{
direccion=direccion+4; //para ke valla en la direccion opuesta
if (direccion>8)
direccion=direccion-8; //porke las direcciones son de 1 a 8

if (mover( '+', &suma2x, &suma2y, escenario, direccion) == 0) //por si est acorralada
{
do
{
direccion_huida_suma2=direccion+(random(4)+2); //ej. iba hac¡a direccion 7, ahora escapar hacia 1, 2, 3, 4, o 5
}while(direccion_huida_suma2-4==direccion); //para ke no valla contra el asterisco. en el ej. hacia 3.

if (direccion_huida_suma2>8)
direccion_huida_suma2=direccion_huida_suma2-8;

mover( '+', &suma2x, &suma2y, escenario, direccion_huida_suma2);

suma2huye=(random(3)+2); //n£mero d momivientos d huida q har
}
}
}
}


//TERCERA SUMA
if (vida_suma3==1) //solo se mueve si est viva
{
if (suma3huye!=0) //si es distinto de cero seguir huyendo sin mirar a ningun lado
{
mover( '+', &suma3x, &suma3y, escenario, direccion_huida_suma3);
suma3huye--;
}
else
{
direccion=buscar( '*', vision_suma, suma3x, suma3y, escenario);
if (direccion!=0)
{
direccion=direccion+4; //para ke valla en la direccion opuesta
if (direccion>8)
direccion=direccion-8; //porke las direcciones son de 1 a 8

if (mover( '+', &suma3x, &suma3y, escenario, direccion) == 0) //por si est acorralada
{
do
{
direccion_huida_suma3=direccion+(random(4)+2); //ej. iba hac¡a direccion 7, ahora escapar hacia 1, 2, 3, 4, o 5
}while(direccion_huida_suma3-4==direccion); //para ke no valla contra el asterisco. en el ej. hacia 3.

if (direccion_huida_suma3>8)
direccion_huida_suma3=direccion_huida_suma3-8;

mover( '+', &suma3x, &suma3y, escenario, direccion_huida_suma3);

suma3huye=(random(3)+2); //n£mero d momivientos d huida q har
}
}
}
}


//CUARTA SUMA
if (vida_suma4==1) //solo se mueve si est viva
{
if (suma4huye!=0) //si es distinto de cero seguir huyendo sin mirar a ningun lado
{
mover( '+', &suma4x, &suma4y, escenario, direccion_huida_suma4);
suma4huye--;
}
else
{
direccion=buscar( '*', vision_suma, suma4x, suma4y, escenario);
if (direccion!=0)
{
direccion=direccion+4; //para ke valla en la direccion opuesta
if (direccion>8)
direccion=direccion-8; //porke las direcciones son de 1 a 8

if (mover( '+', &suma4x, &suma4y, escenario, direccion) == 0) //por si est acorralada
{
do
{
direccion_huida_suma4=direccion+(random(4)+2); //ej. iba hac¡a direccion 7, ahora escapar hacia 1, 2, 3, 4, o 5
}while(direccion_huida_suma4-4==direccion); //para ke no valla contra el asterisco. en el ej. hacia 3.

if (direccion_huida_suma4>8)
direccion_huida_suma4=direccion_huida_suma4-8;

mover( '+', &suma4x, &suma4y, escenario, direccion_huida_suma4);

suma4huye=(random(3)+2); //n£mero d momivientos d huida q har
}
}
}
}




delay(125);
}

opcion=getch();

switch (opcion)
{
case ';': // ';' es la tecla F1
opcion='a';

do
{
while(!kbhit())
{
gotoxy( 35,1);
printf("PAUSADO");

delay(600);

gotoxy( 35,1);
printf("ÛÛÛÛÛÛÛ");

delay(600);
}
opcion=getch();
}while(opcion!=';');

gotoxy( 35,1);
printf("ÛÛÛÛÛÛÛ");

break;


case '1':
if(vida_suma1==0) //revive la primera suma
{
vida_suma1=1;

gotoxy(3,23);
printf(" ");

iniciar_animal('+', &suma1x, &suma1y, escenario);
}
break;


case '2':
if((vida_suma2==0) && (numero_de_sumas>=2)) //revive la segunda suma
{
vida_suma2=1;

gotoxy(23,23);
printf(" ");

iniciar_animal('+', &suma2x, &suma2y, escenario);
}
break;



case '3':
if((vida_suma3==0) && (numero_de_sumas>=3)) //revive la tercera suma
{
vida_suma3=1;

gotoxy(43,23);
printf(" ");

iniciar_animal('+', &suma3x, &suma3y, escenario);
}
break;


case '4':
if((vida_suma4==0) && (numero_de_sumas>=4)) //revive la cuarta suma
{
vida_suma4=1;

gotoxy(63,23);
printf(" ");

iniciar_animal('+', &suma4x, &suma4y, escenario);
}
break;

//estas teclas son los controles del jugador1, es el tecl.num. sin blokear
case 'H':
if((juego==2) || (juego==3))
{
direccionjugador1=1;
}
break;

case 'I':
if((juego==2) || (juego==3))
{
direccionjugador1=2;
}
break;

case 'M':
if((juego==2) || (juego==3))
{
direccionjugador1=3;
}
break;

case 'Q':
if((juego==2) || (juego==3))
{
direccionjugador1=4;
}
break;

case 'P':
if((juego==2) || (juego==3))
{
direccionjugador1=5;
}
break;

case 'O':
if((juego==2) || (juego==3))
{
direccionjugador1=6;
}
break;

case 'K':
if((juego==2) || (juego==3))
{
direccionjugador1=7;
}
break;

case 'G':
if((juego==2) || (juego==3))
{
direccionjugador1=8;
}
break;

case 'L': // el 5 del teclado n£m. es para pararse
if((juego==2) || (juego==3))
{
direccionjugador1=0;
}
break;


//estas teclas son los controles del jugador2
case 'r':
if((juego==2) || (juego==3))
{
direccionjugador2=1;
}
break;

case 't':
if((juego==2) || (juego==3))
{
direccionjugador2=2;
}
break;

case 'g':
if((juego==2) || (juego==3))
{
direccionjugador2=3;
}
break;

case 'b':
if((juego==2) || (juego==3))
{
direccionjugador2=4;
}
break;

case 'v':
if((juego==2) || (juego==3))
{
direccionjugador2=5;
}
break;

case 'c':
if((juego==2) || (juego==3))
{
direccionjugador2=6;
}
break;

case 'd':
if((juego==2) || (juego==3))
{
direccionjugador2=7;
}
break;

case 'e':
if((juego==2) || (juego==3))
{
direccionjugador2=8;
}
break;

case 'f': // es para pararse
if((juego==2) || (juego==3))
{
direccionjugador2=0;
}
break;
}



}

opcion='a'; //es su valor inicial, no hace nada
asterisco1puntos=0;
asterisco2puntos=0;
juego=menu_inicial(&vision_asterisco, &vision_suma, &revivir, &numero_de_sumas, nombre1, nombre2);
}
_setcursortype(_NORMALCURSOR); //para poner el cursor normal, sino cuando sale al MSDOS no lo pinta
}






//Muestra el men£ principal preguntado el modo d juego y la vision
//de los asteriscos y de las sumas y si reviven o no solas
//y el n£mero d sumas ke kieres ke haya
int menu_inicial(int * vision_asterisco, int * vision_suma, int * revivir, int * numero_de_sumas, CADENA nombre1, CADENA nombre2)
{
int juego;
char tecla='a';
int posicion_en_menu=1; //indica donde esta la flecha en los menus
int flechax, flechay; //coordenadas donde va a pintar la flecha


clrscr();
textcolor(YELLOW);
gotoxy(8,3);
cprintf("ú._.úï~`ú._.úï~`ú._.úï~`ú._.úï~`ú._.úï~`ú_.úï~`ú._.úï~`ú._.úï~`ú");
gotoxy(8,4);
cprintf("ú ú");
gotoxy(8,5);
cprintf("ú A S T E R I S C O S ú");
gotoxy(8,6);
cprintf("ú A G R E S I V O S v.2.2 ú");
gotoxy(8,7);
cprintf("ú ú");
gotoxy(8,8);
cprintf("ú._.úï~`ú._.úï~`ú._.úï~`ú._.úï~`ú._.úï~`ú._.");
textcolor(LIGHTBLUE);
cprintf("Javier Mairena");
textcolor(YELLOW);
cprintf(".úï~`ú");
textcolor(WHITE);

gotoxy(17,12);
printf("1. ­Los asteriscos viven!");
gotoxy(17,13);
printf("2. Jugar contra el ordenador");
gotoxy(17,14);
printf("3. Jugador contra jugador");
gotoxy(17,16);
printf("4. Salir");


while (tecla!='r') // 'r' es el valor de la tecla enter
{
while(!kbhit())
{
switch(posicion_en_menu)
{
case 1:
juego=1;
flechax=11;
flechay=12;
break;

case 2:
juego=2;
flechax=11;
flechay=13;
break;

case 3:
juego=3;
flechax=11;
flechay=14;
break;

case 4:
juego=4;
flechax=11;
flechay=16;
break;
}
textcolor(LIGHTBLUE);
pintar_flecha(flechax, flechay);
textcolor(WHITE);
}

tecla=getch();

if (tecla=='P') //la 'P' es la flecha para abajo
{
gotoxy(flechax,flechay);
printf(" "); //para borrar la flecha antes d moverla
if(posicion_en_menu==4) //para ke valla d 4 a 1 si se pulsa abajo estando en 3
{
posicion_en_menu=1;
}else
{
posicion_en_menu++;
}
}

if (tecla=='H') //la 'H' es la flecha para arriba
{
gotoxy(flechax,flechay);
printf(" "); //para borrar la flecha antes d moverla
if(posicion_en_menu==1) //para ke valla d 1 a 3 si se pulsa arriba estando en 1
{
posicion_en_menu=4;
}else
{
posicion_en_menu--;
}
}

}


if(juego!=4)
{
clrscr();
if(juego!=3) //si es modo jugador contra jugador (3) no hace falta preguntar esto
{
do
{
gotoxy(10,8);
printf("Vision de los asteriscos: [entre 1 y 80] recomendado 80");
gotoxy(37,8);
scanf("%d", vision_asterisco); //no lleva & porke ya es una direccion
}while( (*vision_asterisco <= 0) || (*vision_asterisco >=81) );
}

do
{
gotoxy(10,12);
printf("Vision de las sumas: [entre 1 y 80] recomendado de 3 a 10");
gotoxy(33,12);
scanf("%d", vision_suma);
}while( (*vision_suma <= 0) || (*vision_suma >=81) );

do
{
gotoxy(10,16);
printf("¨Autorresurrecci¢n de sumas?: [1=SI 0=NO]");
gotoxy(43,16);
scanf("%d", revivir);
}while( (*revivir < 0) || (*revivir >1) );

do
{
gotoxy(10,20);
printf("N£mero de sumas: [entre 1 y 4]");
gotoxy(29,20);
scanf("%d", numero_de_sumas);
}while( (*numero_de_sumas <= 0) || (*numero_de_sumas >=5) );


}


if(juego==2) //instrucciones para el juego contra el ordenador
{
clrscr();
gotoxy(12,6);
printf("Se maneja con el teclado num‚rico QUITANDO EL BLOQ-NUM");
gotoxy(25,7);
printf("el 5 es para que se pare");

do{
gotoxy(10,15);
printf("Introcude tu nombre para empezar: [9 letras m ximo]");
gotoxy(44,15);
fflush(stdin);
gets(nombre1);
}while(strlen(nombre1)>9);

}

if(juego==3) //instrucciones para el juego jugador contra jugador
{
clrscr();
gotoxy(10,3);
printf("Jugador1 -asterisco1-");
gotoxy(15,4);
printf("controla con el teclado num‚rico QUITANDO EL BLOQ-NUM");
gotoxy(15,5);
printf("el 5 es para que se pare");

gotoxy(10,9);
printf("Jugador2 -asterisco2-");
gotoxy(15,10);
printf(" e r t");
gotoxy(15,11);
printf("controla con d f g QUITANDO EL BLOQ-MAYUSCULAS");
gotoxy(15,12);
printf(" c v b");
gotoxy(15,13);
printf("la f es para que se pare");

gotoxy(25,20);
printf("Pulsa una tecla para empezar");

do{
gotoxy(10,20);
printf("Introcude el nombre del jugador1: [9 letras m ximo]");
gotoxy(44,20);
fflush(stdin);
gets(nombre1);
}while(strlen(nombre1)>9);
do{
gotoxy(10,21);
printf("Introcude el nombre del jugador2: [9 letras m ximo]");
gotoxy(44,21);
fflush(stdin);
gets(nombre2);
}while(strlen(nombre2)>9);
}

if(juego==1)
{
fflush(stdin);
strcpy(nombre1,"Asterisco1");
fflush(stdin);
strcpy(nombre2,"Asterisco2");
}else if(juego==2)
{
fflush(stdin);
strcpy(nombre2, "Asterisco2");
}


return juego;

}




// Pinta una flecha animada en la coordenada ke le llegue
void pintar_flecha(int flechax, int flechay)
{
gotoxy(flechax,flechay);
cprintf("--->");
delay(50);

gotoxy(flechax,flechay);
cprintf("-->"); // las dos barras son porke si no me la pinta
delay(50);

gotoxy(flechax,flechay);
cprintf("|-->");
delay(50);

gotoxy(flechax,flechay);
cprintf("/-->");
delay(50);
}








//Pinta el escenario vac¡o y los marcadores
void pintar_escenario_vacio(mapa escenario, CADENA nombre1, CADENA nombre2) //escenario no es puntero porke es una tabla y de las tablas solo se usa la direccion del primer valor
{
int f,c;

clrscr();


//PINTA EL ESCENARIO VACÖO todo este l¡o es porke creo ke para gotoxy el primer valor es 0 o q el 0 no esta en patalla, no lo tengo mu claro. y los asterisco sino se comen el borde d arriba y el d la izkierda.
for (f=0; f<=19; f++)
{
for (c=0; c<=79; c++)
{
if ((f==0) || (f==1) || (f==19) || (c==0) || (c==1) || (c==79)) //la fila 0 no sale en pantalla, la primera es la 1
escenario[f][c]='Û'; //el escenario tendr la fila 0 y 1 como pared
else
escenario[f][c]=' ';
if (f!=0) //no pintar la primera fila
{
if ( ( (f>=2) && (f<=18) ) && (c==1) ) //en la columna 1 pinta espacios en vez d pared, menos en la fila primera y ultima
{
printf(" ");
}else
printf("%c",escenario[f][c]);
}
}
}

gotoxy(2,20);
textcolor(COLORASTERISCO1);
cprintf("Puntos %s :", nombre1);
gotoxy(30,20);
textcolor(COLORASTERISCO2);
cprintf("Puntos %s :", nombre2);
textcolor(WHITE);
gotoxy(58,25);
printf("F1->Pausa F10->Salir");
}





//Inicializa un animal
void iniciar_animal(char animal, int * coordenadax, int * coordenaday, mapa escenario)
{
int randomx, randomy; //para generar las posiciones iniciales

randomx=(random(75)+2);
randomy=(random(15)+2);

gotoxy (randomx,randomy);
escenario[randomy][randomx]=animal; //pinta el primer asterisco
cprintf("%c",escenario[randomy][randomx]);
*coordenadax=randomx;
*coordenaday=randomy;
}










//Busca un objetivo a su al rededor y devuelve la direccion donde se encuentra
//1=arriba, 2=arriba derech, 3=derecha... 0=ninguna suma encontrada
//Mira primero 1 cooredenada al rededor, despues 2, 3, ...
//... prar ir a por la suma m s cercana. -parece ke esto no lo hace bien-
//Si hay un muro por en medio no elige esa direcci¢n, es como si no
//viera lo ke hay detr s.
//
int buscar(char objetivo, int vision, int x,int y, mapa escenario)
{

int direccion=0, distancia, cont, pared;

for (distancia=1; distancia<=vision; distancia++)
{
if (escenario[y-distancia][x]==objetivo)
{
pared=0;
for (cont=1; cont<distancia; cont++)
{
if (escenario[y-cont][x]=='Û') //mira q no haya una pared en el camino hasta la +
{
pared=1; //si hay una pared, pared vale 1
}
}
if (pared==0)
direccion=1; //si no la hay, s¡ la asigna esa direcci¢n
}
else
{
if (escenario[y-distancia][x+distancia]==objetivo)
{
pared=0;
for (cont=1; cont<distancia; cont++)
{
if (escenario[y-cont][x+cont]=='Û')
{
pared=1;
}
}
if (pared==0)
direccion=2;
}
else
{
if (escenario[y][x+distancia]==objetivo)
{
pared=0;
for (cont=1; cont<distancia; cont++)
{
if (escenario[y][x+cont]=='Û')
{
pared=1;
}
}
if (pared==0)
direccion=3;
}
else
{
if (escenario[y+distancia][x+distancia]==objetivo)
{
pared=0;
for (cont=1; cont<distancia; cont++)
{
if (escenario[y+cont][x+cont]=='Û')
{
pared=1;
}
}
if (pared==0)
direccion=4;
}
else
{
if (escenario[y+distancia][x]==objetivo)
{
pared=0;
for (cont=1; cont<distancia; cont++)
{
if (escenario[y+cont][x]=='Û')
{
pared=1;
}
}
if (pared==0)
direccion=5;
}
else
{
if (escenario[y+distancia][x-distancia]==objetivo)
{
pared=0;
for (cont=1; cont<distancia; cont++)
{
if (escenario[y+cont][x-cont]=='Û')
{
pared=1;
}
}
if (pared==0)
direccion=6;
}
else
{
if (escenario[y][x-distancia]==objetivo)
{
pared=0;
for (cont=1; cont<distancia; cont++)
{
if (escenario[y][x-cont]=='Û')
{
pared=1;
}
}
if (pared==0)
direccion=7;
}
else
{
if (escenario[y-distancia][x-distancia]==objetivo)
{
pared=0;
for (cont=1; cont<distancia; cont++)
{
if (escenario[y-cont][x-cont]=='Û')
{
pared=1;
}
}
if (pared==0)
direccion=8;
}

}
}
}
}
}
}
}
}
return direccion;

}


int direccion_aleatoria( int direccion)
{

direccion=(random(8)+1);

return direccion;

}




//Mueve el animal seg£n la direcci¢n que le entre
//no se mueve hacia esa direcci¢n si hay una pared.
//Devuelve 1 si se ha movido; 0 si no ha podido moverse por haber una pared.
int mover( char animal, int * x, int * y, mapa escenario, int direccion)
{
int direccionx, direcciony;
int movimiento=1;

switch (direccion)
{
case 1:
direccionx=*x;
direcciony=*y-1;
break;

case 2:
direccionx=*x+1;
direcciony=*y-1;
break;

case 3:
direccionx=*x+1;
direcciony=*y;
break;

case 4:
direccionx=*x+1;
direcciony=*y+1;
break;

case 5:
direccionx=*x;
direcciony=*y+1;
break;

case 6:
direccionx=*x-1;
direcciony=*y+1;
break;

case 7:
direccionx=*x-1;
direcciony=*y;
break;

case 8:
direccionx=*x-1;
direcciony=*y-1;
break;
}




if (escenario[direcciony][direccionx]=='Û')
{
movimiento=0;
}
else
{
escenario[*y][*x]=' ';
gotoxy (*x,*y);
printf("%c", escenario[*y][*x]);

escenario[direcciony][direccionx]=animal;
gotoxy (direccionx,direcciony);
cprintf("%c", escenario[direcciony][direccionx]);


switch (direccion)
{
case 1:
(*y)--;
break;

case 2:
(*y)--;
(*x)++;
break;

case 3:
(*x)++;
break;

case 4:
(*y)++;
(*x)++;
break;

case 5:
(*y)++;
break;

case 6:
(*y)++;
(*x)--;
break;

case 7:
(*x)--;
break;

case 8:
(*y)--;
(*x)--;
break;

}
}

return movimiento;

}

Descargar adjuntos
COMPARTE ESTE TUTORIAL

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP