Hola amigos:

Yo s? que todos son muy solidarios y colaboradores, pero la persona que me ha ayudado y conoce la trama de mi juego de probabilidades es killer a quien le debo mucha gratitud. He podido llevar a un 95% este juego, pero despu?s de algunas modificaciones, me ha surgido una dificultad y pido tu ayuda de nuevo.

Aspectos que requiero me ayudes a mejorarle:
1) Las 8 l?neas las puse sobre un background de dos en dos (4 grupos de dos) lo que me provoc? que me salgan 4 hileras con iguales n?meros. Yo quiero que las 8 l?neas me salgan diferentes.
2)Los n?meros amarillos de los aciertos se me han salido de enfoque, necesito alinearlos.

Espero tu ayuda, por favor. Y gracias por anticipado!!!!

Aqu? te dejo el archivo
La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.

El problema con los n?meros repetitivos es que a la hora de dibujarlos dibujas la misma barra dos veces, tanto arriba como abajo:

//Dibuja las 2 primeras Listas superiores de numeros (1 y2)
for(i=0;i<2;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i],j),175+64*j,58+64*i);
 
//Dibuja las 2 segundas Listas superiores de numeros (3 y 4)
for(i=0;i<2;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i],j),175+64*j,210+64*i);
 
 //Dibuja las dos primeras Listas inferiores de numeros (5 y 6)
for(i=2;i<4;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i],j),175+64*j,370+64*i);
 
//Dibuja las dos ?ltimas Listas inferiores de numeros (7 y 8)
for(i=2;i<4;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i],j),175+64*j,530+64*i);


En este caso lo que deb?as hacer era, con cada nuevo for, sumar 2 al i inicial y a su l?mite:

for(i=0;i<2;i+=1) //Dibuja las primeras lineas de numeros
for(i=2;i<4;i+=1) //Dibuja las segundas lineas de numeros
for(i=4;i<6;i+=1) //Dibuja las terceras lineas de numeros
for(i=6;i<8;i+=1) //Dibuja las cuartas lineas de numeros


Hacerlo ahora sin embargo significar?a cambiar las coordenadas en que todo se dibuja, por lo que resulta m?s simple solo sumar la cifra correspondiente al i en Lista, quedar?a as?:

//Declara variables
var i,j;

//Dibuja las 2 primeras Listas superiores de numeros (1 y2)
for(i=0;i<2;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i],j),175+64*j,58+64*i);
 
//Dibuja las 2 segundas Listas superiores de numeros (3 y 4)
for(i=0;i<2;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i+2],j),175+64*j,210+64*i);
 
 //Dibuja las dos primeras Listas inferiores de numeros (5 y 6)
for(i=2;i<4;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i+2],j),175+64*j,370+64*i);
 
//Dibuja las dos ?ltimas Listas inferiores de numeros (7 y 8)
for(i=2;i<4;i+=1)
for(j=0;j<6;j+=1)
 draw_sprite(sprite1,ds_list_find_value(Lista[i+4],j),175+64*j,530+64*i);


En el caso de que los n?meros amarillos, el problema es que hay que tomar en cuenta los nuevos espacios entre las l?neas de n?meros. Puedes remplazar su c?digo de dibujo por este:

for (i=0;i<8;i+=1){
for (j=0;j<6;j+=1){
 if ds_list_find_value(Lista[i],j)=ds_list_find_value(Numeros,j){
  draw_sprite_ext(sprite1,ds_list_find_value(Lista[i],j),175+64*j,58+(24*(i>=2))+(160*(i>=4))+(32*(i>=6))+64*i,1,1,0,c_yellow,1)
 }
}
}


Con esto, cuando est? en la tercera l?nea agrega 24 pixeles de espacio, cuando esta en la quinta agrega otros 160, y en la s?ptima otros 32. Otro error menor es que tenias el for inicial con limite en 4:

for (i=0;i<4;i+=1)

Lo que ocasiona que solo se dibujen los n?meros encontrados en las 4 primeras l?neas.

#2 Abril 23, 2010, 06:58:46 PM Ultima modificación: Abril 23, 2010, 09:55:14 PM por kaliman777
Bueno, otra vez, un mill?n de gracias Killer. He aplicado las correcciones y resultaron en un 100%. Me hubiera resultado muy dif?cil a m? solo. Ahora estoy colocando efectos adicionales, que ya no modifican en nada estos c?digos (sonidos, animaciones y mejorando el SCORE que sigue siendo algo simple).Si algo no me funka, te molestar? de nuevo y desde luego te mereces los cr?ditos correspondientes.

