简单游戏服务器的代码示例

2024-04-23

我想为游戏中心构建一款 iPhone 游戏,目前正在研究其中的服务器部分。我通过示例学习得最好,但我很难找到任何简单游戏服务器的示例来演示......

  1. 数据如何格式化并发送到服务器以及如何接收
  2. 如何验证正在发送/接收的数据以避免玩家作弊等。
  3. 游戏服务器代码如何与数据库一起构建

我想使用 Ruby on Rails 构建游戏服务器,但我会选择使用任何框架的示例来了解这些概念是如何工作的。有谁知道有任何书籍或在线资源涵盖了这一点或显示了一些有关如何构建游戏服务器的示例代码?

我不得不认为 iPhone 上的大多数多人游戏都需要玩家服务器,但我似乎找不到任何讨论如何构建服务器的资源。我发现讨论构建多人游戏的资源(包括苹果的文档)都说了同样的事情,“开发游戏服务器超出了本书的范围,但我们将重点关注连接到此类服务器所需的客户端代码。”

预先非常感谢您的帮助!

EDIT:


好的,在阅读您的编辑后,我认为 Node.js 应该可以很好地完成这项工作。

关于你的观点:

  1. 我不知道配对到底是如何工作的(猜猜你会得到一对密钥左右来验证请求),但无论使用哪种编程语言,它都应该很难实现。

  2. 简单:设置服务器,处理连接,保存正在运行的游戏列表,为每个游戏跟踪状态(玩家,时间等),最大应该是(取决于您使用的消息协议..) 150 -200行

  3. 当您认为游戏已准备就绪时,只需向给定游戏中的每个玩家发送某种就绪事件(就像每个人都触摸了“我准备好了”按钮左右)

  4. 好的,这里有一些提示:

    1. 跟踪服务器上剩余/已过的时间并将其发送给玩家,计时器很快就关闭了(我在大约 3 分钟内关闭了 4-5 秒)

    2. 为了防止作弊,请验证服务器上的动作,这对于益智游戏来说应该相当容易。您还可以检查每次移动之间的时间,所有低于 50 毫秒的内容都应该是可疑的,但这主要取决于谜题的难度。

  5. 通过检查服务器上的动作,这也很容易,您不必依赖客户端向您发送“看我完成了”消息。

  6. 同样简单,只需发送带有随附数据的事件并将点记录到数据库中。

最重要的一点显然是防止作弊,对于一款电脑就能轻松解出答案的益智游戏来说,想要完全杜绝作弊是不可能的。不过,通过上面的技巧,你可以让它变得更难。

但请记住,当游戏很简单时,你无法阻止人们在高分上作弊,在游戏中构建越来越多的保护是没有意义的。专注于游戏,做到这一点对人类来说有趣且简单 but 对于计算机来说是复杂且不可预测的.

就数据库而言,呃...我想你可以使用 MongoDB,但我还没有在 Node 下使用它。

哦,如果您想了解一下 Node.js 可以做什么,这是我构建的游戏:
http://github.com/BonsaiDen/NodeGame-Shooter http://github.com/BonsaiDen/NodeGame-Shooter

所有逻辑都在服务器上运行,客户端只需绘制他们知道的东西,我在两个晚上内就建立并运行了一个可玩的原型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单游戏服务器的代码示例 的相关文章

