Information Technology Reference
In-Depth Information
public boolean isCheckmate() {
int king = 0;
// search king
for (int i = 21; i < 99; i++) {
if ((board[i]%100/10==color) && (board[i]%10==6)) {
king = i;
break;
}
if (i%10 == 8)
i += 2;
} if ((board[king - 21] % 10 == 2)
&& (board[king - 21] % 100 / 10 != color))
return true;
if ((board[king + 21] % 10 == 2)
&& (board[king + 21] % 100 / 10 != color))
return true;
if ((board[king - 19] % 10 == 2)
&& (board[king - 19] % 100 / 10 != color))
return true;
if ((board[king + 19] % 10 == 2)
&& (board[king + 19] % 100 / 10 != color))
return true;
if ((board[king - 8] % 10 == 2)
&& (board[king - 8] % 100 / 10 != color))
return true;
if ((board[king + 8] % 10 == 2)
&& (board[king + 8] % 100 / 10 != color))
return true;
if ((board[king - 12] % 10 == 2)
&& (board[king - 12] % 100 / 10 != color))
return true;
if ((board[king + 12] % 10 == 2)
&& (board[king + 12] % 100 / 10 != color))
return true;
…
Die Methode sucht den König, dessen Partei am Zug ist, um dann von dieser Position
ausgehend zu überprüfen, ob irgendeine feindliche Figur dieses Feld angreift. Ist dies der
Fall, wird
true
zurückgegeben. Wenn alle Überprüfungen negativ verlaufen, gibt die
Methode
false
zurück. Dies hat Auswirkungen auf die Methode
simulize()
, die
nunmehr nicht nur einen Zug ausführen, sondern im Vorfelde auf Schach überprüfen und
dann gegebenenfalls den Zug wieder zurücknehmen können muss.