Div Games Online en Html5 y Javascript

Todo aquello que no está relacionado con Gemix Studio ni con la programación DIV en general.

Re: Div Games Online en Html5 y Javascript

Postby erkosone » Sat Jul 13, 2013 1:35 am

Hola Spiderman, pues es un juego tipo 'Candy crush saga', no es del mismo tipo de gameplay pero el formato de juego es muy similar, respecto a la apariencia no voy a comentar nada mas, quiero programarlo con DivGO por que pienso difundirlo por Facebook y necesito que sea online sin ningún tipo de descarga.

Creo que os gustará, en breve suelto algo mas de info ;)
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Div Games Online en Html5 y Javascript

Postby OscarBraindeaD » Sat Jul 13, 2013 6:26 am

erkosone wrote:Hola Spiderman, pues es un juego tipo 'Candy crush saga', no es del mismo tipo de gameplay pero el formato de juego es muy similar, respecto a la apariencia no voy a comentar nada mas, quiero programarlo con DivGO por que pienso difundirlo por Facebook y necesito que sea online sin ningún tipo de descarga.

Creo que os gustará, en breve suelto algo mas de info ;)


Candy Crush es tipo Match3, no? En su día hice un juego tipo match3 para los de TheGameCreators (que al final no publicaron) y, aunque parecen simples, son bastante enrevesados de hacer a la hora de buscar qué piezas hay que quitar y, cuando quitas éstas, si sigue habiendo nuevas fichas que quitar... tienes que andar embuclando hasta que no haya ningún Match3... un jaleo, al menos para mí!
Ánimo con ello!
OscarBraindeaD
 
Posts: 547
Joined: Fri Mar 27, 2009 8:28 pm

Re: Div Games Online en Html5 y Javascript

Postby erkosone » Sat Jul 13, 2013 4:13 pm

Gracias por los animos Oscar, la verdad es que si.. estos juegos aunque simples en gameplay son bastante complicados en diseño..

