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()
{
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);
List<Door> door=getObjects(Door.class);
removeObjects(door);
List<DoorPost> doorPost=getObjects(DoorPost.class);
removeObjects(doorPost);
}
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,320);
for(int i=332;i<493;i+=40)
{
addObject(new Box(1),i,240);
}
addObject ( new cliffC(), 750, 405);
addObject(new SnakeD(),750,299);
addObject(new Box(6),750,200);
}
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 Box here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Box extends Boxes
{
private GreenfootImage image1=new GreenfootImage("mystery.png");
private GreenfootImage image2=new GreenfootImage("MysteryG.png");
private GreenfootImage image3=new GreenfootImage("Block.png");
private GreenfootImage image4=new GreenfootImage("transparentBox.png");
private int timer=0;
private boolean hit=false;
private int counter=0;
private boolean empty=false;
private boolean coin=false;
private boolean shooting=false;
private boolean invisible=false;
private boolean extraLife=false;
public boolean isThere=true;
public Box(int type)
{
if(type==1)
{
invisible=false;
coin=true;
shooting=false;
extraLife=false;
}
if(type==2)
{
invisible=false;
shooting=true;
coin=false;
extraLife=false;
}
if(type==3)
{
invisible=false;
shooting=false;
coin=false;
extraLife=true;
}
if(type==4)
{
invisible=true;
coin=true;
shooting=false;
extraLife=false;
isThere=false;
}
if(type==5)
{
invisible=true;
coin=false;
shooting=true;
extraLife=false;
isThere=false;
}
if(type==6)
{
invisible=true;
shooting=false;
coin=false;
extraLife=true;
isThere=false;
}
if(invisible==false)
setImage(image1);
if(invisible==true)
setImage(image4);
}
public Box()
{
setImage(image1);
}
/**
* Act - do whatever the Box 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)
{
if(!empty)
{
checkPengu();
hit();
}
move();
remove();
}
}
private boolean checkPengu1()
{
Object under=getOneObjectAtOffset(0,getImage().getHeight()/2+1,Pengu.class);
return under!=null;
}
private boolean checkPengu2()
{
Object under=getOneObjectAtOffset(getImage().getWidth()/2-1,getImage().getHeight()/2,Pengu.class);
return under!=null;
}
private boolean checkPengu3()
{
Object under=getOneObjectAtOffset(-getImage().getWidth()/2+1,getImage().getHeight()/2,Pengu.class);
return under!=null;
}
private void checkPengu()
{
if(checkPengu1()||checkPengu2()||checkPengu3())
{
hit=true;
}
}
private void hit()
{
Scene scene=(Scene)getWorld();
if(hit==true)
{
timer++;
if(counter<6)
{
if(timer==2&&getImage()==image1||getImage()==image4)
{
setImage(image2);
timer=0;
counter++;
}
if(timer==2&&getImage()==image2)
{
setImage(image1);
timer=0;
counter++;
}
}
}
if(counter==5)
{
empty=true;
if(shooting==true)
{
scene.addObject(new Shooting(),getX(),getY());
scene.score=scene.score+100;
}
else if(coin==true)
{
scene.coins++;
scene.score=scene.score+100;
}
else if(extraLife==true)
{
scene.addObject(new ExtraLife(),getX(),getY());
scene.score=scene.score+100;
}
counter=0;
hit=false;
setImage(image3);
}
}
private void move()
{
Scene scene=(Scene)getWorld();
if(Greenfoot.isKeyDown("Right")&&scene.move==true)
setLocation(getX()-7,getY());
if(scene.onCloud==true)
{
if(scene.way==true)
{
setLocation(getX()-4,getY());
}
if(scene.way==false)
{
setLocation(getX()+4,getY());
}
}
}
}import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class Block here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Block extends Boxes
{
/**
* Act - do whatever the Block 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)
{
move();
remove();
}
}
private void move()
{
Scene scene=(Scene)getWorld();
if(Greenfoot.isKeyDown("Right")&&scene.move==true)
setLocation(getX()-7,getY());
if(scene.onCloud==true)
{
if(scene.way==true)
{
setLocation(getX()-4,getY());
}
if(scene.way==false)
{
setLocation(getX()+4,getY());
}
}
}
}import greenfoot.*;
/**
* The class Mover provides some basic movement methods. Use this as a superclass
* for other actors that should be able to move left and right, jump up and fall
* down.
*/
public class Mover extends Actor
{
private static final int acceleration = 2; // down (gravity)
private static final int speed = 7; // running speed (sideways)
private int vSpeed = 0; // current vertical speed
private boolean hasHit=false;
public void moveRight()
{
setLocation ( getX() + speed, getY() );
}
public void moveLeft()
{
setLocation ( getX() - speed, getY() );
}
public boolean onTop()
{
return onTop1()||onTop2()||onTop3();
}
private boolean onTop1()
{
Object under = getOneObjectAtOffset(-getImage().getWidth()/2+8, -getImage().getHeight()/2 , Boxes.class);
return under != null;
}
private boolean onTop2()
{
Object under = getOneObjectAtOffset(0, -getImage().getHeight()/2 , Boxes.class);
return under != null;
}
private boolean onTop3()
{
Object under = getOneObjectAtOffset(getImage().getWidth()/2-8, -getImage().getHeight()/2 , Boxes.class);
return under != null;
}
private boolean onGround1B()
{
Box box = getOneObjectAtOffset(0, getImage().getHeight()/2 , Box.class);
return box != null&&box.isThere==true;
}
private boolean onGround2B()
{
Box box = getOneObjectAtOffset(getImage().getWidth()/2-10, getImage().getHeight()/2 , Box.class);
return box != null||box.isThere==true;
}
private boolean onGround3B()
{
Box box = getOneObjectAtOffset(-getImage().getWidth()/2+10, getImage().getHeight()/2 , Box.class);
return box != null||box.isThere==true;
}
private boolean onGroundB()
{
return onGround1B()||onGround2B()||onGround3B();
}
private boolean onGround1Bc()
{
Object under = getOneObjectAtOffset(0, getImage().getHeight()/2 , Block.class);
return under != null;
}
private boolean onGround2Bc()
{
Object under = getOneObjectAtOffset(getImage().getWidth()/2-10, getImage().getHeight()/2 , Block.class);
return under != null;
}
private boolean onGround3Bc()
{
Object under = getOneObjectAtOffset(-getImage().getWidth()/2+10, getImage().getHeight()/2 , Block.class);
return under != null;
}
private boolean onGroundBc()
{
return onGround1Bc()||onGround2Bc()||onGround3Bc();
}
private boolean onGround1C()
{
Object under = getOneObjectAtOffset(0, getImage().getHeight()/2 , cliffC.class);
return under != null;
}
private boolean onGround2C()
{
Object under = getOneObjectAtOffset(getImage().getWidth()/2-10, getImage().getHeight()/2 , cliffC.class);
return under != null;
}
private boolean onGround3C()
{
Object under = getOneObjectAtOffset(-getImage().getWidth()/2+10, getImage().getHeight()/2 , cliffC.class);
return under != null;
}
private boolean onGroundC()
{
return onGround1C()||onGround2C()||onGround3C();
}
private boolean onGround1Br()
{
Object under = getOneObjectAtOffset(0, getImage().getHeight()/2 , Brick.class);
return under != null;
}
private boolean onGround2Br()
{
Object under = getOneObjectAtOffset(getImage().getWidth()/2-10, getImage().getHeight()/2 , Brick.class);
return under != null;
}
private boolean onGround3Br()
{
Object under = getOneObjectAtOffset(-getImage().getWidth()/2+10, getImage().getHeight()/2 , Brick.class);
return under != null;
}
private boolean onGroundBr()
{
return onGround1Br()||onGround2Br()||onGround3Br();
}
private boolean onGround1CA()
{
Object under = getOneObjectAtOffset(0, getImage().getHeight()/2 , CliffA.class);
return under != null;
}
private boolean onGround2CA()
{
Object under = getOneObjectAtOffset(getImage().getWidth()/2-10, getImage().getHeight()/2 , CliffA.class);
return under != null;
}
private boolean onGround3CA()
{
Object under = getOneObjectAtOffset(-getImage().getWidth()/2+10, getImage().getHeight()/2 , CliffA.class);
return under != null;
}
private boolean onGroundCA()
{
return onGround1CA()||onGround2CA()||onGround3CA();
}
private boolean onGround1Cl()
{
Object under = getOneObjectAtOffset(0, getImage().getHeight()/2 , Cloud.class);
return under != null;
}
private boolean onGround2Cl()
{
Object under = getOneObjectAtOffset(getImage().getWidth()/2-10, getImage().getHeight()/2 , Cloud.class);
return under != null;
}
private boolean onGround3Cl()
{
Object under = getOneObjectAtOffset(-getImage().getWidth()/2+10, getImage().getHeight()/2 , Cloud.class);
return under != null;
}
private boolean onGroundCl()
{
return onGround1Cl()||onGround2Cl()||onGround3Cl();
}
private boolean onGround1P()
{
Object under = getOneObjectAtOffset(0, getImage().getHeight()/2 , Platform.class);
return under != null;
}
private boolean onGround2P()
{
Object under = getOneObjectAtOffset(getImage().getWidth()/2-10, getImage().getHeight()/2 , Platform.class);
return under != null;
}
private boolean onGround3P()
{
Object under = getOneObjectAtOffset(-getImage().getWidth()/2+10, getImage().getHeight()/2 , Platform.class);
return under != null;
}
private boolean onGroundP()
{
return onGround1P()||onGround2P()||onGround3P();
}
private boolean onGround1Cr()
{
Object under = getOneObjectAtOffset(0, getImage().getHeight()/2 , Creature.class);
return under != null;
}
private boolean onGround2Cr()
{
Object under = getOneObjectAtOffset(getImage().getWidth()/2-10, getImage().getHeight()/2 , Creature.class);
return under != null;
}
private boolean onGround3Cr()
{
Object under = getOneObjectAtOffset(-getImage().getWidth()/2+10, getImage().getHeight()/2 , Creature.class);
return under != null;
}
private boolean onGroundCr()
{
return onGround1Cr()||onGround2Cr()||onGround3Cr();
}
public boolean onGround()
{
return onGroundBc()||onGroundB()||onGroundC()||onGroundBr()||onGroundCA()||onGroundCl()||onGroundP()||onGroundCr();
}
private boolean touchingLeftSide1B()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,getImage().getHeight()/2-20,Boxes.class);
return side!=null;
}
private boolean touchingLeftSide2B()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,-getImage().getHeight()/2+1,Boxes.class);
return side!=null;
}
private boolean touchingLeftSide3B()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,0,Boxes.class);
return side!=null;
}
private boolean touchingLeftSideB()
{
return touchingLeftSide1B()||touchingLeftSide2B()||touchingLeftSide3B();
}
private boolean touchingLeftSide1C()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,getImage().getHeight()/2-20,cliffC.class);
return side!=null;
}
private boolean touchingLeftSide2C()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,-getImage().getHeight()/2+1,cliffC.class);
return side!=null;
}
private boolean touchingLeftSide3C()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,0,cliffC.class);
return side!=null;
}
private boolean touchingLeftSideC()
{
return touchingLeftSide1C()||touchingLeftSide2C()||touchingLeftSide3C();
}
private boolean touchingLeftSide1Br()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,getImage().getHeight()/2-20,Brick.class);
return side!=null;
}
private boolean touchingLeftSide2Br()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,-getImage().getHeight()/2+1,Brick.class);
return side!=null;
}
private boolean touchingLeftSide3Br()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,0,Brick.class);
return side!=null;
}
private boolean touchingLeftSideBr()
{
return touchingLeftSide1Br()||touchingLeftSide2Br()||touchingLeftSide3Br();
}
private boolean touchingLeftSide1CA()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,getImage().getHeight()/2-20,CliffA.class);
return side!=null;
}
private boolean touchingLeftSide2CA()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,-getImage().getHeight()/2+1,CliffA.class);
return side!=null;
}
private boolean touchingLeftSide3CA()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,0,CliffA.class);
return side!=null;
}
private boolean touchingLeftSideCA()
{
return touchingLeftSide1CA()||touchingLeftSide2CA()||touchingLeftSide3CA();
}
private boolean touchingLeftSide1Bl()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,getImage().getHeight()/2-20,Blocker.class);
return side!=null;
}
private boolean touchingLeftSide2Bl()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,-getImage().getHeight()/2+1,Blocker.class);
return side!=null;
}
private boolean touchingLeftSide3Bl()
{
Object side=getOneObjectAtOffset(-getImage().getWidth()/2,0,Blocker.class);
return side!=null;
}
private boolean touchingLeftSideBl()
{
return touchingLeftSide1Bl()||touchingLeftSide2Bl()||touchingLeftSide3Bl();
}
public boolean touchingLeftSide()
{
return touchingLeftSideB()||touchingLeftSideC()||touchingLeftSideBl()||touchingLeftSideBr()||touchingLeftSideCA();
}
private boolean touchingRightSide1B()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,-getImage().getHeight()/2+1,Boxes.class);
return side!=null;
}
private boolean touchingRightSide2B()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,getImage().getHeight()/2-20,Boxes.class);
return side!=null;
}
private boolean touchingRightSide3B()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,0,Boxes.class);
return side!=null;
}
private boolean touchingRightSideB()
{
return touchingRightSide1B()||touchingRightSide2B()||touchingRightSide3B();
}
private boolean touchingRightSide1Bl()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,-getImage().getHeight()/2+1,Blocker.class);
return side!=null;
}
private boolean touchingRightSide2Bl()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,getImage().getHeight()/2-20,Blocker.class);
return side!=null;
}
private boolean touchingRightSide3Bl()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,0,Blocker.class);
return side!=null;
}
private boolean touchingRightSideBl()
{
return touchingRightSide1Bl()||touchingRightSide2Bl()||touchingRightSide3Bl();
}
private boolean touchingRightSide1C()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,-getImage().getHeight()/2+1,cliffC.class);
return side!=null;
}
private boolean touchingRightSide2C()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,getImage().getHeight()/2-20,cliffC.class);
return side!=null;
}
private boolean touchingRightSide3C()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,0,cliffC.class);
return side!=null;
}
private boolean touchingRightSideC()
{
return touchingRightSide1C()||touchingRightSide2C()||touchingRightSide3C();
}
private boolean touchingRightSide1Br()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,-getImage().getHeight()/2+1,Brick.class);
return side!=null;
}
private boolean touchingRightSide2Br()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,getImage().getHeight()/2-20,Brick.class);
return side!=null;
}
private boolean touchingRightSide3Br()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,0,Brick.class);
return side!=null;
}
private boolean touchingRightSideBr()
{
return touchingRightSide1Br()||touchingRightSide2Br()||touchingRightSide3Br();
}
private boolean touchingRightSide1CA()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,-getImage().getHeight()/2+1,CliffA.class);
return side!=null;
}
private boolean touchingRightSide2CA()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,getImage().getHeight()/2-20,CliffA.class);
return side!=null;
}
private boolean touchingRightSide3CA()
{
Object side=getOneObjectAtOffset(getImage().getWidth()/2,0,CliffA.class);
return side!=null;
}
private boolean touchingRightSideCA()
{
return touchingRightSide1CA()||touchingRightSide2CA()||touchingRightSide3CA();
}
public boolean touchingRightSide()
{
return touchingRightSideB()||touchingRightSideBl()||touchingRightSideC()||touchingRightSideBr()||touchingRightSideCA();
}
public void setVSpeed(int speed)
{
vSpeed = speed;
}
public void fall()
{
bump();
setLocation ( getX(), getY() + vSpeed);
vSpeed = vSpeed + acceleration;
if ( atBottom() )
gameEnd();
}
private boolean atBottom()
{
return getY() >= getWorld().getHeight() - 2;
}
public void gameEnd()
{
Scene scene=(Scene)getWorld();
scene.lives--;
scene.reset();
scene.level1();
}
public void bump()
{
if (onTop())
{
if(!hasHit)
{
vSpeed=-vSpeed;
}
hasHit=true;
}
if(onGround())
{
hasHit=false;
}
}
}
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();
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();
}
changeMove();
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-5;
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.move=true;
}
else if(getX()<342||touchingRightSide())
{
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");
}
}
}
}
