gpt4 book ai didi

language-agnostic - 如何设计基于计时器的网页游戏(如 Cafe World)

转载 作者:行者123 更新时间:2023-12-05 08:24:33 24 4
gpt4 key购买 nike

我需要设计和实现一个基于计时器的游戏(客户端上的 Flash,服务器上的 PHP),例如 Cafe World,即用户点击一个按钮,等待几秒钟,发生一些事情,然后他可以再次点击。这将是食品生产线的模拟。

将有 N 个生产线元素,每个元素都有一个不同持续时间的独立计时器,每个元素最多可以提示 M 个操作(第一个立即开始,下一个在前一个完成时开始,依此类推)。

如何使用数据库后端实现服务器端的那种功能?目前我正在考虑一个提示计数器,当前事件操作的“剩余时间”指示和上次更新时间。当请求操作时,我会使用自上次更新以来耗时来更新“剩余时间”和提示计数器。有什么想法、评论或更好的想法吗?

最佳答案获得赏金。

最佳答案

在阅读了您的问题、其他答案和讨论之后,我想我终于掌握了您的问题(因此有了一个新答案)。

首先,您需要跟踪最终用户的 session 。游戏开始时,您必须启动一个新的 PHP session 并将某种 session 标识符发送到 Flash 游戏。每当 Flash 游戏对服务器执行 ping 操作时,它都会传递 session 标识符,以便 PHP 知道它正在使用哪个游戏实例。

PHP 服务器本身将是一个被动实体——Flash 客户端将进行数据的推送和拉取。假设用户对事件 X、Y 和 Z 进行排队,每个事件都需要 20 秒......一旦用户尝试对每个事件进行排队,Flash 客户端就会通知服务器,服务器要么将其记录在队列中,或由于验证而返回错误(即队列中的事件太多)。

此外,客户端会每隔几秒轮询一次服务器以检查事件的状态。每次客户端注册一个新事件或轮询状态时,服务器将检查队列中的时间戳并将事件标记为已完成/等等,然后向客户端发送响应。这比试图在后台运行一个试图每秒实时更新数据库的脚本要干净得多,也实用得多。唯一的缺点是,如果由于某种原因断开连接,则在客户端重新连接之前不会处理特定 session 的事件。但是无论连接之间的时间长短,用户仍然会认为服务器是实时更新的,因为数据总是在发送回客户端之前刷新。

如果您有任何特定于实现的问题,请随时发布您的数据库架构和/或您的服务器代码。

更新:为了回应 Pie 的评论,基本上有三种方法可以将事件标记为已完成... 1.) 当客户端连接到服务器时,在数据库中将已完成的事件标记为已完成请求,或 2.) 使用后台进程自动将事件标记为已完成,或 3.) 两者的组合。

如果您遵循选项一并在每次客户端连接时检查您的事件时间戳并标记已完成的事件,那么您的数据库将在满足客户端请求时完全保持最新状态。如果您遵循选项二,一个在 cron 上精确运行的 PHP 脚本可以确保数据库是最新的,即使客户端消失了,确保您的数据通常不到一分钟是新鲜的——无论客户端是否存在还是不是。

无论您将如何使用数据(高分表等),将这两种技术结合起来可能是最好的主意。新鲜数据永远是一个加分项,并且来自 cron 脚本的定期增量刷新永远不会伤害任何人。

就将事件标记为已完成而言,您只需要检查事件的相对开始时间+事件持续时间与当前时间。在队列中,事件的开始时间定义为添加到队列中第一项的开始时间戳的所有先前未完成排队事件的持续时间和冷却时间。

关于language-agnostic - 如何设计基于计时器的网页游戏(如 Cafe World),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1764453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com