如何使用服务器验证国际象棋移动? Winboard 和 Unity 2020.3

How to validate chess moves with a server? Winboard and Unity 2020.3

我正在寻找有关如何使用 winboard 国际象棋引擎实施在线国际象棋移动验证的建议。我正在 Unity 2020.3 中创建移动战棋游戏。现在我有每个玩家可能的移动、城堡权利、检查状态等由 open source C# chess engine 生成。我选择这个引擎是因为它是用 C# 编写的,代码可以直接包含在我的 Unity 项目中。我成功编写了自己的代码,将此国际象棋引擎连接到 3D 对战国际象棋游戏。

游戏的运作方式 (video preview):

  1. 棋子是通过玩家用鼠标点击它来选择的,或者 点击屏幕。
  2. 当前棋盘的可能走法由国际象棋引擎计算。
  3. 我使用可能的着法索引来显示可能的着法亮点。
  4. 当玩家做出这些可能的动作之一时,该动作将应用于国际象棋引擎。
  5. 轮到其他玩家了。

我有一些自定义代码 运行 播放器动画,基于移动的类型(例如,攻击动画 运行s 当一个棋子被捕获时)。我还展示了一些屏幕,可以显示促销时间、玩家检查中或游戏结束的时间。

我想以某种方式在服务器上完成计算可能移动和应用移动的过程。我的目标是防止玩家向棋盘发送非法移动并破坏游戏。

您建议我如何解决这个问题?这是我将这款游戏变成令人愉快的在线体验的最后一件事。我只是缺乏了解如何在线制作这款游戏​​的关键技能。

在服务器上,您将拥有独立版本的国际象棋游戏运行。

玩家(/客户端)将向服务器发送移动(因此是唯一的棋子 ID,以及玩家想要移动的目标方格)。

在服务器端,您需要检查该移动是否确实可行。这可能是通过从该棋子中获取所有可能的移动,并检查是否可以在服务器端计算的 possibleChessPositions 列表中找到 intendedChessPosition。只有这样,您才会真正将作品移动到服务器端。

所有players/clients都将使用服务器作为中间人和权威进行通信。

确切的实现可能会根据您使用的国际象棋引擎的API而改变,但这是基本思想。