- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用阵列位板实现 Gomoku AI。我有 8 个数组板(行、列、对角线/、对角线\),4 个用于人类,4 个用于计算机。每个数组都保存整数,每个整数代表一行、一列或一条对角线,我可以对其执行按位运算。
public int[] humanRows = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
每当人类玩家或计算机选择一个 Action 时,属于该玩家的所有四个棋盘都会更新。这样,我可以轻松检查连续 5 个,这很棒。
for(int row: humanDiagonals){
if ((row & (row>>1) & (row>>2) & (row>>3) & (row>>4)) != 0){
return humanPiece;
}
}
但是现在问题来了。我希望能够找到所有模式(open-4、4-one-end-blocked 等)以输入到我的评估函数中。但我无法检查 connect-4 是否已被阻止,因为我无法使用位板表示正方形的所有 3 种状态(空、X 填充、O 填充)。如果我使用 & 运算符合并位板,所有填充的方 block 将仅表示为 1,并且我将无法区分它们。我有一个如下的方法,但正如你所看到的,它没有考虑阻塞的末端。
public int comboCount(String combo, int[] board) {
int count = 0;
int len = combo.length();
for (int row : board) {
if (row != 0) { // if the row is not empty
int shiftedRow = row;
for (int i = 0; i < len; i++) {
int temp = row >> i;
shiftedRow &= temp;
}
String rowString = Integer.toBinaryString(shiftedRow);
for (int k = 0; k < rowString.length(); k++) {
if (rowString.charAt(k) == '1') {
count += 1;
}
}
}
}
return count;
}
任何人都可以帮我找到解决方案吗?我感觉这个问题有一个简单的解决方案,但我无法理解它。这是我第一次修改位,所以如果可能的话,请使解决方案变得简单。
最佳答案
您只需先检查一侧是否有四排(但不能更长),然后检查合并后的板是否有较长的行。
使用这些便利功能...
private static boolean hasFourInRow(int row){
return (row & (row >> 1) & (row >> 2) & (row >> 3)) != 0;
}
private static boolean hasFiveInRow(int row){
return (row & (row >> 1) & (row >> 2) & (row >> 3) & (row >> 4)) != 0;
}
private static boolean hasSixInRow(int row){
return (row & (row >> 1) & (row >> 2) & (row >> 3) &
(row >> 4) & (row >> 5)) != 0;
}
您可以通过以下方式轻松检测您提到的情况:
public static void main(String[] args) {
int humanRow = 0b00011110;
int computerRow = 0b00100001;
if (hasFourInRow(humanRow) && !hasFiveInRow(humanRow)){
int combinedRow = humanRow | computerRow;
if (!hasFiveInRow(combinedRow)){
System.out.println("Open 4!");
} else if (!hasSixInRow(combinedRow)){
System.out.println("4-one-end-blocked!");
} else {
System.out.println("4-both-ends-blocked!");
}
}
}
关于java - 五子棋人工智能 : How to find out if a connect is blocked using bit boards?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42853231/
上一篇:《人工智能模型训练中的数据之美——探索TFRecord》 序言:自然语言处理(NLP)是人工智能中的一种技术,专注于理解基于人类语言的内容。它包含了编程技术,用于创建可以理解语言、分类内
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
这一年来,AI领域层出不穷的技术和应用,真的有点让人疲于奔命。其中AIGC领域的diffusion model 和 NLP领域的 ChatGBT 引领了这一轮风潮。AI取代越来越多脑力工作者的趋势已
人工智能,有多能? "AI"二字,相信大家并不陌生。但是,全力发展人工智能,真的合适吗? 六年前,小米发布了小爱同学。这大概是离大家最近的人工智能
我正在使用 Flash 中的 Box2D 实现一个简单的 Volley 游戏。我需要为 CPU 播放器实现一些 AI。我们就叫他 jack 吧。因此,Jack 需要预测球被人类球员 John 击中后会
我正在尝试查找有关尝试创建可以理解英语单词、语法和上下文的基本 AI 工具的信息(希望是 C# 源代码)。 想法是通过使用尽可能多的书面文档来训练 AI,然后基于这些文档,让 AI 用对人类有意义的正
我正在编写一个个人项目,该项目旨在拥有一个可以进化的类或对象,我们称之为“机器人”。机器人需要能够在给定命令的情况下创建类、字段和函数,并能够将逻辑写入这些对象以进行操作(但通常都是这样做的)。 为了
我正在做一个项目,其中有一系列要拍卖的卡片;出价最高的人将赢得拍卖中值(value)最高的卡片。 当 AI 玩家轮到时,他需要评估数组并确定他的出价估值。 忽略与验证或规则有关的任何事情;因为我已经对
假设我有 20 名玩家 [姓名 A .. T] 参加锦标赛。锦标赛的规则规定每个玩家与其他玩家对战两次 [A 对 B、B 对 A、A 对 C .. 等等]。有 20 名玩家,总共有 380 场比赛。
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我正在开发一个应该像异或运算符一样工作的程序。 为了调整权重,我使用反向传播。 我还包括了深度学习(它几乎按其应有的方式工作,这里同样的斗争)但这不应该是出于重要性。 (当有像 这样的 if 子句时
是否有围绕 AI 的标准规则引擎/算法来预测用户对特定类型产品(如衣服)的品味。我知道这是所有电子商务网站都会为之扼杀的一件事。但我正在寻找在那里定义的理论模式,这将有助于以更好的方式做出预测,即使不
所以这是一项大学作业,除了 AI 不知道如何“取胜”之外,一切都已经完成,而且它在开始时的 Action 并不像我希望的那样随机走到顶角,然后往下走。该任务只需要 AI 的两条规则,即它可以“获胜”或
我认为 Online-Depth-Search Algorithm 存在一些问题,因为我没有看到任何递归调用。 这是来自 peter Norvig 的代码。 如果正确或错误,请帮助我理解这一点。 fu
这是 C 语言中的玩家与 AI 井字棋游戏。如果 AI 滚到一个被占用的位置,我该如何让它再次滚到一个未被占用的位置? char boardchar[3][3] = { {'1', '2', '3'}
我正在尝试为我的 connect 4 java 程序设计一个 AI,需要有不同级别的难度,我已经为简单级别创建了一个算法,但现在我需要另一个针对困难级别的算法。 有人可以推荐或给我一些伪代码来实现人工
我一直在尝试一些框架和算法,但我找不到一个可以做我想做的事情——根据值对数据列进行分类。 我尝试使用贝叶斯算法,但它不是很精确,因为我不能期望正在搜索的数据在训练集中 - 但我可以期望模式在训练中。
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
我有两个类,人类和怪物。 两者都有一个名为 MoveBehavior 的属性 Human有HumanMoveBehavior,Monster有MonsterMoveBehavior 我希望 Human
我是一名优秀的程序员,十分优秀!