0

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

0 Answers0