当前位置: 首页 > 知识库问答 >
问题:

Java:正确使用条件语句

凌琦
2023-03-14

我是一个初学者,我试图通过应用极小算法来开发Connect4游戏,我被困在决定是最小玩家回合还是最大玩家回合的条件下。我有一种感觉,这是一种简化,但我已经想了两天试图弄清楚。有什么帮助吗?

private int evaluatePlayerMove(int depth, int maxDepth, int col, int alpha, int beta) {
    boardsAnalyzed++;

    int evaluatedMove=0; // For evaluating min player move or max player move

    int min = Integer.MAX_VALUE, minScore = 0; // For min player

    int max = Integer.MIN_VALUE, maxScore = 0; // For max player


    if (col != -1) {

    // Check whether it's min player turn or max player turn

    // If it's min player turn then evaluate min move:

    if(//it's min player turn){
        minScore = board.getHeuristicScore(Board.MARK_BLACK, col, depth, maxDepth);
        if(board.blackWinFound()) {
            blackWinFound = true;
            return minScore;
        }


    if (depth == maxDepth) {
        return minScore;
    }
    for (int c = 0; c < Board.COLUMNS; c++) {
        if (board.isColumnAvailable(c)) {
            board.mark(c, Board.MARK_RED);
            int value = evaluatePlayerMove(depth + 1, maxDepth, c, alpha, beta);
            board.unset(c);
            if (value < min) {
                min = value;
                if (depth == 0) {
                    column = c;
                }
            }
            if (value < beta) {
                beta = value;
            }
            if (alpha >= beta) {
                return beta;
            }
        }


    }

    if (min == Integer.MAX_VALUE) {
        return 0;
    }
     evaluatedMove = min;
    }


   // If it's max player turn then evaluate max move:

    if(//it's max player turn) {
        maxScore = board.getHeuristicScore(Board.MARK_RED, col, depth, maxDepth);
      if (board.redWinFound()) {
            redWinFound = true;
           return maxScore;
       }
    if (depth == maxDepth) {
        return maxScore;
    }
    for (int c = 0; c < Board.COLUMNS; c++) {
        if (board.isColumnAvailable(c)) {
            board.mark(c, Board.MARK_BLACK);
            int value = evaluatePlayerMove(depth + 1, maxDepth, c, alpha, beta);
            board.unset(c);
            if (value > max) {
                max = value;
                if (depth == 0) {
                    column = c;
                }
            }
            if (value > alpha) {
                alpha = value;
            }
            if (alpha >= beta) {
                return alpha;
            }
        }


    }
    if (max == Integer.MIN_VALUE) {
        return 0;
    }

     evaluatedMove= max;
    } 


} 
return evaluatedMove;

}

共有1个答案

洪博艺
2023-03-14

在大多数实时人工智能情况下,这是你的人工智能程序与人类玩家之间的较量。所以,通常情况下,如果你正在构建一棵min-max树,人工智能程序将只会是min或max,而这棵树的根将是min或max。例如,如果你尝试在人工智能程序中使用max,树的根将始终保持max,你只需要计算max的移动(min moves将是用户输入)。对于这种情况,我建议使用树的深度作为检查条件。

if(root == max){
     for any node n:
            if(n.depth%2 == 0){
                  n is max
            }
            else{
                 n is min
            }
 }

因为深度通常用于几乎所有的问题,所以它将是一种有效的方法。

然而,如果这是一个家庭作业问题,你确实需要计算最小和最大的移动,我建议使用一个实例静态布尔变量isMax,它应该在每次移动后翻转。

 类似资料:
  • 这是我第一次在C#中使用进度条。我的代码正在复制一些文件,我想通过进度条显示进度。 我不喜欢我的代码的一点是,我必须遍历所有文件来设置最大值...后来我再次经历同样的过程来复制文件。 我只是想不出一个方法来确保在酒吧里流利的进步而不这样做。我首先必须知道最大值对吗?或者有什么诀窍吗? 代码如下所示: > 设置最大值: 复制文件: 增加进度条: 私有静态无效记录器(字符串输出){log.Text=“

  • 条件语句通过判断给定条件的真假来控制程序的执行。在上一小节中,我们已经简要介绍过了语句和块的概念。那么本小节我们将进一步展开介绍 Java 中所有类型的条件语句。 1. if 语句 1.1 语法 当我们需要根据给定的条件来决定是否执行一段代码时,if 语句就派上用场了。if 块仅在与其关联的布尔表达式为 true 时执行。if 块的结构如下: if (条件) { // 当条件成立时执行此处

  • 问题内容: 我正在上高中AP计算机科学课程。 我决定在我们的一个实验室里发表一个声明,只是为了玩弄,但是我遇到了这个错误。 我问了一个关于Stackoverflow 的问题,以找出如何正确执行它,并且我所做的完全如答案之一所示。我真的不明白为什么编译器想要一个语句(至少这是我假设的要求),我也不知道如何使用。似乎希望重新启动的部分是一个变量,但是重新启动只是将程序拉回到第10行的标签,以便用户可以

  • 本文向大家介绍正确使用MySQL INSERT INTO语句,包括了正确使用MySQL INSERT INTO语句的使用技巧和注意事项,需要的朋友参考一下 以下的文章主要介绍的是MySQL INSERT INTO语句的实际用法以及MySQL INSERT INTO语句中的相关语句的介绍,MySQL INSERT INTO语句在实际应用中是经常使用到的语句,所以对其相关的内容还是多多掌握为好。 My

  • 我开始写一个二叉树函数。该方法目前的目标是在树中找到节点并返回节点。根值是数据,左边和右边是子树。当我在调试器中单步执行它时,当它到达return语句时,它会跳回第二个if块,并最终返回null。

  • 我理解下面的代码可以正常工作。在阅读Python中的while循环文档时,他们说while表达式应该是True或False,这很有意义。 现在,函数返回字符串。那么这个while循环是如何工作的呢?