达加兹:详细信息

图片 不要计算“ pi”中的数字,
“ E”无限相同。
如果您从头开始编写它们,还有什么呢?

马丁·加德纳(Martin Gardner)的“井字游戏”

对于本文,我想选择一个不同的题词,但发现它太可悲了。 下一个版本再次被延迟。 在这段时间里,我设法换了工作! 在一个新的地方工作需要大量的精力,但是我继续为自己的小爱好寻找时间。 我必须说,在此过程中我必须面对的困难越来越大。 我会告诉你的。 我想从另一篇题词开始,但是这也不错。

这次,出现了新的mankal和“ 过渡游戏 ”(这些是Halma和她的亲戚)。 一种比赛,您必须在对手面前把对手的棋牌拿下。 可以跳过数字(包括我们的数字和其他数字)(如在Checkers中 ),但是没有捕获。 我在向你解释什么? 当然,你们中的许多人在童年时代就玩过Corners


乍一看,游戏看起来很简单,但是问题已经从内核级别开始。 还记得我说过复合动作吗? 由于许多原因,将它们表示为复合对象更为方便-作为单个整体而不是部分移动的序列。 这对于AI更加方便,并且从设计的角度来看,有些游戏以复合动作的形式进行描述看起来更加自然。 但是有一个问题。

在跳棋中,执行复合移动时,会将棋子从棋盘上移除(可能在移动结束时)。 在角落-您可以跳过自己或对手的棋子到无穷大。 从字面上看。 而且这里没有扩展,因为在内核中,即使在生成移动列表的阶段,所有事物都以循环的形式循环而不到达循环。 我必须更改此逻辑,在其中实现( detect-loops )选项,这值得事先考虑。

使用漫游器也不容易。
该系列游戏的主要问题在于,选择一个足以代表棋盘情况的评估功能并非易事。 由于游戏的目标是到达对手的“本垒打”,因此可以估算出所有棋子到目标场的总距离( 曼哈顿欧几里得 -无差异),但是在Halm中,在一组成功的情况下,棋子可以一次跳整个棋盘,因此估算很少。

对于目标字段,一切也不是很清楚。 您不能将所有图形都指向同一字段。 第一个到达他身边并接过他的人。 确定每个图的最佳目标场并移动到它们是理想的,但是在计算计划中这很困难。 此外,板上的情况会随着每个动作而变化。 一般而言,我决定不放任自己而将自己局限于纯粹的启发式算法

通过这样的中风质量评估
Dagaz.AI.heuristic = function(ai, design, board, move) { var t = getTargets(design, board, board.player); var m = getMove(move); var r = 1; if (m !== null) { if (!design.inZone(0, board.player, m.start)) { if (_.indexOf(t.first, m.end) >= 0) { r = 1000 + getDistance(t.first, m.start) - getDistance(t.first, m.end); } if (_.indexOf(t.goal, m.end) >= 0) { r = 700 + getDistance(t.first, m.start) - getDistance(t.first, m.end); } if ((r == 1) && (_.indexOf(t.second, m.end) >= 0)) { r = 500 - getDistance(t.second, m.end); } } if (r == 1) { if (design.inZone(2, board.player, m.end) && !design.inZone(2, board.player, m.start)) { r = 300; } } if (bestFound(design, board, 300)) return -1; if (r == 1) { var goals = getGoals(design, board, board.player); if (!_.isUndefined(goals[m.start])) { var goal = goals[m.start]; if (m.next == goal.next) { r = 100 + distance(goal.end, m.start) - distance(goal.end, m.end); } } } if (notBest(design, board, r)) return -1; var b = board.apply(move); if (isRestricted(design, b, board.player)) return -1; } return r; } 

这不是一个理想的解决方案,但是从一开始它是很有效的。 如果机器人发现有可能“跳入”敌人的“房屋”的举动,他会选择它。 否则,它会逐渐减小到目标的距离,从而避免拥塞。 如果一个玩家(有意或无意地)将自己的棋子留在“房子”中,而另一名玩家-用两行棋子“锁定”该棋子,则可能发生最悲惨的情况。

当然,发生这种情况的可能性很小。
感谢纽约的游戏发明人和收藏家西德尼·萨克森(Sidney Saxon)提出的规则。 他的建议如下:如果一件棋子有能力离开自己的“本垒打”,可以跳过对手的棋子,或者从这样的举动开始跳一连串的跳跃,那么它必须这样做。 我尝试了各种版本的规则,但排除了将数字锁定在自己的“房屋”中的可能性,并发现西德尼·撒克逊规则最为成功。 离开他的“家”后,该作品将不再返回它(尽管它有权在完成搬迁的过程中经过它)。

以防万一,我通过为对手设置负面评价来禁止对手的“锁定”动作(如果不必先看很多动作,可以允许自己进行非常复杂的试探),但是“锁定”空白目标字段的情况对于机器人来说同样危险(尤其是这种情况)在经典的Halma中引人注目,其纯粹的正交移动)。 通常,该机器人具有增长的空间。