Mira tu el diseño del proceso mouse.. y por que lo tengo bien estructurado y modularizado en papel antes.. pero manda webos XD.. tengo que hacer un montón de operaciones para no solapar las listas enlazadas de varios items..
Source Code (Gemix) [ Download ] [ Hide ]
  • process raton();
  • private
  •         int id_;                                // nodo inicial al que se le hace click..
  •         int fila;
  •         int columna;
  •         int celda;
  •         int celdaAnterior;
  •         int xx;
  •         int yy;
  •         int IdNewNodo;
  •         int id2_;                               // cuando cambio de celda guardo aquí el ID de un posible nodo que pueda estár ocupando la nueva celda..
  •         int buffer;
  • begin
  •         id_mouse = id;
  •         graph = map_new( 2,2,1,1,0 );
  •         visible = false;
  •         write(0,200,10,3,&estado);
  •         loop
  •                 x = mouse.x;
  •                 y = mouse.y;
  •                
  •                 switch(estado)
  •                         // estado inicial..
  •                         case 0:
  •                                 id_ = overlap( type nodo );
  •                                 if(mouse.left)
  •                                         if( id_ )
  •                                                 buffer = get_id(type nodo);
  •                                                 while(buffer)
  •                                                         if(buffer.graph == id_.graph)
  •                                                                 buffer.ant = null;
  •                                                                 buffer.sig = null;
  •                                                                 signal(buffer, s_kill);
  •                                                         end
  •                                                         buffer = get_id(type nodo);
  •                                                 end
  •                                                 estado = 10;
  •                                         else
  •                                                 estado = 20;
  •                                         end
  •                                 end
  •                         end
  •                        
  •                         // es extremo o intermedio?
  •                         case 10:
  •                                 if(id_.estado == EXTREMO)
  •                                         // está sin linkar?
  •                                         if(id_.sig == null && id_.ant == null)
  •                                                 estado = 30;
  •                                         else
  •                                                 borrarListaEnlazada( id_ );
  •                                                 estado = 30;
  •                                         end
  •                                 else
  •                                         estado = 40;
  •                                 end
  •                         end
  •                        
  •                         // esperar a que se suelte el mouse..
  •                         case 20:
  •                                 if(!mouse.left)
  •                                         estado = 0;
  •                                 end
  •                         end
  •                        
  •                         // He hecho chick en extremo..
  •                         case 30:
  •                                 fila = (y - 20) / 40;
  •                                 columna = (x - 20) / 40;
  •                                 celda = ( fila * 9 ) + columna;
  •                                 celdaAnterior = celda;
  •                                 estado = 50;
  •                         end
  •                        
  •                         // He hecho click en un intermedio..
  •                         case 40:
  •                                 // eliminar esta lista..
  •                                 borrarListaEnlazada( id_ );
  •                                 estado = 20;
  •                         end
  •                        
  •                         // si cambio de celda..
  •                         case 50:
  •                                 fila = (y - 20) / 40;
  •                                 columna = (x - 20) / 40;
  •                                 celda = ( ( fila ) * 9 ) + columna;
  •                                 if(!mouse.left)
  •                                         estado = 0;
  •                                 end
  •                                 if(estado == 50)
  •                                         if(celda != celdaAnterior)
  •                                                 id2_ = overlap(type nodo);
  •                                                 if(id2_)
  •                                                         estado = 70;
  •                                                 else
  •                                                         estado = 60;
  •                                                 end
  •                                         end
  •                                 end
  •                         end
  •                        
  •                         // Crear nodo intermedio..
  •                         case 60:
  •                                 IdNewNodo = nodo(-1,-1,-1);
  •                                 IdNewNodo.x = 40 + (columna * 40);
  •                                 IdNewNodo.y = 40 + (fila * 40);
  •                                 IdNewNodo.ant = id_;
  •                                 id_.sig = IdNewNodo;
  •                                 celdaAnterior = celda;
  •                                 id_ = IdNewNodo;
  •                                 estado = 50;
  •                         end
  •                        
  •                         // celda ocupada.. es extremo o intermedio?
  •                         case 70:
  •                                 if(id2_.estado == EXTREMO)
  •                                         // es del mismo color que el primer nodo de mi lista?
  •                                         buffer = id_;
  •                                         while(buffer.ant != null)
  •                                                 buffer = buffer.ant;
  •                                         end
  •                                         if(buffer.graph == id_.graph)
  •                                                 // es la otra punta de mi color?
  •                                                 if(id2_.sig == null && id2_.ant == null)
  •                                                         id_.sig = id2_;
  •                                                         id2_.ant = id_;
  •                                                         estado = 20;
  •                                                 else
  •                                                         // soy idiota y estoy intentando conectar el final y el inicio con la misma bola..
  •                                                         estado = 90;
  •                                                 end
  •                                         else
  •                                                 estado = 90;
  •                                         end
  •                                 else
  •                                         estado = 80;
  •                                 end
  •                         end
  •                        
  •                         // eliminar su lista..
  •                         case 80:
  •                                 borrarListaEnlazada( id2_ );
  •                                 estado = 60;
  •                         end
  •                        
  •                         // eliminar mi lista..
  •                         case 90:
  •                                 borrarListaEnlazada( id_ );
  •                                 estado = 20;
  •                         end
  •                 end
  •                
  •                 screen_draw_text(0, "FILA: " + itoa(fila),3,10,10,0);
  •                 screen_draw_text(0, "COLUMNA: " + itoa(columna),3,60,10,0);
  •                 screen_draw_text(0, "CELDA: " + itoa(celda),3,130,10,0);
  •                 screen_draw_graphic(f_main, 3, X, Y, -100, 0);
  •                 frame;
  •         end
  • end



Ya casi me funciona, pero me estoy volviendo tarumba XD.. menos mal que gemix tiene cosas como get_id() y collision a pixelPerfect comparando con un vector 'XY', sin eso ya nativo la locura se dispara y se vuelve demasiado compleja.. y menos mal que gemix tiene la función SIGNAL_SET_BEHAVIOUR(id_, s_kill, s_behaviour_ignore); para protejer objetos y poder trabajar un poco mas a saco sin tanta comprobación..

La verdad es que el lenguaje está muy bien, todas estas cosas ayudan mucho a no tener que construirselas uno mismo.. realmente Gemix tiene cositas que sirven para juegos complicados, me gusta :)


SUGERENCIAS PARA DivGO:
SIGNAL_SET_BEHAVIOUR();
COLLISION( int X, int Y, type process_type );
COLLISION( int X, int Y, int process_id );

Estas funciones le vienen muy bien a DivGO Amaka, es posible que las puedas añadir? estoy haciendo el diseño en Gemix por que el código será 99% compatible y así voy mas rápido, pero en cuanto el motor base funcione bien me gustaría escribir el código tal cual para DivGO sin tener que hacerme yo las funciones, puedes añadirlas? son realmente utiles :D
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Div Games Online en Html5 y Javascript

Postby AmakaSt » Sat Jul 13, 2013 7:02 pm

Hola Erkos,

Por el momento para la próxima versión dejo de añadir más funciones, es que si no, no lo tendré listo para antes de agosto. :P

Igualmente me apunto las sugerencias.

