我正在用C# & XNA编写一个抽象的策略游戏。至于AI,我目前使用的是Negascout,深度为5。下面是游戏的描述:
游戏包括一个6x7六角形位置的棋盘,42个六角形瓷砖和6个棋子(一个国王和5个棋子)给每个玩家(最多2个玩家)。
在游戏的第一阶段,玩家交替地在棋盘的一个空位置上放置一个随机的瓷砖。每个瓷砖最多可以有6个箭头指向边缘。有些箭头可以是双尖的.箭头是指从那块瓷砖上移动的方向/s。如果有一个有效的位置,一个双指向的箭头会使一个部分移动/跳转2个位置。如果棋盘上仍有空位,则玩家不允许在对手的行列中放置瓷砖。
一旦这个阶段完成,下一个玩家依次将他的国王放置在离他最近的6块瓷砖中的任何一块上。接下来,棋子的运动开始。碎片根据瓷砖上的箭头移动。这场比赛是通过捕获或阻挡国王来赢得的。
好的,现在来看看我的移动生成函数。
的所有位置。
现在转到评估函数。
对于箭头指向的每个有效位置,瓷砖的权重为100。各部分的权重如下:
单件值=单件型(国王= 10000,典当=1,000)+移动+防御-攻击-攻击-阻止
地点:机动=不。的位置节点可以移动到(自由或被对手占据)* 1000防御=否。可以移动到这个位置的当前播放器碎片* 1000攻击=否。可以移动到这个位置的对手碎片* 1000阻塞=(国王= -10000,典当= -1000)碎片不能移动,因为所有箭头指向无效的位置,并且这个棋子在这个游戏中没有再次移动的机会。
很久了,但我的问题来了:
谁,尤其是有国际象棋人工智能经验的人,对于如何改进我的人工智能,特别是我的移动生成和评估功能,有什么想法和建议吗?
谢谢伊凡
顺便说一句。如果有人有兴趣尝试邮件,只要让我知道,我会上传一个设置在我的网站上。
发布于 2010-12-04 00:56:34
很长,但是我的问题来了:
确实很长。
当放置瓷砖时,AI有时使用错误的旋转放置瓷砖(即。将瓷砖放置在箭头指向无效位置的位置)。有时,这种情况发生在他的“家”一排。
换句话说,您的代码中有一个bug。即使有这么多的序言,也无法回答这个问题。这个问题应该是一个单独的,简明扼要的问题,其中包括相关代码的副本。
当
移动部件时,AI忽略了国王的安全。移动主要是国王,并在大约4-6个动作中被捕获。
和上面一样。这个问题甚至不能根据你写的冗长的序言来回答。
我对你的建议是,对你的问题要更加简洁,只发布与问题相关的细节,不要把多个问题合并成一个帖子。
任何人,尤其是有国际象棋人工智能经验的人,对于如何改进我的人工智能,特别是我的移动生成和评估功能,有什么想法和建议吗?
这是一个过于模糊的问题,通常会被关闭。如果您想要一些关于您的代码的建议,您将必须提供该代码,以便任何人给您一个有用的答案,超越盲目的猜测!
https://stackoverflow.com/questions/4333884
复制相似问题