- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
<分区>
我必须用模拟智能实现 connect4。它已经可以工作了,但是速度很慢。我们必须解决两个玩家的所有威胁。威胁是连续 3 个硬币,在行之间或行尾有一个空白区域。我只想计算每次移动后的新威胁,并删除不再是威胁的威胁。我写了一些方法来检查每个方向是否有来自上一步的新威胁。
private Field row(int row, int column, String Player) {
Field field = null;
if(column - 1 >= 0 && column + 1 < board.getColumn() && board.getValue(row, column-1).equals(Player)
&& board.getValue(row, column+1).equals(Player)) {
if(column -2 >= 0 &&board.getValue(row, column-2).equals(" ")) {
return field = new Field(row, column -2);
}
else if(column + 2 < board.getColumn()&& board.getValue(row, column+2).equals(" ")) {
return field = new Field(row, column +2);
}
}
else if(column - 2 >= 0 && board.getValue(row, column-1).equals(Player)
&& board.getValue(row, column-2).equals(Player)) {
if(column -3 >= 0 &&board.getValue(row, column-3).equals(" ")) {
return field = new Field(row, column -3);
}
else if(column +1 < board.getColumn()&& board.getValue(row, column+1).equals(" ")) {
return field = new Field(row, column +1);
}
}
else if(column +2 < board.getColumn() && board.getValue(row, column+1).equals(Player)
&& board.getValue(row, column+2).equals(Player)) {
if(column -1 >= 0 &&board.getValue(row, column-1).equals(" ")) {
return field = new Field(row, column -1);
}
else if(column +3 < board.getColumn()&& board.getValue(row, column+3).equals(" ")) {
return field = new Field(row, column +3);
}
}
else if(column - 2 >= 0 && column + 1 < board.getColumn() && board.getValue(row, column-2).equals(Player)
&& board.getValue(row, column+1).equals(Player)) {
if(column -1 >= 0 &&board.getValue(row, column-1).equals(" ")) {
return field = new Field(row, column -1);
}
}
else if(column - 1 >= 0 && column +2 < board.getColumn() && board.getValue(row, column-1).equals(Player)
&& board.getValue(row, column+2).equals(Player)) {
if(column +1 < board.getColumn() &&board.getValue(row, column+1).equals(" ")) {
return field = new Field(row, column +1);
}
}
else if(column - 3 >= 0 && board.getValue(row, column-2).equals(Player) && board.getValue(row, column-3).equals(Player)) {
if(board.getValue(row, column-1).equals(" ")) {
return new Field (row, column -1);
}
}
else if(column-3 >= 0 && board.getValue(row, column-1).equals(Player) && board.getValue(row, column-3).equals(Player)) {
if(board.getValue(row, column-2).equals(" ")) {
return new Field(row, column - 2);
}
}
else if(column + 3 < board.getColumn() && board.getValue(row, column+2).equals(Player) && board.getValue(row, column+3).equals(Player)) {
if(board.getValue(row, column+1).equals(" ")) {
return new Field(row, column + 1);
}
}
else if(column + 3 < board.getColumn() && board.getValue(row, column+1).equals(Player) && board.getValue(row, column+3).equals(Player)) {
if(board.getValue(row, column+2).equals(" ")) {
return new Field(row, column +2);
}
}
return field;
}
private Field column(int row, int column, String Player) {
Field field = null;
if (row + 2 < board.getRow()
&& board.getValue(row + 1, column).equals(Player)
&& board.getValue(row + 2, column).equals(Player)) {
if(row-1 >= 0 && board.getValue(row-1, column).equals(" ")) {
return field = new Field(row-1, column);
}
}
return field;
}
private Field diagonalRight(int row, int column, String Player) {
Field field = null;
if(row - 1 >= 0 && column - 1 >= 0 && row + 1 < board.getRow() && column + 1 < board.getColumn()
&& board.getValue(row+ 1, column-1).equals(Player)&& board.getValue(row-1, column+1).equals(Player)) {
if(row + 2 < board.getRow() && column - 2 >= 0 && board.getValue(row+2, column-2).equals(" ")) {
return field = new Field(row+2, column - 2);
}
else if (row - 2 >=0 && column + 2 < board.getColumn() && board.getValue(row-2, column+2).equals(" ")) {
return field = new Field(row-2, column + 2);
}
}
else if(row + 2 < board.getRow() && column - 2 >= 0 && board.getValue(row+ 1, column-1).equals(Player)&& board.getValue(row+2, column-2).equals(Player)) {
if(row +3 < board.getRow() && column - 3 >= 0 && board.getValue(row+3, column-3).equals(" ")) {
return field = new Field(row+3, column - 3);
}
else if (row - 1 >=0 && column + 1 < board.getColumn() && board.getValue(row-1, column+1).equals(" ")) {
return field = new Field(row-1, column + 1);
}
}
else if(row - 2 >= 0 && column +2 < board.getColumn() && board.getValue(row- 1, column+1).equals(Player)&& board.getValue(row-2, column+2).equals(Player)) {
if(row -3>= 0 && column + 3 < board.getColumn() && board.getValue(row-3, column+3).equals(" ")) {
return field = new Field(row-3, column +3);
}
else if (row + 1 < board.getRow() && column -1 >=0 && board.getValue(row+1, column-1).equals(" ")) {
return field = new Field(row+1, column -1);
}
}
else if(row - 2 >= 0 && column - 1 >= 0 && row + 1 < board.getRow() && column + 2 < board.getColumn()
&& board.getValue(row+ 1, column-1).equals(Player)&& board.getValue(row-2, column+2).equals(Player)) {
if (row - 1 >=0 && column + 1 < board.getColumn() && board.getValue(row-1, column+1).equals(" ")) {
return field = new Field(row-1, column + 1);
}
}
else if(row + 2 < board.getRow() && column -2 >= 0 && row - 1 >= 0 && column + 1 < board.getColumn()
&& board.getValue(row+ 2, column-2).equals(Player)&& board.getValue(row-1, column+1).equals(Player)) {
if (row + 1 < board.getRow() && column - 1 >= 0 && board.getValue(row+1, column-1).equals(" ")) {
return field = new Field(row+1, column - 1);
}
}
else if(row + 3 < board.getRow() && column + 3 < board.getColumn() && board.getValue(row + 2, column+2).equals(Player) && board.getValue(row+3, column+3).equals(Player)) {
if( board.getValue(row+1, column+1).equals(" ")) {
return new Field(row+1, column +1);
}
}
else if(row + 3 < board.getRow() && column + 3 < board.getColumn() && board.getValue(row+3, column+3).equals(Player) && board.getValue(row+1, column+1).equals(Player)) {
if(board.getValue(row+2, column+2).equals(" ")) {
return new Field (row +2, column + 2);
}
}
else if(row - 3 >= 0 && column - 3 >= 0 && board.getValue(row-3, column-3).equals(Player) && board.getValue(row-2, column-2).equals(Player)) {
if(board.getValue(row-1, column-1).equals(" ")) {
return new Field(row-1, column -1);
}
}
else if(row-3 >=0 && column -3>= 0 && board.getValue(row-3, column-3).equals(Player) && board.getValue(row-1, column-1).equals(Player)) {
if(board.getValue(row-2, column-2).equals(" ")) {
return new Field (row-2, column - 2);
}
}
return field ;
}
private Field diagonalLeft(int row, int column, String Player) {
Field field = null;
if(row - 1 >= 0 && column - 1 >= 0 && row + 1 < board.getRow() && column + 1 < board.getColumn()
&& board.getValue(row+ 1, column+1).equals(Player)&& board.getValue(row-1, column-1).equals(Player)) {
if(row + 2 < board.getRow() && column + 2 < board.getColumn() && board.getValue(row+2, column+2).equals(" ")) {
return field = new Field(row+2, column + 2);
}
else if (row - 2 >=0 && column - 2 >=0 && board.getValue(row-2, column-2).equals(" ")) {
return field = new Field(row-2, column - 2);
}
}
else if(row + 2 < board.getRow() && column + 2 < board.getColumn()&& board.getValue(row+ 1, column+1).equals(Player)&& board.getValue(row+2, column+2).equals(Player)) {
if(row +3 < board.getRow() && column + 3 < board.getColumn() && board.getValue(row+3, column+3).equals(" ")) {
return field = new Field(row+3, column + 3);
}
else if (row - 1 >=0 && column - 1 >=0 && board.getValue(row-1, column-1).equals(" ")) {
return field = new Field(row-1, column - 1);
}
}
else if(row - 2 >= 0 && column -2 >=0 && board.getValue(row- 1, column-1).equals(Player)&& board.getValue(row-2, column-2).equals(Player)) {
if(row -3>= 0 && column - 3 >= 0 && board.getValue(row-3, column-3).equals(" ")) {
return field = new Field(row-3, column -3);
}
else if (row + 1 < board.getRow() && column +1 <board.getColumn() && board.getValue(row+1, column+1).equals(" ")) {
return field = new Field(row+1, column +1);
}
}
else if(row - 1 >= 0 && column - 1 >= 0 && row + 2 < board.getRow() && column + 2 < board.getColumn()
&& board.getValue(row- 1, column-1).equals(Player)&& board.getValue(row+2, column+2).equals(Player)) {
if (row + 1 < board.getRow() && column + 1 < board.getColumn() && board.getValue(row+1, column+1).equals(" ")) {
return field = new Field(row+1, column + 1);
}
}
else if(row + 1 < board.getRow() && column -2 >= 0 && row - 2 >= 0 && column + 1 < board.getColumn()
&& board.getValue(row- 2, column-2).equals(Player)&& board.getValue(row+1, column+1).equals(Player)) {
if (row - 1 >= 0 && column - 1 >= 0 && board.getValue(row-1, column-1).equals(" ")) {
return field = new Field(row-1, column - 1);
}
}
else if(row - 3 >=0 && column + 3 < board.getColumn() && board.getValue(row - 2, column+2).equals(Player) && board.getValue(row-3, column+3).equals(Player)) {
if( board.getValue(row-1, column+1).equals(" ")) {
return new Field(row-1, column +1);
}
}
else if(row - 3 >=0 && column + 3 < board.getColumn() && board.getValue(row-3, column+3).equals(Player) && board.getValue(row-1, column+1).equals(Player)) {
if(board.getValue(row-2, column+2).equals(" ")) {
return new Field (row -2, column + 2);
}
}
else if(row + 3 < board.getRow() && column - 3 >= 0 && board.getValue(row+3, column-3).equals(Player) && board.getValue(row+2, column-2).equals(Player)) {
if(board.getValue(row+1, column-1).equals(" ")) {
return new Field(row+1, column -1);
}
}
else if(row+3 < board.getRow() && column -3>= 0 && board.getValue(row+3, column-3).equals(Player) && board.getValue(row+1, column-1).equals(Player)) {
if(board.getValue(row+2, column-2).equals(" ")) {
return new Field (row+2, column - 2);
}
}
return field;
}
方法真的很高,也有错误..但是我找不到。你能给我一些提示,告诉我如何更好地实现这些方法吗?谢谢
编辑 1:
也许你应该只看第一种方法。我采取最后一步并检查是否有任何威胁包括最后一步。所以我会检查同一个玩家的行中是否还有两个硬币会产生威胁。大 A 是最后一步,我想检查它们是否是小 A,以便它们产生威胁:
| |一个|一个|一个| | | |例如,我检查 A 右侧的字段是否为 a,A 左侧的字段是否为 a,如果为真,我检查它周围是否有空字段,以便您可以连续获得 4
| | |一个|一个|一个| | |
|a|a|A | | | | |
| | |一个|一个| |一个| |
| | |一个| | |一个|一个|
等等..我检查每一个威胁的可能性。在行之后,我对列和对角线执行此操作
你看到更好的解决方案了吗?
编辑 2:
private Field row(int row, int column, int Player) {
Field field = null;
int j = 0;
boolean check = false;
if(column + 3 < board.getColumn()) {
for(int i = column; i< column + 4; i++) {
if(board.getValue(row, i).equals(Player)){
j++;
}
else if(board.getValue(row, i).equals(" ") && check == false) {
j++;
check = true;
field = new Field(row,i);
}
}
if(j == 4) {
return field;
}
}
return null;
}
我将从 4 个不同的点调用该方法。你觉得这行得通吗?
过去我们多次收到有关 Java 威胁的警告,我们不得不升级,有时甚至摆脱 Java。 现在我正在考虑为 Android 设备开发,我发现它与 Java 密切相关。 我的问题:Java 威胁对 Andr
当我尝试访问应用程序的某些部分时,我的应用程序显示此错误。此外,当我尝试在 iPhone 6s 模拟器上运行它时,它不会显示此错误,但在所有其他模拟器上都会显示该错误 我使用 Firebase 作为后
来自 OAuth 2.0 Threat Model and Security Considerations draft : 4.4.1.13. Threat: Code substitution (O
我试图证明在 PHP 中准备语句的必要性,但我遇到了一点问题,因为 PHP 使用通过表单传递的字符串做了一些很奇怪的事情。 我试图“打破”的陈述很简单: SELECT username FROM us
我确实计划将数据库从 5.1 版迁移到 5.6 版。我想通过使用 mysqldump 来做到这一点: 将数据从 MySQL DB 5.1 导出(通过 mysqldump)到 sql 文件, 导入(通过
我有目的地(为了测试)在 WebMatrix C# 中分配了以下变量: string val = "alert('XSS Vector')"; 在页面的后面,我使用 razor 将该值直接写入页面。
为了拥有一个 URL 友好的应用程序,我正在存储它的上下文在 URL 中有一个 JSON,它给出类似的东西: http://mysite.dev/myapppage/target#?context={
用户正在向我们的 React 应用程序提供一个字符串,并且它正在显示给其他用户。我想搜索一些字符,并用一些 HTML 替换它们,就像我要搜索“特殊”这个词一样,我会将其变成: My special w
我是一名优秀的程序员,十分优秀!