Bei VierGewinnt vorher fragen, ob man gegen den Computer spielen möchte oder gegeneinander.

abinesh

Mitglied
Hallo,

wir sollen VierGewinnt bei Java programmieren. Nun ist das Basegame fertig. Wir müssen aber noch einfügen, dass am Anfang gefragt wird, ob man gegen einen Computer spielen möchte oder gegeneinander. Außerdem soll am Ende gefragt werden, ob man noch eine Runde spielen möchte... wir kommen irgendwie nicht voran.. wäre cool wenn jemand helfen könnte.

Java:
package connect4;
//Am anfang aussuchen ob 1v1 oder gegen Computer
//eigabe mit a b c d... nicht nummern
//wenn fertig gefragt ob noch eine runde

import java.util.Scanner;

public class viergewinnt {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        //Länge und Breite des Spielfeldes festlegen
        char[][] raster = new char[6][7];
        //Erschaffung vom Spielfeld
        for (int zeile= 0; zeile< raster.length; zeile++){
            for (int spalte = 0; spalte < raster[0].length; spalte++){
                raster[zeile][spalte] = ' ';
            }
        }

        int turn = 1;
        char spieler = 'R';
        boolean gewinner = false;


        while (gewinner == false && turn <= 42){
            boolean validerSpielzug;
            int play;
            do {
                display(raster);
                System.out.println("Spieler 1 hat die Farbe Rot");
                System.out.println("Spieler 2 hat die Farbe Gelb");
                System.out.print("Spieler " + spieler + ", suche eine Säule aus: ");
                play = scan.nextInt();
                
                if(play > 6)
                    System.err.println("Dies ist nicht Spielbar, bitte geben sie eine Spielbare Antwort an! ");
                    
                else if(play < 0)
                    System.err.println("Dies ist nicht Spielbar, bitte geben sie eine Spielbare Antwort an! ");
                    
                
                
                validerSpielzug = validate(play,raster);

            }while (validerSpielzug == false);

            //drop the checker
            for (int zeile= raster.length-1; zeile>= 0; zeile--){
                if(raster[zeile][play] == ' '){
                    raster[zeile][play] = spieler;
                    break;
                }
            }
            

                
    

            //Herausfinden ob es ein Gegewinner gibt
            gewinner = isgewinner(spieler,raster);

            //Spiler wechseln
            if (spieler == 'R'){
                spieler = 'G';
            }else{
                spieler = 'R';
            }

            turn++;
        }
        display(raster);

        if (gewinner){
            if (spieler=='R'){
                System.out.println("Gelb gewinnt");
            }else{
                System.out.println("Rot gewinnt");
            }
        }else{
            System.out.println("Unentschieden");
        }

    }

    public static void display(char[][] raster){
        System.out.println(" A B C D E F G");
        System.out.println("---------------");
        for (int zeile= 0; zeile< raster.length; zeile++){
            System.out.print("|");
            for (int spalte = 0; spalte < raster[0].length; spalte++){
                System.out.print(raster[zeile][spalte]);
                System.out.print("|");
            }
            System.out.println();
            System.out.println("---------------");
        }
        System.out.println(" A B C D E F G");
        System.out.println();
    }

    public static boolean validate(int spalte, char[][] raster){

        if (spalte < 0 || spalte > raster[0].length){
            return false;
        }


        if (raster[0][spalte] != ' '){
            return false;
        }

        return true;
    }

    public static boolean isgewinner(char spieler, char[][] raster){
        //Prüfung ob es 4 quer gibt
        for(int zeile= 0; zeile<raster.length; zeile++){
            for (int spalte = 0;spalte < raster[0].length - 3;spalte++){
                if (raster[zeile][spalte] == spieler   &&
                        raster[zeile][spalte+1] == spieler &&
                        raster[zeile][spalte+2] == spieler &&
                        raster[zeile][spalte+3] == spieler){
                    return true;
                }
            }
        }
        //Prüfung ob es 4 nach oben oder unten gibt
        for(int zeile= 0; zeile< raster.length - 3; zeile++){
            for(int spalte = 0; spalte < raster[0].length; spalte++){
                if (raster[zeile][spalte] == spieler   &&
                        raster[zeile+1][spalte] == spieler &&
                        raster[zeile+2][spalte] == spieler &&
                        raster[zeile+3][spalte] == spieler){
                    return true;
                }
            }
        }
        //Kontrolle der Diagonale nach oben
        for(int zeile= 3; zeile< raster.length; zeile++){
            for(int spalte = 0; spalte < raster[0].length - 3; spalte++){
                if (raster[zeile][spalte] == spieler   &&
                        raster[zeile-1][spalte+1] == spieler &&
                        raster[zeile-2][spalte+2] == spieler &&
                        raster[zeile-3][spalte+3] == spieler){
                    return true;
                }
            }
        }
        //Kontrolle der Diagonale nach unten
        for(int zeile= 0; zeile< raster.length - 3; zeile++){
            for(int spalte = 0; spalte < raster[0].length - 3; spalte++){
                if (raster[zeile][spalte] == spieler   &&
                        raster[zeile+1][spalte+1] == spieler &&
                        raster[zeile+2][spalte+2] == spieler &&
                        raster[zeile+3][spalte+3] == spieler){
                    return true;
                }
            }
        }
        return false;
    }
}
 
Der Ansatz, zu dem ich immer nur immer wieder raten kann:
Unterteile es vernünftig in Methoden. Und mach in der main() nur minimale Dinge.

Dann hast Du es relativ einfach, Dinge anzupassen. Dann hast Du eine Methode, die z.B. einfach nur folgendes macht:
Java:
do {
  playGame();
while (doesPlayerWantToPlayAgain())

Ganz klein und einfach. playGame() kann dann einfach der Code in der main() Methode sein.
Die Methode doesPlayerWantToPlayAgain muss halt die Abfrage machen und auswerten um dann true oder false zurück zu geben.

Wenn Methoden so kurz und klein gehalten werden, dann sind diese auch einfach zu testen. Du hast den Überblick und kannst viel einfacher etwas verändern.
 

Neue Themen


Zurück
Oben