我的游戏的客户端和服务器端验证


Both client-side and server-side validation for my game

我正在制作一款多人游戏,玩家(1至4人)一个接一个地在棋盘上放置道具(每次移动允许放置多个道具)。游戏是基于ajax的。在棋盘上放置物品的规则非常复杂,很多组合都是被禁止的。

我想要实现的是当玩家将道具放置在棋盘上时立即执行移动验证,所以没有延迟。他很快就知道他的动作是否有效。然后,一旦提交了移动,将在服务器端检查相同的规则。这当然是出于安全原因,以处理ajax欺骗。我在请求中发送的只是项目id和字段索引的映射。在服务器上,我检查了大量的东西,包括是否所有这些物品属于现在被允许移动的玩家,如果这些物品可以放在这些特定的领域。

我正在考虑验证字段索引的最佳实践。现在,我有两个完全独立的脚本,一个是JavaScript,一个是PHP。有没有办法让它更灵活,这样如果我决定改变规则,我可以改变双方?我知道我可以做一些映射对象的规则,然后为两边编写解释器,但这些规则太复杂了,无法处理这样的映射。

只是一个想法。

你可以在一个单独的Javascript文件中以一种易于使用的方式编写所有的游戏规则逻辑。既然这可以在客户端运行,那么问题就迎刃而解了。然后使用这个PHP功能从PHP中调用相同的javascript代码并测试移动的有效性。

http://php.net/manual/en/v8js.examples.php

这样一来,你可以编写一次规则,然后在两边运行,而不必重写。


如果你不能做这样的事情,我会让服务器计算每个游戏棋子在每一轮开始时的所有可能的移动,并将它们发送给客户端作为可能的行动。这样,你的客户端没有游戏逻辑,但仍然可以呈现有效的移动,而无需对每个移动进行查询。

这样做还有一个好处,那就是只把规则放在服务器端,而不让别人知道你是如何检查规则的。