Una cosa que he querido hacer es lograr que los tickets (las 8 l?neas de n?meros)puedan ser elegidos por m?, no al azar (s?lo las bolas al azar). H es tado usando este c?digo pero ahora no s? c?mo lo aplico en el obj_Numeros porque este es invisible, porque antes lo aplicaba directamente sobre el objeto visible. Yo he estado usando:

En create del objeto con sprite numeros:
sprite_n[0]=spr_0;
sprite_n[1]=spr_1;
sprite_n[2]=spr_2;
sprite_n[3]=spr_3;
sprite_n[4]=spr_4;
sprite_n[5]=spr_5;
sprite_n[6]=spr_6;
sprite_n[7]=spr_7;
sprite_n[8]=spr_8;
sprite_n[9]=spr_9;
sprites=10;
sprite=0;


En LEFT PRESSED del mismo objeto:

sprite=(sprite+1)mod sprites;
sprite_index=sprite_n[sprite];


Con esto lograba que al clicar sobre el uno, se cambiara por el dos y as?.

?C?mo logro cambiar manualmente los n?meros (al hacer clic izquierdo el n?mero se cambie al siguiente)?.


Saludos cordiales y gracias de nuevo. Perdona las molestias.
La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.

Si, siendo un solo objeto el que controla los tiquetes hace que sea un tanto complicado. Lo que hay que hacer es comparar la posici?n del mouse con la de los n?meros al hacer click en su area. En este caso tendrias que agregar esto en el evento global left pressed del mouse en el objeto obj_Numeros:

var Valor;
if (mouse_x>151&&mouse_x<535&&mouse_y>34&&mouse_y<162){
Valor = ds_list_find_value(Lista[(mouse_y-34) div 64],(mouse_x-151) div 64) + 1;
if Valor>9 Valor = 0;
ds_list_replace(Lista[(mouse_y-34) div 64],(mouse_x-151) div 64,Valor);
}

else if (mouse_x>151&&mouse_x<535&&mouse_y>186&&mouse_y<314){
Valor = ds_list_find_value(Lista[2+(mouse_y-186) div 64],(mouse_x-151) div 64) + 1;
if Valor>9 Valor = 0;
ds_list_replace(Lista[2+(mouse_y-186) div 64],(mouse_x-151) div 64,Valor);
}

else if (mouse_x>151&&mouse_x<535&&mouse_y>474&&mouse_y<602){
Valor = ds_list_find_value(Lista[4+(mouse_y-474) div 64],(mouse_x-151) div 64) + 1;
if Valor>9 Valor = 0;
ds_list_replace(Lista[4+(mouse_y-474) div 64],(mouse_x-151) div 64,Valor);
}

else if (mouse_x>151&&mouse_x<535&&mouse_y>634&&mouse_y<762){
Valor = ds_list_find_value(Lista[6+(mouse_y-634) div 64],(mouse_x-151) div 64) + 1;
if Valor>9 Valor = 0;
ds_list_replace(Lista[6+(mouse_y-634) div 64],(mouse_x-151) div 64,Valor);
}


Primero checa sobre que area se encuentra el mouse, luego determina sobre que n?mero basado en sus coordenadas, y cambia el n?mero.

Puede que tambien quieras remplazar el for en el evento create por este:

for (i=0;i<8;i+=1){
Lista[i]=ds_list_create();
repeat(6) ds_list_add(Lista[i],0);
}

Gracias de nuevo. Me funcionan muy bien los c?digos, excepto que al hacer en el lado izquierdo del sprite n?mero, quien cambia es la instancia a su izquierda. Prob? cambiando el origen del sprite a centrado y cambia el diagonal superior izquierdo. Pero funciona si hago clic en el lado derecho del sprite, es decir a la derecha del n?mero en el cuadro blanco.

Mis sprites son de 64x64, talvez el tam?ao en el c?digo debe ser cambiado.

De todas formas, te agradezco, as? est? ya bastante jugable, en un par de d?as tendr? la primera versi?n.

Saludos cordiales.
La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.