Frage von javAnt, 79

Wie kann ich diesen Code retten!?

Hallo, ich habe ein Problem, und zwar möchte ich in meinem Programm, dass die Attacken q & u und die Heals e & o jeweils eine Abklingzeit haben (Attacken 5 Züge, Heals 7)! Für player1 ist cooldown1 vorgesehen und für player2 cooldown2, welche jeweils nach einem Zug per WASD oder IJKL um einen Zug größer werden!

if (cooldown1 >= 5 ){ case "q" [...] } GEHT NICHT!!!

Bitte nicht all zu komplizierte Antworten!

Der Code befindet sich als Antwort unter dieser Frage, da er sonst nicht reinpasst!

Antwort
von javAnt, 59

Hier der Code:

public class xxx {

public static void main(String[] args) {

// Leben P1 + P2

int player1Life = 10;
int player2Life = 15;

// Schaden P1 + P2

int player1Damage = 2;
int player2Damage = 1;

// Abklingzeit

int cooldown1 = 0;
int cooldown2 = 0;

// SpawnPoints P1 + P2

java.awt.Point player1Position = new java.awt.Point();
player1Position.setLocation(0, 19);

java.awt.Point player2Position = new java.awt.Point();
player2Position.setLocation(99, 0);

// Spielfeld + PlayerErstellung + Systemscanner

while (true){

for ( int y = 0; y < 20; y++ ) {
for ( int x = 0; x < 100; x++) {
java.awt.Point p = new java.awt.Point( x, y );
if ( player1Position.equals ( p ) )
System.out.print('1');
else if (player2Position.equals ( p ) )
System.out.print("2");
else System.out.print(".");
}
System.out.println();
}

switch ( new java.util.Scanner ( System.in ).next()){

// Bewegung PlayerOne

case "w" : player1Position.y = Math.max( 0, player1Position.y - 1);cooldown1++;break;

case "s" : player1Position.y = Math.min( 9, player1Position.y + 1);cooldown1++;break;

case "a" : player1Position.x = Math.max( 0, player1Position.x - 1);cooldown1++;break;

case "d" : player1Position.x = Math.min( 39, player1Position.x + 1);cooldown1++;break;

case "wa" : player1Position.x = Math.max( 0, player1Position.x - 1);
player1Position.y = Math.max( 0, player1Position.y - 1);cooldown1++;break;

case "wd" : player1Position.x = Math.max( 0, player1Position.x + 1);
player1Position.y = Math.max( 0, player1Position.y - 1);cooldown1++;break;

case "sa" : player1Position.x = Math.max( 0, player1Position.x - 1);
player1Position.y = Math.max( 0, player1Position.y + 1);cooldown1++;break;

case "sd" : player1Position.x = Math.max( 0, player1Position.x + 1);
player1Position.y = Math.max( 0, player1Position.y + 1);cooldown1++;break;

case "aw" : player1Position.x = Math.max( 0, player1Position.x - 1);
player1Position.y = Math.max( 0, player1Position.y - 1);cooldown1++;break;

case "dw" : player1Position.x = Math.max( 0, player1Position.x + 1);
player1Position.y = Math.max( 0, player1Position.y - 1);cooldown1++;break;

case "as" : player1Position.x = Math.max( 0, player1Position.x - 1);
player1Position.y = Math.max( 0, player1Position.y + 1);cooldown1++;break;

case "ds" : player1Position.x = Math.max( 0, player1Position.x + 1);
player1Position.y = Math.max( 0, player1Position.y + 1);cooldown1++;break;

// Bewegug PlayerTwo

case "i" : player2Position.y = Math.max( 0, player2Position.y - 1);cooldown2++;break;

case "k" : player2Position.y = Math.max( 0, player2Position.y + 1);cooldown2++;break;

case "j" : player2Position.x = Math.max( 0, player2Position.x - 1);cooldown2++;break;

case "l" : player2Position.x = Math.max(0, player2Position.x + 1);cooldown2++;break;

// Attacken P1 + P2

case "q": player1Life = player1Life - player2Damage;
System.out.println("Player1: " + player1Life);break;

case "u" : player2Life = player2Life - player1Damage;
System.out.println("Player2: " + player2Life);break;

case "e" : player1Life = player1Life + player2Damage;
System.out.println("Player1: " + player1Life);break;

case "o" : player2Life = player2Life + player1Damage;
System.out.println("Player2: " + player2Life);break;

}
if (player2Life == 0){
System.out.println("PLAYER1 WON!");break;}
else if (player1Life == 0){
System.out.println("PLAYER2 WON!");break;}
}
}
}

Antwort
von CrystalixXx, 41
case "q":
if (cooldown1>=5)
{
player1Life = player1Life - player2Damage;
System.out.println("Player1: " + player1Life);
}
break;

Ungefähr so.

Kommentar von javaAnt ,

hallo, danke schon mal für die Antwort...wenn das klappt, was ich nacher erst ausprobieren kann, kann ich Ihnen leider keinen Stern geben, da ich mein Passwort vergessen habe, und jetzt diesen account benutze!

Kommentar von javaAnt ,

Hallo,

das het bis jetzt ganz gut geklappt, jedoch wiederhold sich das ganze nicht und mit einer while-Schleife klappt das ganze auch nicht!

Das heisst die Abklingzeit it nur einmal, jedoch soll diese jedesmal wieder kommen wenn eine Attacke gesetzt wurde!

Kommentar von CrystalixXx ,

Na ja. Wieso setzt du dann nicht die Variable "cooldown" wieder auf 0, wenn ein Angriff ausgeführt wurde?

Kommentar von javaAnt ,

mir fällt spontan nicht ein wie das automatisch gehen sollte

Kommentar von CrystalixXx ,
cooldown1 = 0;

nach dem der Angriff ausgeführt wurde, also nach dem Spieler 1 den Schaden erhalten hat. (Das ist der Codeteil, den ich dir schon gab.)

Kommentar von javaAnt ,

danke, das hätt ich mir auch selber denken können...hätt ich mal nachgedacht

Kommentar von javaAnt ,

vielen Dank nochmal für ihre mühe

Antwort
von Star4Fun, 48

Wenn ich dich richtig verstanden habe willst du mit dem Code der nicht geht prüfen ob die Zahl NICHT größer ist als 5 also hast du einfach ein Ausrufezeichen vergessen.

Kommentar von javaAnt ,

Erstmal sorry, das ich jetzt anders heisse musste aber einen neuen Account machen!

der Code soll prüfen ob der Cooldown schon 5 bzw grösser als 5 ist!

da if und case aber nicht in der Kombination funktionieren suche ich eine Lösung wie es trotzdem möglich ist, dass "q" erst funktioniert wenn cooldown1 >=  5 ist!

Keine passende Antwort gefunden?

Fragen Sie die Community