达加兹:孤独的尽头

所有人的幸福,一无所有
不要让任何人发怒!

A.和B. Strugatsky“在场边野餐”


机器人无论打得多么出色,都不能替代现场玩家。 如果漫游器播放不佳-这并不有趣。 如果坚固的话,那是侮辱性的,再一次没有意思。 保持平衡是非常困难的(更重要的是,因为每个玩家都需要平衡)。 很长一段时间以来,我都打算进行网络游戏,但是一切都取决于维护我自己的服务器的需要。 幸运的是,该决定来自一个出乎意料的角度。

Ed van Zon是我接触了很长时间的人。 碰巧的是,他抓住了Zillions的旗号,当时开发商(Jeff Mallett和Mark Lefler)突然对项目的开发失去了兴趣。 因此,所有这些游戏都是由他的部队在网站发布的。 而且,他和Christian Freeling都在支持和开发自己的网站(当然,也涉及棋盘游戏):


但这一切都是俗语。 这个故事始于以下事实:在该站点上存在一个洞(或更确切地说,是一个 ,但这不是重点),现场玩家可以通过通信进行比赛。 相反,它们可以,直到Java applet技术过时为止。 最近,由于仅凡人难以使用它们,Ed一直在考虑更现代的解决方案。 然后我和我的项目一起出现了。


经过短暂的培训之旅,就我而言,爱德华仅仅几个月,就在Dagaz引擎上获得了三打新游戏,并将它们发布到了网站上。 让我提醒您, MIT许可证 (像我一样)以各种方式支持此类行为。

但是,有一个问题。
据了解,玩家不仅可以使用机器人来玩所有这些游戏,而且达加兹在最初的实施中并没有提供这样的机会。 我不得不快速想出一些办法。 幸运的是,我已经有了一个会话管理器 ,可以让我回滚错误地做出的动作。 作为奖励,他将游戏的历史记录保存在RAM中,因此决定使用此记录。

节省
SessionManager.prototype.save = function() { if (_.isUndefined(this.current) || _.isUndefined(this.current.board)) return null; var states = []; var board = this.current.board; while (board.parent !== null) { states.push(board); board = board.parent; } var r = "("; while (states.length > 0) { var board = states.pop(); r = r + ";" + Dagaz.Model.playerToString(board.parent.player); r = r + "[" + Dagaz.Model.moveToString(board.move) + "]"; } r = r + ")"; return r; } 

和加载
 SessionManager.prototype.load = function(sgf) { var res = Dagaz.Model.parseSgf(sgf); this.states = []; delete this.current; var board = Dagaz.Model.getInitBoard(); this.addState(Dagaz.Model.createMove(), board); for (var i = 0; i < res.length; i++) { var p = res[i].name; if (p != Dagaz.Model.playerToString(board.player)) return false; if (res[i].arg.length != 1) return false; var move = this.locateMove(board, res[i].arg[0]); if (move === null) return false; board = board.apply(move); this.addState(move, board); } this.controller.setBoard(board); return true; } 

他们只做了几十行(我当然不认为SGF格式解析器本身,任何人都可以在这里看到它)。 顺便说一句,SGF和会话管理器本身都支持使用树,不仅支持游戏历史,而且出于我们当前的目的,这不是必需的。

作为Dagaz的第一款游戏,我想选择一些原创作品(尤其是因为Ed已经拥有CheckersChessGo ),因此有可能在网上玩。 选择权取决于营业额 。 这款游戏在很多方面都类似于国际象棋,是LúcioJoséPatrocínioFilho最近发明的。


这里的数字是预制的。 最大的环像象棋棋子一样运动,中间的 象棋 象运动 ,核心是车子 。 白嘴鸦和大象的组合赋予了女王 (这是很合逻辑的),而两个戒指则赋予了国际象棋骑士 。 这三个部分共同构成了一座城堡-需要保护的主要人物。 这里值得一说的是,只有最外部的一部分总是运动。 因此,城堡的外圈随时可以随棋子一起移动(包括跳越田野),但是城堡将被摧毁。

还有另一个问题尚未解决。
失去了最后一座城堡,玩家便输了。 实际上,由于游戏具有检查和将的规则,因此玩家不能失去所有的锁。 不允许对城堡进行攻击,而只能在城堡都受到攻击的情况下进行。 此外,游戏中的趣味性还可以通过沿途组件(包括对手的材料)创建新的人物(以及城堡)来增加。 所有这些使检查和检查伴侣成为一项非常困难的任务,这是她仍然无法应付的一个示例:


实际上,没有垫子,但是很难。 D1场遭到E2上的大象攻击,这是最后一座城堡。 黄金人可以通过将车从C3踩到C4来建造第二座城堡,但是这个领域也受到了攻击! 诀窍是两个领域都受到同一个人的攻击,她不能一口气吃掉两个锁! Lúcio最近发现了此错误,这是我不久将要解决的问题。

在游戏中没有滚动走道 ,而且,营业额与国际象棋不太相似。 游戏中有很多国王,但他们不能移动(无论如何都不会破坏),并且马和王后是“一次性的”,因为移动时,外环会破坏人物。 在我看来,这款游戏看起来非常有趣,尽管尚未完全开发。 您可以在这里玩:


要在网络上玩,当然,您需要注册(游戏是通过信件进行的)并向某人发送“挑战”。 如果您想玩机器人 (或只是在板上移动棋子 ),则无需注册。 但是,在这种模式下,游戏与GitHub上发布的游戏没有太大区别。 另外,不需要注册即可监视当前或以前玩过的游戏。

作为奖励
Dagaz支持另一种游戏模式:


因此,那些希望的人可以尝试盲目玩(这一次,仅针对机器人)。

营业额的赢/亏尚未保留,但一切都掌握在您的手中。 如果游戏很流行,埃德(Ed)承诺会给它打一个等级。 最后,就该项目的进一步发展进行了一次小型调查:

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


All Articles