Back
Close

9x9 Connect 4: 2 players, original

alandaboi
6,376 views

// this is classic 9x9 connect 4 // you can place you token anywhere on the board // get 4 in a row to win // have fun

import java.util.Scanner;

public class Connect4_MKII { public static Scanner in = new Scanner(System.in); public static String[][] board = new String[9][9]; public static boolean player = true; public static String p1 = ""; public static String p2 = "";

public static void main(String[] args) {
	// checks for custom play
	setPlay();
	//  sets full board to " "
	for(int row = 0; row < board.length; row++)
		for(int column = 0; column < board[row].length; column++)
			board[row][column] = " ";
	
	// prints an empty board for reference
	printBoard();
	game:
	while(true) {
		// 2 players
		for(int n = 0; n < 2; n++) {
			// gets a new play
			updateBoard(newRow(), newColumn());
			// prints the new board updated with the newest play
			printBoard();
			// checks if there is a winner
			if(checkForWinner()) {
				if(player)
					System.out.println("Player 1 wins!");
				else
					System.out.println("Player 2 wins!");
				break game;
			}
			// checks for a draw
			if(checkDraw()){
                System.out.println("You're all bad at this");
                break game;
            }
			// switches the players
			player = !player;
		}
		
	}
	
	
}

public static boolean checkForWinner() {
    String play = " ";
    boolean isWin = false;
    outerHorizontal:
    for(int a = 0; a < board.length; a++) {
        for(int b = 0; b < board[a].length - 3; b++) {
            play = board[a][b];
            if(play == " ")
                continue;
            if(board[a][b + 1] == play && board[a][b + 2] == play && board[a][b + 3] == play) {
                isWin = true;
                break outerHorizontal;
            }
                
        }
    }

    outerVertical:
    for(int x = 0; x < board.length - 3; x++) {
        for(int y = 0; y < board[x].length; y++) {
            play = board[x][y];
            if(play == " ")
                continue;
            if(board[x + 1][y] == play && board[x + 2][y] == play && board[x + 3][y] == play) {
                isWin = true;
                break outerVertical;
            }
        }
    }

    outerLeftDiagonal:
    for(int p = 0; p < board.length - 3; p++) {
        for(int o = 0; o < board[p].length - 3; o++) {
            play = board[p][o];
            if(play == " ")
                continue;
            if(board[p + 1][o + 1] == play && board[p + 2][o + 2] == play && board[p + 3][o + 3] == play) {
                isWin = true;
                break outerLeftDiagonal;
            }
        }
    }

    outerRightDiagonal:
    for(int u = 0; u < board.length - 3; u++) {
        for(int i = 3; i < board[u].length; i++) {
            play = board[u][i];
            if(play == " ")
                continue;
            if(board[u + 1][i - 1] == play && board[u + 2][i - 2] == play && board[u + 3][i - 3] == play) {
                isWin = true;
                break outerRightDiagonal;
            }
        }
    }

    return isWin;
}

public static boolean checkDraw() {
    for(int n = 0; n < board.length; n++) {
        for(int a = 0; a < board[n].length; a++) {
            if(board[n][a] == " ")
                return false;
        }
    }
    return true;
}

public static void updateBoard(int row, int column) {
	boolean notFinished = true;
	if(board[row][column] == " ") {
		if(player) {
			board[row][column] = p1;
		} else {
			board[row][column] = p2;
		}
		notFinished = false;
	}
	if(notFinished) {
		System.out.println("INVALID! Please try again.");
        updateBoard(newRow(), newColumn());
	}
}

public static int newRow() {
	System.out.print("What row? ");
	int row = in.nextInt();
	while(row < -4 || row > 4) {
		System.out.println("Invalid, Try again");
		System.out.print("What row? ");
		row = in.nextInt();
	}
	return  row + 4;
}

public static int newColumn() {
	System.out.print("What column? ");
	int column = in.nextInt();
	while(column < -4 || column > 4) {
		System.out.println("Invalid, Try again");
		System.out.print("What column? ");
		column = in.nextInt();
	}
	return  column + 4;
}

public static void printBoard() {
	System.out.println("    -4    -3    -2    -1     0     1     2     3     4");
	System.out.println("  +-----+-----+-----+-----+-----+-----+-----+-----+-----+");
    for(int n = board.length - 1; n >= 0; n--) {
        for(int x = 0; x < board[n].length; x++) {
            System.out.print("  |  " + board[n][x]);
        }
        System.out.println("  |  " + (n - 4));
        System.out.println("  +-----+-----+-----+-----+-----+-----+-----+-----+-----+");
    }
}

public static void setPlay() {
	if(p1 == "")
		p1 = "O";
	if(p2 == "")
		p2 = "X";
}

}

Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io