Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: loko17 en Noviembre 25, 2011, 12:32:41 PM

Título: Simplificar codigo [Solucionado]
Publicado por: loko17 en Noviembre 25, 2011, 12:32:41 PM
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 :)
Título: Re: Simplificar codigo
Publicado por: MaanuRP en Noviembre 25, 2011, 03:33:25 PM
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 ^^
Título: Re: Simplificar codigo
Publicado por: Zeit en Noviembre 25, 2011, 05:44:52 PM
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.
Título: Re: Simplificar codigo
Publicado por: loko17 en Noviembre 25, 2011, 06:29:58 PM
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
Título: Re: Simplificar codigo
Publicado por: Zeit en Noviembre 25, 2011, 07:09:45 PM
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.
Título: Re: Simplificar codigo
Publicado por: loko17 en Noviembre 25, 2011, 07:13:53 PM
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  ;)
Título: Re: Simplificar codigo [Solucionado]
Publicado por: Zeit en Noviembre 25, 2011, 08:02:51 PM
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.