Iam writing on a connect four game. I have implemented a check for horizontal and vertical.
Now I am stuck at the diagonal check, I am not sure how to do it. Here are my check functions:
public boolean checkWinRows() {
int sameDiscs;
Player lastPlayerField = gameField[0][0].getPlayer();
for(int i = 0; i < gameField.length; i++) {
sameDiscs = 0;
for(int j = 0; j < gameField[i].length; j++) {
sameDiscs = countSameDiscs(sameDiscs, gameField[i][j].getPlayer() == lastPlayerField, gameField[i][j]);
lastPlayerField = gameField[i][j].getPlayer();
if(sameDiscs == 4) {
// set winner
lastPlayerField.setWon(true);
return true;
}
}
}
return false;
}
public boolean checkWinCols() {
int sameDiscs;
Player lastPlayerField = gameField[0][0].getPlayer();
for(int j = 0; j < gameField[0].length; j++) {
sameDiscs = 0;
for(int i = 0; i < gameField.length; i++) {
sameDiscs = countSameDiscs(sameDiscs, gameField[i][j].getPlayer() == lastPlayerField, gameField[i][j]);
lastPlayerField = gameField[i][j].getPlayer();
if(sameDiscs == 4) {
// set winner
lastPlayerField.setWon(true);
return true;
}
}
}
return false;
}
private int countSameDiscs(int sameDiscs, boolean samePlayer, Field field) {
if(field.getPlayer() != null) {
if(samePlayer)
sameDiscs ++;
else
sameDiscs = 1;
} else
sameDiscs = 0;
return sameDiscs;
}
Now I am not sure how to do the diagonal check. I know I can go through all cols and rows, but how can I count the tokens which are diagonally placed?
Greetings
EDIT:
Here are my two diagonal check functions:
public boolean checkWinDiagonal1(int row, int column) {
int i=0, j=0;
int iterateCount= 4;
int sameDiscs;
Player lastPlayerField = gameField[0][0].getPlayer();
for( i=row, j=column; iterateCount>0; i++, j--, iterateCount--) {
sameDiscs = 0;
sameDiscs = countSameDiscs(sameDiscs, gameField[i][j].getPlayer() == lastPlayerField, gameField[i][j]);
lastPlayerField = gameField[i][j].getPlayer();
if(sameDiscs == 4) {
// set winner
lastPlayerField.setWon(true);
return true;
}
}
return false;
}
public boolean checkWinDiagonal2(int row, int column) {
int i=0, j=0;
int iterateCount= 4;
int sameDiscs;
Player lastPlayerField = gameField[0][0].getPlayer();
for( i=row, j=column; iterateCount>0; i++, j++, iterateCount--) {
sameDiscs = 0;
sameDiscs = countSameDiscs(sameDiscs, gameField[i][j].getPlayer() == lastPlayerField, gameField[i][j]);
lastPlayerField = gameField[i][j].getPlayer();
if(sameDiscs == 4) {
// set winner
lastPlayerField.setWon(true);
return true;
}
}
return false;
}
I get this error message: Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException