2d Array individuell machen

Raphael_

Aktives Mitglied
Hallo,
ich möchte ein Kniffel Spiel in der Konsole programmieren, um das Brett zu erstellen nutze ich ein 2d Array, das so aussieht.

String[] [] Spielfeld = {
{"____________________________________________________"},
{"1er | |"},
{"2er | |"},
{"3er | |"},
{"4er | |"},
{"5er | |"},
{"6er | |"},
{"Bonus | |"},
{"3er Pasch | |"},
{"4er Pasch | |"},
{"Full House| |"},
{"Kl Straße | |"},
{"Gr Straße | |"},
{"Gesamt | |"},
{"____________________________________________________"}
};

for (int i =0; i<Spielfeld.length; i++) {
for (int j = 0; j < Spielfeld.length; j++) {
System.out.println(Spielfeld[j] + "");
}
}

Jetzt zu meiner Frage: Ich möchte hinzufügen, dass man so viele Spieler wie man möchte hinzufügen kann, wie mach ich das am Besten, dass da oben dann der Name steht und das das Feld natürlich mit zunehmenden Spielern größer wird?
Danke schonmal! 🙂
 
1. Bitte benütze zum Einfügen von Code bitte den Code-Button [</>], sonst wird es unleserlich und, wie in Deinem Fall, auch noch verfälscht.
2. Was weißt Du schon über objektorientiertes Programmieren, Klassen und Instanzen. Damit ließe sich Dein Vorhaben viel eleganter und "JAVA-like" umsetzen.
3. zu Deiner Frage: Bevor Du das Spielfeld initialisierst, benötigst Du eine Eingaberoutine, welche die Anzahl der Mitspieler abfragt (z.B. scanner.nextInt() ) und anschließend deren Namen (z.B.: scanner.nextLine() ). Wenn Du das nicht kennst, frag google etc.
Dem Spielfeld (also dem Wertungsblock) fehlt dann noch die Zeile für den Spielernamen. Ich würde den ganz oben als erstes einfügen.
 
Danke dir für deine Antwort! Das ich das mit einem Scanner abfragen muss war mir schon klar, mir ging es eigentlich nur darum, wie ich das Spielfeld dann anpassen soll? Weil ich habe ja das Spielfeld so quasi im 2d array ja schon "gezeichnet" also kann ich das dann noch vergrößern, und wenn ja wie?
 
Es gibt mehrere Möglichkeiten. Ein einfacher Ansatz wäre es vielleicht, anstatt eines String-Arrays ein int-Array zu verwenden. Darin kannst du direkt die Punkte eintragen und damit rechnen. Dieses Array erzeugst du sobald du weiß, wie viele Spieler teilnehmen in der passenden Größe. Die Spaltentitel (Spielernamen) und Zeilentitel (Punktkategorien) können separate eindimensionale Arrays sein. Du hast dann drei Arrays, die deine Ausgabemethode entsprechend verarbeiten muss.

Es gibt natürlich noch viele weitere Möglichkeiten. Die Zeilentitel, könntest du auch als Enum verwalten, die sind ja immer fix. Ich würde mindestens zu Konstanten raten, die den Zugriff auf die Arraypositionen vereinfachen. Und dann gibt es natürlich auch die Möglichkeit die Java-Collections zu verwenden, wie z. B. etwas wie Map<Player, Map<PointCategory, Integer>>, aber da du offenbar am Anfang deiner Entwicklerkarriere stehst versuch es ruhig erst mal mit Arrays.

Hier ein Beispiel zu dem Tipp mit den Konstanten:
Java:
static int ACES = 0; // 1er
static int TWOS = 1; // 2er
//..
static int YAHTZEE = 11; // Kniffel
static int CHANCE = 12; // Chance

Der Zugriff um z. B. die erzielte Punktezahl (in der Kategorie "2er" für den aktuellen Spieler) zuzuweisen sähe dann so aus:
Java:
scores[TWOS][currentPlayer] = score;

Das geht natürlich alles viel schöner und objektorientierter...
 
Zuletzt bearbeitet:
Hier noch ein quick-and-dirty Beispiel für den Einsatz von Enumerationen
Java:
public enum Category {
   
    ACES(0, "1er"),
    TWOS(1, "2er"),
    THREES(2, "3er"),
    //..
    CHANCE(12, "Chance");
   
    private int index;
    private String text;
   
    public Category(int index, String text) {
        this.index = index;
        this.text = text;
    }
   
    public int getIndex() {
        return index;
    }
   
    public String getText() {
        return text;
    }
}


public class Main
{
    public static void main(String[] args) {
        for (var category : Category.values()) {
            System.out.println(category.getText());
        }
    }
}

Könnte man noch erweitern, um die fixe Punktzahl, die man bei Straßen oder Kniffel erhält.

Der darüber gezeigte Zugriff auf die Punktezahl, sieht damit so aus:
Java:
scores[Category.TWOS.getIndex()][currentPlayer] = score;
 
Zuletzt bearbeitet:

Zurück
Oben