You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Java版四子棋(Connect4)中实现电脑随机选列的简易AI?

实现Connect4极简随机AI的方案

当然可行!你想要的这种随机落子的极简AI完全不需要用到minimax这类复杂算法,只需要把玩家2的人工输入逻辑替换成电脑随机选择合法列的代码即可。下面是具体的修改步骤和代码示例:

第一步:导入随机数工具类

首先在你的play.java文件顶部导入Java的随机数类:

import java.util.Random;

第二步:初始化随机数生成器

play类中添加一个Random成员变量,并在构造方法中初始化它:

public class play {
 private Connect4Game connect;
 private Random random; // 添加随机数生成器成员

 public play(Connect4Game connect) {
 this.connect=connect;
 this.random = new Random(); // 初始化随机数生成器
 }
 // ... 其他原有代码
}

第三步:替换玩家2的人工输入逻辑

找到代码中玩家2的输入处理部分,把原来的人工输入代码:

//player 2
userInput = getUserInput();
move = Integer.parseInt(userInput);
counterObj.placeCounter('y',move);

替换成以下电脑随机选列的代码:

// Player 2 (Computer) - 随机选择合法列落子
int move;
do {
    // 生成1到总列数之间的随机数(匹配你原有代码中1-based的列号逻辑)
    move = random.nextInt(connect.board[0].length) + 1;
    
    // 检查该列是否还有空位(避免选到已经填满的列)
    boolean columnIsFull = true;
    for (int row = 0; row < connect.board.length; row++) {
        // 假设你的棋盘空位用空格字符' '表示,根据实际情况调整
        if (connect.board[row][move - 1] == ' ') {
            columnIsFull = false;
            break;
        }
    }
    
    if (!columnIsFull) {
        break; // 找到合法列,退出循环
    }
} while (true);

// 电脑落子
counterObj.placeCounter('y', move);
System.out.println("Computer chose column " + move); // 告诉玩家电脑选了哪一列

关键说明

  • 这里假设你的棋盘列号是1-based(玩家输入1对应第一列),所以随机数生成时加了1;如果你的列号是0-based,去掉+1即可。
  • 循环检查列是否有确保电脑不会选到已经填满的列,避免无效落子。
  • 输出电脑选择的列号可以提升玩家的游戏体验,让玩家清楚电脑的操作。

这样修改后,当人类玩家(玩家1)落子后,电脑会自动随机选择一个可落子的列完成操作,完全满足你想要的极简AI需求。

内容的提问来源于stack exchange,提问作者Ben Craig

火山引擎 最新活动