Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Azure extends ScrollingActor //diese Klasse definiert die folgenden Methoden damit ich sie in meinem Projekt frei verwenden kann
- {
- private int vSpeed = 0;
- private int acceleration = 1;
- private boolean jumping;
- private int shootingCounter = 10;
- private int Counter = 1;
- private int regenHP = 200;
- boolean hitInv = false;
- private static GreenfootImage[] rightAnim = new GreenfootImage[10]; // hier werden einzelne Sprites aus dem Speicher in das Program geladen damit ich sie animieren kann
- private static GreenfootImage[] leftAnim = new GreenfootImage[10];
- private static GreenfootImage[] standAnim = new GreenfootImage[9];
- private static GreenfootImage[] standLeftAnim = new GreenfootImage[9];
- private static GreenfootImage[] runAnim = new GreenfootImage[10];
- private static GreenfootImage[] runLeftAnim = new GreenfootImage[10];
- private static GreenfootImage[] runBAnim = new GreenfootImage[10];
- private static GreenfootImage[] runLeftBAnim = new GreenfootImage[10];
- private static GreenfootImage[] jumpAnim = new GreenfootImage[3];
- private static GreenfootImage[] jumpLeftAnim = new GreenfootImage[3];
- private static GreenfootImage[] standBAnim = new GreenfootImage[1];
- private static GreenfootImage[] standLeftBAnim = new GreenfootImage[1];
- private static GreenfootImage[] rightBAnim = new GreenfootImage[11];
- private static GreenfootImage[] leftBAnim = new GreenfootImage[11];
- private static GreenfootImage[] jumpBAnim = new GreenfootImage[4];
- private static GreenfootImage[] jumpLeftBAnim = new GreenfootImage[4];
- private static GreenfootImage[] exAnim = new GreenfootImage[7];
- private static GreenfootImage[] getHitAnim = new GreenfootImage[4];
- private static GreenfootImage[] getHitLeftAnim = new GreenfootImage[4];
- static // hier werden die einzelnen Sprites zu einer Bildabfolge/Animation zusammengesetz
- {
- for (int i=0; i<standAnim.length; i++) standAnim[i] = new GreenfootImage("Stand_0"+(i+1)+".png");
- for (int i=0; i<standLeftAnim.length; i++) standLeftAnim[i] = new GreenfootImage("StandLeft_0"+(i+1)+".png");
- for (int i=0; i<rightAnim.length; i++) rightAnim[i] = new GreenfootImage("Walk-A_"+(i < 10 ? "0" : "")+(i+1)+".png");
- for (int i=0; i<leftAnim.length; i++) leftAnim[i] = new GreenfootImage("WalkLeft-A_"+(i < 10 ? "0" : "")+(i+1)+".png");
- for (int i=0; i<runAnim.length; i++) runAnim[i] = new GreenfootImage("Run_0"+(i+1)+".png");
- for (int i=0; i<runLeftAnim.length; i++) runLeftAnim[i] = new GreenfootImage("RunLeft_0"+(i+1)+".png");
- for (int i=0; i<runBAnim.length; i++) runBAnim[i] = new GreenfootImage("RunB_0"+(i+1)+".png");
- for (int i=0; i<runLeftBAnim.length; i++) runLeftBAnim[i] = new GreenfootImage("RunLeftB_0"+(i+1)+".png");
- for (int i=0; i<jumpAnim.length; i++) jumpAnim[i] = new GreenfootImage("Jump_0"+(i+1)+".png");
- for (int i=0; i<jumpLeftAnim.length; i++) jumpLeftAnim[i] = new GreenfootImage("JumpLeft_0"+(i+1)+".png");
- for (int i=0; i<standBAnim.length; i++) standBAnim[i] = new GreenfootImage("StandB_0"+(i+1)+".png");
- for (int i=0; i<standLeftBAnim.length; i++) standLeftBAnim[i] = new GreenfootImage("StandLeftB_0"+(i+1)+".png");
- for (int i=0; i<rightBAnim.length; i++) rightBAnim[i] = new GreenfootImage("WalkB_"+(i < 10 ? "0" : "")+(i+1)+".png");
- for (int i=0; i<leftBAnim.length; i++) leftBAnim[i] = new GreenfootImage("WalkLeftB_"+(i < 10 ? "0" : "")+(i+1)+".png");
- for (int i=0; i<jumpBAnim.length; i++) jumpBAnim[i] = new GreenfootImage("JumpB_0"+(i+1)+".png");
- for (int i=0; i<jumpLeftBAnim.length; i++) jumpLeftBAnim[i] = new GreenfootImage("JumpLeftB_0"+(i+1)+".png");
- for (int i=0; i<getHitAnim.length; i++) getHitAnim[i] = new GreenfootImage("Damage_0"+(i+1)+".png");
- for (int i=0; i<getHitLeftAnim.length; i++) getHitLeftAnim[i] = new GreenfootImage("DamageLeft_0"+(i+1)+".png");
- }
- private int animCount;
- private int animDelay = 6;
- private void setAnim(GreenfootImage[] anim, int frameRate)
- {
- animSet = anim;
- animCount = -1; // sorgt dafür das die animation richtig abläuft
- animDelay = frameRate;
- animate(); // ruft die animate() Methode auf um eine falls nötig eine neue Animation zu beginnen
- }
- private GreenfootImage[] animSet = standAnim; // die "default animation" ist die steh Animation
- public void act() // Hier werden nacheinander die Methoden aufgerufen um den Spiel Character "spielbar" zu machen
- {
- animate();
- canMoveRight();
- canMoveLeft();
- horizontalMovement();
- checkFall();
- shootingCounter --;
- getHit();
- fallOutOfWorld();
- regenHP--;
- }
- public void fall() // sorgt dafür das der Charakter zu Boden fällt
- {
- setLocation(getX(), getY() +vSpeed); // die Position wird abgefragt und die Vertikale Geschwindigkeit wird addiert
- {
- vSpeed = vSpeed + acceleration; // der Charakter fällt schneller desto länger er in der Luft ist um die Schwerkraft zu simulieren
- }
- jumping = true; // ist der Charakter also in der Luft heißt das für das Spiel das der Charakter gerade Springt
- }
- public boolean onGround()
- {
- int spriteHeight = getImage().getHeight(); // fragt die Charakter Ausmaße ab
- int lookForGround = (int) (spriteHeight/2-30); // setz den Charakter 30 Pixel in den Boden um einen pseudo 3d effekt zu erzeugen
- Actor ground = getOneObjectAtOffset(0, lookForGround, Collider.class); //fragt ab ob die Ränder des Charakter den Boden berühren
- if(ground == null)
- {
- jumping = true;
- return false;
- }
- else
- {
- moveToGround(ground); //falls ja, fällt der Charakter bis er den Boden berührt oder aus der Welt fällt und stirbt
- return true;
- }
- }
- public boolean ceiling()
- {
- int spriteHeight = getImage().getHeight(); //fragt erneut die Ausmaße ab aber diesmal für die Decke.
- int yDistance = (int) (spriteHeight/-2);
- Actor ceiling = getOneObjectAtOffset(0, yDistance, Collider.class); //sorgt dafür das der Charakter aus der Decke raus geschoben wird
- if(ceiling != null)
- {
- vSpeed =0;
- hitHead(ceiling);
- return true;
- }
- else
- {
- return false;
- }
- }
- public void hitHead(Actor ceiling)
- {
- int ceilingHeight = ceiling.getImage().getHeight();
- int newY = ceiling.getY() + (ceilingHeight + getImage().getHeight())/2;
- setLocation(getX(), newY);
- }
- public boolean canMoveLeft() //fragt ab ob links vom Charakter eine Wand ist, falls nein, kann er sich nach links bewegen
- {
- boolean canMoveLeft = true;
- int imageWidth = getImage().getWidth();
- int imageHeight = getImage().getHeight();
- if (getOneObjectAtOffset(imageWidth/-2 -3, imageHeight/-2, Collider.class) !=null ||
- getOneObjectAtOffset(imageWidth/-2 -3, imageHeight/2-35, Collider.class) !=null) // Hier wird die Kollision der Sprites für die Umgebungsobjekte angegeben und um ein paar Pixel nach innen gezogen, damit der Charakter nicht an der Wand kleben bleibt
- canMoveLeft = false;
- return canMoveLeft;
- }
- public boolean canMoveRight() //gleich wie canMoveLeft
- {
- boolean canMoveRight = true;
- int imageWidth = getImage().getWidth();
- int imageHeight = getImage().getHeight();
- if (getOneObjectAtOffset(imageWidth/2 +3, imageHeight/-2, Collider.class) !=null ||
- getOneObjectAtOffset(imageWidth/2 +3, imageHeight/2-35, Collider.class) !=null)
- canMoveRight = false;
- return canMoveRight;
- }
- public void moveToGround(Actor ground) // dies ist die Methode die dafür sorgt das der Charakter nicht im boden stecken bleibt
- {
- int groundHeight = ground.getImage().getHeight();
- int newY = ground.getY() - (groundHeight + getImage().getHeight())/2+30;
- setLocation(getX(), newY);
- jumping = false;
- }
- public void checkFall() //hier werden die "Schwerkraft" Methoden abgefragt
- {
- if(onGround()) //ist er am boden wird die Fallgeschwindigkeit auf 0 gesetz
- {
- vSpeed = 0;
- }
- else //ansonsten fällt der Charakter
- {
- fall();
- }
- }
- public void horizontalMovement() // Hier werden die Horizontallen Bewegungen des Charakter definiert
- {
- boolean onGround = false;
- int boost = 6;
- int dir = 0;// Direction wird zu anfang auf 0 gesetzt da der Charakter sich ja noch nicht bewegt
- int vDir = (int)Math.signum(vSpeed);
- if (Greenfoot.isKeyDown("left") && canMoveLeft()) dir--; // solange der Links knopf gedrück wird ist dir == -1
- if (Greenfoot.isKeyDown("right") && canMoveRight()) dir++; // solange der Rechts knopf gedrück wird ist dir == 1
- setLocation(getX()+(8)*dir, getY()); //8 ist hier die Gehgeschwindigkeit
- if(dir == -1)// jedes mal wenn entweder Links oder Rechts gedrückt wird ein weiterer Counter auf 0 oder 1 gesetzt, dies ist wichtig für die Animationen da es dem Programm sagt welcher Knopf als letztes gedrückt wurde
- {
- Counter = 0;
- }
- if(dir == 1)
- {
- Counter = 1;
- }
- if (dash() == true)
- setLocation(getX()+(8+boost)*dir, getY()); // boost steht hier für die Laufgeschwindigkeit, die zur Gehgeschwingkeit addiert wird
- if (jump() == true) //definiert die höhe des Sprungs
- setLocation(getX(), getY() - 20);
- if (vDir > 0) onGround = true;
- //im folgenden werden alle animationen den einzelnen Tastaturbefehlen zugewiesen damit sich die animationen nicht überlappen und immer nur eine zur zeit abgespielt wird
- if (dir == -1 && animSet != leftAnim && dash() == false && shooting() == false && vSpeed <= 0 ) setAnim(leftAnim, 3);
- else if (dir == 1 && animSet != rightAnim && dash() == false && shooting() == false && vSpeed <= 0) setAnim(rightAnim, 3);
- else if (dir == 0 && animSet != standLeftAnim && shooting() == false && vSpeed <= 0 && Counter == 0) setAnim( standLeftAnim, 6);
- else if (dir == 0 && animSet != standAnim && shooting() == false && vSpeed <= 0 && Counter == 1) setAnim( standAnim, 6);
- else if (dir == 1 && animSet != jumpAnim && jump() == true && shooting() == false ) setAnim(jumpAnim, 16);
- else if (dir == -1 && animSet != jumpLeftAnim && jump() == true && shooting() == false ) setAnim(jumpLeftAnim, 16);
- else if (dir == 0 && animSet != jumpLeftAnim && jump() == true && shooting() == false && Counter == 0) setAnim(jumpLeftAnim, 6);
- else if (dir == 0 && animSet != jumpAnim && jump() == true && shooting() == false && Counter == 1) setAnim(jumpAnim, 6);
- else if ( dir == 1 && dash() == true && animSet != runAnim && jump() == false && shooting() == false && vSpeed <= 0 )setAnim(runAnim,2);
- else if ( dir == -1 && dash() == true && animSet != runLeftAnim && jump() == false && shooting() == false && vSpeed <= 0 )setAnim(runLeftAnim,2);
- else if ( dir == 1 && dash() == true && animSet != runBAnim && jump() == false && shooting() == true && vSpeed <= 0 )setAnim(runBAnim,2);
- else if ( dir == -1 && dash() == true && animSet != runLeftBAnim && jump() == false && shooting() == true && vSpeed <= 0 )setAnim(runLeftBAnim,2);
- else if (dir == 0 && animSet != standLeftBAnim && jump() == false && shooting() == true && vSpeed <= 0 && Counter == 0) setAnim(standLeftBAnim, 6);
- else if (dir == 0 && animSet != standBAnim && jump() == false && shooting() == true && vSpeed <= 0 && Counter == 1) setAnim(standBAnim, 6);
- else if (dir == 1 && animSet != leftBAnim && dash() == false && shooting() == true && vSpeed <= 0 ) setAnim(leftBAnim, 3);
- else if (dir == -1 && animSet != rightBAnim && dash() == false && shooting() == true && vSpeed <= 0 ) setAnim(rightBAnim, 3);
- else if (dir == -1 && animSet != jumpBAnim && jump() == true && shooting() == true ) setAnim(jumpBAnim, 8);
- else if (dir == 1 && animSet != jumpLeftBAnim && jump() == true && shooting() == true ) setAnim(jumpLeftBAnim, 8);
- else if (dir == 0 && animSet != jumpBAnim && jump() == true && shooting() == true && Counter == 0) setAnim(jumpBAnim, 8);
- else if (dir == 0 && animSet != jumpLeftBAnim && jump() == true && shooting() == true && Counter == 1) setAnim(jumpLeftBAnim, 8);
- if(dir == 1 && shooting() == true && shootingCounter <=0 )
- {
- getWorld().addObject(new PlasmaShot(), getX()+90, getY()-34); //hier wird ein neus Objekt zum Charakter hinzugefügt um einen Schuss darzustellen
- shootingCounter = 10; //wie lange der Charakter warten muss bis er wieder schießen kann
- Greenfoot.playSound("Laser.mp3");
- }
- else if(dir == -1 && shooting() == true && shootingCounter <=0 )
- {
- getWorld().addObject(new PlasmaShotLeft(), getX()-90, getY()-34);
- shootingCounter = 10;
- Greenfoot.playSound("Laser.mp3");
- }
- else if (dir == 0 && (animSet == jumpLeftBAnim || animSet == standBAnim ) && shooting() == true && shootingCounter <=0 )//weitere animationen für springen und schießen
- {
- getWorld().addObject(new PlasmaShot(), getX()+90, getY()-34);
- shootingCounter = 10;
- Greenfoot.playSound("Laser.mp3");
- }
- else if (dir == 0 && (animSet == jumpBAnim || animSet == standLeftBAnim) && shooting() == true && shootingCounter <=0 )
- {
- getWorld().addObject(new PlasmaShotLeft(), getX()-90, getY()-34);
- shootingCounter = 10;
- Greenfoot.playSound("Laser.mp3");
- }
- else if ((dir == 1 || dir == 0) && animSet != getHitAnim && hitInv == true) setAnim(getHitAnim,2);
- else if (dir == -1 && animSet != getHitLeftAnim && hitInv == true) setAnim(getHitLeftAnim,2);
- }
- public boolean jump()//hier werden die einzelnen Tastaturbefehle vom Programm aufgenommen
- {
- if (Greenfoot.isKeyDown("space"))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- public boolean dash()
- {
- if (Greenfoot.isKeyDown("s"))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- public boolean shooting()
- {
- if (Greenfoot.isKeyDown("d"))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- public void getHit() // überlappen sich die Sprites eines Gegners und des Charakters bekommt der Charakter schaden
- {
- Actor Enemy = getOneIntersectingObject(Enemy.class);
- World myWorld = getWorld();
- AzureWorld azureworld = (AzureWorld)myWorld;
- HP healthbar = azureworld.getHP();
- if(Enemy != null)
- {
- if (hitInv == false)
- {
- healthbar.loseHealth();
- hitInv = true;
- if(healthbar.health <=0) // hat der Charakter kein Leben mehr, stirbt er und ein "GAME OVER" erscheint
- {
- GameOver gameover = new GameOver();
- myWorld.addObject(gameover, myWorld.getWidth()/2,myWorld.getHeight()/2);
- myWorld.removeObject(this);
- }
- }
- }
- else if(regenHP <= 0) //der Charakter kann Leben Regenerieren
- {
- healthbar.regeneration();
- regenHP = 200;
- }
- else
- {
- hitInv = false;
- }
- }
- public void fallOutOfWorld() //fällt der Charakter aus der Welt stirbt er ebenfalls
- {
- if (getWorld() == null) return;
- World myWorld = getWorld();
- AzureWorld azureworld = (AzureWorld)myWorld;
- if (getY()>300)
- {
- GameOver gameover = new GameOver();
- getWorld().removeObject(this);
- myWorld.addObject(gameover, myWorld.getWidth()/2,myWorld.getHeight()/2);
- }
- }
- private void animate()
- {
- animCount = (animCount+1)%(animSet.length*animDelay);
- if (animCount%animDelay == 0) setImage(animSet[animCount/animDelay]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement