Bei VierGewinnt fragen ob man gegen CPU oder Menschen spielen will.

abinesh

Mitglied
Hallo,

wir sind im ersten Semester und sollen VierGewinnt programmieren. Mein Kollege und ich haben mit ganz viel Mühe das BaseGame erstellt. Jetzt soll vor Beginn des Spiels gefragt werden, ob man gegen den CPU spielen möchte oder gegeneinander.. wir haben leider noch nicht soviel Praxis sammeln dürfen nur 3Tage für die Aufgabe erhalten.. deswegen tun wir uns sehr schwer damit. wäre cool wenn ihr Lösungsansätze hättet.. unten kommr der Code..

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

import java.util.Scanner;
public class Connect {

    
    public static void main(String[] args) {
          try (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.Willst du noch eine Runde spielen?");
                }else{
                    System.out.println("Rot gewinnt.Willst du noch eine Runde spielen?");
                }
            }else{
                System.out.println("Unentschieden. Willst du noch eine Runde spielen)");
            }
        }

        }

        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;
        }
        
        {

} }
 
In deinem euren Code sehe ich nichts von einen Algorithmus der einen spieler darstellt.

Am einfachsten wäre ein Zufallsgenerator der einfach ohne Logik einen Slot auswähl.
Da wirst du aber immer gewinnen. Da müsstet ihr euch schon eine sinnvollere Logik ausdenken.

Nur die Abfrage und Auswertung wird da nicht reichen.
 
Zuletzt bearbeitet:
Habe doch eine einfache Variante gegeben. Random werdet ihr wohl doch gehabt haben.
Es sind ja fast Ferien also seit ihr ja am ende des ersten Semester.
 
Etwas zu euren bisherigen code

Die Auswertung überprüfen ob ein gültiger Slot eingeben wurde ist ziemlich sinnlos.
Wenn Ihr zb 7 eingebt entsteht eine Exzeption. So was wolltet ihr verhindern tut ihr aber nicht.


Tipp geschweifte Klammen bei einen If helfen bei der Übersicht. Zu erkenn was bei true / false ausgeführt wird, und was nach dem if ausgeführt wird, besser zu erkennen und zuverstehen.

So etwas könnte hilfreich sein und auch die boolean Variable schon auf False beim Erstellen zu setzen.

Java:
   if(play <= 6 && play >= 0) {
                    validerSpielzug = validate(play, raster);
                 ...
                }
 
Zuletzt bearbeitet:
Hi Neuling, geht das doch so an:

Java:
import javax.swing.*;
import java.awt.*;

public class VierGewinnt {
    public static int numberOfPlayers() {
        Component parent = null;
        String message = "Wie viele Spieler gibt es?";
        String title = "Spielerauswahl";
        int optionType = JOptionPane.DEFAULT_OPTION;
        int messageType = JOptionPane.QUESTION_MESSAGE;
        Icon icon = null;
        String[] options = {"Du gegen CPU", "2 Spieler", "4 Spieler"};
        String initialOption = options[0];
        final int o = JOptionPane.showOptionDialog(parent, message, title, optionType, messageType, icon, options, initialOption);
        switch (o) {
            case 1 -> {
                return 2;
            }
            case 2 -> {
                return 4;
            }
            default -> {
                return 1;
            }
        }
    }

    public static void main(String[] args) {
        System.out.println("Es spielen:");
        System.out.println(numberOfPlayers() + " Spieler");
    }
}
 
Hi Neuling, geht das doch so an:

Java:
import javax.swing.*;
import java.awt.*;

public class VierGewinnt {
    public static int numberOfPlayers() {
        Component parent = null;
        String message = "Wie viele Spieler gibt es?";
        String title = "Spielerauswahl";
        int optionType = JOptionPane.DEFAULT_OPTION;
        int messageType = JOptionPane.QUESTION_MESSAGE;
        Icon icon = null;
        String[] options = {"Du gegen CPU", "2 Spieler", "4 Spieler"};
        String initialOption = options[0];
        final int o = JOptionPane.showOptionDialog(parent, message, title, optionType, messageType, icon, options, initialOption);
        switch (o) {
            case 1 -> {
                return 2;
            }
            case 2 -> {
                return 4;
            }
            default -> {
                return 1;
            }
        }
    }

    public static void main(String[] args) {
        System.out.println("Es spielen:");
        System.out.println(numberOfPlayers() + " Spieler");
    }
}
Es soll ein Spiel suf der Konsole sein. Wenn dann poste auch Code der dazu passt. Nichts mit GUI.
 

Neue Themen


Zurück
Oben