Calculating the ratio distance To Item/worth Of Item


#1

Hi again guys, i was curious to see if it’s possible to calculate the ratio of distance/worth of an item.

How would you write it?
I tried writing my own, but don’t know if it’s really working,
because my hero looks very indecisive while he’s running from coin to coin
(by that i mean that he keeps on turning and it seems like he’s running slower than he should)

so this is my code, I based it on the model of finding the closest coin not using the findNearest function

this.pickUpCoin = function(){
    items = this.findItems();
    maxRatio = 0;
    for(i=0;i<items.length;i++){
        item = items[i];
        ratio = item.value/this.distanceTo(item);
        if (ratio>maxRatio) maxRatio = ratio;
        items[i].ratio = ratio;
    }
    for(i=0;i<items.length;i++){
        if (items[i].ratio>=maxRatio){
            this.move(items[i].pos);
        }
    }
};

thanks a bunch!


#2

You’re probably having problems because items[i] is API-protected–writing to the coin itself is not allowed and probably doesn’t work very well. Try this more standard way of keeping track of both maxRatio and that item which it refers to, maxRatioCoin:

this.pickUpCoin = function(){
    var items = this.findItems();
    var maxRatio = 0;
    var maxRatioCoin = null;
    for (i=0; i<items.length; i++){
        var item = items[i];
        var ratio = item.value / this.distanceTo(item);
        if (ratio > maxRatio) {
            maxRatio = ratio;
            maxRatioCoin = item;
        }
    }
    if (maxRatioCoin) {
        this.move(maxRatioCoin.pos);
    }
};

#3

Thank you very much! in the end it didn’t make a very big difference in effectiveness :blush: