morry2341

Connect4_Complete

Jun 22nd, 2023
1,002
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.59 KB | None | 0 0
  1. package CC4PlayGround;
  2.  
  3. import java.util.Objects;
  4. import java.util.Random;
  5.  
  6. public class CC4Playground {
  7.     /*Global Variables*/
  8.     String[][] board;
  9.     Boolean winner;
  10.     Boolean draw;
  11.     int winningPlayer;
  12.     int playerTurn;
  13.  
  14.     /*Constructor*/
  15.     public CC4Playground(){
  16.         winningPlayer = 0;
  17.         draw = false;
  18.         playerTurn = 1;
  19.         board = new String[6][7];
  20.         newGameBoard();
  21.         displayBoard();
  22.     }
  23.  
  24.     /*provide a better look for the board*/
  25.     private void newGameBoard(){
  26.         for(int i = 0; i < board.length; i++){
  27.             for(int j = 0; j < board[0].length; j++){
  28.                 board[i][j] = " - ";
  29.             }
  30.         }
  31.     }
  32.  
  33.     private void displayBoard(){
  34.         System.out.println(" ");
  35.         System.out.println(" *** Connect 4 *** ");
  36.         System.out.println(" ");
  37.         System.out.println(" 0  1  2  3  4  5  6");
  38.         for(int i = 0; i < board.length; i++){
  39.             for(int j = 0; j < board[0].length; j++){
  40.                 if( board[i][j].length() == 1)
  41.                     System.out.print(" " + board[i][j]+ " ");
  42.                 else
  43.                     System.out.print(board[i][j]);
  44.             }
  45.             System.out.println();
  46.         }
  47.         System.out.println();
  48.     }
  49.  
  50.     /*the column is full*/
  51.     private boolean isColumnFull(int col){
  52.         return getNextAvailableSlot(col) == -1;
  53.     }
  54.  
  55.     /*return the next available row pos of a given column*/
  56.     private int getNextAvailableSlot(int col){
  57.  
  58.         int rows = board.length;
  59.         int cols = board[0].length;
  60.  
  61.         for(int pos = rows-1; pos >= 0; --pos) {
  62.             if(board[pos][col] == " - " ){
  63.                 return pos;
  64.  
  65.             }
  66.  
  67.         }
  68.         return -1;
  69.     }
  70.  
  71.     /* swaps turn for current player */
  72.     private void swapPlayerTurn(){
  73.         if(playerTurn == 1){
  74.             playerTurn = 2;
  75.         } else {
  76.             playerTurn = 1;
  77.         }
  78.     }
  79.     private void placePiece(){
  80.  
  81.       switch(playerTurn){
  82.           case 1:
  83.             System.out.println("Player X " + playerTurn + " please select which col to place your piece (1-7)");
  84.             String input = new java.util.Scanner(System.in).nextLine();
  85.             int colChoice = Integer.parseInt(input) - 1;
  86.               String pieceToPlace = "X";
  87.               // todo ohne isColumnFull prüfen geht der Spiel unendlich
  88.               if(!isColumnFull(colChoice))
  89.                 board[getNextAvailableSlot(colChoice)][colChoice] = pieceToPlace;
  90.               displayBoard();
  91.               //decideWinner();
  92.               swapPlayerTurn();
  93.               break;
  94.           case 2:
  95.               System.out.println("Player O  " + playerTurn + " places the piece");
  96.               Random rdm = new Random();
  97.               colChoice = rdm.nextInt(6)+1;
  98.               pieceToPlace = "O";
  99.  
  100.               if(!isColumnFull(colChoice))
  101.                 board[getNextAvailableSlot(colChoice)][colChoice] = pieceToPlace;
  102.  
  103.               displayBoard();
  104.               swapPlayerTurn();
  105.               break;
  106.           default:
  107.               System.out.println("no valid turn");
  108.               break;
  109.               //swapPlayerTurn();
  110.       }
  111.       //decideWinner();
  112.       //decideWinner(board);
  113.  
  114.     }
  115.  
  116.     private final int MATCHES = 4;
  117.  
  118.     private boolean didWinleft(String player) {
  119.         int rows = board.length;
  120.         int cols = board[0].length;
  121.  
  122.         for(int i = 0; i < rows; i++){
  123.             for(int j = 0; j <= cols-MATCHES; j++){
  124.  
  125.                 if( board[i][j] == player)
  126.                 {
  127.                     boolean ab = board[i][j] == board[i][j+1];
  128.                     boolean cd = board[i][j+1] == board[i][j+2];
  129.                     boolean de = board[i][j+2] == board[i][j+3];
  130.  
  131.                     if(ab && cd && de){
  132.                         return true;
  133.                     }
  134.                 }
  135.             }
  136.         }
  137.  
  138.         return false;
  139.     }
  140.  
  141.     private boolean didWinup(String player) {
  142.         int rows = board.length;
  143.         int cols = board[0].length;
  144.  
  145.         for(int i = 0; i <= rows-MATCHES; i++){
  146.             for(int j = 0; j < cols; j++){
  147.  
  148.                 if( board[i][j] == player)
  149.                 {
  150.                     boolean ab = board[i][j] == board[i+1][j];
  151.                     boolean cd = board[i+1][j] == board[i+2][j];
  152.                     boolean de = board[i+2][j] == board[i+3][j];
  153.  
  154.                     if(ab && cd && de){
  155.                         return true;
  156.                     }
  157.                 }
  158.             }
  159.         }
  160.  
  161.         return false;
  162.     }
  163.  
  164.     private boolean didWinleftup(String player) {
  165.         int rows = board.length;
  166.         int cols = board[0].length;
  167.  
  168.         for(int i = 0; i <= rows-MATCHES; i++){
  169.             for(int j = 0; j <= cols-MATCHES; j++){
  170.  
  171.                 if( board[i][j] == player)
  172.                 {
  173.                     boolean ab = board[i][j] == board[i+1][j+1];
  174.                     boolean cd = board[i+1][j+1] == board[i+2][j+2];
  175.                     boolean de = board[i+2][j+2] == board[i+3][j+3];
  176.  
  177.                     if(ab && cd && de){
  178.                         return true;
  179.                     }
  180.                 }
  181.             }
  182.         }
  183.  
  184.         return false;
  185.     }
  186.  
  187.     private boolean didWinRightup(String player) {
  188.         int rows = board.length;
  189.         int cols = board[0].length;
  190.  
  191.         for(int i = rows-MATCHES; i >= 0; i--){
  192.             for(int j = cols-MATCHES; j >= 0; j--){
  193.  
  194.                 if( board[i][j] == player)
  195.                 {
  196.                     boolean ab = board[i][j] == board[i+1][j+1];
  197.                     boolean cd = board[i+1][j+1] == board[i+2][j+2];
  198.                     boolean de = board[i+2][j+2] == board[i+3][j+3];
  199.  
  200.                     if(ab && cd && de){
  201.                         return true;
  202.                     }
  203.                 }
  204.             }
  205.         }
  206.  
  207.         return false;
  208.     }
  209.  
  210.     public void playGame(){
  211.         while(winningPlayer == 0){
  212.  
  213.             placePiece();
  214.  
  215.             String[] players = new String[]{"X", "O"};
  216.  
  217.             for(String player : players){
  218.                 boolean didWin = didWinRightup(player);
  219.                 didWin |= didWinleftup(player);
  220.                 didWin |= didWinup(player);
  221.                 didWin |= didWinleft(player);
  222.  
  223.                 if(didWin){
  224.                     System.out.println("gewonnen " + player);
  225.                 }
  226.             }
  227.         }
  228.     }
  229.  
  230.     public static void main(String[] args) {
  231.         CC4Playground main = new CC4Playground();
  232.         main.playGame();
  233.  
  234.     }
  235. }
  236.  
Advertisement
Add Comment
Please, Sign In to add comment