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

2016/11/4

move

Nosson1459 Nosson1459

2016/11/4

#
import greenfoot.*;

/**
 * A little penguin that wants to get to the other side.
 */
public class Pengu extends Mover
{
    private static final int jumpStrength = 23;
    private int timer=0;
    private int delay=0;
    private static final int gunReload=5;
    
    public void act() 
    {
        Scene scene=(Scene)getWorld();
        if(!scene.pause)
        {
        
            delay++;
            shoot();
            shooting();
            changeMove();
            coins();
            checkKeys();       
            checkFall();
        }
    }
    
    private void checkKeys()
    {
        Scene scene=(Scene)getWorld();
        if (Greenfoot.isKeyDown("left") )
        {
            scene.direction=false;
            if(!scene.shooting)
            {
                setImage("pengu-left2.png");
            }
            else if(scene.shooting=true)
            {
                setImage("pengu-left2Shooting.png");
            } 
            if(!touchingLeftSide())
            moveLeft();
        }
        if(touchingRightSide())
        {
            scene.move=false;
        }
        else if(getX()>=342)
        {
            scene.move=true;
        }
        if (Greenfoot.isKeyDown("right")&&scene.move==false)
        {
            scene.direction=true;
            if(!scene.shooting)
            {
                setImage("pengu-right2.png");
            }
            else if(scene.shooting=true)
            {
                setImage("pengu-right2Shooting.png");
            }
            if(!touchingRightSide())
               moveRight();
        }
        if (Greenfoot.isKeyDown("space") )
        {
            if (onGround())
                jump();
        }
    }    
    
    private void jump()
    {
        setVSpeed(-jumpStrength);
        fall();
    }
    
    private void checkFall()
    {
        if (onGround()) {
            setVSpeed(0);
            Actor under = getOneObjectAtOffset(0, getImage().getHeight()/2 , null);
            if(under!=null)
            {
                int h=under.getImage().getHeight()/2+getImage().getHeight()/2;
                int y=under.getY();
                 setLocation(getX(),y-h);
            }
        }
        else {
            fall();
        }
        
    }
    private void coins()
    {
        Scene scene=(Scene)getWorld();
        Coin coin=(Coin)getOneIntersectingObject(Coin.class);
        if(coin!=null)
        {
            scene.removeObject(coin);
            scene.score=scene.score+100;
            scene.coins=scene.coins+1;
        }
    }
    private void changeMove()
    {
        Scene scene=(Scene)getWorld();
        if(getX()>=342&&scene.onCloud==false&&scene.door==false)
        {
            scene.move=true;
        }
        else if(getX()<342)
        {
            scene.move=false;
        }
        if(scene.door==true)
        {
            scene.move=false;
        }
    }
    private void shoot()
    {
        Scene scene=(Scene)getWorld();
        if(Greenfoot.isKeyDown("Enter")&&delay>=gunReload&&scene.shooting==true)
        {
            if(scene.direction==false)
            {
                scene.addObject(new Bullet(-7),getX()-26,getY());
            }
            if(scene.direction==true)
            {
                scene.addObject(new Bullet(7),getX()+26,getY());
            }
            delay=0;
        }
    }
    private void shooting()
    {
        Scene scene=(Scene)getWorld();
        if(isTouching(Shooting.class))
        {
            scene.shooting=true;
            removeTouching(Shooting.class);
        }
        if(scene.shooting)
        {
            if(scene.direction==false)
            {
                setImage("pengu-left2Shooting.png");
            }
            if(scene.direction==true)
            {
                setImage("pengu-right2Shooting.png");
            }
        }
        else if(!scene.shooting)
        {
            if(scene.direction==false)
            {
                setImage("pengu-left2.png");
            }
            if(scene.direction==true)
            {
                setImage("pengu-right2.png");
            }
        }
    }
}
import greenfoot.*; 
import java.util.List;
/**
 * This is the whole scene. It creates and contains the objects that are in it.
 */
