[Juego de Cartas] Solitario para wiz

Started by Phoenix, March 22, 2010, 06:59:36 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FreeYourMind

Quote from: SplinterGU on March 26, 2010, 03:29:43 AM
la version que subio aca el autor no es la ultima... no entiendo la redaccion de tu texto...

por que no esta el prg en esta version que subiste? si el autor los puso, no entiendo esa mania de quitar los fuentes...

las teclas no funcionan, porque cada vez que se hace let_me_alone, hay que llamar nuevamente al controlador de teclas.

Splinter, es que no te lees las cosas ? La ultima version no tiene fuentes (son antiguas a diferencia del dcb, quieres que te lo repita de nuevo ?), hombre creo que ya te ha dicho más de uno por aqui que antes de hablar te leas bien las cosas...

DCelso

:D, killo que se nos cabrea y nos deja sin soporte a bennu, más paciente con el "CREATOR"
A ver que te lo explique la última versión del programa que ha colgado phoenix es el .dcb que se encuentra en este zip
http://forum.bennugd.org/index.php?action=dlattach;topic=1251.0;attach=1016
El problema es que el prg que viene no es el de la última versión sino el de la primera.
Es decir phoenix, compiló su prg en el que está programando y creó un dcb y este dcb lo insertó en el zip donde tenía la versión anterior sustituyendo única y exclusivamente el .dcb de la versión 1.0, así que el zip del enlace es la versión 1.1 del solitario pero solo el .dcb, el .prg es la versión 1.0. Por lo que si usas el script de "gpe" para wiz como hace un "bgdc" remplazaría el .dcb bueno 1.1 por el dcb generado con el .prg 1.0 quedándote así sin poder probar la última versión en wiz.
Es por eso que amablemente free ha cambiado el ".gpe" para que no use "bgdc" y ha borrado el .prg.
Espero que quede ahora más claro el motivo de tanto follón. :D
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

FreeYourMind

Hombre DCElso, no importa las veces que lo repitas o expliques, si no lo lee no sirve de nada  ;D

Phoenix

j0as! Perdonad por el lio de las versiones, como bien dice DCelso, en las anteriores updates solo habia cambiado el dcb y los graficos, pero no habia cambiado nada del gpe y del prg, con lo que inmagino que se compilaba la version antigua del prg y se estaba jugando exactamente al a primera version que saque. Ahora mismo, solo actualizare el enlace al juego de la primera pagina, para que no haya lios de versiones. Esta ultima debe de funcionar perfectamente en la Wiz, ya que copie el gpe que creo Free para que solo ejecute el dcb. Como dije en un post anterior, no incluyo el prg en la ultima version por que esta hecho un lio... tengo entre medias codigo de este solitario y del otro que estoy haciendo, asi que dudo que si alguien se pusiera a mirarlo se enterara de nada con lo que no valdrian para nada los fuentes.

Splinter, la pantalla de records solo aparece cuando terminas una partida completa, con lo que necesitas que aparezca el Game Over, si has superado algun record anterior, podras introducir tu nombre y si no solo se mostrara durante un espacio de tiempo la tabla de record actual y volveras a la pantalla de inicio. Creo que los errores que tenias estan solucionados ya que no estabas jugando a la ultima version. Lo del volumen, vale... mirare a ver como hacerlo.




DCelso

Yo ya me he echado unos vicios, engancha eh, creo que controlo el algoritmo para durar más y resolver el solitario, pero.
¿Sabeis si siempre tiene solución? O hay algunos "startups" irresolvibles, por ejemplo en una columna los cuatro reyes o cosas asi.

Por otro lado, ¿cuanto te queda para el otro solitario? :D
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Phoenix

El otro solitario, que comentastes, lo estoy haciendo en los ratos libre, creia que me iba a ser bastante facil, pero me esta dando algunos problemillas... Si tuvieramos una dll que manejara colas,listas y demas, todos los juegos de cartas de solitario, serian bastante sencillotes.

FreeYourMind

En eso estaba pensando el otro día, pero mejor que una dll, seria poner por ejemplo una sección con los clasicos algoritmos de ordenación en prg, bubbleshort, quickshort, etc.

FreeYourMind


DCelso

No se si te servirá pero en el bennupack hay una implementación de una pila en código prg.


program stack;
private
   pressed=0;
   selected_color;
   graphic;

