Rohfassung von Spielbrett über Main ausgeben

Cerberus81

Mitglied
Hallo zusammen.

Ich studiere noch im ersten Semester Medieninformatik und habe mit Java noch einige Probleme.
Nun sollen wir als Abschlussarbeit für das allwöchentliche Praktikum bis Ende Januar ein 4Gewinnt Spiel mit Computergegner programmieren.

Ich habe mir überlegt, bevor ich mit irgendwelchen Dingen wie Spielregeln, oder KI beginne, ersteinmal das generelle Spielfeld darzustellen, welches auf der X-Achse 7 Felder und auf der Y-Achse 6 Felder umfassen soll.
Nach ein wenig googeln habe ich hierfür eine Hilfestellung gefunden, wie man das Ganze am besten anhand einer verschachtelten Schleife angehen kann.
Was diese Schleife macht, verstehe ich auch so soweit. Nun habe ich sie bloß ein wenig geändert und würde sie mir gerne auf der Konsole ausgeben lassen.
Nun stehe ich wieder einmal vor dem Problem, dass ich nicht weiß, wie die Mainmethode den Anfang des bis hierhin geschriebenen Spielbrettes ausgibt.
Der Code sieht folgendermaßen aus:

Java:
public class viergewinnt {


                                    // Definition des Spielfeldes
                                    // und der Spieler als CV

             private static final char SENKRECHT = 7;
             private static final char WAAGERECHT = 6;
             private static char [][] spielfeld = new char [7][6];
             private static String spieler;

public static void zeichnenSpielFeld(char[][] spielfeld) {

    int y = WAAGERECHT;
        do {
            y--;
            System.out.print("|");
            for(int x = 0; x < SENKRECHT; x++){
                System.out.print(" "+ spielfeld[x][y] +" |");
            }
            System.out.println();
        } while(y > 0);
}
    public static void main(String[] args) {

        
    }
}

Meine Frage ist eigentlich nur: Was schreibe ich jetzt in die Main Methode, um mir das erste Grundgerüst des Feldes schon einmal anzeigen lassen zu können?
 
Moinsen🙂

Witzig, wie man doch gleich anfangen will ein Spiel zu programmieren. Euphorie ist dabei wohl der beste Antrieb 🙂

Du hast also einen Code gefunden und möchtest diesen in der main ausführen?
Mhh, würde doch einfach vorschlagen, deine Methode dort mal aufzurufen.

Diese ist static und void. Na denn , einfach Klassennamen (Punkt) und Methode.

Java:
public static void main(String[] args) {
 
        
viergewinnt.zeichnenSpielFeld(...);

    }


1. Klassenname immer mit großen Anfangsbuchstabe 😉
2. Warum ist deinen Methode static?
3. Warum arbeitest du mit do / while?


Najut , viel spass , noch 🙂 Siehe oben , so kannste das ding aufrufen.

Hatte auch mal viergewinnt gemacht , nur ein wenig anders 😉

grüße
 
Hallo.

Naja, dafür, dass wir erst 10 Wochen lang Vorlesung gehabt haben, finde ich das auch ein wenig heftig.
Aber ohne die Abschlussaufgabe kein Testat und ohne Testat keine Zulassung zur Prüfung.

Also, ich will hier keine Codes aus dem Internet abschreiben. Ich suche momentan erstmal nur nach ein paar Beispielen, um bessere Übersicht zu gewinnen. Daher wird sich auch an der Schleife noch etwas ändern, da ich sie selbst auf den ersten Blick ziemlich umständlich finde.

Aber es hilft mir schonmal zu wissen, wie ich so einzelne Methoden, die noch zu keinem größeren Ganzen gehören, überhaupt darstellen kann.

Danke dir für deinen Tipp!

EDIT: Static ist sie doch, damit die Variablen für das Spielfeld nicht doppelt vorhanden sein können, oder sehe ich das falsch?
 
4. Warum sind WAAGERECHT und SENKRECHT chars? char ist für Zeichen gedacht, auch wenn man (C++-Abstammung sei dank) damit rechnen kann. Normal wäre int, byte ginge auch noch.
 
Huch, überschnitten.

Naja, wenn ich das Spielfeld dann aus den Werten anlege, wird das doch später mit Symbolen für die Spielsteine gefüllt. Muss das dann nicht char sein?
 
Also Tipp gebe ich dir UML 😉
Modellier doch einfach mal dein Viergewinnt.

Dazu gehören Beispielsweise abstracte Klassen oder auch interfaces.
Würde halt damit anfangen mir alles aufzuschreiben , was mir einfällt.

Neben dem ein Tip:

Viergewinnt gehört zu den Regulären Spielen:

