[因为我的问题以前太长了,我重新制定它]
问题是关于编写一个管道来评估/应用国际象棋移动并从给定的位置和标志产生移动。
INTRO:
在我的拳击中,我将GameState存储如下:
GameState ::= [aggregate]
+ position (Map ref to chessman)
+ flags (object ket/values)
+ box (where to store captured chessmen)
+ move (which move produced this GameState, null at initialization time)
位置Map :: ref - >西洋棋棋子,我能够计算一个raycaster',一个数据结构tp存储西洋棋棋子发出的光线,并计算它们之间的交互(触摸)。当放置在棋盘上的西洋棋棋子混淆其他西洋棋棋子产生的光线路径时,触摸可以是光线和阴影的交叉点。
(Raycaster已编码且工作正常)
规则管道:
规则在separrate类中显示(每个规则一个),例如:PawnSimpleMove,PawnFirstMove,PawnCapture,DeltaMove(普通西洋棋棋子,不是典当),Check,endGame等。
RuleSet对象存储规则(数组)的管道并按顺序调用它们
每个规则都有"评估"方法,具有以下行为:每条规则都要生成"生成"可以产生一系列动作的方法,用于评估"评估"整个管道
更进一步,"评估"在EndGame规则中,需要回忆起"生成"管道知道可能的游戏持续时间(如果不是结束游戏将END_GAME标志设置为true)
当验证整个管道(几乎是一个真正的规则结果)时,接受候选移动,并且可以在历史中插入新的GameState {board,flags,move,box}
问题:
我认为RuleSet中的管道必须携带上下文并将其从规则传递到另一个规则;
==>如何构造RuleSet类及其管道?
代码示例(在cosntruction下)位于:https://github.com/hefeust/colorchess-v2
有什么建议吗?
编辑:每个阶段都有一套方法a)评估和b)生成哪些是连续调用的。所以我在各个阶段都有一个背景......
不要担心原始性能我正在研究一种指标来建立AI评估/生成函数的界限,...做空伪动作,我可以获得两个虚拟情况,一个是最好的选择,第二个是最差的选择。// call serially methodA, methodB and methodC
class Stage {
constructor() {
}
// pieline methods
methodA(context) {}
methodB(context) {}
methodC(context) {}
}
构建国际象棋规则管道是为了简化,易于理解,并避免类似意大利面条的数据和代码。