Algoritmos de control de jugadores

Resuelve tus dudas sobre emulación y reconstrucción
gui2485_kawaklx
Nuevo usuario
Posts: 2
Joined: Sun Apr 30, 2006 3:59 pm

Algoritmos de control de jugadores

Postby gui2485_kawaklx » Sun Feb 25, 2007 7:43 pm

Hola a todos... por cuestiones de tiempo habia dejado de programar hace un tiempo, incluso cursando Algoritmos I en la universidad programaba poco, bueno y luego tuve que rendir el examen final entonces retome y me sente a full, con Pascal y aprendi bastante y empece a entender un monton de cosas que antes las hacia sin saber xq, pero funcionaban...

me puse a programar en pascal con la libreria grafica y tengo un drama, entonces quiero volver a Allegro.

Habia empezo a ahacer algunas cosas, entre ellas este juego...


Image



Pero en aquel momento me quede trabado y bueno, no segui mas... ahora quiero seguir con eso.

Lo que necesito es un algoritmos o tecnica para poder hacer que se muevan las 2 fichas a la vez... les paso el codigo para que hagan toda critica cosntructiva

#include <allegro.h>

//-----------DEFINICION DE FUNCIONES ---------------------//
int iniciarallegro();
void mover01();
void mover02();


//-----------FUNCION MAIN--------------------------------------------//
int main(void)
{

iniciarallegro();
mover01();


while (!key[KEY_ESC])
{ }

allegro_exit();


}
END_OF_MAIN();


//-----------------Mover Player 1--------------------------------

void mover01()
{

BITMAP *pantalla01; pantalla01 = create_bitmap(320,200);
int xi1=10, yi1=40 , xf1=25, yf1=90;

do
{

while ((readkey() >> 8) == KEY_Z && yf1!=198){
clear_to_color(pantalla01,makecol(0,0,0));
rectfill (pantalla01, xi1,yi1,xf1,yf1,palette_color[10]);
blit (pantalla01,screen,0,0,0,0,320,200);
yi1=yi1 + 3; yf1=yf1 + 3;
rest(10);}

while ((readkey() >> 8) == KEY_W && yi1!=1){
clear_to_color(pantalla01,makecol(0,0,0));
rectfill (pantalla01, xi1,yi1,xf1,yf1,palette_color[10]);
blit (pantalla01,screen,0,0,0,0,320,200);
yi1=yi1 - 3; yf1=yf1 - 3;
rest(10);}




}
while (yf1!=0 && !key[KEY_ESC]);

}



//-----------------Mover Player 2--------------------------------

void mover02()
{

BITMAP *pantalla02; pantalla02 = create_bitmap(320,200);
int xi2=295, yi2=40 , xf2=310, yf2=90;

do
{

while ((readkey() >> 8) == KEY_DOWN && yf2!=198){
clear_to_color(pantalla02,makecol(0,0,0));
rectfill (pantalla02, xi2,yi2,xf2,yf2,palette_color[14]);
blit (pantalla02,screen,0,0,0,0,320,200);
yi2=yi2 + 3; yf2=yf2 + 3;
rest(10);}

while ((readkey() >> 8) == KEY_UP && yi2!=1){
clear_to_color(pantalla02,makecol(0,0,0));
rectfill (pantalla02, xi2,yi2,xf2,yf2,palette_color[14]);
blit (pantalla02,screen,0,0,0,0,320,200);
yi2=yi2- 3; yf2=yf2 - 3;
rest(10);}




}
while (yf2!=0 && !key[KEY_ESC]);

}







//------------------FUNCION DE INICIALIZACION DE ALLEGRO------------------------//
int iniciarallegro()
{
allegro_init();
install_timer();
install_keyboard();
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT_WINDOWED,320,200,0,0);

}


EL codigo es un asco, lo se... era autodidacta en aquel y ni puta idea tenia de las reglas de la programacion, asique tengo pensado codificar desde y bien pensando, pero necesito ese algoritmos para mover los 2 a la vez:

Por otro lado, se agradece si saben de donde se pueden bajar fuentes de ejemplo, que creo es la mejor forma de aprender.
I',m A Highway Star...
User avatar
R Granado
Usuario avanzado
Posts: 124
Joined: Fri Jul 25, 2003 10:39 am

Postby R Granado » Mon Feb 26, 2007 9:11 pm

Hola, he modificado tu código...

Code: Select all

#include <Allegro/allegro.h> //-----------DEFINICION DE FUNCIONES ---------------------// int iniciarallegro(); void mover01(); void mover02(); // pantalla BITMAP *pantalla01; // estado pala 01 int xi1=10, yi1=40 , xf1=25, yf1=90; // estado pala 02 int xi2=295, yi2=40 , xf2=310, yf2=90; //-----------FUNCION MAIN--------------------------------------------// int main(void) { iniciarallegro(); while (!key[KEY_ESC]) { // Recoger input y alterar el estado (posicio) de las palas mover01(); mover02(); // Actualizar la pantalla clear_to_color(pantalla01,makecol(0,0,0)); rectfill (pantalla01, xi1,yi1,xf1,yf1,palette_color[10]); rectfill (pantalla01, xi2,yi2,xf2,yf2,palette_color[14]); vsync(); blit (pantalla01,screen,0,0,0,0,320,200); } allegro_exit(); } END_OF_MAIN(); //-----------------Mover Player 1-------------------------------- void mover01() { if (key[KEY_Z] && yf1!=198) { yi1=yi1 + 3; yf1=yf1 + 3; } if (key[KEY_W] && yi1!=1) { yi1=yi1 - 3; yf1=yf1 - 3; } } //-----------------Mover Player 2-------------------------------- void mover02() { if (key[KEY_DOWN] && yf2!=198) { yi2=yi2 + 3; yf2=yf2 + 3; } if (key[KEY_UP] && yi2!=1) { yi2=yi2- 3; yf2=yf2 - 3; } } //------------------FUNCION DE INICIALIZACION DE ALLEGRO------------------------// int iniciarallegro() { allegro_init(); install_timer(); install_keyboard(); set_color_depth(16); set_gfx_mode(GFX_AUTODETECT_WINDOWED,320,200,0,0); pantalla01 = create_bitmap(320,200); }
Creo que hace lo que deseas, como resumen un par de consejos:

- Separa el código de gestión de teclado y movimiento del de dibujado, te saldrá un programa mucho más claro.
- No uses readkey(), ya que detiene la ejecución del programa hasta que una tecla se pulsa.
- Siempre es lo mismo, tu programa tiene ciclos de logica y pintado.
En cada ciclo lees el teclado, después actualizas el estado de lo que sea dependiendo del input del jugador, pintas en pantalla las coas que tienen un estado... y vuelves a empezar el ciclo.
- He puesto el estado de las palas como variables globales... no es una buena practica, mejor ponerlo en una estructura y dejarlo accesible o pasarlo como parametro a las funciones.

Un saludo.
No importa cuantas veces fracase, inténtelo de nuevo

Return to “Consultas”

Who is online

Users browsing this forum: No registered users and 1 guest