Hallo!
Ich arbeite zur Zeit an einem Connect 4, oder 4 gewinnt Spiel. Ich habe es jetzt schon hinbekommen auf horizontal und vertikal zu prüfen ob 4 Steine des selben Spielers da liegen. Ich hänge nur total gerade dabei, wie ich das nun für die Diagonalen mache. Hier mal meine Funktionen für Horizontal und Vertikal:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
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;
}
|
Ich stehe da echt an bei den Diagonalen, mein erster Anastz wäre:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
public boolean checkWinDiagonal1(int row, int column) {
if(column == 0)
return false;
int i=0, j=0;
int iterateCount= 7-row;
int sameDiscs;
Player lastPlayerField = gameField[0][0].getPlayer();
for( i=row, j=column; i < 7 && j > 0; i++, j--) {
sameDiscs = 0;
sameDiscs = countSameDiscs(sameDiscs, gameField[i][j].getPlayer() == lastPlayerField, gameField[i][j]);
System.out.println("i: " + i + " " + "j: " + 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= 7-row;
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;
}
|
Funktioniert aber nicht, bekomme einen Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException Fehler.
Bin für Hilfe dankbar
LG