mardi 5 février 2019

Four Wins Player vs Computer

Hello Stack overflow Community, iam at the first semester in applied computing and has to program the game four wins with java. My game has already 2 Players who can play against each other with using the console. But i also need a random number generator to play against a human who is giving the commands on the console. I tried to give Player 2 a rng option but it didnt worked out. I hope you guys can help me. I tried to translate my programm in english, i hope its understandable. Thank you for your help

public class FourWins {
        static String Player; 
        /**
         * @param args -> unused
         */
        public static void main(String[] args) {
                int columns, rows, zaehler = 0, eingabe;
                String player1, player2;
                char zeichen;
                char[][] spielfeld;
                
                //asking Player Names
                player1 = eingabeString("Name from Player A: ");
                
                do {
                        player2 = eingabeString("Name from Player B: ");
                } while(player1.equals(player2)); //ask again when Names are the same
                //ask dimensions
                do {
                        columns = eingabeInt("width of the matchfield (atleast 4): ");
                } while (columns < 4); //ask again when matchfield is to small
                do {
                        rows = eingabeInt("high of the matchfield (atleast 4): ");
                } while (rows < 4); //ask again when matchfield is to small
                spielfeld = new char[rows][columns];
                while (zaehler < columns*rows) {
                        zeichen = (zaehler % 2 == 0) ? 'o' : '+';
                        SPIELER = (zaehler % 2 == 0) ? player1 : player2;
                        showSpielfeld(spielfeld);
                        eingabe = eingabeInt("\n" + SPIELER + "(" + zeichen
                                        + ") is on the move. Please insert the column: ");
                        if (eingabe > columns || eingabe < 1)
                                System.err.println("Field doesnt exist.. Please try again!");
                        else {
                                zaehler++; // next one please
                                setzeFeld(spielfeld, eingabe, zeichen);
                        }
                }
                showSpielfeld(spielfeld);
                System.err.println("draw!");
        }
        /**
         * @param text -> screen input
         * @return -> keyboard input
         */
        static int eingabeInt(String text) {
                System.out.print(text);
                java.util.Scanner input = new java.util.Scanner(System.in);
                return input.nextInt();
        }
        /**
         * @param text -> screen output
         * @return -> keyboard input
         */
        static String eingabeString(String text) {
                System.out.print(text);
                java.util.Scanner input = new java.util.Scanner(System.in);
                return input.next();
        }
        /**
         * Column is passed and the field is set
         * @param spielfeld -> The playing field with all required data
         * @param column -> entered column
         * @param zeichen -> each player has a sign (*) or (+)
         */
        static void setzeFeld(char[][] spielfeld, int column, char zeichen) {
                column--; // Because the common man thinks the number range would range from 1 to 4
                int pos2check;
                if (spielfeld[0][column] != '\0')
                        System.err.println("The series is full .. bad luck!");
                else
                        for (int i = 0; i < spielfeld.length; i++) { //Iterate through the lines
                                if (i + 1 == spielfeld.length) {
                                        // After the last line nothing comes ..
                                        // so may be written in the current box, although in the
                                        // nothing stands next
                                        pos2check = i;
                                        if (spielfeld[pos2check][column] == '\0') {
                                                spielfeld[i][column] = zeichen;
                                                if(IsGameOver(spielfeld, i, column, zeichen)) {// Did somebody win ?
                                                        System.out.println("Player with"+zeichen+" has won");
                                                        System.exit(0);
                                                }
                                                break;
                                        }
                                } else {
                                        //check the following field
                                        pos2check = i+1;
                                        if (spielfeld[pos2check][column] != '\0') {
                                                spielfeld[i][column] = zeichen;
                                                if(IsGameOver(spielfeld, i, column, zeichen)) {// Did somebody win ?
                                                        System.out.println("Player with "+zeichen+" has won");
                                                        System.exit(0);
                                                }
                                                break;
                                        }
                                }
                        }
        }
        /**
         * Collection point for the functions that check whether jmd won
         * @param spielfeld -> The playing field with all required data
         * @param column -> the column at which the character was set
         * @param row -> the row at which the character was set
         * @param zeichen -> the sign
         */
        static boolean IsGameOver(char[][] spielfeld, int column, int row, char zeichen) {
                boolean b1 = GameIsOver_row(spielfeld, column, row, zeichen);
                boolean b2 = GameIsOver_column(spielfeld, column, row, zeichen);
                boolean b3 = GameIsOver_straight1(spielfeld, column, row, zeichen);
                boolean b4 = GameIsOver_straight2(spielfeld, column, row, zeichen);
                
                return (b1||b2||b3||b4);
        }
        static boolean GameIsOver_row(char[][] spielfeld, int column, int row, char zeichen) {
                // to the left
                int go = row - 1; // start with the point left above the set
                int i = 1; // the set point = 1 hits
                while (go >= 0) {
                        if (spielfeld[column][go] != zeichen)
                                break;
                        go--;
                        i++;
                }
                // to the right
                go = row + 1;
                while (go < spielfeld.length) {
                        if (spielfeld[column][go] != zeichen)
                                break;
                        go++;
                        i++;
                }
                return (i > 3);
        }
        static boolean GameIsOver_column(char[][] spielfeld, int column, int row, char zeichen) {
                // up
                int go = column - 1;
                int i = 1;
                while (go >= 0) {
                        if (spielfeld[go][row] != zeichen)
                                break;
                        go--;
                        i++;
                }
                // down
                go = column + 1;
                while (go < spielfeld.length) {
                        if (spielfeld[go][row] != zeichen)
                                break;
                        go++;
                        i++;
                }
                return (i > 3);
        }
        static boolean GameIsOver_straight1(char[][] spielfeld, int column, int row, char zeichen) {
                // top left
                int go = row - 1;
                int go2 = column - 1;
                int i = 1;
                while (go >= 0 && go2 >= 0) {
                        if (spielfeld[go2][go] != zeichen)
                                break;
                        go--;
                        go2--;
                        i++;
                }
                // down right
                go = row + 1;
                go2 = column + 1;
                while (go < spielfeld[0].length && go2 < spielfeld.length) {
                        if (spielfeld[go2][go] != zeichen)
                                break;
                        go++;
                        go2++;
                        i++;
                }
                return (i > 3);
        }
        static boolean GameIsOver_straight2(char[][] spielfeld, int column, int row, char zeichen) {
                // down left
                int go = row - 1;
                int go2 = column + 1;
                int i = 1;
                while (go >= 0 && go2 < spielfeld.length) {
                        if (spielfeld[go2][go] != zeichen)
                                break;
                        go--;
                        go2++;
                        i++;
                }
                // up right
                go = row + 1;
                go2 = column - 1;
                while (go < spielfeld[0].length && go2 >= 0) {
                        if (spielfeld[go2][go] != zeichen)
                                break;
                        go++;
                        go2--;
                        i++;
                }
                return (i > 3);
        }
        /**
         * Cancels the program and delivers the winner
         * @param spielfeld -> The playing field with all required data
         */
        static void spielFertig(char[][] spielfeld) {
                showSpielfeld(spielfeld);
                System.out.println(SPIELER + " has won\n");
                System.exit(1);
        }
        /**
         * Shows the complete playing field on the screen
         * @param spielfeld -> The playing field with all required data
         */
        static void showSpielfeld(char[][] spielfeld) {
                StringBuffer Geruest = new StringBuffer(); 
                StringBuffer row_start = new StringBuffer(" "); // first row 1 2 3 4
                StringBuffer row_divide = new StringBuffer("|"); // dividing line |-----|
                StringBuffer row_end = new StringBuffer("-"); // last row -------
                if (spielfeld[0].length > 9) {
                        for (int i = 1; i <= spielfeld[0].length; i++)
                                row_start.append((i/10==0) ? " " : i/10).append(" ");
                        row_start.append("\n ");
                }
                for (int i = 1; i <= spielfeld[0].length; i++) {
                        row_start.append(i%10).append(" ");
                        row_divide.append((i==spielfeld[0].length)? "-|" : "--");
                        row_end.append("--");
                }
                System.out.println(row_start);
                System.out.println(row_divide);
                for (char[] arrZeile : spielfeld) { //iterate through all lines
                        for (char arrSpalte : arrZeile) { //iterate through all columns
                                Geruest.append("|");
                                Geruest.append((arrSpalte == '\0') ? ' ' : arrSpalte);
                        }
                        Geruest.append("|\n");
                }
                Geruest.append(row_end).append("\n");
                System.out.println(Geruest);
        }
}