public class Scene extends World
{
    public int turnLeft;
    public int turnRight;
    public int lives=2;
    private int width=750;
    private int height=500;
    public int score=0;
    public int coins=0;
    public int level=1;
    public int addObjects;
    public int objectNumber=0;
    public boolean move=false;
    public boolean direction=true;
    private int a=1;
    public boolean onCloud=false;
    public boolean way=true;
    public boolean shooting=false;
    public boolean pause=false;
    public boolean wasOnCloud=false;
    public boolean door=false;
    public Scene()
    {    
        super(934, 500, 1);    // define size and resolution
        setPaintOrder(HelpBox.class,Blocker.class,GameOver.class,Help.class,Coins.class,Level.class,Life.class,Score.class,Pause.class,Bar.class,Door.class,Pengu.class,DoorPost.class,Paused.class,Box.class,Shooting.class,Snake.class,SnakeD.class,Cloud.class);
        addObject(new Bar(),467,18);
        addObject(new Coins("Coins: "),787,18);
        addObject(new Life("Lives: "),177,18);
        addObject(new Score("Score: "),592,18);
        addObject(new Level("Level: "),362,18);
        addObject(new Blocker(),45,250);
        addObject(new Blocker2(),888,250);
        addObject(new HelpBox(),888,454);
        addObject(new Pause(),110,18);
        level1();
    }
    public void act()
    {
        showText(""+addObjects,467,250);
        if(!pause)
        {
            if(lives<0)
            {
                addObject(new GameOver(),467,250);
                if(score==0)
                {
                    showText(""+score,457,210);
                }
                else if(score>99&&score<1000)
                {
                    showText(""+score,467,210);
                }
                else if(score>999&&score<10000)
                {   
                    showText(""+score,472,210);
                }
                else if(score>9999&&score<100000)
                {
                    showText(""+score,477,210);
                }
                else if(score>99999)
                {
                    showText(""+score,482,210);
                }
                Greenfoot.stop();
            }
            if(coins==100)
            {
                score+=500;
                lives++;
                coins=0;
            }
            if(level==2)
            {
                reset();
            }
            if(Greenfoot.isKeyDown("Right")&&move==true)
            {
                addObjects++;
            }
            if(onCloud==true)
            {
                wasOnCloud=true;
            }
            level1Act();
        }
    }
    public void reset()
    {
        List<Platform> platform=getObjects(Platform.class);
        List<Boxes> box=getObjects(Boxes.class);
        List<Pengu> pengu=getObjects(Pengu.class);
        List<cliffC> cliffC=getObjects(cliffC.class);
        List<CliffA> cliffA=getObjects(CliffA.class);
        List<Cloud> cloud=getObjects(Cloud.class);
        List<Monster> monster=getObjects(Monster.class);
        List<Coin> coin=getObjects(Coin.class);
        List<Bullet> bullet=getObjects(Bullet.class);
        removeObjects(platform);
        removeObjects(bullet);
        removeObjects(box);
        removeObjects(pengu);
        removeObjects(cliffC);
        removeObjects(cliffA);
        removeObjects(cloud);
        removeObjects(coin);
        removeObjects(monster);
        addObjects=0;
        objectNumber=0;
        onCloud=false;
        a=1;
        shooting=false;
        List<Shooting> shooting=getObjects(Shooting.class);
        removeObjects(shooting);
        List<Brick> brick=getObjects(Brick.class);
        removeObjects(brick);
    }
    public void simulation()
    {
        addObject ( new CliffA(), 50, 405);
        addObject ( new cliffC(), 650, 405);
        
        addObject ( new Cloud(), 369, 315 );
        
        addObject ( new Pengu(), 46, 291 );
        
        addObject(new SnakeD(),650,302);
        addObject(new Block(),141,270);
        addObject(new Block(),141,310);
        addObject(new Block(),181,310);
        addObject(new Block(),221,310);
        addObject(new Block(),261,310);
        addObject(new Block(),261,270);
        addObject(new Snake(),201,275);
    }
    public void level1()
    {
        for(int j=112;j<573;j+=40)
        {
            for(int i=360;i<481;i+=40)
            {
                addObject(new Block(),j,i);
            }
        }
        addObject(new Pengu(),192,315);
        for(int i=332;i<493;i+=40)
        {
            addObject(new Box(1),i,240);
        }
        addObject ( new cliffC(), 750, 405);
        addObject(new SnakeD(),750,299);
    }
    private void level1Act()
    {
        if(a==1)
        {
            addObject(new Creature(),532,240);
            a=3;
        }
        if(addObjects==10&&objectNumber==0)
        {
            addObjects=0;
            objectNumber++;
            addObject(new CliffA(2),930,375);
            addObject(new Coin(),930,160);
            addObject(new Coin(),895,160);
        }
        if(addObjects==5&&objectNumber==1)
        {
            addObjects=0;
            objectNumber++;
            addObject(new Coin(),930,160);
        }
        if(addObjects==45&&objectNumber==2)
        {
            addObject(new CliffA(2),930,375);
            addObject(new Cloud(930),780,300);
            addObjects=0;
            objectNumber++;
        }
        if(addObjects==17&&objectNumber==3)
        {
            for(int i=360;i<481;i+=40)
            {
                addObject(new Block(),934,i);
            }
            addObject(new Coin(),934,260);
            addObjects=0;
            objectNumber++;
        }
        if(addObjects==6&&objectNumber==4)
        {
            for(int i=360;i<481;i+=40)
            {
                addObject(new Block(),931,i);
            }
            addObject(new Coin(),931,260);
            addObjects=0;
            objectNumber++;
        }
        if(addObjects==6&&objectNumber==5)
        {
            for(int i=360;i<481;i+=40)
            {
                addObject(new Block(),928,i);
            }
            addObject(new Coin(),928,260);
            addObjects=0;
            objectNumber++;
        }
        if(addObjects==6&&objectNumber==6)
        {
            for(int i=360;i<481;i+=40)
            {
                addObject(new Block(),925,i);
            }
            addObject(new Box(2),925,240);
            addObjects=0;
            objectNumber++;
        }
        if(addObjects>=11&&objectNumber==7&&onCloud==false&&wasOnCloud==true)
        {   
            addObject(new Block(),895,289);
            wasOnCloud=false;
            addObjects=0;
            objectNumber++;
        }
        if(addObjects==12&&objectNumber==8)
        {
            addObject(new cliffC(),934,405);
            addObjects=0;
            objectNumber++;
        }
        if(addObjects==22&&objectNumber==9)
        {
            addObject(new CliffA(2),934,375);
            addObject(new Snake(),934,210);
            addObjects=0;
            objectNumber++;
        }
        if(addObjects==40&&objectNumber==10)
        {
            
            addObject(new Brick(),934,408);
            addObjects=0;
            objectNumber++;
        }
        if(addObjects==10&&objectNumber==11)
        {
            addObject(new Door(),934,283);
            addObject(new DoorPost(),934,283);
            addObjects=0;
            objectNumber++;   
        }
    }
    public void help()
    {
        addObject(new Help(),467,250);
    }
    public void help2()
    {
        List<Help> help=getObjects(Help.class);
        removeObjects(help);
    }
    private void test()
    {
        addObject(new Cloud(561),342,250);
    }
}
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Door here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Door extends Actor
{
    /**
     * Act - do whatever the Door wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        Scene scene=(Scene)getWorld();
        if(!scene.pause)
        {
            pengu();
            nextLevel();
            move();
            remove();
        }
    }   
    private void move()
    {
        Scene scene=(Scene)getWorld();
        if(Greenfoot.isKeyDown("Right")&&scene.move==true)
        setLocation(getX()-7,getY());  
        if(getX()<=750)
        {
            scene.door=true;
        }
        if(scene.onCloud==true)
        {
            if(scene.way==true)
            {
                setLocation(getX()-4,getY());
            }
            if(scene.way==false)
            {
                setLocation(getX()+4,getY());
            }
        }
    }
    private void remove()
    {
        Scene scene=(Scene)getWorld();
        if(getX()<=8)
        {
            scene.removeObject(this);
        }
    } 
    private void nextLevel()
    {
        Scene scene=(Scene)getWorld();
        if(pengu())
        {
            scene.level++;
            Greenfoot.stop();
        }
    }
    private boolean pengu()
    {
        Actor pengu=getOneObjectAtOffset(30,0,Pengu.class);
        return pengu!=null;
    }
}
y doesn't move become false wen door is true
danpost danpost

2016/11/4

#
Nosson1459 wrote...
y doesn't move become false wen door is true
It is possible that the x-coordinate of the Pengu object is less than 342, which would then cause move to be returned back to 'true' (see lines 50 through 52 of the Pengu class above).
Nosson1459 Nosson1459

2016/11/5

#
but I want it to door 2 override move that is if door ==true and x>342 move should = false
danpost danpost

2016/11/5

#
Nosson1459 wrote...
but I want it to door 2 override move that is if door ==true and x>342 move should = false
Then change line 50 of the Pengu class to this:
else if (getX() >=342 && scene.door==false)
You need to login to post a reply.