global
   struct stack     
     int size=0;
     int value[320*240*8]=0;
    end;

begin
   set_mode(320,240,16);
   set_fps(0,0);
   
   drawing_color(rgb(255,255,0));
   graphic=draw_circle(x,y,2);
   
   loop       
     move_draw(graphic,mouse.x,mouse.y);
     
     if(key(_1))selected_color=rgb(255,0,0);end;
     if(key(_2))selected_color=rgb(0,255,0);end;
     if(key(_3))selected_color=rgb(0,0,255);end;
     
     if(mouse.left)
       for(x=mouse.x;x<mouse.x+5;x++)
         for(y=mouse.y;y<mouse.y+5;y++)
           put_pixel(x,y,selected_color);
          end;
        end;
      end;
     if(!mouse.right)pressed=false;end;
     if(mouse.right and !pressed)
       flood_fill(mouse.x,mouse.y,selected_color);
       pressed=true;
      end;
     
     frame;
    end;
  end;


process flood_fill(x,y,color)
private
   init_color;
   color_check;   

begin
init_color=get_pixel(x,y);

   stack_push(x);
   stack_push(y);
   
   while(stack.size>0)
     y=stack_pop();
     x=stack_pop();
     
     color_check=get_pixel(x,y);
     if(color_check==init_color and color!=init_color)
       put_pixel(x,y,color);
       if(get_pixel(x,y+1)==init_color)stack_push(x);stack_push(y+1);end;
       if(get_pixel(x,y-1)==init_color)stack_push(x);stack_push(y-1);end;
       if(get_pixel(x+1,y)==init_color)stack_push(x+1);stack_push(y);end;
       if(get_pixel(x-1,y)==init_color)stack_push(x-1);stack_push(y);end;       
      end;
    end;
  end;


process stack_pop()
private
   temp;
begin
   if(stack.size>0)
     temp=stack.value[stack.size-1];
     stack.value[stack.size-1]=0;
     stack.size--;
     return temp;
    end;   
  end;
 
process stack_push(int value)
begin         
   stack.value[stack.size]=value;
   stack.size++;
  end; 

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

FreeYourMind

#54
Mirad lo que he encontrado:

http://www.infonegocio.com/hsoft/fenix/  :D

Esta la fscl.zip que permite listas, si no esta en Bennu se podria portar, entre otras que falten del directório ...

PROGRAM fscl;

import "fscl"

//tipo definido
TYPE TCOLOR
byte r, g, b;
END

GLOBAL
pointer NULL; //para comparaciones

PRIVATE

pointer plIterador;

int pointer plnValor;
TCOLOR pointer plnColor;

BEGIN

set_mode (m640x480);

//Creamos estructuras/contenedores
fscl_create_hashes (1); //1 tabla
fscl_create_lists (2); //2 listas

//Inicializamos estructuras creadas
fscl_hash_new (0); //indice 0
fscl_list_new (0); //indice 0
fscl_list_new (1); //indice 1

delete_text (0);

//***
//Esta tabla HASH se utiliza para almacenar telefono de personas: par (clave, valor)
// Clave es nombre de la persona y valor es el numero de telefono
//
// Se añaden 2 telefonos

plnValor = alloc ( sizeof(int) ); //reservamos memoria y luego al agregarlo a la tabla Hash podemos acceder a esa direccion y borrarlo posteriormente
*plnValor = 4062287;
fscl_hash_insert ( 0, "Roberto", plnValor );

plnValor = alloc ( sizeof(int) ); //reservamos memoria y luego al agregarlo a la tabla Hash podemos acceder a esa direccion y borrarlo posteriormente
*plnValor = 4568971;
fscl_hash_insert ( 0, "Maria", plnValor );

write (0, 5, 10, 0, "Tabla HASH a la que se agregan 2 telefonos, se usan como claves sus nombres: Roberto y Maria" );
write (0, 15, 30, 0, "Numero elementos agregados a tabla HASH: "+ fscl_hash_count(0) );
write (0, 15, 50, 0, "Tamanyo tabla HASH (puede no coincidir con elementos): "+ fscl_hash_size(0) );

plnValor = fscl_hash_access (0, "Roberto"); //accedemos al telefono por la clave
write (0, 15, 70, 0, "Telefono de Roberto antes de cambiarlo por el nuevo: " +  *plnValor);

