java - 我必须编写一个方法来确定游戏中何时不能有赢家(平局)
问题描述
我的游戏是(计数 4)的修改版本,您需要连续 5 个,而不仅仅是 4 个,并且字段是 8*9
public static String checkWinner(String[][] field) {
第一种中奖线,水平线
因为我们的 X/O/Empty 只能在奇数位置,因为我们在第一种方法中创建模式的方式,所以我们的计数必须增加 2 并且将从 0(将是 1)开始并停止在 8 (将是 9)
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 9; j += 2) {
if ((field[i][j + 1] != " ")
&& (field[i][j + 3] != " ")
&& (field[i][j + 5] != " ")
&& (field[i][j + 7] != " ")
&& (field[i][j + 9] != " ")
&& ((field[i][j + 1] == field[i][j + 3])
&& (field[i][j + 3] == field[i][j + 5])
&& (field[i][j + 5] == field[i][j + 7])
&& (field[i][j + 7] == field[i][j + 9])
)
)
return field[i][j + 1];
//If we found a same pattern, we'll return
//the pattern so that we will know who won
}
}
对于垂直线,让我们首先循环遍历每个奇数列,以 2 递增,并检查同一列中具有相同模式的连续框
for (int i = 1; i < 18; i += 2) {
for (int j = 0; j < 4; j++) {
if ((field[j][i] != " ")
&& (field[j + 1][i] != " ")
&& (field[j + 2][i] != " ")
&& (field[j + 3][i] != " ")
&& (field[j + 4][i] != " ")
&& ((field[j][i] == field[j + 1][i])
&& (field[j + 1][i] == field[j + 2][i])
&& (field[j + 2][i] == field[j + 3][i])
&& (field[j + 3][i] == field[j + 4][i])
))
return field[j][i];
}
}
对于从左上到右下的对角线
for (int i = 0; i < 4; i++) {
for (int j = 1; j < 18; j += 2) {
if ((field[i][j] != " ")
&& (field[i + 1][j + 2] != " ")
&& (field[i + 2][j + 4] != " ")
&& (field[i + 3][j + 6] != " ")
&& (field[i + 4][j + 8] != " ")
&& ((field[i][j] == field[i + 1][j + 2])
&& (field[i + 1][j + 2] == field[i + 2][j + 4])
&& (field[i + 2][j + 4] == field[i + 3][j + 6])
&& (field[i + 3][j + 6] == field[i + 4][j + 8])))
return field[i][j];
}// for j
}// for i,32
类似于上面的方法,但我们只是反转我们的轨迹,即我们从最右边的列开始,而不是像上面那样从最左边开始
for (int i = 0; i < 4; i++) {
for (int j = 9; j < 19; j += 2) {
if ((field[i][j] != " ")
&& (field[i + 1][j - 2] != " ")
&& (field[i + 2][j - 4] != " ")
&& (field[i + 3][j - 6] != " ")
&& (field[i + 4][j - 8] != " ")
&& ((field[i][j] == field[i + 1][j - 2])
&& (field[i + 1][j - 2] == field[i + 2][j - 4])
&& (field[i + 2][j - 4] == field[i + 3][j - 6])
&& (field[i + 3][j - 6] == field[i + 4][j - 8])))
return field[i][j];
}// for j
}// for i
//If after going over the table and we find no
//same pattern lines, then we have to return something
//that says that we didn't find a winner :P
return null;
}
解决方案
推荐阅读
- c# - 当变量 playerlife 低于零时,试图让我的角色重生
- java - Java 9+ 的 apache.poi 模块出现问题:ResolutionException
- angular-ui - 预选并仅在 Angular ui 树中显示具有某些 id 的列表
- python - 将布尔值更改为“是”或“否”
- c# - 有没有办法在渲染帧之前执行循环?
- javascript - 表单组问题Angular
- python - 如何从字典列表中删除字典(使用给定值)?
- python - 有没有什么方法可以改变 Z 轴上的点而不在 Matplotlib 3D 上自动缩放?
- javascript - 如何防止 ipcRenderer 侦听器的倍增?
- reactjs - 使用 React 测试库设置 React 上下文值