哪个游戏盒子里有JAVA_关于点和盒子游戏的Java minimax

哪个游戏盒子里有JAVA_关于点和盒子游戏的Java minimax我想建议您完全重新考虑代码.查看代码的问题(以及为什么这里没有很多响应)是很难遵循并且很难调试.例如,什么是gs.getRemainingLines,它究竟做了什么?(为什么剩下的线而不是所有合法的线?)但是,通过一些简化,可以更容易地弄清楚发生了什么并修复它.在抽象层面,minimax只是这个过程:floatminimax_max(GameStateg){if(gisterminal…

大家好,又见面了,我是你们的朋友全栈君。

我想建议您完全重新考虑代码.查看代码的问题(以及为什么这里没有很多响应)是很难遵循并且很难调试.例如,什么是gs.getRemainingLines,它究竟做了什么? (为什么剩下的线而不是所有合法的线?)

但是,通过一些简化,可以更容易地弄清楚发生了什么并修复它.

在抽象层面,minimax只是这个过程:

float minimax_max(GameState g)

{

if (g is terminal or max depth reached)

return eval(g);

float bestVal = -inf;

bestMove = null;

moves = g->getLegalMoves();

for (m : moves)

{

ApplyMove(m);

if (g->nextPlayer == maxPlayer)

nextVal = minimax_max(g);

else

nextVal = minimax_min(g);

if (nextVal > bestVal)

{

bestVal = nextVal;

bestMove = m;

}

UndoMove(m);

}

return bestVal;

}

我没有详细说明如何在最后获得/使用最后一步,但并不是那么难.您还需要minimax_min的另一个过程,或者您可以在代码中放入if语句.

如果你看一下你的代码,你已经把它写得很接近了,但你在代码中留下了很多游戏特定的细节.但是,您不必考虑那些让minimax正常工作的事情.

特别是,如果为GetMoves(),ApplyMove(),UndoMove()和eval()提供函数来评估状态,大多数游戏都可以抽象地进行推理. (进一步的搜索增强功能需要更多功能,但这会让你有很长的路要走.)

您可能希望以这种方式重新考虑因素的一些原因:

>您现在可以单独测试minimax和其他代码.

>您可以通过验证所有合法移动是否已生成来测试您的点和框代码,并且在应用移动后您将拥有合法状态,并且接下来会移动正确的玩家. (您可以播放和撤消长时间的随机移动序列,以帮助验证您之后总是回到开始状态.)

>您可以在各个州轻松测试评估功能,以确保其正常工作. (实际上,你通常不能搜索游戏结束来确定获胜者.)

>您可以使用简单的评估函数测试minimax并测试以查看是否进行了正确的移动. (例如,如果您喜欢在边缘上移动,则单层搜索应返回边缘上的移动)

>其他人可以更轻松地阅读您的代码.我们可以查看每段代码并查看它是否正确,而不必将特定于游戏的实现细节混合到minimax特定的细节中.

>如果您可以正确应用和撤消移动,则无需复制游戏状态.这将使代码更有效.

虽然您可以尝试修复代码而不进行重构(例如,只需找到它返回null的第一个位置,并指出错误的位置),但从长远来看,如果没有这些更改,您的代码将难以调试和改进.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156385.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月7日 上午11:00
下一篇 2022年7月7日 上午11:00


相关推荐

  • mac idea 2021.4.1 激活码_通用破解码

    mac idea 2021.4.1 激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    46
  • 什么是udp攻击?udp攻击的基本原理是什么

    什么是udp攻击?udp攻击的基本原理是什么UDPFlood关联TCP类服务防范UDP是无连接的协议,因此无法通过源认证的方法防御UDPFlood攻击。如果UDP业务流量需要通过TCP业务流量认证或控制,则当UDP业务受到攻击时,对关联的TCP业务强制启动防御,用此TCP防御产生的白名单决定同一源的UDP报文是丢弃还是转发。  比如,有些服务例如游戏类服务,是先通过TCP协议对用户进行认证,认证通过后使用UDP协议传输…

    2022年10月2日
    4
  • 为公司linux服务器写的一个初始化脚本

    为公司linux服务器写的一个初始化脚本

    2021年8月20日
    49
  • msf 漏洞扫描_漏洞扫描方案

    msf 漏洞扫描_漏洞扫描方案目录1msfconsole介绍1msfconsole介绍msfconsole简称msf是一款常用的安全测试工具,包含了常见的漏洞利用模块和生成各种木马,其提供了一个一体化的集中控制台,通过msfconsole,你可以访问和使用所有的metaslopit插件,payload,利用模块,post模块等等。msfconsole还有第三方程序的接口,比如nmap、sqlmap等,可以直接在msfconsole里面使用。kali可直接在命令使用:msfconsoleMsfconsole的系统

    2025年9月1日
    7
  • linux用通配符取数据文件,Linux 通配符「建议收藏」

    linux用通配符取数据文件,Linux 通配符「建议收藏」概述本章节主要介绍关于linux通配符的用法,熟练运用通配符可以提高工作效率并且可以简化一些繁琐的处理步骤。测试数据touchaa6.logabc.logac.txtbcc5.txtx.logA“*”代表任意多个字符例:查询以”.log”结尾的文件ll*.log“?”代表任意单个字符例:只查询a、b、cll?“[]”代表“[”和“]”之间的某一个字符,比如[0-9]可以代表0-9…

    2026年1月24日
    3
  • 修改git远程仓库地址

    修改git远程仓库地址由于 git 仓库的地址发生了变化 需要修改仓库地址才能 push 查看本地工程 git 仓库关联的远程仓库地址 gitremote v 删除本地关联的远程仓库地址 gitremoterem 将当前工程关联到指定的远程仓库 gitremoteadd 注意此处 oringe 名称 后续会根据这个名称进行提交将本地代码提交到远程 master 分支 gitpush uoringemaste 打标签查看标签 gitt

    2025年11月7日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号