*plnValor = 3214499; //nuevo telefono, usamos el puntero obtenido en access
plnValor = fscl_hash_access (0, "Roberto"); //esto no haría falta, pero para comprobar que sigue siendo el mismo puntero, pero el telefono cambio
write (0, 15, 90, 0, "Telefono de Roberto tras cambiarlo : " +  *plnValor);

//Por ultimo, conocemos un numero de telefono pero no sabemos a quien pertenece (no sabemos la clave)
//Debemos usar iterador, que es un puntero a un elemento de la estructura (no es el propio valor aun)
//e ir recorriendo la tabla con el iterador para comparar con nuestro numero
plIterador = fscl_hash_begin (0); //posicion inicial de la tabla

while ( !fscl_iter_equals ( plIterador, fscl_hash_end(0) ) ) //usamos la funcion iter_equals para comparar iteradores (end es el final de la tabla)

//obtenemos valor del iterador
plnValor = fscl_hash_data_get ( plIterador );

if ( *plnValor == 4568971 ) //telefono que conocemos
break;
else
//avanzamos iterador si aun no hemos encontrado el telefono
plIterador = fscl_hash_next (plIterador);
end
end

//comprobamos que el iterador no sea NULL (variables),
//tambien deberia comprobarse que no sea (hash_end) aunque sabemos que no lo será, pero hay que asegurar
//mostramos clave del iterador
if ( !fscl_iter_equals ( plIterador, NULL ) )
write (0, 15, 110, 0, "De quien es el numero de telefono 4568971? " + fscl_hash_key_get (plIterador) );
end

//obtenemos y eliminamos el telefono de maria y mostramos numero de elementos
plnValor = fscl_hash_remove ( 0, "Maria" );
write (0, 15, 130, 0, "Numero elementos tras eliminar telefono Maria ("+ *plnValor+"): "+ fscl_hash_count(0) );

//liberamos memoria porque ya no estará (puntero) en la tabla
free (plnValor);

//***
//Añadimos colores a dos listas y unimos las dos listas en una
//
write (0, 5, 170, 0, "Listas enlazadas a la que se agregan varios colores, y a las que se fusionan finalmente" );

plnColor = alloc ( sizeof ( TCOLOR ) ); //blanco
plnColor.r = 255;
plnColor.g = 255;
plnColor.b = 255;

fscl_list_push_front ( 0, plnColor ); //agregamos al principio lista 0

plnColor = alloc ( sizeof ( TCOLOR ) ); //rojo
plnColor.r = 255;
plnColor.g = 0;
plnColor.b = 0;

fscl_list_push_front ( 0, plnColor ); //agregamos al principio lista 0

write (0, 15, 190, 0, "Numero de colores lista 1: " + fscl_list_count (0) );

plnColor = alloc ( sizeof ( TCOLOR ) ); //negro
plnColor.r = 0;
plnColor.g = 0;
plnColor.b = 0;

fscl_list_push_back ( 1, plnColor ); //agregamos al final

plnColor = alloc ( sizeof ( TCOLOR ) ); //verde
plnColor.r = 0;
plnColor.g = 255;
plnColor.b = 0;

fscl_list_push_back ( 1, plnColor ); //agregamos al final

plnColor = alloc ( sizeof ( TCOLOR ) ); //azul
plnColor.r = 0;
plnColor.g = 0;
plnColor.b = 255;

fscl_list_push_back ( 1, plnColor ); //agregamos al final

write (0, 15, 210, 0, "Numero de colores lista 2: " + fscl_list_count (1) );

//mostramos primer color de la lista 1
plnColor = fscl_list_front ( 0 ); //obtenemos primer color lista 1

write (0, 15, 230, 0, "Primer color lista 1 (RGB): " + plnColor.r + " "+ plnColor.g + " " + plnColor.b );

//unimos las dos listas y mostramos numero de elementos, al unir lista 2 ya no es valida
fscl_list_join ( 0, 1 );

write (0, 15, 250, 0, "Numero de colores lista 1 tras unirse con la 2: " + fscl_list_count (0) );

//eliminamos el ultimo color de la lista 1 y lo mostramos
plnColor = fscl_list_pop_back ( 0 );

write (0, 15, 270, 0, "Ultimo color eliminado (RGB) y numero de elementos lista 1 tras eliminarlo: "
+ plnColor.r + " "+ plnColor.g + " " + plnColor.b+" - " + fscl_list_count (0) );

free ( plnColor ); //eliminamos tras sacarlo de la lista

