Frage von RuheLp, 42

Java code Problem Kleines Game?

Ich habe ein kleines Game entwickelt wirklich klein und ich habe das problem ein raster mit spieler zu erstellen könnte mir da einer helfen heir der code:

public static void main(String[] args) {
    // Erzeuge Spieler
    Point p = new Point( 10,8 );
    Point s = new Point ( 20, 38 );
    Point b1 = new Point ( 50, 45 );
    boolean paper = false;
    while (true){
    // Erzeuge Spielregeln
    
    if ( paper && p.equals( s ) ) {
        System.out.println("Schade, Verloren");
        break;
    }
    
    if ( b1.equals( p ) ) {
        System.out.println( "Herzlichen Glückwunsch, Gewonnen" );
        break;
    }       
    if ( p.equals( b1 ) ){
        paper = true;
                b1.setLocation(p);
    }
    }
    //Erzeuge Spielfläche
    
    for ( int y = 0; y < 10; y++ ) {
        for ( int x = 0; x < 40; x++ ){
            Point p1 = new Point( x,y );
            if ( p.equals(p) ){
                System.out.println('&');
                if (s.equals(p))
                    System.out.println('S');
                if (b1.equals(p))
                    System.out.println('P');
            }
            System.out.println();
        }
        //Spielereingabe
        
        switch ( new java.util.Scanner(System.in).next() ){
            case "h" : p.y = Math.max( 0, p.y -1 ); break;
            case "t" : p.y = Math.min( 9, p.y +1 ); break;
            case "l" : p.x = Math.max( 0, p.x -1 ); break;
            case "r" : p.x = Math.min( 39, p.x +1 ); break;
        }
        //Gegner bewegt sich in Richtung spieler
        
        if ( p.x < s.x )
            s.x--;
        if ( p.x > s.x )
            s.x++;
        if ( p.y < s.y )
            s.y--;
        if ( p.y > s.y )
            s.y++;
    }
    
}

}

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Omnivore10, 23

Was geht nicht richtig? Was war deine Eingabe? Was sagt der Debugger?

Aber ich kann dir eines sagen:

Deine Abbruchbedingungen in den if's werden NIE erfüllt. Daher ist deine whileschleife auch in einer Endlosschleife gefangen.


Antwort
von Tobihogh, 17

1. Du beendest deinen Gameloop zu früh. Das Spielfeld muss jedes mal neu gezeichnet werden.

2. Beim Zeichnen der Spielfiguren vergleichst du die Points immer mit dem Point vom Spieler p und nicht mit dem von dir wahrscheinlich dafür vorgesehenen Point p1 den du kurz davor mit den aktuellen Possitionen erstellt hast.

3. Wieder beim Zeichnen hast du die Abfragen für das Zeichnen von S und P im Block von der Abfrage für den Spieler. (Wäre sowiso besser mit else if)

4. Du machst nach jedem Zeichen einen Zeilenumbruch (das ln von println) Nutze wenn du mehrere Zeichen nacheinander ausgeben möchtest besser System.out.print(String s) oder füge alles zu einem String zusammen und gebe diesen mit System.out.println(String s) aus.

5. Du wenn kein Spieler oder Objekt an der aktuellen Possition angezeigt werden soll, musst du trotzdem ein Leerzeichen ausgeben da sonst keine Abstände gibt.

6. Der Zeilenumbruch darf erst nach einer Zeile kommen und nicht nach jeden Zeichen.


WARNUNGEN:

7. Dein Spieler s und was es auch sein soll b1 werden außerhalb des Spielfeldes initialisiert. Spielfeld nur 40 x 10 und s(20|38), b1(50|45).

8. Ich verstehe außerdem nicht, warum du bei den Spielregeln überprüfst ob p == b1 und dann b1.setLocation(p) machst???

Hier jetzt mal den verbesserten code ich weiß jetzt nicht wie dein Spiel funktionieren soll, daher habe ich da auch nicht nach Fehlern geschaut und nur die Fehler beim Darstellen behoben.

public static void main(String[] args) {
// Erzeuge Spieler
Point p = new Point( 10,8 );
Point s = new Point ( 20, 38 );
Point b1 = new Point ( 50, 45 );
boolean paper = false;
while (true){
// Erzeuge Spielregeln

if ( paper && p.equals( s ) ) {
System.out.println("Schade, Verloren");
break;
}

if ( b1.equals( p ) ) {
System.out.println( "Herzlichen Glückwunsch, Gewonnen" );
break;
}
if ( p.equals( b1 ) ){
paper = true;
b1.setLocation(p);
}
//Erzeuge Spielfläche

for ( int y = 0; y < 10; y++ ) {
for ( int x = 0; x < 40; x++ ){
Point p1 = new Point( x,y );
if(p1.equals(p) ){
System.out.print('&');
} else if(p1.equals(s)) {
System.out.print('S');
} else if(p1.equals(b1)) {
System.out.print('P');
} else {
System.out.print(' ');
}
}
System.out.println();
}
//Spielereingabe

switch ( new Scanner(System.in).next() ){
case "h" : p.y = Math.max( 0, p.y -1 ); break;
case "t" : p.y = Math.min( 9, p.y +1 ); break;
case "l" : p.x = Math.max( 0, p.x -1 ); break;
case "r" : p.x = Math.min( 39, p.x +1 ); break;
}
//Gegner bewegt sich in Richtung spieler

if ( p.x < s.x )
s.x--;
if ( p.x > s.x )
s.x++;
if ( p.y < s.y )
s.y--;
if ( p.y > s.y )
s.y++;

}
}

Kommentar von RuheLp ,

Vielen Dank Hast mir sehr geholfen.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten