【发布时间】:2017-06-24 13:03:32
【问题描述】:
我正在尝试使用 Java 开发游戏奥赛罗,我正在努力寻找玩家拥有(不是计算机)的可用动作。
例如,我是玩家 1,我正在玩白色棋子,
- 检查按钮是否为空。 (我将按钮用作图块)
- 检查是否有颜色相反的邻居。
- 如果有,继续检查每个方向是否有相反的颜色,直到
- 如果我们到达边界 - 返回 false。
- 如果我们达到我们的颜色 - 将所有部分都变成我的颜色。
我正在努力实现 3. 和 5.
我如何遍历所有方向(如果我在棋盘的内部,最多 8 个方向),我如何才能进一步检查每个方向的颜色?
我考虑过为内板实现所有 8 个方向,然后在外板中实现所有可能性并检查非常低效的边缘选项,我不想这样编码。
您不必查看代码,我正在尝试弄清楚如何处理它(考虑 2 个 for 循环),但下面是函数和整个代码:(每个按钮都有一个图标 -黑白片)
private void checkLegalPlay(int row, int col) {
if(playerNum == 0){ //Black player
if(row > 0 && row < 7 && col > 0 && col < 7){ //Inner board -
//not good, i want from any point of the board
for(int i = col-1; i != 0; i--)
if(squares[row][i].getIcon() != null){
if(squares[row][i].getIcon() == blackPiece){
//Advance until boundary - return false
//Advance if there're black pieces
//If we get to white piece, turn all to
// white pieces
}
}
}
}
}
已经有将近 300 行代码了,所以如果你真的想看看我到目前为止做了什么,我更愿意提供一个链接:-deleted-
【问题讨论】:
-
您可以创建一个邻接列表和另一个布尔列表来表示单元格中的颜色,然后递归地遍历它们并在迭代中添加一些条件。
-
我仍然对如何递归地遍历列表感到困惑。 @Yahya
标签: java algorithm swing user-interface matrix