//mostramos nuevo ultimo color
plnColor = fscl_list_back ( 0 ); //obtenemos primer color lista 1

write (0, 15, 290, 0, "Ultimo color lista 1 (RGB): " + plnColor.r + " "+ plnColor.g + " " + plnColor.b );

//invertimos lista y mostramos ultimo color
fscl_list_reverse ( 0 );

//mostramos nuevo ultimo color tras invertir
plnColor = fscl_list_back ( 0 ); //obtenemos primer color lista 1

write (0, 15, 310, 0, "Ultimo color lista 1 al invertir lista (RGB): " + plnColor.r + " "+ plnColor.g + " " + plnColor.b );

repeat
frame;
until ( key(_esc) )

//Debemos eliminar la memoria reservada en los elementos que se encuentran en las estructuras, para ello usamos iteradores

//hash (valores enteros)
plIterador = fscl_hash_begin (0);

while ( !fscl_iter_equals ( plIterador, fscl_hash_end(0) ) )

//obtenemos valor del iterador
plnValor = fscl_hash_data_get ( plIterador );

free (plnValor);

plIterador = fscl_hash_next ( plIterador );
end

fscl_hash_erase (0);

//lista (valores colores)
plIterador = fscl_list_begin (0);

while ( !fscl_iter_equals ( plIterador, fscl_list_end(0) ) )

//obtenemos color del iterador
plnColor = fscl_list_data_get ( plIterador );

free (plnColor);

plIterador = fscl_list_next ( plIterador );
end

fscl_list_erase (0);

//Borramos estructuras creadas
fscl_hash_del (0);
fscl_list_del (0);
fscl_list_del (1);

//Eliminamos estructuras/contenedores
fscl_destroy_hashes();
fscl_destroy_lists();

END

DCelso

oh, te me has adelantado, recordaba alguna lib para tratamiento de TDAs pero no sabía si era para Bennu o para Fenix, y haciendo búsquedas por el foro no la encontraba, gracias. Parece ser que para bennu no está.

Pero si se puede hacer en codigo bennu mejor que mejor porque no dependeríamos de portar la lib a otros sistemas como wiz o gp2x.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Phoenix

Creo que el codigo de la pila podria valer. Es algo parecido a lo que estoy usando, un array en el que tengo todos los ids de los procesos carta. Al "echar" una de las cartas y usarla para ir completando el solitario, tienes que "bloquearla", para que cuando pasemos todas las cartas del mazo, se vuelva a formar pero sin coger las cartas ya usadas...


folken

Oye te felicito ya lo baje esta muy entretenido, como lo ejecuto en una Wiz?, un amigo tiene una, ya se lo pase pero no sabe como ejecutarlo.
Where reality ends, life begins!

SplinterGU

Quote from: FreeYourMind on March 26, 2010, 06:18:34 AM
Quote from: SplinterGU on March 26, 2010, 03:29:43 AM
la version que subio aca el autor no es la ultima... no entiendo la redaccion de tu texto...

por que no esta el prg en esta version que subiste? si el autor los puso, no entiendo esa mania de quitar los fuentes...

las teclas no funcionan, porque cada vez que se hace let_me_alone, hay que llamar nuevamente al controlador de teclas.

Splinter, es que no te lees las cosas ? La ultima version no tiene fuentes (son antiguas a diferencia del dcb, quieres que te lo repita de nuevo ?), hombre creo que ya te ha dicho más de uno por aqui que antes de hablar te leas bien las cosas...

la verdad que ya cansan un poquito con eso de que no leo las cosas... la verdad es que ninguno se detiene a pensar que no soy español, y que Uds. tampoco redactan las cosas en neutro... o se comen signos de puntuacion... lo lei, como 3 veces... nunca dijiste claramente "no vienen los fuentes..." usaste una redaccion del texto que a mi punto de verlo no es correcta...

Bueno, lo que dices es incorrecto, porque yo baje la version de este post http://forum.bennugd.org/index.php?topic=1251.msg19768#msg19768 que el usuario dijo era la ultima actualizada, y venia con el source (dicho link ya no esta)... y para mi esa es la valida, la que da el autor, no la que empaquetamos nosotros... y como ya dije la valida no funciona...

yo creo que al que no leen es a mi...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

ahora vuelvo a bajar la del primer post... que veo subio el autor ayer...

gracias a ambos...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2