请问井字棋的敌人ai怎么设定啊



  • 请问敌人ai怎么设定啊



  • @青丘互娱 简单点的AI直接让它随机找个空的格子下棋就行了,具体怎么“随机选中空的格子”得看你对象之类的是怎么设计的,系统组件里反正有个“选中随机实例”的条件,这个是在当前筛选剩下的实例中去随机选中一个的,利用好了就能做到“随机选中空的格子”。
    复杂的AI就难得多了,得设计它的运行优先级,例如按正常人思路,一般是【能赢】》【不让对方赢】》【构造能赢的局面】这样的优先级,理论上只需要把这些阶段的判断转换成事件表即可,【能赢】和【不让对方赢】这两个阶段还好说,就是预演每个空格子下棋后的结果,根据结果来决定实际下棋的格子就行了,但【构造能赢的局面】这个阶段可难可易,往简单了做自然是随机下在一个空格子即可,跟上面那个简单AI的做法相近,但是往难了做就需要去求后手中不落下风的最优解,也就需要去研究井字棋的一些技巧,才能让AI显得没那么傻,当然一个小游戏应该也不至于做到这种强度的AI,所以按前面的方案去做就行了。



  • @青丘互娱 网上应该有很多井字棋、五子棋的基础ai思路,这方面需要花很长时间来研究;我个人写过一种近似于A star寻路算法的ai,对于玩家每个下过的子都寻找附近已经连线的数量,排除掉两端闭口的之后计入确定赢面,选定确定赢面最小值处与最近的电脑棋子连线,用二者的曼哈顿距离计算预估赢面,重复这一过程几次就会得到几个总赢面值最低的点位,然后从这些随机选一个;当然这些都是在“确定在哪下棋都不会让对方下次必赢”的前提下进行的,实际要在唤境里实现的话还要更复杂,可能广度优先(遍历整个棋盘、枚举出所有可能结果)算法会更适合井字棋


Log in to reply