// Original Code not translate (if there is any mistake)


public class VierGewinnt {
        static String SPIELER; // der aktuelle Spielername -> für die Gewinner Ausgabe
        /**
         * @param args -> unbenutzt
         */
        public static void main(String[] args) {
                int columns, rows, zaehler = 0, eingabe;
                String player1, player2;
                char zeichen;
                char[][] spielfeld;
                
                //Abfragen des Spielernamens
                player1 = eingabeString("Name von Spieler A: ");
                
                do {
                        player2 = eingabeString("Name von Spieler B: ");
                } while(player1.equals(player2)); //Frage erneut, wenn die Spielernamen gleich sind
                //Abfragen der Maße
                do {
                        columns = eingabeInt("Breite des Spielfeldes (mindestens 4): ");
                } while (columns < 4); //Frage erneut, wenn die Breite zu klein gewählt wurde
                do {
                        rows = eingabeInt("Hoehe des Spielfeldes (mindestens 4): ");
                } while (rows < 4); //Frage erneut, wenn die Höhe zu klein gewählt wurde
                spielfeld = new char[rows][columns];
                while (zaehler < columns*rows) {
                        zeichen = (zaehler % 2 == 0) ? 'o' : '+';
                        SPIELER = (zaehler % 2 == 0) ? player1 : player2;
                        showSpielfeld(spielfeld);
                        eingabe = eingabeInt("\n" + SPIELER + "(" + zeichen
                                        + ") ist am Zug. Bitte gib die Spalte ein: ");
                        if (eingabe > columns || eingabe < 1)
                                System.err.println("Feld existriert nicht.. Bitte versuch es nochmal!");
                        else {
                                zaehler++; // naechster Bitte
                                setzeFeld(spielfeld, eingabe, zeichen);
                        }
                }
                showSpielfeld(spielfeld);
                System.err.println("Unentschieden!");
        }
        /**
         * @param text -> Bildschirmausgabe
         * @return -> Tastatureingabe
         */
        static int eingabeInt(String text) {
                System.out.print(text);
                java.util.Scanner input = new java.util.Scanner(System.in);
                return input.nextInt();
        }
        /**
         * @param text -> Bildschirmausgabe
         * @return -> Tastatureingabe
         */
        static String eingabeString(String text) {
                System.out.print(text);
                java.util.Scanner input = new java.util.Scanner(System.in);
                return input.next();
        }
        /**
         * Spalte wird übergeben und das Feld wird gesetzt
         * @param spielfeld -> Das Spielfeld mit allen benötigten Daten
         * @param column -> eingegebene Spalte
         * @param zeichen -> jeder Spieler hat ein Zeichen (*) oder (+)
         */
        static void setzeFeld(char[][] spielfeld, int column, char zeichen) {
                column--; // Weil der gemeine Mensch denkt, der Zahlenbereich würde sich von 1 bis 4 erstrecken
                int pos2check;
                if (spielfeld[0][column] != '\0')
                        System.err.println("Die Reihe ist voll.. Pech!");
                else
                        for (int i = 0; i < spielfeld.length; i++) { //Iteriere durch die Zeilen
                                if (i + 1 == spielfeld.length) {
                                        // Nach der letzten Zeile kommt nichts mehr..
                                        // also darf in das aktuelle Kästchen geschrieben werden, obwohl im
                                        // nächsten nichts steht
                                        pos2check = i;
                                        if (spielfeld[pos2check][column] == '\0') {
                                                spielfeld[i][column] = zeichen;
                                                if(IsGameOver(spielfeld, i, column, zeichen)) {// Hat jmd gewonnen?
                                                        System.out.println("Spieler mit "+zeichen+" hat gewonnen");
                                                        System.exit(0);
                                                }
                                                break;
                                        }
                                } else {
                                        //Überprüfe immer das folgende Feld
                                        pos2check = i+1;
                                        if (spielfeld[pos2check][column] != '\0') {
                                                spielfeld[i][column] = zeichen;
                                                if(IsGameOver(spielfeld, i, column, zeichen)) {// Hat jmd gewonnen?
                                                        System.out.println("Spieler mit "+zeichen+" hat gewonnen");
                                                        System.exit(0);
                                                }
                                                break;
                                        }
                                }
                        }
        }
        /**
         * Sammelstelle für die Funktionen, die überprüfen ob jmd. gewonnen hat
         * @param spielfeld -> Das Spielfeld mit allen benötigten Daten 
         * @param column -> die Spalte an der das Zeichen gesetzt wurde
         * @param row -> die Reihe an der das Zeichen gesetzt wurde
         * @param zeichen -> das Zeichen
         */
        static boolean IsGameOver(char[][] spielfeld, int column, int row, char zeichen) {
                boolean b1 = GameIsOver_row(spielfeld, column, row, zeichen);
                boolean b2 = GameIsOver_column(spielfeld, column, row, zeichen);
                boolean b3 = GameIsOver_straight1(spielfeld, column, row, zeichen);
                boolean b4 = GameIsOver_straight2(spielfeld, column, row, zeichen);
                
                return (b1||b2||b3||b4);
        }
        static boolean GameIsOver_row(char[][] spielfeld, int column, int row, char zeichen) {
                // nach links
                int go = row - 1; // mit dem Punkt links neber dem gesetzten beginne
                                                        // ich
                int i = 1; // der gesetzte Punkt = 1 Treffer
                while (go >= 0) {
                        if (spielfeld[column][go] != zeichen)
                                break;
                        go--;
                        i++;
                }
                // nach rechts
                go = row + 1;
                while (go < spielfeld.length) {
                        if (spielfeld[column][go] != zeichen)
                                break;
                        go++;
                        i++;
                }
                return (i > 3);
        }
        static boolean GameIsOver_column(char[][] spielfeld, int column, int row, char zeichen) {
                // nach oben
                int go = column - 1;
                int i = 1;
                while (go >= 0) {
                        if (spielfeld[go][row] != zeichen)
                                break;
                        go--;
                        i++;
                }
                // nach unten
                go = column + 1;
                while (go < spielfeld.length) {
                        if (spielfeld[go][row] != zeichen)
                                break;
                        go++;
                        i++;
                }
                return (i > 3);
        }
        static boolean GameIsOver_straight1(char[][] spielfeld, int column, int row, char zeichen) {
                // nach links oben
                int go = row - 1;
                int go2 = column - 1;
                int i = 1;
                while (go >= 0 && go2 >= 0) {
                        if (spielfeld[go2][go] != zeichen)
                                break;
                        go--;
                        go2--;
                        i++;
                }
                // nach rechts unten
                go = row + 1;
                go2 = column + 1;
                while (go < spielfeld[0].length && go2 < spielfeld.length) {
                        if (spielfeld[go2][go] != zeichen)
                                break;
                        go++;
                        go2++;
                        i++;
                }
                return (i > 3);
        }
        static boolean GameIsOver_straight2(char[][] spielfeld, int column, int row, char zeichen) {
                // nach links unten
                int go = row - 1;
                int go2 = column + 1;
                int i = 1;
                while (go >= 0 && go2 < spielfeld.length) {
                        if (spielfeld[go2][go] != zeichen)
                                break;
                        go--;
                        go2++;
                        i++;
                }
                // nach rechts oben
                go = row + 1;
                go2 = column - 1;
                while (go < spielfeld[0].length && go2 >= 0) {
                        if (spielfeld[go2][go] != zeichen)
                                break;
                        go++;
                        go2--;
                        i++;
                }
                return (i > 3);
        }
        /**
         * Bricht das Programm ab und liefert den Gewinner 
         * @param spielfeld -> Das Spielfeld mit allen benötigten Daten
         */
        static void spielFertig(char[][] spielfeld) {
                showSpielfeld(spielfeld);
                System.out.println(SPIELER + " hat gewonnen\n");
                System.exit(1);
        }
        /**
         * Zeigt das komplette Spielfeld auf dem Bildschirm
         * @param spielfeld -> Das Spielfeld mit allen benötigten Daten
         */
        static void showSpielfeld(char[][] spielfeld) {
                StringBuffer Geruest = new StringBuffer(); 
                StringBuffer row_start = new StringBuffer(" "); // erste Zeile 1 2 3 4
                StringBuffer row_divide = new StringBuffer("|"); // Trennzeile |-----|
                StringBuffer row_end = new StringBuffer("-"); // letzte Zeile -------
                if (spielfeld[0].length > 9) {
                        for (int i = 1; i <= spielfeld[0].length; i++)
                                row_start.append((i/10==0) ? " " : i/10).append(" ");
                        row_start.append("\n ");
                }
                for (int i = 1; i <= spielfeld[0].length; i++) {
                        row_start.append(i%10).append(" ");
                        row_divide.append((i==spielfeld[0].length)? "-|" : "--");
                        row_end.append("--");
                }
                System.out.println(row_start);
                System.out.println(row_divide);
                for (char[] arrZeile : spielfeld) { //iteriere durch alle Zeilen
                        for (char arrSpalte : arrZeile) { //iteriere durch alle Spalten
                                Geruest.append("|");
                                Geruest.append((arrSpalte == '\0') ? ' ' : arrSpalte);
                        }
                        Geruest.append("|\n");
                }
                Geruest.append(row_end).append("\n");
                System.out.println(Geruest);
        }
        public static int randomOneToSeven() {
        return (int) (Math.random()*((7-1)+1)+1);
    }
}

// random number generator i tried for player 2

public static int randomOneToSeven() {
        return (int) (Math.random()*((7-1)+1)+1);
    }



Aucun commentaire:

Enregistrer un commentaire