Spieler bewegen :)

HunterCD

Mitglied
Hi Leute,
folgendes Problem:
Ich möchte ein 2-D Spiel entwickeln. Mein Spielfeld steht bereits, habe es mit einem Array erstellen können. Nun möchte ich das mein Spieler sich auf diesen Feldern bewegen kann.
Die Startposition meines Spielers liegt bei x=0;y=0 also ganz oben links.
Wie kann ich mein Spieler nun in das nächste Feld gehen? Müsste ich da irgendetwas überschreiben?
Über Ratschläge würde ich mich freue.🙂
Code:
import java.util.Scanner;

  class brett {
    public static void main(String[] args) {
       char[][] room = new char[4][8];

       for (int i = 0; i < 4; i++) {   //hier wird das ganze Array mit '.' gefüllt
           for (int j = 0; j < 8 ; j++) {
               room[i][j] = '.';
           }
       }
       room[0][0] = 'P';                  //Feld 0/0 wird mit 'P' gefüllt muss nur 1* gemacht werden deshalb nicht in for

       for (int i = 0; i < 4 ; i++) {     //hier wird das Array Ausgegebn
           for (int j = 0; j < 8; j++) {
               System.out.print(room[i][j]);
           }
        System.out.println();
           }

        Scanner scan = new Scanner(System.in);
        String Eingabe;
        System.out.println("Up");
        Eingabe = scan.next();
        if(Eingabe.equals("Up")) {
        System.out.println("Richtig");
        }

       }
}
 
nehmen wir den ersten feld als Beispiele:
P....... das ist gelichbedeuten zu
room[0][0] = P
room[0][1] = .
room[0][2] = .
room[0][3] = .
room[0][4] = .
room[0][5] = .
room[0][6] = .
room[0][7] = .

also damit du P von [0][0] zu [0][1] bewegst musst du so zusagen die werte von den beiden umtauschen
z.B
String tmp = room[0][0];
room[0][0] = .;
room[0][1] = tmp; // tmp == P

reicht so ?
 
Kann man das nicht irgendwie mit einer Schleife ausdrücken, so dass man sagt, dass i und j die x- und y-Achse darstellen. Dann wird beispielsweise bei der Eingabe von Right, das Element P, mit dem benachbarten Element ausgetauscht wird. Außerdem soll die neue Position von P (0/1) sowie das gesamte neue Array abgespeichert werden, sprich wenn man das zweite mal right eingibt, soll P auf (0/2) bewegt werden.
 
ok, damit die änderungen an dem Bret (sprich Array) beibehalten werden können, habe den Array als static definiert ausserhalb der main methode damit die anderen Methoden drauf zugreichen und ihn Manipulieren.
die methode changPositionToRight() bewegt den Spieler P einmal nach rechts
danach wird durch die methode bretZeigen() das bret erneut angezeigt und somit die neue Position des Spielers.
der code wurde nur für "right" codiert, die While-Schleife von dem Scanner, ermöglicht es den user, die eingabe zu wiederholfen ohne das Spiel zu reseten. um die eingabe zu beenden, bitte die tastenkombination Strg+z (Strg z) drücken. sonst solange du "right" eingibst bewegt sich der Spieler nach rechts. es müssen noch andere Faktoren berücksichtigt werden, zb, was passiert wenn der Spieler ganz rechts ist ...etc
für up, down..etc sollst du einfach die methode changPositionToRight() umschreiben.
hoffe es hilft

Java:
import java.util.Scanner;

public class ZeichenInText {
   
    static char[][] room = new char[4][8];
   
    public static void main(String[] args) {

        for (int i = 0; i < 4; i++) {   //hier wird das ganze Array mit '.' gefüllt
            for (int j = 0; j < 8 ; j++) {
                room[i][j] = '.';
            }
        }
        room[0][0] = 'P';                  //Feld 0/0 wird mit 'P' gefüllt muss nur 1* gemacht werden deshalb nicht in for

        bretZeigen(); // das Bret wird angezeigt

        Scanner scan = new Scanner(System.in);
       
        while(scan.hasNext()) { // user wird immer wieder aufgefordert etwas einzugeben bis er Strg+Z drückt, somit beendet er die Eingabe
            String eingabe = scan.next();
            if(eingabe.equals("right")) { //hier wird geprüft ob right / up / down /left eingegebe wurde.
                changPositionToRight(room); //methode wird aufgerufen um den Spieler 1 mal nach rechts zu bewegen
            }
            bretZeigen(); // danach wird der Bret erneut angezeigt
        }


    }
   
    // bewegt den Spieler einmal nach rechts
    public static void changPositionToRight(char[][] array) {
        for(int i = 0; i < array.length; i++) {
            for(int j = 0; j < array[i].length; j++){
                if(array[i][j] == 'P') { // finde wo 'P' sich befindet
                    char tmp = array[i][j]; // in diese 3 zeilen, wie P mit ihren rechten Nachbar umgetauscht -> Spieler bewegt sich nach rechts
                    array[i][j] = array[i][j+1];
                    array[i][j+1] = tmp;
                    break; // wenn der Umtausch erlogt ist, beende die schleife
                }
            }
        }
    }
   
    // das Bret anzeigen
    public static void bretZeigen() {
        for(int i = 0; i < room.length; i++){
            for(int j = 0; j < room[i].length; j++){
                System.out.print(room[i][j]);
            }
            System.out.println();
        }
    }//END bretZeigen();
}
 

Zurück
Oben