Jam*_*ett 8 c# python java chess dataformat
我将编写一个国际象棋服务器和一个或多个国际象棋客户端,我想用编程语言独立的方式描述国际象棋的规则(例如基于游戏状态的允许移动,游戏完成时的规则).这有点棘手,因为一些国际象棋规则(例如King Castling,en passent,基于3次或更多次重复动作绘制)不仅基于棋盘布局而且基于移动历史.
我希望格式为:
但我愿意牺牲其中任何一种来获得合适的解决方案.
我的主要问题是:如何构建如此复杂的算法,从数据格式对这种复杂状态进行操作?
后续问题是:您能否以类似的方式提供类似问题的示例,以此作为起点?
编辑:为了回应清晰的要求 - 考虑我将用Python编写的服务器,一个用C#编写的客户端和另一个用Java编写的客户端.我想避免在每个地方指定规则(例如,允许的棋子移动,检查的情况等).我宁愿以语言独立的方式指定这些规则.
让我们想想。我们用状态和行为来描述对象(位置和片段)。我们需要记录当前状态以及一组不断变化的允许状态更改。
这就是编程。您不需要某种可以用常规编程语言解析的“元语言”。只需使用一种编程语言即可。
从普通语言中的普通类定义开始。让一切发挥作用。那么,这些类定义就是国际象棋的定义。
除了极少数例外,所有编程语言都是
只需选择一种语言,就完成了。由于需要一段时间才能弄清楚其中的细微差别,因此与 Java 或 C# 等静态语言相比,您可能会更喜欢 Python 或 Ruby 这样的动态语言。
如果你想要便携性。选择一种可移植的语言。如果您希望将语言嵌入到“更大”的应用程序中,那么请为您的“更大”应用程序选择语言。
由于最初的需求不完整,第二个小问题是如何让代码与多个客户端一起运行。
没有多种语言的客户。选一个。例如,Java,并坚持下去。
如果您必须拥有多种语言的客户端,那么您需要一种可以嵌入所有三种语言运行时环境的语言。你有两个选择。
嵌入口译员。例如,Python、Tcl 和 JavaScript 是可以从 C 或 C# 程序调用的轻量级解释器。这种方法适用于浏览器,也适合您。Java,通过 JNI 也可以利用这一点。您可以使用 BPEL 规则引擎进行尝试。
生成一个解释器作为单独的子进程。在您的应用程序和生成的解释器之间打开命名管道或套接字或其他东西。您的 Java 和 C# 客户端可以与 Python 子进程通信。您的 Python 服务器可以简单地使用此代码。