This site requires JavaScript, please enable it in your browser!
Greenfoot back
BreakingKratos
BreakingKratos wrote ...

2016/1/23

Need help with my gamecode.

BreakingKratos BreakingKratos

2016/1/23

#
Hello everyone I have a problem with my gamecode. I have a counter (= teller) in my game. Once the counter gets past a certain amount of time, a new image will be displayed for the current actor. The images are stored in an array. The actual problem is that the code for the counter gets very long and repeating. I am looking for a way to make this easier and less long. Here is my code:
public class FireRateUp extends PowerUps
{
                    
    private String [] FireUp = {"PowerUp/power0.png","PowerUp/power1.png","PowerUp/power2.png","PowerUp/power3.png",
            "PowerUp/power4.png","PowerUp/power5.png","PowerUp/power6.png","PowerUp/power7.png","PowerUp/power8.png",
            "PowerUp/power9.png"};

    private int teller;

    public FireRateUp()
    {
        teller = 0;
    }

    private String getIndexFireUp (int index)
    {
        if(index >= 0 && index < FireUp.length)
        {
            return FireUp[index];
        }
        else
        {
            return "";
        }
    }

    public void act() 
    {
        beweging(); 
        animatie(); // this is the animation my character does
        eindeVeldBereikt();
    }    

    public void animatie()
    {
        if(teller == 0)
        {
            setImage(getIndexFireUp(0));
        }

        else if (teller == 10)
        {
            setImage(getIndexFireUp(1));
        }

        else if (teller == 20)
        {
            setImage(getIndexFireUp(2));
        }

        else if (teller == 30)
        {
            setImage(getIndexFireUp(3));
        }

        else if (teller == 40)
        {
            setImage(getIndexFireUp(4));
        }

        else if (teller == 50)
        {
            setImage(getIndexFireUp(5));
        }

        else if (teller == 60)
        {
            setImage(getIndexFireUp(6));
        }
        else if (teller == 70)
        {
            setImage(getIndexFireUp(7));
        }
        else if (teller == 80)
        {
            setImage(getIndexFireUp(8));
        }
        else if (teller == 90)
        {
            setImage(getIndexFireUp(9));
            teller = 0;
            return;
        }
        
        teller = teller + 1;
    }
danpost danpost

2016/1/23

#
You can use the remainder operation (or modulus function). Its symbol is the percent sign '%'. The 'animatie' method could then be written as follows:
public void animatie()
{
    if (teller%10 == 0)
    {
        setImage("PowerUp.power"+(teller/10)+".png");
    }
    teller = (teller+1)%100;
}
With this, you can remove the 'FireUp' String array (lines 4 through 6) and the 'getIndexFireUp(int)' method (lines 15 through 25). You should even be able to remove the constructor (lines 10 through 13) as the initial value of 'teller' will be zero by default.
BreakingKratos BreakingKratos

2016/1/23

#
It works! Thanks a lot for your help, I really appreciate it.
You need to login to post a reply.