首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用基本命令时批处理文件运行速度极慢

使用基本命令时批处理文件运行速度极慢
EN

Stack Overflow用户
提问于 2020-02-09 08:50:45
回答 1查看 90关注 0票数 2

我决定构建一个具有3种模式的tic tac toe机器人的非正式项目。由于某些原因,使用if检测机器人的速度非常慢。运行此代码最多可能需要30秒:`

代码语言:javascript
复制
if %ui1%==X if %ui2%==X if %ui3%==3 set "ui3=O" & goto :easymoduleuser
if %ui1%==X if %ui4%==X if %ui7%==7 set "ui7=O" & goto :easymoduleuser
if %ui7%==X if %ui8%==X if %ui9%==9 set "ui9=O" & goto :easymoduleuser
if %ui4%==X if %ui5%==X if %ui6%==6 set "ui6=O" & goto :easymoduleuser
if %ui3%==X if %ui6%==X if %ui9%==9 set "ui9=O" & goto :easymoduleuser
if %ui2%==X if %ui5%==X if %ui8%==8 set "ui9=O" & goto :easymoduleuser
if %ui5%==X if %ui2%==X if %ui8%==8 set "ui9=O" & goto :easymoduleuser
if %ui1%==X if %ui7%==X if %ui4%==4 set "ui4=O" & goto :easymoduleuser
if %ui1%==X if %ui3%==X if %ui2%==4 set "ui2=O" & goto :easymoduleuser
if %ui7%==X if %ui9%==X if %ui8%==8 set "ui8=O" & goto :easymoduleuser
if %ui2%==X if %ui8%==X if %ui5%==5 set "ui5=O" & goto :easymoduleuser
if %ui4%==X if %ui6%==X if %ui5%==5 set "ui5=O" & goto :easymoduleuser
if %ui3%==X if %ui9%==X if %ui6%==6 set "ui6=O" & goto :easymoduleuser
if %ui4%==X if %ui6%==X if %ui5%==5 set "ui5=O" & goto :easymoduleuser
rem now, it tries to find any places it can win.
if %ui1%==O if %ui2%==O if %ui3%==3 set "ui3=O" & goto :easymoduleuser
if %ui1%==O if %ui4%==O if %ui7%==7 set "ui7=O" & goto :easymoduleuser
if %ui7%==O if %ui8%==O if %ui9%==9 set "ui9=O" & goto :easymoduleuser
if %ui4%==O if %ui5%==O if %ui6%==6 set "ui6=O" & goto :easymoduleuser
if %ui3%==O if %ui6%==O if %ui9%==9 set "ui9=O" & goto :easymoduleuser
if %ui2%==O if %ui5%==O if %ui8%==8 set "ui9=O" & goto :easymoduleuser
if %ui5%==O if %ui2%==O if %ui8%==8 set "ui9=O" & goto :easymoduleuser
if %ui1%==O if %ui7%==O if %ui4%==4 set "ui4=O" & goto :easymoduleuser
if %ui1%==O if %ui3%==O if %ui2%==4 set "ui2=O" & goto :easymoduleuser
if %ui7%==O if %ui9%==O if %ui8%==8 set "ui8=O" & goto :easymoduleuser
if %ui2%==O if %ui8%==O if %ui5%==5 set "ui5=O" & goto :easymoduleuser
if %ui4%==O if %ui6%==O if %ui5%==5 set "ui5=O" & goto :easymoduleuser
if %ui3%==O if %ui9%==O if %ui6%==6 set "ui6=O" & goto :easymoduleuser
if %ui4%==O if %ui6%==O if %ui5%==5 set "ui5=O" & goto :easymoduleuser
rem now, if it reaches this part, it will try to make a pattern in which it wins (all places where it can put two together. It doesn't try to win diagonally)
if %ui1%==O if %ui2%==2 if %ui3%==3 set "ui2=O" & goto :easymoduleuser
if %ui3%==O if %ui2%==2 if %ui1%==1 set "ui1=O" & goto :easymoduleuser
if %ui1%==O if %ui4%==4 if %ui7%==7 set "ui4=O" & goto :easymoduleuser
if %ui2%==O if %ui5%==5 if %ui8%==8 set "ui5=O" & goto :easymoduleuser
if %ui3%==O if %ui6%==6 if %ui9%==9 set "ui6=O" & goto :easymoduleuser
if %ui5%==O if %ui2%==2 if %ui8%==8 set "ui2=O" & goto :easymoduleuser
if %ui7%==O if %ui8%==8 if %ui9%==9 set "ui8=O" & goto :easymoduleuser
if %ui4%==O if %ui5%==5 if %ui6%==6 set "ui5=O" & goto :easymoduleuser

“我真不明白为什么要花这么长时间。”这一行的用时不到一秒。为什么花了这么长时间?

EN

回答 1

Stack Overflow用户

发布于 2020-02-09 22:23:56

您可以通过跟踪变量中的可用网格位置来减少条件测试,然后在移动时使用子字符串修改从变量中减去网格位置。在另一个变量中跟踪AI的成功移动,并在第三个伪数组变量中显示获胜网格移动的列表。在for循环中使用findstring函数来测试AI对获胜移动数组的移动,并为每个匹配增加一个值(在处理数组中的下一个元素时重置为0)-如果有两个匹配,则离胜利只有一个移动,您可以测试可用网格位置变量,以查看相关位置是否可用。

同样,你可以用同样的方式跟踪玩家的走法,并允许AI访问相同的检查,检查玩家离获胜的距离有多近,以便在AI没有获胜的情况下阻止玩家移动

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60132611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档