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

2021/1/13

help boss crashes game

1
2
danpost danpost

2021/1/14

#
danpost wrote...
Change line 53 to:
else if (start == false)
Your code does not reflect this (needs a double equal sign -- "==").
Sakuya Sakuya

2021/1/14

#
Ok im mostly done can you help me with one last thing? Im mostly done with the game and this is the last problem I have, the boss acts normaly now but it dosnt seem to enter its second stage (line 123). Youve been a great help and I really apreaciate it but if ur already annoyed of me I understand.
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Sakuya here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Sakuya extends Actor
{
    private int timer = 0;
    int health = 2000;
    private Counter counter;
    private BulletSpawner bulSpawn, bulSpawn2, bulSpawn3, bulSpawn4;
    private Powerup[] pw = new Powerup[5];
    private Bullet[] bul = new Bullet[50];
    private SPortrait portrait;
    private GreenfootSound sakuyaSnd = new GreenfootSound("sakuyaBattle.mp3");
    private GreenfootSound stageSnd = new GreenfootSound("scarletMansion.mp3");
    private GreenfootSound winSnd = new GreenfootSound("winSound.mp3");
    private GreenfootSound bulfire = new GreenfootSound("enemybullet.wav");
    private GreenfootSound timerSnd = new GreenfootSound("countdown.wav");
    private GreenfootSound spellActSnd = new GreenfootSound("spellactivate.wav");
    private GreenfootSound spellCapSnd = new GreenfootSound("spellcapture.wav");
    private GreenfootSound bossDeathSnd = new GreenfootSound("bossDefeat.wav");
    private GreenfootSound deathSnd = new GreenfootSound("bossDefeat.wav");
    private boolean dead = false;
    private int steps = 20;
    private int invulnTimer = 0;
    private int destinX, destinY, distX, distY;
    private int patternTog = 1;
    private int spawnTog = 1;
    private int bossState = 1;
    private int animTimer = 0;
    private boolean start = false;
    private boolean shotsFired = false;
    private boolean spellActive = false;
    
    /**
     * Act - do whatever the Sakuya wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    { 
         Actor Shot = getOneIntersectingObject(Shot.class);
            if (Shot != null)
           {
                health = health - 1;
                getWorld().removeObject(Shot);
           }
           if(getY() < 150)
           {
               setLocation(getX(), getY() + 2); 
               return;
           }
           if (invulnTimer <= 150)
           {
                invulnTimer++;
                return;
            }
            else if(start == false)
            {
                SakuyasWorld sk =(SakuyasWorld)getWorld();
                timer = 0;
                invulnTimer = 0;
                counter = new Counter();
                sk.addObject(counter, 510, 40);
                counter.setValue(30);
                stageSnd.stop();
                sakuyaSnd.playLoop();
                start = true;
            }
        
        if (start == true && dead == false)
        {
            if (bossState == 1)
            {
              if (timer%25 == 0)
                {
                    //Switch between 2 bullet patterns
                    if (patternTog == 1)
                    {
                        bulfire.play();
                        spawnBul();
                    }
                    if (patternTog == 2)
                    {
                        bulfire.play();
                        spawnBul2();
                    }
                }
                //Generates new destination target
                if (timer == 150)
                {
                    gen();
                    if (patternTog == 1)
                    {
                        patternTog = 2;
                    }
                    else
                    {
                        patternTog = 1;
                    }
                    timer = 0;
                }
                //Shifts to a new location in 16 moves
                if (steps < 16)
                {
                    setLocation(getX() + advX(), getY() + advY());
                }
                hitCheck();
                hpCheck();
                steps++;
                if (counter.getValue() == 0)
                {
                    health = 1000;
                }
                if (health <= 1000)
                {
                    bossState = 2;
                    counter.setValue(40);
                }
                if(bossState == 2)
                { 
                  if (invulnTimer < 151){
                    if (invulnTimer == 0){
                        SakuyasWorld sk =(SakuyasWorld)getWorld();
                        portrait = new SPortrait();                        
                        portrait.getImage().setTransparency(0);
                        sk.addObject(portrait, 378, 340);
                        spellActSnd.play();
                        sk.addScore(20000);
                        for (int i = 0; i < 5; i++){
                            pw[i] = new Powerup();
                        }
                        sk.addObject(pw[0], getX(), getY());
                        sk.addObject(pw[1], getX() + 10, getY());
                        sk.addObject(pw[2], getX() - 10, getY());
                        sk.addObject(pw[3], getX(), getY() + 10);
                        sk.addObject(pw[4], getX(), getY() - 10);
                        spellLoc();
                    }
                    invulnTimer++;
                    if (steps < 16){
                        setLocation(getX() + advX(), getY() + advY());
                    }
                }
                //Get all values ready
                if (invulnTimer == 151){
                    SakuyasWorld sk =(SakuyasWorld)getWorld();
                    bulSpawn = new BulletSpawner();
                    sk.addObject(bulSpawn, getX(), getY());
                    timer = 100;
                    invulnTimer = 152;
                }
                //Spell is active
                if (invulnTimer == 152){
                    bulSpawn.setLocation(getX(), getY());
                    if (timer%45 == 0){
                        bulSpawn.spawnBul();
                    }
                    if (steps < 65 && spellActive == true){
                        bul[1].move(-1);
                        bul[2].move(-2);
                        bul[3].move(-3);
                        bul[4].move(-4);
                    }
                    if (steps > 65 && steps < 75 && spellActive == true){
                        Actor reimu = (Actor)getWorld().getObjects(Reimu.class).get(0); 
                        for (int i = 0; i < 8; i++){
                            bul[i].turnTowards(reimu.getX(), reimu.getY());
                        }
                    }
                    if (steps > 75 && spellActive == true){
                        for (int i = 0; i < 8; i++){
                            bul[i].move(3);
                        }
                    }
                    hitCheck();
                    hpCheck();
                    steps++;               
                }
                  if (counter.getValue() == 0)
                  {
                        health = 0;
                        dead = true;
                  }
            }
            timer++;
            if (timer%50 == 0){
                counter.setValue(counter.getValue() - 1);
                if (counter.getValue() <= 10){
                    timerSnd.play();
                }
            }     
        if (dead == true){
            if (animTimer == 1){
                bulfire.stop();
                deathSnd.play();
                setImage("explode1.png");
            }
            if (animTimer == 6){
                setImage("explode2.png");
            }
            if (animTimer == 11){
                setImage("explode3.png");
            }
            if (animTimer == 15){
                setImage("explode4.png");
            }
            if (animTimer == 19){
                SakuyasWorld sk =(SakuyasWorld)getWorld();               
                sk.removeObject(counter);
                sk.removeObject(this);
                sk.addScore(20000);
                bossDeathSnd.play();
                WinScreen win = new WinScreen();
                sk.addObject(win, 277, 258);
                sakuyaSnd.stop();
                winSnd.play();
                Greenfoot.stop();
            }
            animTimer++;
        
             
         }  
        }
       }
     }
    
      public void hpCheck()
      {
        if (health <= 0){
            SakuyasWorld sk =(SakuyasWorld)getWorld();
            sk.setScore(sk.getScore() + 99999);
            dead = true;
        }
      }
       public int getHealth()
      {
        return health;
      }
      public void spellLoc(){
        destinX = 277;
        destinY = 166;
        steps = 0;
    }
       public void spawnBul()
    {
        Actor reimu = (Actor)getWorld().getObjects(Reimu.class).get(0);
        SakuyasWorld sk =(SakuyasWorld)getWorld();
        for (int i = 0; i < 7; i++)
        {
            bul[i] = new Bullet();
            sk.addObject(bul[i], getX(), getY());
            bul[i].setImage("cherryknife.png");
            bul[i].turnTowards(reimu.getX(), reimu.getY());
        }
        bul[0].turn(45);
        bul[1].turn(30);
        bul[2].turn(15);
        bul[4].turn(-15);
        bul[5].turn(-30);
        bul[6].turn(-45);
      }
     public void spawnBul2()
     {
        SakuyasWorld sk =(SakuyasWorld)getWorld();
        for (int i = 0; i < 10; i++){
            bul[i] = new Bullet();
            sk.addObject(bul[i], getX(), getY());
            bul[i].setImage("cherryknife.png");
        }
        bul[0].setRotation(40);
        bul[1].setRotation(80);
        bul[2].setRotation(120);
        bul[3].setRotation(160);
        bul[4].setRotation(200);
        bul[5].setRotation(240);
        bul[6].setRotation(280);
        bul[7].setRotation(320);
        bul[8].setRotation(360);
    }
    public void gen(){
        destinX = Greenfoot.getRandomNumber(250) + 50;
        destinY = Greenfoot.getRandomNumber(100) + 50;
        steps = 0;
    }
    public int advX()
    {  
        distX = destinX - getX();        
        return distX/15;
    }
    public int advY()
    {
        distY = destinY - getY();
        return distY/15;
    }
     public void hitCheck()
    {
        Actor Shot = getOneIntersectingObject(Shot.class);
        if (Shot != null)
        {
          health = health - 1;
          getWorld().removeObject(Shot);
        }
    }

}
Sakuya Sakuya

2021/1/14

#
Still dosnt enter the second stage
Super_Hippo Super_Hippo

2021/1/14

#
The statement will never be true because it is inside the if-block starting in line 76. That if-block has to end before asking if bossState equals 2.
Sakuya Sakuya

2021/1/14

#
Thanks it worked !
You need to login to post a reply.
1
2