fade_on( int milisegundos );
fade_off( int milisegundos );


Esto también estará disponible en la 0.28, ya lo tengo preparado. fade_on(velocidad); //velocidad va de 0 a 64 como con fade()

Los juegos como Candy crush saga parecen fáciles de programar pero son bastante complicados, la verdad. Son juegos ideales para viajes cortos en tren o bus, o para partidas rápidas en Facebook (twitter, Google+ u otro) mientras miras tu perfil o alguna frikada. Lo bueno es que tienen una gran cantidad de jugadores a diario, con un pequeño banner o algo de publicidad, o comprar avances (monedas, corazones o lo que sea) para jugar, sacas pasta fijo. :)

Un saludo.
User avatar
AmakaSt
 
Posts: 402
Joined: Fri Oct 03, 2008 10:00 pm

Re: Div Games Online en Html5 y Javascript

Postby erkosone » Sat Jul 13, 2013 7:17 pm

Gracias por tener en cuenta las sugerencias, lo de Facebook sería bueno tenerlo, es bastante simple tener un script en el servidor que guarde en un archivo la llave para la conexión y que postee en tu muro, yo lo hice en php a pelo desde cmd y funciona bien, lo tengo implementado en uno de los servidores online programados en Gemix, el servidor está en mi casa y con el servidor php local puedo conectar a facebook y postear.
El único problema es crear ya nativo algo en DivGo a modo de formulario emergente que te pida tus datos de conexión y que sea seguro, en eso no tengo ni idea de como hacerlo, pero vaya.. que para eso estás tu jajajaja..
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Div Games Online en Html5 y Javascript

Postby erkosone » Sun Jul 14, 2013 2:58 pm

Que pasada, ya me funciona bien el algoritmo de listas enlazadas!!!
Estoy flipando, por primera vez en mi vida creo que tengo un juego interesante de verdad XD..
Voy a usar al único beta tester cruel de nacimiento que nocozco jaja.. a Pinger.. si por lo menos me dice "bueno.. es una mierda pero engancha" será que está listo jajaja...

Ahora en serio, prepararé unos cuantos niveles y algún añadido y ya tengo juego para estrenar este año, espero que os guste, quedará online mediante DivGO y descargable para windows/mac mediante Gemix.
En breve algún vídeo del game play, pero es bastante simple, se juega con el dedo en mobile y con el mouse en desktop, va a tener mas de 100 levels para jugar!
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Div Games Online en Html5 y Javascript

Postby AmakaSt » Mon Jul 15, 2013 11:21 pm

Bien, pues ahora ya doy por finalizada la versión 0.28.

Mañana si todo va bien lo subo online y para descarga. Ahora solo me falta actualizar la documentación y listo. :)

Un saludo.
User avatar
AmakaSt
 
Posts: 402
Joined: Fri Oct 03, 2008 10:00 pm

Re: Div Games Online en Html5 y Javascript

Postby erkosone » Tue Jul 16, 2013 7:27 am

Genial!
Solo por hacer memoria jeje.. ya cuando puedas..

screen_draw_graphic()
screen_draw_text()

Son dos que no pueden faltar jeje.. en su día lo sugerí para Gemix, lo he sugerido para otros lenguajes, y lo sugiero para DivGO, son 2 funciones geniales para pintar sobras, efectos, e incluso todo un juego desde un proceso si se quiere, además de que aumentan el performance un montón :0'
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Div Games Online en Html5 y Javascript

Postby AmakaSt » Tue Jul 16, 2013 9:27 am

Esas funciones para próximas versiones de DivGO, en cada versión intento añadir funciones nuevas y viejas (originales de Div).
Tendré que preguntarte cosas sobre las funciones que me planteas, necesito saber que hacen para poder programarlas, esto en el caso de las que pusiste el otro día: SIGNAL_SET_BEHAVIOUR(); COLLISION( int X, int Y, type process_type || int process_id );

Un saludo.
User avatar
AmakaSt
 
Posts: 402
Joined: Fri Oct 03, 2008 10:00 pm

Re: Div Games Online en Html5 y Javascript

Postby erkosone » Tue Jul 16, 2013 2:47 pm

SignalSetBehaviour permite configurar un filtro para una señal a un ID_process o a un tipo de proceso, lo que hace es permitir que no tenga efecto una señal o que si tenga efecto.
collisionXY es para comprobar si un vector 2D colisiona con un gráfico, osea, si en las coordenadas X Y hay colisión con el proceso indicado, obviando que se compara con una imagen de 1 pixel claro.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

PreviousNext

Return to Offtopic

Who is online

Users browsing this forum: No registered users and 5 guests

cron