Ein Spiel hat damit in einer Spielsituation immer endlich viele erlaubte Züge.
Für eine Spielsituation kann erfragt werden, wer am Zuge ist.
Nach einen bestimmten Zug, lässt sich eine neuer Spielzustand berechnen.
Das Spiel ist vorbei, wenn kein Zug mehr möglich ist oder jemand gewonnen hat.
Und es kann für einen Spieler bewertet werden, ob die Situation gut oder schlecht für ihn ist.


Denke immer an den Punkten 😉
 
hm wie wäre es, wenn du mehrerer Klassen machst

Board(Spielfeld)

BoardView.java -> Zeigt das Spielfeld an (in dem einfachen Fall ausgabe per ASCII)
BoardModel.java -> Speichert die Daten für das Spielfeld
BoardController.java -> Steuert das Spielfeld (hier kannst du sagen, Roter Stein auf A4 oder so)

Game

GameController.java -> Steuert das Spiel
GameModel.java -> Speichert das Spielfeld und Spielerinformationen, die Daten für das Spiel halt
GameView -> Das Fenster für das Spiel (wird erst mal nicht gebraucht)

Aus Main heraus erstellst du einen GameController und der erzeugt alles andere 🙂
bzw steuert die anderen Controller an.

Gruß Oli
 
Eure Tipps helfen mir grad wirklich weiter. Danke für die Mühe!
Ich setze mich jetzt nocheinmal davor. Diese viel zu lange Schleife werde ich wohl als erstes kippen.
 
Mal gefragt: Soll das Ganze auf der Konsole geschehen oder in eine Fenster?

MVC ist für so ein kleines Projekt übertrieben , lieber Olli 😉
Außer man bleibt lediglich bei der Bennung der Klassen 😉
 
Nein, also wirklich nur ganze primitiv auf der Konsole. Ohne Grafik etc.

Einfach nur mit ein paar Strichen das Spielfeld darstellen und für die Spielsteine zum Beispiel "x" und "o".

Ich hatte wie gesagt erst zehn Vorlesungen und auch keine Vorkenntnisse.

Wir sollen also mit 2D Arrays, Schleifen, Instanz-und Klassenvariablen, einzelnen einfachen Methoden, Klassenvererbung etc. arbeiten.

Alles noch auf ganz niedrigem Niveau.
 
Mal gefragt: Soll das Ganze auf der Konsole geschehen oder in eine Fenster?

MVC ist für so ein kleines Projekt übertrieben , lieber Olli 😉
Außer man bleibt lediglich bei der Bennung der Klassen 😉

Also erst mal !!!! oli schreibt man mit einem "L" 😉

und dann zum eigentlichen 🙂 .. ich find das sauber und ordentlich .. und warum nicht auch bei was kleinem sauber arbeiten 🙂
hilft einem, wenn es dann auch mal bisschen größer werden sollte 😉

edit:

aber sonst geb ich dir recht, erst mal UML-Bildchen malen und sich überlegen was man wo braucht 🙂

@cerberus
das dauert am anfang leider immer ein bisschen und du musst dich gedulden, bis du wirklich was "siehst" 🙂 darum erst mal nachdenken und bisschen planen und dann bauen und am ende alles anders machen 😀..
man nennt es lernen 🙂
 
Zuletzt bearbeitet:
MVC ist für so ein kleines Projekt übertrieben , lieber Olli 😉

Dazu mal zwei Kommentare:
1. Projekte neigen dazu, größer zu werden
2. In ein schlecht stukturiertes Projekt im Nachhinein Struktur reinzubringen ist aufwändig

Oder anders angedeutet: Geht es in diesem Projekt darum, "Vier Gewinnt" zu schreiben? 😉
 
Lieber mvc in einem kleinen Projekt lernen als bei einem großen sowieso auf die Schnauzue zu fliegen ;-)

Naja, dafür, dass wir erst 10 Wochen lang Vorlesung gehabt haben, finde ich das auch ein wenig heftig.
mhn da bin ich anderer meinung.. if, for, arrays, funktionen... mehr braucht man nicht...

zu deiner zeichnenSpielFeld.. ich würde da auch keine do while nehmen.... while nimmt man eher, wenn man nichit weiß wie oft man etwas macht...
Java:
public class Test {

   public static void main(String[] args) throws ParseException {
      char[][] spielfeld = 
            {{'a', 'b', 'c'}, 
            {'d', 'e', 'f'}};
      zeichnenSpielFeld(spielfeld);

   }
   
   public static void zeichnenSpielFeld(char[][] spielfeld) {
      for(int y =0; y<spielfeld.length; y++){
         for(int x = 0; x<spielfeld[y].length; x++){
            System.out.print(" "+ spielfeld[y][x] +" |");
         }
         System.out.println();
      }
      
  }
}
das sieht doch sauberer aus...
 

Zurück
Oben