import greenfoot.*; import java.util.List; public class MyWorld extends World{ private double letzteBeereZeit; private int beerenErzeugAbstand, beerenErzeugAbstandMax; private Spielfigur s; public MyWorld(){ super(600, 400, 1); beerenErzeugAbstandMax = 200; spielfeldVorbereiten(); Greenfoot.start(); } public void spielfeldVorbereiten(){ s = new Spielfigur(); addObject(s, 200,100); Boden b = new Boden(); addObject(b, 300,390); b.getImage().scale(600,20); addObject(new Boden(), 30,320); addObject(new Boden(), 340,320); addObject(new Boden(), 430,220); addObject(new Boden(), 230,210); } public void act(){ if(System.currentTimeMillis() - letzteBeereZeit > beerenErzeugAbstand){ machEinFallobst(); machVielleichtEinenAnker(); } checkGewonnen(); } public void machEinFallobst(){ letzteBeereZeit = System.currentTimeMillis(); addObject(new Fallobst(), Greenfoot.getRandomNumber(600), 20); beerenErzeugAbstand = Greenfoot.getRandomNumber(beerenErzeugAbstandMax) * 10 + 100; if(beerenErzeugAbstandMax > 1)beerenErzeugAbstandMax--; } public void machVielleichtEinenAnker(){ int zufallsZahl = Greenfoot.getRandomNumber(100000); if(zufallsZahl % 3 == 1)addObject(new Anker(), Greenfoot.getRandomNumber(600), 1); } public void checkGewonnen(){ if(s.score > 50){ showText("", 300, 180); showText("Spiel gewonnen!", 300, 200); Greenfoot.stop(); } } } import greenfoot.*; public abstract class FallZeuch extends Actor{ protected double vY, aY = 1.5, vYMax = 9, aufmBodenGelandetZeitpunkt; protected int verschwindenZeit = -1; protected boolean falling; public void act(){ doGravity(); figurSteuerung(); zuAlt(); } public void figurSteuerung(){} protected void doGravity(){ Boden b = (Boden)getOneObjectAtOffset(0,getImage().getHeight()/2, Boden.class); if(b==null){ if(getY() < 400 - (getImage().getHeight()/2)){ fallRunter(); } falling = true; }else{ if(aufmBodenGelandetZeitpunkt == 0)aufmBodenGelandetZeitpunkt = System.currentTimeMillis(); setLocation(getX(), b.getY() - (b.getImage().getHeight()/2) - (getImage().getHeight()/2)); falling = false; } } private void fallRunter(){ if(vY < 1)vY = 1; vY *= aY; if(vY > vYMax)vY = vYMax; setLocation(getX(), getY() + (int)vY); } public void zuAlt(){ if(aufmBodenGelandetZeitpunkt>0 && verschwindenZeit > -1 && System.currentTimeMillis() - aufmBodenGelandetZeitpunkt>verschwindenZeit){ getWorld().removeObject(this); } } } import greenfoot.*; public class Fallobst extends FallZeuch{ public Fallobst(){ verschwindenZeit = 2000; int zufallsZahl = Greenfoot.getRandomNumber(100000); if(zufallsZahl % 2 == 1){ setImage("grapes.png"); }else{ setImage("cherries.png"); } } } import greenfoot.*; public class Spielfigur extends FallZeuch{ public int score, xSpeed; public void figurSteuerung(){ xSpeed = 5 + (score / 10); tastenCheck(); checkTouching(); getWorld().showText("Fallobst im Korb: " + score, 300, 20); } public void tastenCheck(){ if(Greenfoot.isKeyDown("up") && !falling)setLocation(getX(),getY() - 150); if(Greenfoot.isKeyDown("right"))setLocation(getX() + xSpeed,getY()); if(Greenfoot.isKeyDown("left"))setLocation(getX() - xSpeed,getY()); } public void checkTouching(){ if(isTouching(Fallobst.class)){ removeTouching(Fallobst.class); score++; } if(isTouching(Anker.class)){ removeTouching(Anker.class); score--; } } } import greenfoot.*; public class Anker extends FallZeuch{ public Anker(){ verschwindenZeit = 3000; } } import greenfoot.*; public class Boden extends Actor{ public Boden(){ getImage().scale(100,15); } }