Hello I am having trouble with a connectFour java program. this issue is in my findLocalWinner method, it declares a winner for horizontal wins, but not for vertical. if anyone can see what im doing wrong.
public class ConnectFour {
/** Number of columns on the board. */
public static final int COLUMNS = 7;
/** Number of rows on the board. */
public static final int ROWS = 6;
/** Character for computer player's pieces */
public static final char COMPUTER = 'X';
/** Character for human player's pieces */
public static final char HUMAN = 'O';
/** Character for blank spaces. */
public static final char NONE = '.';
public static void dropPiece(char[][] board, char player, int column) {
// TODO You have to write this.
for(int i=0; i<ROWS;i++) {
//loop over all rows
if (board[i][column] == NONE) {
// checks if spot on board is empty
board[i][column] = player; //if empty make that spot into player.
break;
}
}
}
public static boolean isFull(char[][] board) {
// TODO You have to write this.
for (int j = 0; j < COLUMNS; j++ ) {
if (board[ROWS-1][j] == NONE) {
return false;
}
} return true; // emplies board is full
}
public static boolean isLegalMove(char[][] board, int column) {
for(int i=0; i<ROWS;i++) { //loop over all rows
if (column >= 0 && column < COLUMNS) { //makes sure column is not out of bounds
if (board[i][column] == NONE) { //makes sure spot on board is empty
return true;
}
}
}
return false;
}
public static char getOpposite(char player) {
// TODO You have to write this.
if (player == HUMAN) { //if human just moved, its computers next move
return COMPUTER;
}
return HUMAN; //if computer just moved its human next move
}
public static char findLocalWinner(char[][] board, int r, int c,
int rowOffset, int colOffset) {
// TODO You have to write this.
char player = board[r][c]; //player at that index
//int counter = 0;
if(player == NONE || c >= (COLUMNS - 3) ) { //if player at r, c is NONE, also checks if win is possible
player = NONE;
// return player;
}
if(rowOffset == 0 && colOffset != 0 && (c < COLUMNS || c > 0 )) { //checks horizontal
for(int i = 0; i < 4 ; i++) {
if(player == board[r][c+(1*colOffset)] && player == board[r][c+(2*colOffset)] &&player == board[r][c+(3*colOffset)]) { //checks for connect 4
return player; //player is winner
}else {
player = NONE; //no winner yet
}
}
}
if(rowOffset != 0 && colOffset == 0 && (r < ROWS || r >0)) { //checks vertical
for(int i = 0; i < 4 ; i++) {
if(player == board[r+(1* rowOffset)][c] && player == board[r+(2*rowOffset)][c] &&player == board[r+(3*rowOffset)][c]) {
return player;
}else {
player = NONE;
}
}
if(rowOffset != 0 && colOffset != 0) { //checks diagonal
for(int i = 0; i < 4 ; i++) {
if(player == board[r+(1*rowOffset)][c+(1*colOffset)] && player == board[r+(2*rowOffset)][c+(2*colOffset)] &&player == board[r+(3*rowOffset)][c+(3*colOffset)]) {
return player;
}else {
player = NONE;
}
}
}
}
return player;
}
public static char findWinner(char[][] board) {
// TODO You have to write this.
// HINT: You should call the findLocalWinner method to help you
char Winner = NONE;
for(int row = 0; row < ROWS-3; row++) { //loops over rows
for(int col = 0; col < COLUMNS-3; col++) { //loops over columns
if(Winner == NONE) { //makes sure winner is NONE unless it finds human or comp
Winner = findLocalWinner(board,row,col,0,1); //checks winner for horizontal
}else if(Winner == NONE) {
Winner = findLocalWinner(board,row,col,1,0); // checks winner for vertical
}else if(Winner == NONE) {
Winner = findLocalWinner(board,row,col,1,1); // checks winner for diagonal
}else if(Winner == NONE) {
Winner = findLocalWinner(board,row,col,-1,1); // checks winner for diagonal in downward direction
}
}
}
return Winner;
}
public static int bestMoveForComputer(char[][] board, int maxDepth) {
// TODO You have to write this.
// Hint: this will be similar to maxScoreForComputer
int bestCol = -1;// (makes unbeatable AI)
int bestResult = -20;
for(int col= 0; col<COLUMNS; col++){
if(isLegalMove(board,col)){
dropPiece(board,COMPUTER,col);
int result = minScoreForHuman(board,maxDepth,0);
undoDrop(board,col);
if(result >= bestResult){
bestResult = result;
bestCol = col;
}
}
}
return bestCol;
}
public static int maxScoreForComputer(char[][] board, int maxDepth, int depth) {
// TODO You have to write this.
// Hint: this will be similar to minScoreForHuman
char winner = findWinner(board);
if (winner == HUMAN) {
return -10;
} else if (winner == COMPUTER) {
return 10;
} else if (isFull(board) || (depth == maxDepth)) {
return 0;
} else {
int bestResult = -20;
for (int c = 0; c < COLUMNS; c++) {
if (isLegalMove(board, c)) {
dropPiece(board, COMPUTER, c);
int result = maxScoreForComputer(board, maxDepth, depth +1);
undoDrop(board, c);
if (result <= bestResult) {
bestResult = result;
}
}
}
return bestResult;
}
}
public static int minScoreForHuman(char[][] board, int maxDepth, int depth) {
char winner = findWinner(board);
if (winner == COMPUTER) {
return 10;
} else if (winner == HUMAN) {
return -10;
} else if (isFull(board) || (depth == maxDepth)) {
return 0;
} else {
int bestResult = 20;
for (int c = 0; c < COLUMNS; c++) {
if (isLegalMove(board, c)) {
dropPiece(board, HUMAN, c);
int result = maxScoreForComputer(board, maxDepth, depth + 1);
undoDrop(board, c);
if (result <= bestResult) {
bestResult = result;
}
}
}
return bestResult;
}
}
public static void undoDrop(char[][] board, int column) {
// We'll start at the top and loop down the column until we
// find a row with a piece in it.
int row = ROWS - 1;
while(board[row][column] == NONE && row > 0) {
row--;
}
// Set the top row that had a piece to empty again.
board[row][column] = NONE;
}
/** Creates board array and starts game GUI. */
public static void main(String[] args) {
// create array for game board
char[][] board = new char[ROWS][COLUMNS];
// fill board with empty spaces
for(int row = 0; row < ROWS; row++) {
for (int col = 0; col < COLUMNS; col++) {
board[row][col] = NONE;
}
}
//ConnectFourGUI.showGUI(board, HUMAN, 5);
}
}
public static char findLocalWinner(char[][] board, int r, int c, int rowOffset, int colOffset) {
// TODO You have to write this.
char player = board[r][c]; // player at that index
// remove below condition completely
// int counter = 0;
// if (player == NONE || c >= (COLUMNS - 3)) { // if player at r, c is NONE, also checks if win is possible
// player = NONE;
// return player;
}
if (rowOffset == 0 && colOffset != 0 && (c < COLUMNS - 3 && c >= 0)) { // checks horizontal
for (int i = 0; i < 4; i++) {
if (player == board[r][c + (1 * colOffset)] && player == board[r][c + (2 * colOffset)]
&& player == board[r][c + (3 * colOffset)]) { // checks for connect 4
return player; // player is winner
} else {
player = NONE; // no winner yet
}
}
}
if (rowOffset != 0 && colOffset == 0 && (r < ROWS - 3 && r >= 0)) { // checks vertical
for (int i = 0; i < 4; i++) {
if (player == board[r + (1 * rowOffset)][c] && player == board[r + (2 * rowOffset)][c]
&& player == board[r + (3 * rowOffset)][c]) {
return player;
} else {
player = NONE;
}
}
if (rowOffset != 0 && colOffset != 0) { // checks diagonal
for (int i = 0; i < 4; i++) {
if (player == board[r + (1 * rowOffset)][c + (1 * colOffset)]
&& player == board[r + (2 * rowOffset)][c + (2 * colOffset)]
&& player == board[r + (3 * rowOffset)][c + (3 * colOffset)]) {
return player;
} else {
player = NONE;
}
}
}
}
return player;
}
highlighted my changes.. Code should now work fine for horizontal and vertical groups .
Hello I am having trouble with a connectFour java program. this issue is in my findLocalWinner...
Reposting question with additional information. I am writing a java program that has the computer play a game of ConnectFour with the user, I am having trouble with the code that tells who wins the game. when I play the game after getting four in a row the program just continues to go on. I believe my FindLocalWinner method should be correct, so I need help with the findWinner method. /** * Check for a win starting at a given...
This is my code for a TicTacToe game. However, I don't know how to write JUnit tests. Please help me with my JUnit Tests. I will post below what I have so far. package cs145TicTacToe; import java.util.Scanner; /** * A multiplayer Tic Tac Toe game */ public class TicTacToe { private char currentPlayer; private char[][] board; private char winner; /** * Default constructor * Initializes the board to be 3 by 3 and...
Hello, I am currently taking a Foundations of Programming course where we are learning the basics of Java. I am struggling with a part of a question assigned by the professor. He gave us this code to fill in: import java.util.Arrays; import java.util.Random; public class RobotGo { public static Random r = new Random(58); public static void main(String[] args) { char[][] currentBoard = createRandomObstacle(createBoard(10, 20), 100); displayBoard(startNavigation(currentBoard)) } public static int[] getRandomCoordinate(int maxY, int maxX) { int[] coor = new...
I've created a functioning program but I can't figure out how to implement class structure into it. I'm currently studying classes and I'm wondering if you could help me recreate my program with classes so I can have a better understanding of how classes work. Thank you. #pragma once #include <iostream> using namespace std; bool DeclareResults(char ch, char gameboard[][3]); bool FilledBoard(char gameboard[][3]); void printGameBoard(char gameboard[][3]); #include "fnt.h"; #include <iostream> using namespace std; int main() { //declare...
This is my code for my game called Reversi, I need to you to make the Tester program that will run and complete the game. Below is my code, please add comments and Javadoc. Thank you. public class Cell { // Displays 'B' for the black disk player. public static final char BLACK = 'B'; // Displays 'W' for the white disk player. public static final char WHITE = 'W'; // Displays '*' for the possible moves available. public static...
Hi I need help with a java program that I need to create a Airline Reservation System I already finish it but it doesnt work can someone please help me I would be delighted it doesnt show the available seats when running the program and I need it to run until someone says no for booking a seat and if they want to cancel a seat it should ask the user to cancel a seat or continue booking also it...
Please I need your help I have the code below but I need to add one thing, after player choose "No" to not play the game again, Add a HELP button or page that displays your name, the rules of the game and the month/day/year when you finished the implementation. import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import javax.swing.event.*; import java.util.Random; public class TicTacToe extends JFrame implements ChangeListener, ActionListener { private JSlider slider; private JButton oButton, xButton; private Board...
I just need a help in replacing player 2 and to make it
unbeatable
here is my code:
#include<iostream>
using namespace std;
const int ROWS=3;
const int COLS=3;
void fillBoard(char [][3]);
void showBoard(char [][3]);
void getChoice(char [][3],bool);
bool gameOver(char [][3]);
int main()
{
char board[ROWS][COLS];
bool playerToggle=false;
fillBoard(board);
showBoard(board);
while(!gameOver(board))
{
getChoice(board,playerToggle);
showBoard(board);
playerToggle=!playerToggle;
}
return 1;
}
void fillBoard(char board[][3])
{
for(int i=0;i<ROWS;i++)
for(int j=0;j<COLS;j++)
board[i][j]='*';
}
void showBoard(char board[][3])
{
cout<<" 1 2 3"<<endl;
for(int i=0;i<ROWS;i++)
{
cout<<(i+1)<<"...
JAVA TIC TAC TOE - please help me correct my code Write a program that will allow two players to play a game of TIC TAC TOE. When the program starts, it will display a tic tac toe board as below | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 The program will assign X to Player 1, and O to Player The program will ask Player 1, to...
JAVA Only Help on the sections that say Student provide code. The student Provide code has comments that i put to state what i need help with. import java.util.Scanner; public class TicTacToe { private final int BOARDSIZE = 3; // size of the board private enum Status { WIN, DRAW, CONTINUE }; // game states private char[][] board; // board representation private boolean firstPlayer; // whether it's player 1's move private boolean gameOver; // whether...