622 lines
22 KiB
Java
622 lines
22 KiB
Java
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
|
|
|
|
/**
|
|
* Write a description of class MyWorld here.
|
|
*
|
|
* @author (your name)
|
|
* @version (a version number or a date)
|
|
*/
|
|
public class MyWorld extends World
|
|
{
|
|
Player1 player1;
|
|
Player2 player2;
|
|
int charakterP1;
|
|
int charakterP2;
|
|
Lebensanzeige l1;
|
|
Lebensanzeige l2;
|
|
Picture p1;
|
|
Picture p2;
|
|
int attack1Distance;
|
|
int attack2Distance;
|
|
int attack1Strength;
|
|
int attack2Strength;
|
|
int attack1DistanceP2;
|
|
int attack2DistanceP2;
|
|
int attack1StrengthP2;
|
|
int attack2StrengthP2;
|
|
int var;
|
|
Picture s1;
|
|
Picture s2;
|
|
String shootAnimation;
|
|
String shootAnimationP2;
|
|
String ultiAnimation;
|
|
String ultiAnimationP2;
|
|
String ultiAnimation2;
|
|
String ultiAnimation2P2;
|
|
Projectile projectile1;
|
|
Projectile2 projectile2;
|
|
boolean shot = false;
|
|
boolean shot2 = false;
|
|
boolean ulti = false;
|
|
boolean ulti2 = false;
|
|
|
|
/**
|
|
* Constructor for objects of class MyWorld.
|
|
*
|
|
*/
|
|
public MyWorld(int pCharakterP1, int pCharakterP2)
|
|
{
|
|
// Create a new world with 600x400 cells with a cell size of 1x1 pixels.
|
|
super(600, 400, 1);
|
|
charakterP1 = pCharakterP1;
|
|
charakterP2 = pCharakterP2;
|
|
prepare();
|
|
|
|
}
|
|
|
|
/**
|
|
* Prepare the world for the start of the program.
|
|
* That is: create the initial objects and add them to the world.
|
|
*/
|
|
private void prepare()
|
|
{
|
|
player1 = new Player1(charakterP1);
|
|
addObject(player1,125,153);
|
|
player2 = new Player2(charakterP2);
|
|
addObject(player2,429,152);
|
|
l1 = new Lebensanzeige();
|
|
addObject(l1,150,40);
|
|
l2 = new Lebensanzeige();
|
|
addObject(l2,450,40);
|
|
p1 = new Picture(1);
|
|
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(){
|
|
if(player1.attacke() &! player2.isBlocking){
|
|
if(player1.getX() - player2.getX() < attack1Distance && player1.getX() - player2.getX() > -attack1Distance && player1.getY() - player2.getY() < 30 && player1.getY() - player2.getY() > -30){
|
|
player2.leben = player2.leben -attack1Strength;
|
|
player1.shakra = player1.shakra +5;
|
|
if(player1.shakra > player1.maxShakra){
|
|
player1.shakra = player1.maxShakra;
|
|
}
|
|
setPaintOrder(Player1.class,Player2.class);
|
|
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;
|
|
}
|
|
}
|
|
if(player2.attacke() &! player1.isBlocking){
|
|
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;
|
|
player2.shakra = player2.shakra +5;
|
|
if(player2.shakra > player2.maxShakra){
|
|
player2.shakra = player2.maxShakra;
|
|
}
|
|
setPaintOrder(Player2.class,Player1.class);
|
|
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;
|
|
}
|
|
}
|
|
if(player1.attacke2() &! player2.isBlocking){
|
|
if(player1.getX() - player2.getX() < attack2Distance && player1.getX() - player2.getX() > -attack2Distance && player1.getY() - player2.getY() < 30 && player1.getY() - player2.getY() > -30){
|
|
player2.leben = player2.leben -attack2Strength;
|
|
player1.shakra = player1.shakra +5;
|
|
if(player1.shakra > player1.maxShakra){
|
|
player1.shakra = player1.maxShakra;
|
|
}
|
|
setPaintOrder(Player1.class,Player2.class);
|
|
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;
|
|
}
|
|
}
|
|
if(player2.attacke2() &! player1.isBlocking){
|
|
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;
|
|
player2.shakra = player2.shakra +5;
|
|
if(player2.shakra > player2.maxShakra){
|
|
player2.shakra = player2.maxShakra;
|
|
}
|
|
setPaintOrder(Player2.class,Player1.class);
|
|
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;
|
|
}
|
|
}
|
|
if(player1.dashAttack()){
|
|
if(player1.getX() - player2.getX() < attack2Distance && player1.getX() - player2.getX() > -attack2Distance && player1.getY() - player2.getY() < 30 && player1.getY() - player2.getY() > -30){
|
|
player2.isBlocking = false;
|
|
player2.leben = player2.leben -attack2Strength;
|
|
player1.shakra = player1.shakra +5;
|
|
if(player1.shakra > player1.maxShakra){
|
|
player1.shakra = player1.maxShakra;
|
|
}
|
|
setPaintOrder(Player1.class,Player2.class);
|
|
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;
|
|
}
|
|
}
|
|
if(player2.dashAttack()){
|
|
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 -attack2StrengthP2;
|
|
player2.shakra = player2.shakra +5;
|
|
if(player2.shakra > player2.maxShakra){
|
|
player2.shakra = player2.maxShakra;
|
|
}
|
|
setPaintOrder(Player2.class,Player1.class);
|
|
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;
|
|
}
|
|
}
|
|
showText(String.valueOf(player2.leben),450,40);
|
|
showText(String.valueOf(player1.leben),150,40);
|
|
l1.leben(player1.leben, player1.maxLeben);
|
|
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(player1.shootTimer == 30){
|
|
shootP1();
|
|
}
|
|
if(Greenfoot.isKeyDown("t")){
|
|
player1.isShooting = true;
|
|
}
|
|
if(player2.shootTimer == 30){
|
|
shootP2();
|
|
}
|
|
if(Greenfoot.isKeyDown("z")){
|
|
player2.isShooting = true;
|
|
}
|
|
if(shot){
|
|
if(projectile1.hit){
|
|
player2.leben = player2.leben -20;
|
|
player1.shakra = player1.shakra +5;
|
|
if(player1.shakra > player1.maxShakra){
|
|
player1.shakra = player1.maxShakra;
|
|
}
|
|
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;
|
|
player2.shakra = player2.shakra +5;
|
|
if(player2.shakra > player2.maxShakra){
|
|
player2.shakra = player2.maxShakra;
|
|
}
|
|
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;
|
|
}
|
|
}
|
|
if(player1.ultiTimer == 30){
|
|
ultiP1();
|
|
}
|
|
if(Greenfoot.isKeyDown("g") && player1.shakra >= 30 && player1.isUlti == false){
|
|
player1.isUlti = true;
|
|
player1.shakra = player1.shakra-30;
|
|
}
|
|
if(player2.ultiTimer == 30){
|
|
ultiP2();
|
|
}
|
|
if(Greenfoot.isKeyDown("h") && player2.shakra >= 30 && player2.isUlti == false){
|
|
player2.isUlti = true;
|
|
player2.shakra = player2.shakra-30;
|
|
}
|
|
if(ulti){
|
|
if(projectile1.hit){
|
|
player2.leben = player2.leben -40;
|
|
player1.shakra = player1.shakra +5;
|
|
if(player1.shakra > player1.maxShakra){
|
|
player1.shakra = player1.maxShakra;
|
|
}
|
|
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;
|
|
ulti = false;
|
|
}
|
|
}
|
|
if(ulti2){
|
|
if(projectile2.hit){
|
|
player1.leben = player1.leben -40;
|
|
player2.shakra = player2.shakra +5;
|
|
if(player2.shakra > player2.maxShakra){
|
|
player2.shakra = player2.maxShakra;
|
|
}
|
|
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;
|
|
ulti2 = false;
|
|
}
|
|
}
|
|
ultiAnimationP1();
|
|
ultiAnimationP2();
|
|
}
|
|
|
|
public void gameEnd(){
|
|
if(player1.leben <= 0){
|
|
Greenfoot.setWorld(new EndWorld("Player Two"));
|
|
}
|
|
if(player2.leben <= 0){
|
|
Greenfoot.setWorld(new EndWorld("Player One"));
|
|
}
|
|
}
|
|
|
|
public void lebensAnzeige(){
|
|
|
|
}
|
|
|
|
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);
|
|
}
|
|
else{
|
|
s1.setImage("blue.png");
|
|
GreenfootImage imag = s1.getImage();
|
|
imag.scale(1,1);
|
|
s1.setImage(imag);
|
|
}
|
|
if(player2.shakra > 0){
|
|
s2.setImage("blue.png");
|
|
GreenfootImage imag2 = s2.getImage();
|
|
imag2.scale((int)(120 * ((double)player2.shakra/(double)player2.maxShakra)),5);
|
|
s2.setImage(imag2);
|
|
}
|
|
else{
|
|
s2.setImage("blue.png");
|
|
GreenfootImage imag = s2.getImage();
|
|
imag.scale(1,1);
|
|
s2.setImage(imag);
|
|
}
|
|
}
|
|
|
|
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 = 40;
|
|
}
|
|
|
|
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 = 40;
|
|
}
|
|
|
|
public void ultiP1()
|
|
{
|
|
if (player1.ultiCooldown > 0) {
|
|
return;
|
|
}
|
|
|
|
|
|
int direction = player1.schautNachRechts ? 1 : -1;
|
|
|
|
projectile1 = new Projectile(direction, player1, player2);
|
|
|
|
|
|
int spawnX = player1.getX() + direction * 60;
|
|
int spawnY = player1.getY() - 10;
|
|
|
|
addObject(projectile1, spawnX, spawnY);
|
|
ulti = true;
|
|
player1.ultiCooldown = 40;
|
|
}
|
|
|
|
public void ultiP2()
|
|
{
|
|
if (player2.ultiCooldown > 0) {
|
|
return;
|
|
}
|
|
|
|
|
|
int direction = player2.schautNachRechts ? 1 : -1;
|
|
|
|
projectile2 = new Projectile2(direction, player2, player1);
|
|
|
|
|
|
int spawnX = player2.getX() + direction * 60;
|
|
int spawnY = player2.getY() - 10;
|
|
|
|
addObject(projectile2, spawnX, spawnY);
|
|
ulti2 = true;
|
|
player2.ultiCooldown = 40;
|
|
}
|
|
|
|
public void ultiAnimationP1(){
|
|
if(player1.ultiCooldown > 35){
|
|
projectile1.setImage(ultiAnimation);
|
|
GreenfootImage image = projectile1.getImage();
|
|
image.scale(400, 400);
|
|
projectile1.setImage(image);
|
|
if(!player1.schautNachRechts){
|
|
projectile1.getImage().mirrorHorizontally();
|
|
}
|
|
}
|
|
if(player1.ultiCooldown > 0 && player1.ultiCooldown < 35){
|
|
projectile1.setImage(ultiAnimation2);
|
|
GreenfootImage image = projectile1.getImage();
|
|
image.scale(400, 400);
|
|
projectile1.setImage(image);
|
|
if(!player1.schautNachRechts){
|
|
projectile1.getImage().mirrorHorizontally();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void ultiAnimationP2(){
|
|
if(player2.ultiCooldown > 35){
|
|
projectile2.setImage(ultiAnimationP2);
|
|
GreenfootImage image = projectile2.getImage();
|
|
image.scale(400, 400);
|
|
projectile2.setImage(image);
|
|
if(!player2.schautNachRechts){
|
|
projectile2.getImage().mirrorHorizontally();
|
|
}
|
|
}
|
|
if(player2.ultiCooldown > 0 && player2.ultiCooldown < 35){
|
|
projectile2.setImage(ultiAnimation2P2);
|
|
GreenfootImage image = projectile2.getImage();
|
|
image.scale(400, 400);
|
|
projectile2.setImage(image);
|
|
if(!player2.schautNachRechts){
|
|
projectile2.getImage().mirrorHorizontally();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void charakterP1(){
|
|
if(charakterP1 == 1){
|
|
attack1Distance = 95;
|
|
attack2Distance = 120;
|
|
attack1Strength = 10;
|
|
attack2Strength = 20;
|
|
shootAnimation = "RenProjectile.png";
|
|
ultiAnimation = "RenUltiProjectile1.png";
|
|
ultiAnimation2 = "RenUltiProjectile2.png";
|
|
}
|
|
else if(charakterP1 == 2){
|
|
attack1Distance = 95;
|
|
attack2Distance = 145;
|
|
attack1Strength = 15;
|
|
attack2Strength = 30;
|
|
shootAnimation = "TetsuProjectile.png";
|
|
ultiAnimation = "TetsuUltiProjectile1.png";
|
|
ultiAnimation2 = "TetsuUltiProjectile2.png";
|
|
}
|
|
else if(charakterP1 == 3){
|
|
attack1Distance = 95;
|
|
attack2Distance = 110;
|
|
attack1Strength = 8;
|
|
attack2Strength = 15;
|
|
shootAnimation = "HinataProjectile.png";
|
|
ultiAnimation = "HinataUltiProjectile1.png";
|
|
ultiAnimation2 = "HinataUltiProjectile2.png";
|
|
}
|
|
}
|
|
public void charakterP2(){
|
|
if(charakterP2 == 1){
|
|
attack1DistanceP2 = 95;
|
|
attack2DistanceP2 = 120;
|
|
attack1StrengthP2 = 10;
|
|
attack2StrengthP2 = 20;
|
|
shootAnimationP2 = "RenProjectile.png";
|
|
ultiAnimationP2 = "RenUltiProjectile1.png";
|
|
ultiAnimation2P2 = "RenUltiProjectile2.png";
|
|
}
|
|
else if(charakterP2 == 2){
|
|
attack1DistanceP2 = 95;
|
|
attack2DistanceP2 = 145;
|
|
attack1StrengthP2 = 15;
|
|
attack2StrengthP2 = 30;
|
|
shootAnimationP2 = "TetsuProjectile.png";
|
|
ultiAnimationP2 = "TetsuUltiProjectile1.png";
|
|
ultiAnimation2P2 = "TetsuUltiProjectile2.png";
|
|
}
|
|
else if(charakterP2 == 3){
|
|
attack1DistanceP2 = 95;
|
|
attack2DistanceP2 = 110;
|
|
attack1StrengthP2 = 8;
|
|
attack2StrengthP2 = 15;
|
|
shootAnimationP2 = "HinataProjectile.png";
|
|
ultiAnimationP2 = "HinataUltiProjectile1.png";
|
|
ultiAnimation2P2 = "HinataUltiProjectile2.png";
|
|
}
|
|
}
|
|
}
|