在允许取件的游戏中,情况仍然更加复杂。 而且有很多这样的游戏! 其中最著名的也许是乔治·帕克(George Parker)在1930年发明的卡梅洛特(Camelot) 。 但就我个人而言,我更不喜欢基于相同机制构建的知名游戏。


这个游戏就是故事本身! 早在1908年,选举权主义者想出了这一点来推进其政治观点。 一切都在这里:下议院, 阿尔伯特音乐厅 ,城市监狱和医院。 妇女选举权主义者正在与警察作战。 他们的目标是将他们的6个人带到下议院。 他们无法进入总部阿尔伯特音乐厅。 形状可以向任何方向移动。 也可以跳过友善和敌方的碎片。

但是,一系列跳跃可能会任意长。 如果案件发生在“竞技场”中,敌人的身影在跳下时会被砍下并送入监狱或医院。 普通人物仅沿对角线切成较大的形状(警员和选举权领袖)-在任何方向上。 当在监狱和医院招募6位人物时,可以通过重新进入游戏来“交换”他们。 因此,像ShogiPillar Checkers中的棋子永远不会离开游戏。

通常,整个发行版仅是此类选项的主题。 例如,我最终掌握了国际象棋中棋子的正确变形(直到现在,所有棋子都只变成了皇后,通常来说这是错误的)。 我对此并不打扰,并在画布上绘制了一个选择对话框。 事实证明很好(如果我能把手放开以便与垫子区分开的话,总的来说会很棒)。


另一个“核”改进与用户界面的改进相关,并且具有其自身的背景。 在项目中已经存在很长时间的机制 ,它允许您通过URL传递当前位置来对其进行编码。 考虑到将这种格式的所有游戏状态的描述都写入了日志,因此在调试方面有很大帮助。 只是该用户对浏览器日志一无所知,这几乎没有用。

不,不,这还不是全部!
有很多游戏,其游戏玩法包含许多(可能是异构的)阶段。 例如,您可以引用2008年流行的游戏-Kamisado 。 该游戏的每个阶段(在将一个图形传递到最后一个水平之前)都相对较短,但在完成后,该游戏将继续进行。 根据约定的规则,玩家再次将自己的棋子放置在第一行,并再次尝试在对手之前到达最后一个横线(在前一阶段带来胜利的角色将获得新的技能)。


游戏的这一方面使“ 渐进级别 ”选项实现自动化,当其中一名玩家获胜时,该选项会自动过渡到游戏的下一个阶段。 并且由于图形的初始排列在一个阶段与另一个阶段之间是不同的,因此它是由通用设置模块计算的,并通过URL传递到游戏的下一个阶段。


与这个机会并驾齐驱是另一种方式,使您可以将数字的初始排列方式多样化。 “ 选择器 ”选项允许您在单个JS文件中编码多个初始布置(甚至电路板配置)。 刷新您的黑白棋主页,您就会明白我的意思。

新插件旨在解决该问题。 从结构上讲,这是一棵普通树,其中保存了游戏会话中所有游戏状态(并且由于该树,将来,整个游戏历史都可以上传到SGF文件)。 用户可以使用出现在屏幕顶部的按钮来“翻转”这些状态。


这确实很方便,但是您可以从顶部的两个箭头中获得更多的收益。 这正是“ advisor-mode ”选项的作用。 如果用户认为的时间长于指定的时间,则与他玩耍的机器人会为其计算路线并将新游戏状态放入“会话管理器”中。 只需按“前进”按钮即可接受建议的移动。 而且,如果您不喜欢此举,可以随时回滚。

在开发过程中,很多乐趣带来了声音(看起来,这要容易得多)。 第一个实现过于幼稚。 我不知道它的含义,但是在游戏过程中的某个地方,声音只是停止播放,而日志中没有任何消息。 这在我拥有的所有浏览器中都得到体现,直到我开始将创建的Sound对象缓存在内存中。 但是,另一个麻烦来了。

如果声音播放了很长时间,并且机器人想的足够快(例如,在诱饵中 ),那么它的移动声音就被“吞噬”了,这看起来非常不愉快。 在这里,我不得不做萨满很长一段时间,以拐杖结束。 设置“ clonable”标志后,我仍然创建多个Sound实例,每个玩家一个实例(即使他们失去相同的声音)。 当然,这对IE毫无帮助,IE显然出于宗教原因拒绝处理“ wav”和“ ogg”文件。 对于我来说,此浏览器无声工作!

否则,发布将毫无意外。 Halmemankalam由几盘国际象棋 游戏组成以及下期《 Il fogliaccio degli astratti》中我读到的《 棋》的 很多 变化以及中国同志的另一种简单游戏 。 哦,是的,这是另一回事:


只是一个短期记忆的小型模拟器。 必须打开相同颜色的相同对(女王/王后,国王与王等)。 为此以及所有大约200次点击的所有操作都给出了分数。 由于奖金是按积分奖励的(例如,红色和黑色西装的交替),因此您可以与朋友竞争谁的记忆力更好。 加油!

祝大家新年快乐!

Source: https://habr.com/ru/post/zh-CN429494/


All Articles