Saludos gente , llego con un problemilla y es que estoy intentando hacer mi propia tabla de puntuaciones , uso el siguiente codigo para ver si la puntuacion es mayor a las sacadas anteriormente blablabla ..
[gml]if total>global.hof[1,0] and total>50 {instance_create(obj_player.x,obj_player.y,obj_hof);sound_play(snd_global) global.hof[5,0]=global.hof[4,0] global.hof[4,0]=global.hof[3,0] global.hof[3,0]=global.hof[2,0] global.hof[2,0]=global.hof[1,0] global.hof[1,0]=total}
else if total>global.hof[2,0] and total<global.hof[1,0] and total>50 {instance_create(obj_player.x,obj_player.y,obj_hof);sound_play(snd_global) global.hof[5,0]=global.hof[4,0] global.hof[4,0]=global.hof[3,0] global.hof[3,0]=global.hof[2,0] global.hof[2,0]=total}
else if total>global.hof[3,0] and total<global.hof[2,0] and total>50 {instance_create(obj_player.x,obj_player.y,obj_hof);sound_play(snd_global) global.hof[5,0]=global.hof[4,0] global.hof[4,0]=global.hof[3,0] global.hof[3,0]=total}
else if total>global.hof[4,0] and total<global.hof[3,0] and total>50 {instance_create(obj_player.x,obj_player.y,obj_hof);sound_play(snd_global) global.hof[5,0]=global.hof[4,0] global.hof[4,0]=total}
else if total>global.hof[5,0] and total<global.hof[4,0] and total>50 {instance_create(obj_player.x,obj_player.y,obj_hof);sound_play(snd_global) global.hof[5,0]=total}
else if total<global.hof[5,0] and total>50 {instance_create(obj_player.x,obj_player.y,obj_global);sound_play(snd_global)}[/gml]
Funciona a la perfeccion hace lo que quiero que haga , pero... como veis creo que es un codigo basto a no poder mas hehe asi que como seguro que hay alguna formula para simplificar semejante codigo (que tengo que poner en muchos objetos) pero siempre se me dieron fatal las formulas o no soy capar de verlas y no doy con nada que haga la misma funcion.
Mas que nada quisiera algo mas simple porque digamos que el array global.hof sera una lista de 100 y no 5 como lo tengo hay ... podeis imaginar el caos hehe
Gracias de antemano a el genio de las mates (o por lo menos no estupido como yo) que me ayude con este caos mental :)
Para lo unico que se me ocurre la solucion es para que no escribas el codigo en todos los objetos.
Haz un script y ponle el codigo este, entonces despues en los objetos que van a tener este codigo, activa este script y listo, asi no tienes que estar copiando el codigo en cada objeto, ademas que si cambias algo seria un desastre estar cambiando todo.
Para simplificar el codigo no se me ocurre nada, estoy dormido xD
Cualquier cosa edito ^^
Hola, esta es mi opcion, si me dices que pasa con el valor cero del primer indice para el arreglo, es decir, global.hof[0,0], quiza pueda simplificarlo.
[gml]
if(total>50)
{
if(global.hof[1,0]<total)
{
var j;
for(j=5;j>=2;j-=1;)
{
global.hof[j,0]=global.hof[j-1,0];
}
global.hof[1,0]=total;
instance_create(obj_player.x,obj_player.y,obj_hof);
sound_play(snd_global);
}
else
{
if(total<global.hof[5,0])
{
instance_create(obj_player.x,obj_player.y,obj_hof);
sound_play(snd_global);
}
else
{
var i;
for(i=2;i<=5;i+=1;)
{
if(global.hof[i,0]<total)
{
if(total<global.hof[i-1,0])
{
var j;
for(j=5;j>=(i+1);j-=1;)
{
global.hof[j,0]=global.hof[j-1,0];
}
global.hof[i,0]=total;
instance_create(obj_player.x,obj_player.y,obj_hof);
sound_play(snd_global);
break;
}
}
}
}
}
}
[/gml]
EDIT: Por cierto, haz caso a lo que dice MaanuRP y copia este codigo en un script, despues llama el script donde desde donde lo necesites.
No estoy seguro si preguntas esto , uso global.hof[0,0] porque habra 3 tablas diferentes y lo uso para dibujar el nombre de la tabla entonces esta asi..
global.hof[0,0]="hunting"
...
global.hof[5,0]=asdf
global.hof[0,1]="mining"
...
global.hof[5,1]=asdf
global.hof[0,2]="crafting"
...
global.hof[5,2]=asdf
Si causa algun problema lo puedo quitar y solo poner las puntuaciones en esa array, si no es esa la pregunta y entendi mal perdon :)
Sobre el codigo que pusiste dejame que le heche un vistazo, lo prueve y te digo que tal.
Gracias por la ayuda .. solo ver la formula me da miedo ya xDD como para dar yo con ella... espero que no necesite hacer muchas hehe
Hola, ya lo pense y aunque el primer valor sea en el indice cero el codigo reria el mismo solo se recorre un indice atras (1 por 0, 2 por 1 y 5 por 4), checalo, espero que te sirva, puedes usar un arreglo para los nombres. saludos.
Funciona a la perfeccion y lo puse en un script como recomendasteis , mucho mas simple y limpio.
Muchas gracias a los 2 , karma en camino ;)
Hola, de hecho si pasas los nombres a otro arreglo, por ejemplo, globa.hof_name, y fijas un valor minimo y maximo para el arreglo global.hof, por ejemplo 50 y 999999, el codigo puede ser algo como:
En el evento create:
[gml]global.hof[0,0]=999999;//valor maximo inalcansable, es decir, obsenamente grande...
global.hof[6,0]=50;//valor minimo...[/gml]
En el evento que requieres:
[gml]var i;
for(i=1;i<=5;i+=1;)
{
if(global.hof[i,0]<total)
{
if(total<global.hof[i-1,0])
{
var j;
for(j=5;j>=(i+1);j-=1;)
{
global.hof[j,0]=global.hof[j-1,0];
}
global.hof[i,0]=total;
instance_create(obj_player.x,obj_player.y,obj_hof);
sound_play(snd_global);
break;
}
}
}[/gml]
Saludos.