diff --git a/fighter/MyWorld.class b/fighter/MyWorld.class index 0c66068..e603b1d 100644 Binary files a/fighter/MyWorld.class and b/fighter/MyWorld.class differ diff --git a/fighter/MyWorld.ctxt b/fighter/MyWorld.ctxt index 1c0002c..065213a 100644 --- a/fighter/MyWorld.ctxt +++ b/fighter/MyWorld.ctxt @@ -4,6 +4,10 @@ comment0.text=\r\n\ Write\ a\ description\ of\ class\ MyWorld\ here.\r\n\ \r\n\ comment1.params=pCharakterP1\ pCharakterP2 comment1.target=MyWorld(int,\ int) comment1.text=\r\n\ Constructor\ for\ objects\ of\ class\ MyWorld.\r\n\ \r\n +comment10.params= +comment10.target=void\ charakterP1() +comment11.params= +comment11.target=void\ charakterP2() comment2.params= comment2.target=void\ prepare() comment2.text=\r\n\ Prepare\ the\ world\ for\ the\ start\ of\ the\ program.\r\n\ That\ is\:\ create\ the\ initial\ objects\ and\ add\ them\ to\ the\ world.\r\n @@ -14,5 +18,11 @@ comment4.target=void\ gameEnd() comment5.params= comment5.target=void\ lebensAnzeige() comment6.params= -comment6.target=void\ charakterP1() -numComments=7 +comment6.target=void\ shakra() +comment7.params= +comment7.target=void\ updateTimersP1() +comment8.params= +comment8.target=void\ shootP1() +comment9.params= +comment9.target=void\ shootP2() +numComments=12 diff --git a/fighter/MyWorld.java b/fighter/MyWorld.java index 2e9ba83..af9a2ba 100644 --- a/fighter/MyWorld.java +++ b/fighter/MyWorld.java @@ -20,7 +20,19 @@ public class MyWorld extends World int attack2Distance; int attack1Strength; int attack2Strength; + int attack1DistanceP2; + int attack2DistanceP2; + int attack1StrengthP2; + int attack2StrengthP2; int var; + Picture s1; + Picture s2; + String shootAnimation; + String shootAnimationP2; + Projectile projectile1; + Projectile2 projectile2; + boolean shot = false; + boolean shot2 = false; /** * Constructor for objects of class MyWorld. * @@ -53,7 +65,12 @@ public class MyWorld extends World addObject(p1,150,50); p2 = new Picture(2); addObject(p2,450,50); + s1 = new Picture(5); + addObject(s1,150,50); + s2 = new Picture(5); + addObject(s2,150,50); charakterP1(); + charakterP2(); } public void act(){ @@ -79,8 +96,8 @@ public class MyWorld extends World } } if(player2.attacke() &! player1.isBlocking){ - if(player1.getX() - player2.getX() < attack1Distance && player1.getX() - player2.getX() > -attack1Distance && player1.getY() - player2.getY() < 30 && player1.getY() - player2.getY() > -30){ - player1.leben = player1.leben -attack1Strength; + if(player1.getX() - player2.getX() < attack1DistanceP2 && player1.getX() - player2.getX() > -attack1DistanceP2 && player1.getY() - player2.getY() < 30 && player1.getY() - player2.getY() > -30){ + player1.leben = player1.leben -attack1StrengthP2; setPaintOrder(Player2.class,Player1.class); if(player1.schautNachRechts){ player1.setImage(player1.hitAnimation); @@ -121,8 +138,8 @@ public class MyWorld extends World } } if(player2.attacke2() &! player1.isBlocking){ - if(player1.getX() - player2.getX() < attack2Distance && player1.getX() - player2.getX() > -attack2Distance && player1.getY() - player2.getY() < 30 && player1.getY() - player2.getY() > -30){ - player1.leben = player1.leben -attack2Strength; + if(player1.getX() - player2.getX() < attack2DistanceP2 && player1.getX() - player2.getX() > -attack2DistanceP2 && player1.getY() - player2.getY() < 30 && player1.getY() - player2.getY() > -30){ + player1.leben = player1.leben -attack2StrengthP2; setPaintOrder(Player2.class,Player1.class); if(player1.schautNachRechts){ player1.setImage(player1.hitAnimation); @@ -164,9 +181,9 @@ public class MyWorld extends World } } if(player2.dashAttack()){ - if(player1.getX() - player2.getX() < attack2Distance && player1.getX() - player2.getX() > -attack2Distance && player1.getY() - player2.getY() < 30 && player1.getY() - player2.getY() > -30){ + if(player1.getX() - player2.getX() < attack2DistanceP2 && player1.getX() - player2.getX() > -attack2DistanceP2 && player1.getY() - player2.getY() < 30 && player1.getY() - player2.getY() > -30){ player1.isBlocking = false; - player1.leben = player1.leben -attack2Strength; + player1.leben = player1.leben -attack2StrengthP2; setPaintOrder(Player2.class,Player1.class); if(player1.schautNachRechts){ player1.setImage(player1.hitAnimation); @@ -191,8 +208,60 @@ public class MyWorld extends World l2.leben(player2.leben, player2.maxLeben); l1.setLocation(150 - (int)(100 - ((double)player1.leben/(double)player1.maxLeben)*100), 40); l2.setLocation(450 + (int)(100 - ((double)player2.leben/(double)player2.maxLeben)*100), 40); + s1.setLocation(125 - (int)(60 - ((double)player1.shakra/(double)player1.maxShakra)*60),67); + s2.setLocation(475 + (int)(60 - ((double)player2.shakra/(double)player2.maxShakra)*60),67); + shakra(); gameEnd(); lebensAnzeige(); + updateTimersP1(); + if(Greenfoot.isKeyDown("y")){ + shootP1(); + } + if(Greenfoot.isKeyDown("m")){ + shootP2(); + } + if(shot){ + if(projectile1.hit){ + player2.leben = player2.leben -20; + if(player2.schautNachRechts){ + player2.setImage(player2.hitAnimation); + GreenfootImage image = player2.getImage(); + image.scale(250, 250); + player2.setImage(image); + } + else{ + player2.setImage(player2.hitAnimation); + GreenfootImage image = player2.getImage(); + image.scale(250, 250); + player2.setImage(image); + player2.getImage().mirrorHorizontally(); + } + player2.hitTimer = System.currentTimeMillis() + 250; + player2.gotHit = true; + shot = false; + } + } + if(shot2){ + if(projectile2.hit){ + player1.leben = player1.leben -20; + if(player1.schautNachRechts){ + player1.setImage(player1.hitAnimation); + GreenfootImage image = player1.getImage(); + image.scale(250, 250); + player1.setImage(image); + } + else{ + player1.setImage(player1.hitAnimation); + GreenfootImage image = player1.getImage(); + image.scale(250, 250); + player1.setImage(image); + player1.getImage().mirrorHorizontally(); + } + player1.hitTimer = System.currentTimeMillis() + 250; + player1.gotHit = true; + shot2 = false; + } + } } public void gameEnd(){ @@ -208,24 +277,130 @@ public class MyWorld extends World } + public void shakra(){ + if(player1.shakra > 0){ + s1.setImage("blue.png"); + GreenfootImage imag = s1.getImage(); + imag.scale((int)(120 * ((double)player1.shakra/(double)player1.maxShakra)),5); + s1.setImage(imag); + } + if(player2.shakra > 0){ + s2.setImage("blue.png"); + GreenfootImage imag2 = s2.getImage(); + imag2.scale((int)(120 * ((double)player2.shakra/(double)player1.maxShakra)),5); + s2.setImage(imag2); + } + + } + + protected void updateTimersP1() + { + if (player1.shootCooldown > 0) { + player1.shootCooldown--; + } + if (player2.shootCooldown > 0) { + player2.shootCooldown--; + } + if (player1.ultiCooldown > 0) { + player1.ultiCooldown--; + } + if (player2.ultiCooldown > 0) { + player2.ultiCooldown--; + } + } + + public void shootP1() + { + if (player1.shootCooldown > 0) { + return; + } + + + int direction = player1.schautNachRechts ? 1 : -1; + + projectile1 = new Projectile(direction, player1, player2); + projectile1.setImage(shootAnimation); + GreenfootImage image = projectile1.getImage(); + image.scale(100, 100); + projectile1.setImage(image); + + int spawnX = player1.getX() + direction * 60; + int spawnY = player1.getY() - 10; + + addObject(projectile1, spawnX, spawnY); + shot = true; + + player1.shootCooldown = 60; + } + + public void shootP2() + { + if (player2.shootCooldown > 0) { + return; + } + + + int direction = player2.schautNachRechts ? 1 : -1; + + projectile2 = new Projectile2(direction, player2, player1); + projectile2.setImage(shootAnimationP2); + GreenfootImage image = projectile2.getImage(); + image.scale(100, 100); + projectile2.setImage(image); + + int spawnX = player2.getX() + direction * 60; + int spawnY = player2.getY() - 10; + + addObject(projectile2, spawnX, spawnY); + shot2 = true; + + player2.shootCooldown = 60; + } + public void charakterP1(){ if(charakterP1 == 1){ attack1Distance = 95; attack2Distance = 120; attack1Strength = 10; attack2Strength = 20; + shootAnimation = "RenProjectile.png"; } else if(charakterP1 == 2){ attack1Distance = 95; attack2Distance = 145; attack1Strength = 15; - attack2Strength = 30; + attack2Strength = 30; + shootAnimation = "TetsuProjectile.png"; } else if(charakterP1 == 3){ attack1Distance = 95; attack2Distance = 110; attack1Strength = 8; attack2Strength = 15; + shootAnimation = "HinataProjectile.png"; + } + } + public void charakterP2(){ + if(charakterP2 == 1){ + attack1DistanceP2 = 95; + attack2DistanceP2 = 120; + attack1StrengthP2 = 10; + attack2StrengthP2 = 20; + shootAnimationP2 = "RenProjectile.png"; + } + else if(charakterP2 == 2){ + attack1DistanceP2 = 95; + attack2DistanceP2 = 145; + attack1StrengthP2 = 15; + attack2StrengthP2 = 30; + shootAnimationP2 = "TetsuProjectile.png"; + } + else if(charakterP2 == 3){ + attack1DistanceP2 = 95; + attack2DistanceP2 = 110; + attack1StrengthP2 = 8; + attack2StrengthP2 = 15; + shootAnimationP2 = "HinataProjectile.png"; } } } diff --git a/fighter/Picture.class b/fighter/Picture.class index 55763a7..78602a2 100644 Binary files a/fighter/Picture.class and b/fighter/Picture.class differ diff --git a/fighter/Picture.java b/fighter/Picture.java index b8f4c5c..190e09c 100644 --- a/fighter/Picture.java +++ b/fighter/Picture.java @@ -43,5 +43,8 @@ public class Picture extends Actor image.scale(200,67); setImage(image); } + if(pictureNumber == 5){ + + } } } diff --git a/fighter/Projectile.class b/fighter/Projectile.class new file mode 100644 index 0000000..380478f Binary files /dev/null and b/fighter/Projectile.class differ diff --git a/fighter/Projectile.ctxt b/fighter/Projectile.ctxt new file mode 100644 index 0000000..309379c --- /dev/null +++ b/fighter/Projectile.ctxt @@ -0,0 +1,13 @@ +#BlueJ class context +comment0.target=Projectile +comment1.params=direction\ pOwner\ pEnemy +comment1.target=Projectile(int,\ Player1,\ Player2) +comment2.params= +comment2.target=void\ act() +comment3.params= +comment3.target=void\ moveProjectile() +comment4.params= +comment4.target=void\ checkHit() +comment5.params= +comment5.target=void\ removeProjectile() +numComments=6 diff --git a/fighter/Projectile.java b/fighter/Projectile.java new file mode 100644 index 0000000..d3cc47a --- /dev/null +++ b/fighter/Projectile.java @@ -0,0 +1,67 @@ +import greenfoot.*; + +public class Projectile extends Actor +{ + Player1 owner; + Player2 enemy; + int direction; + + int speed = 10; + int damage = 10; + + int lifetime = 100; + + + int currentFrame = 0; + int animationTimer = 0; + boolean isInWorld = true; + boolean hit = false; + public Projectile(int direction, Player1 pOwner, Player2 pEnemy) + { + this.direction = direction; + this.owner = pOwner; + enemy = pEnemy; + + //Bilder für Schüsse nach links spiegeln + if (direction == -1) { + getImage().mirrorHorizontally(); + } + + + } + + public void act() + { + moveProjectile(); + //animate(); + checkHit(); + + lifetime--; + + } + + private void moveProjectile() + { + setLocation(getX() + speed * direction, getY()); + } + + private void checkHit() + { + if (getX() - enemy.getX() < 70 && getX() - enemy.getX() > -70 && getY() - enemy.getY() < 30 && getY() - enemy.getY() > -30 && isInWorld){ + hit = true; + removeProjectile(); + } + else if(lifetime <= 0 || isAtEdge()){ + removeProjectile(); + } + } + + private void removeProjectile() + { + if (getWorld() != null) { + isInWorld = false; + getWorld().removeObject(this); + } + } + +} \ No newline at end of file diff --git a/fighter/Projectile2.class b/fighter/Projectile2.class new file mode 100644 index 0000000..17392e7 Binary files /dev/null and b/fighter/Projectile2.class differ diff --git a/fighter/Projectile2.ctxt b/fighter/Projectile2.ctxt new file mode 100644 index 0000000..cc18050 --- /dev/null +++ b/fighter/Projectile2.ctxt @@ -0,0 +1,13 @@ +#BlueJ class context +comment0.target=Projectile2 +comment1.params=direction\ pOwner\ pEnemy +comment1.target=Projectile2(int,\ Player2,\ Player1) +comment2.params= +comment2.target=void\ act() +comment3.params= +comment3.target=void\ moveProjectile() +comment4.params= +comment4.target=void\ checkHit() +comment5.params= +comment5.target=void\ removeProjectile() +numComments=6 diff --git a/fighter/Projectile2.java b/fighter/Projectile2.java new file mode 100644 index 0000000..14037d3 --- /dev/null +++ b/fighter/Projectile2.java @@ -0,0 +1,67 @@ +import greenfoot.*; + +public class Projectile2 extends Actor +{ + Player2 owner; + Player1 enemy; + int direction; + + int speed = 10; + int damage = 10; + + int lifetime = 100; + + + int currentFrame = 0; + int animationTimer = 0; + boolean isInWorld = true; + boolean hit = false; + public Projectile2(int direction, Player2 pOwner, Player1 pEnemy) + { + this.direction = direction; + this.owner = pOwner; + enemy = pEnemy; + + //Bilder für Schüsse nach links spiegeln + if (direction == -1) { + getImage().mirrorHorizontally(); + } + + + } + + public void act() + { + moveProjectile(); + //animate(); + checkHit(); + + lifetime--; + + } + + private void moveProjectile() + { + setLocation(getX() + speed * direction, getY()); + } + + private void checkHit() + { + if (getX() - enemy.getX() < 70 && getX() - enemy.getX() > -70 && getY() - enemy.getY() < 30 && getY() - enemy.getY() > -30 && isInWorld){ + hit = true; + removeProjectile(); + } + else if(lifetime <= 0 || isAtEdge()){ + removeProjectile(); + } + } + + private void removeProjectile() + { + if (getWorld() != null) { + isInWorld = false; + getWorld().removeObject(this); + } + } + +} \ No newline at end of file diff --git a/fighter/images/blue.png b/fighter/images/blue.png new file mode 100644 index 0000000..54d5c58 Binary files /dev/null and b/fighter/images/blue.png differ diff --git a/fighter/player1.class b/fighter/player1.class index 808176a..baa5749 100644 Binary files a/fighter/player1.class and b/fighter/player1.class differ diff --git a/fighter/player1.java b/fighter/player1.java index f755c4e..3f4d985 100644 --- a/fighter/player1.java +++ b/fighter/player1.java @@ -40,6 +40,8 @@ public class Player1 extends Actor String hitAnimation; String dashAttackAnimation; String blockAnimation; + String shootAnimation1; + String shootAnimation2; int attack2Duration; int speed; double speedFaktor; @@ -57,6 +59,11 @@ public class Player1 extends Actor boolean isDashAttack = false; long dashAttackTimer2 = 0; boolean isBlocking = false; + int shakra; + int maxShakra; + int shootCooldown = 0; + int ultiCooldown = 0; + Player1(int pCharakter){ charakter = pCharakter; @@ -484,6 +491,8 @@ public class Player1 extends Actor } } + + public void charakter(){ if(charakter == 1){ defaultAnimation = "2Combo1.png"; @@ -505,6 +514,8 @@ public class Player1 extends Actor speedFaktor = 1; speedFaktor2 = speedFaktor; vDashSpeedCharakter = 12; + maxShakra = 80; + shakra = maxShakra; } if(charakter == 2){ defaultAnimation = "Tetsu1Combo1.png"; @@ -526,6 +537,8 @@ public class Player1 extends Actor speedFaktor = 0.5; speedFaktor2 = 0.75; vDashSpeedCharakter = 10; + maxShakra = 100; + shakra = maxShakra; } if(charakter == 3){ defaultAnimation = "HinataShoot1.png"; @@ -547,6 +560,8 @@ public class Player1 extends Actor speedFaktor = 2; speedFaktor2 = 8; vDashSpeedCharakter = 14; + maxShakra = 60; + shakra = maxShakra; } setImage(defaultAnimation); GreenfootImage image = getImage(); diff --git a/fighter/player2.class b/fighter/player2.class index 75c93a6..e42fbd0 100644 Binary files a/fighter/player2.class and b/fighter/player2.class differ diff --git a/fighter/player2.java b/fighter/player2.java index 651d8f7..3a336f6 100644 --- a/fighter/player2.java +++ b/fighter/player2.java @@ -57,6 +57,10 @@ public class Player2 extends Actor boolean isDashAttack = false; long dashAttackTimer2 = 0; boolean isBlocking = false; + int shakra; + int maxShakra; + int shootCooldown = 0; + int ultiCooldown = 0; Player2(int pCharakter){ charakter = pCharakter; @@ -505,6 +509,8 @@ public class Player2 extends Actor speedFaktor = 1; speedFaktor2 = speedFaktor; vDashSpeedCharakter = 12; + maxShakra = 80; + shakra = maxShakra; } if(charakter == 2){ defaultAnimation = "Tetsu1Combo1.png"; @@ -526,6 +532,8 @@ public class Player2 extends Actor speedFaktor = 0.5; speedFaktor2 = 0.75; vDashSpeedCharakter = 10; + maxShakra = 100; + shakra = maxShakra; } if(charakter == 3){ defaultAnimation = "HinataShoot1.png"; @@ -547,6 +555,8 @@ public class Player2 extends Actor speedFaktor = 2; speedFaktor2 = 8; vDashSpeedCharakter = 14; + maxShakra = 60; + shakra = maxShakra; } setImage(defaultAnimation); GreenfootImage image = getImage(); diff --git a/fighter/project.greenfoot b/fighter/project.greenfoot index 6b0a1b2..7c2f04a 100644 --- a/fighter/project.greenfoot +++ b/fighter/project.greenfoot @@ -11,8 +11,26 @@ dependency10.from=MyWorld dependency10.to=Picture dependency10.type=UsesDependency dependency11.from=MyWorld -dependency11.to=EndWorld +dependency11.to=Projectile dependency11.type=UsesDependency +dependency12.from=MyWorld +dependency12.to=Projectile2 +dependency12.type=UsesDependency +dependency13.from=MyWorld +dependency13.to=EndWorld +dependency13.type=UsesDependency +dependency14.from=Projectile2 +dependency14.to=Player2 +dependency14.type=UsesDependency +dependency15.from=Projectile2 +dependency15.to=Player1 +dependency15.type=UsesDependency +dependency16.from=Projectile +dependency16.to=Player1 +dependency16.type=UsesDependency +dependency17.from=Projectile +dependency17.to=Player2 +dependency17.type=UsesDependency dependency2.from=StartWorld dependency2.to=Picture dependency2.type=UsesDependency @@ -42,8 +60,8 @@ editor.fx.0.width=1294 editor.fx.0.x=-7 editor.fx.0.y=-7 height=686 -package.numDependencies=11 -package.numTargets=9 +package.numDependencies=17 +package.numTargets=11 project.charset=UTF-8 publish.hasSource=false publish.locked=true @@ -65,6 +83,20 @@ target1.type=ClassTarget target1.width=120 target1.x=0 target1.y=0 +target10.height=70 +target10.name=MyWorld +target10.showInterface=false +target10.type=ClassTarget +target10.width=120 +target10.x=0 +target10.y=0 +target11.height=70 +target11.name=Projectile +target11.showInterface=false +target11.type=ClassTarget +target11.width=120 +target11.x=0 +target11.y=0 target2.height=70 target2.name=EndWorld target2.showInterface=false @@ -87,21 +119,21 @@ target4.width=120 target4.x=0 target4.y=0 target5.height=70 -target5.name=StartWorld +target5.name=Projectile2 target5.showInterface=false target5.type=ClassTarget target5.width=120 target5.x=0 target5.y=0 target6.height=70 -target6.name=Player2 +target6.name=StartWorld target6.showInterface=false target6.type=ClassTarget target6.width=120 target6.x=0 target6.y=0 target7.height=70 -target7.name=Player1 +target7.name=Player2 target7.showInterface=false target7.type=ClassTarget target7.width=120 @@ -115,7 +147,7 @@ target8.width=120 target8.x=0 target8.y=0 target9.height=70 -target9.name=MyWorld +target9.name=Player1 target9.showInterface=false target9.type=ClassTarget target9.width=120