抽象策略游戏的评估功能
我正在用C#和XNA编写抽象策略游戏。 至于人工智能,我目前使用的是Negascout和5的深度。以下是对游戏的描述:
游戏包括6×7六角形棋盘,42个六角形棋盘,以及每个棋手(最多2名棋手)6个棋子(1个王牌和5个棋子)。
在比赛的第一阶段,玩家交替地在棋盘的空白位置放置一个随机牌。 每个瓷砖最多可以有6个箭头指向边缘。 有些箭头可以是双指的。 箭头表示从该瓷砖移动的方向。 如果有一个有效的位置,双箭头可以让一个棋子移动/跳转两个位置。 如果棋盘上还有空位,则不允许选手在对手的牌桌上放置棋子。
一旦这个阶段完成,下一个玩家又将他的国王放在离他最近的6排棋子中的任何一个上。 接下来,片断的运动开始。 碎片根据瓷砖上的箭头移动。 通过捕捉或阻挡国王赢得比赛。
好的,现在到我的移动生成功能。
瓷砖放置阶段a)在最近的一排放置瓷砖。 瓷砖旋转以找到最佳旋转。 b)一旦最近的行满了,将一块瓷砖放置在一个由各方位置(即没有棋盘边缘)包围的空白位置。 旋转瓷砖以找到最佳旋转。 c)如果找不到位置,则添加所有剩余的空位置,试图找到最佳旋转。
国王放置舞台a)找到最佳瓷砖位置并将王放置在那里。 b)将剩下的棋子放在该行剩余的空位上。
运动阶段a)如果国王受到攻击,如果这件棋子没有防守,则尝试攻击攻击棋子。 b)为所有正在受到攻击的玩家添加移动。 c)添加玩家可以攻击的所有对手棋子。 d)添加玩家可以移动到的所有位置。
现在评估功能。
瓷砖放置阶段分数=当前玩家放置的瓷砖数目+当前玩家的瓷砖在最近的行 - 不。 瓷砖对手放置到目前为止 - 对手的瓷砖在最远行(距离对手最近)。
国王放置阶段得分=当前球员在最近排中的牌 - 最远排中对手的牌(距离对手最近)。
运动阶段得分=当前球员的棋子价值 - 对手棋子的价值。
箭头指向的每个有效位置的瓦片权重为100。 件的重量如下:
棋子类型=棋子类型(王= 10000,棋子= 1000)+移动性+防守 - 攻击 - 发球 - 阻挡
其中:mobilty = no。 的位置节点可以移动到(自由或被对手占用)* 1000防守=否。 围绕这件作品的当前玩家片断可以移动到这个位置* 1000攻击=不。 的对手棋子可以移动到这个位置* 1000阻挡=(王= -10000,pawn = -1000)棋子不能移动,因为所有的箭头指向无效的位置,并且棋子在这个游戏中没有机会再次移动。
相当长,但这里来了我的问题:
放置拼贴时,AI有时会使用错误的旋转放置拼贴(例如,将拼贴放置在箭头指向无效位置的位置)。 有时这发生在他的“家”行。
移动棋子时,AI无视国王的安全。 大多数国王移动并且以大约4-6次移动被捕获。
任何人,特别是国际象棋AI经验的人,对如何提高我的AI,特别是我的移动生成和评估功能都有想法和建议?
谢谢伊万
顺便说一句...如果任何人有兴趣尝试邮件,只是让我知道,我会上传我的网站上的设置。
相当长,但这里来了我的问题:
确实很长。
放置拼贴时,AI有时会使用错误的旋转放置拼贴(例如,将拼贴放置在箭头指向无效位置的位置)。 有时这发生在他的“家”行。
换句话说,你的代码中有一个错误。 即使有这么广泛的序言,也无法回答这个问题。 这个问题应该是一个单独的,简明扼要的问题,包括相关代码的副本。
移动棋子时,AI无视国王的安全。 大多数国王移动并且以大约4-6次移动被捕获。
同上。 这个问题不能根据你写的广泛的序言来回答。
我对你的建议是要更加简洁地回答你的问题,只发布与问题相关的细节,而不是将多个问题合并成一个单独的帖子。
任何人,特别是国际象棋AI经验的人,对如何提高我的AI,特别是我的移动生成和评估功能都有想法和建议?
这是一个过于模糊的问题,通常会被关闭。 如果您需要关于您的代码的一些建议,您必须提供该代码才能让任何人给您一个超出盲目猜测的有用答案!
链接地址: http://www.djcxy.com/p/56367.html