随机推荐

  • Flutter 区域设置日期字符串到日期时间

    我想将日期 String 转换为 DateTime 对象 字符串包含土耳其语月份名称 如下所示 我的字符串 来自 API 10 Mart 2021 16 38 我的区域设置 土耳其 tr 我怎样才能转换 感谢您 尝试以下操作 只有 en U
  • 读取 URL 查询参数值 (Vue.js)

    在 vuejs 回调 URL 中 我有一些参数值 我需要读取这个参数值 例如返回url是 http localhost 8080 sucesspage encryteddata abdeshfkkilkalidfel 9a 我努力了this
  • std::vector::insert 的重载解析如何工作

    这是三分之二insert来自 std vector 的方法签名 void insert iterator position size type n const value type val template
  • Python内部结构[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 任何人都可以指导我阅读在线文档或书籍 在那里我可以找到并了解 C 中的 Python 实现 例如 Per
  • Python 变量在不应该改变的时候发生改变

    我正在处理的代码正在更改我的临时变量 但我不知道如何阻止它 本质上 问题是这样的 def example array temp array for i in range whatever change array 我需要更改数组 但保持温度
  • 无法为 Android 源代码创建 Xamarin 组件

    我已经使用了命令 xamarin component exe package C cmp AndroidComponent component 用于创建 Xamarin 组件 在构建示例 android 项目时 它显示以下错误 我已使用命令
  • Gradle 升级 7.2 > 7.3 中断,“此属性的值是最终的,不能进一步更改”(使用 Micronaut 插件?)

    我使用 Micronaut 3 1 3 和 Gradle 7 2 来构建我的项目 After 切换到 Gradle 7 3 内置中断会发出一些上下文无关的错误消息 gradlew clean build Executed by Gradle
  • 为什么这个上下文管理器与字典理解的行为不同?

    我有一个上下文装饰器 完成后会产生副作用 我注意到 如果我使用字典理解 就不会出现副作用 from contextlib import contextmanager import traceback import sys accumulat
  • 在 Woocommerce 产品标题中添加换行符

    假设我的产品标题是 棕色皮鞋 但根据我的列宽 标题如下所示 棕色皮革 Shoes 我知道可以进行角色替换 以便 在后端变成换行符 br 但我不知道怎么办 我希望它看起来像这样 棕色 皮鞋 我找到了这些参考资料 在商店页面上的产品标题上添加一
  • 如何为列表中的每个元素创建一个按钮并将其放在滚动区域中?

    我有一个列表 每次用户打开文件时都会获取一个元素 我需要创建一个带有文件名 列表中的元素 的按钮 每次将该文件附加到列表中时 并将该按钮放入滚动区域 问题是我总是只有一个按钮 只是更改了名称 filenames def addfiles f
  • SASS/SCSS 变量不适用于 CSS 变量赋值

    我有以下 SCSS 代码 mixin foo bar 42 xyzzy bar bar include foo 我希望得到 CSS 变量 xyzzy set to 42 on all bar元素 相反 我得到 CSS 说明bar xyzzy
  • 根据背景将前景色设置为黑色或白色

    比如计算RGB分量的平均值 然后决定使用黑色还是白色 我是否必须在第一步将 RGB 转换为 HSV 因为 RGB 并不总是人眼看到的 我正在使用 C 恰巧我不久前的一个项目需要这个功能 private int PerceivedBright
  • 如何正确访问后台线程中创建的查询结果?

    我想在后台线程中执行数据库查询 OmniThread 库将帮助我处理所有线程问题 但到目前为止我不明白一件事 每个线程都需要一个单独的数据库连接 因此 后台线程创建数据库连接 创建查询 然后执行它 现在我可以使用后台线程的查询对象访问查询结
  • 停止并重新启动 HttpListener?

    我正在开发一个应用程序 它有一个HttpListener 我的目标是让用户根据自己的选择关闭和打开监听器 我将侦听器放入一个新线程中 但在中止该线程时遇到问题 我在某处读到 如果您尝试中止非托管上下文中的线程 那么一旦它重新进入托管上下文T
  • 尝试从客户端发送数据,但 req.session 无法正常工作

    我正在尝试执行发布请求 当我使用邮递员执行此操作时非常成功 但我正在尝试从客户端发送它 我想发布购物车 但结果是我不断发布数量为 1 的商品 无论我发布该请求多少次 解决此问题并以正常方式发布请求的最佳解决方案是什么 我正在使用会话 也许这
  • Mutation Observer不检测通过innerHTML、appendChild添加的节点

    当我们尝试使用appendChild或innerHTML在DOM中添加嵌套节点时 嵌套节点不会出现在突变的addedNodes中 初始 HTML 设置 div div 这是我的突变观察者代码 var observer new Mutatio
  • 回收器查看致命异常:java.lang.ArrayIndexOutOfBoundsException

    我通过 crashlytics 得到了这个堆栈跟踪 我不知道问题出在哪里 有没有 StaggeredGridLayoutManager 的替代方案可以用来获取类似列表视图的布局 Fatal Exception java lang Array
  • 仅正样本和未标记数据集的二元半监督分类

    我的数据由评论组成 保存在文件中 其中很少被标记为正面 我想使用半监督和PU http www cs uic edu liub publications ICDM 03 pdf分类将这些评论分为正面和负面类别 我想知道 python sci
  • Angular 2 可用的 yeoman 生成器 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有官方的 Angular 生成器 许多用户为 Angular 1 提供了生成器 但我还没有找到 Angu
  • 简单游戏服务器的代码示例

    我想为游戏中心构建一款 iPhone 游戏 目前正在研究其中的服务器部分 我通过示例学习得最好 但我很难找到任何简单游戏服务器的示例来演示 数据如何格式化并发送到服务器以及如何接收 如何验证正在发送 接收的数据以避免玩家作弊等 游戏服务器代