PHP循环在每次迭代时停止

时间:2014-04-04 14:55:32

标签: php loops

我们有一个用PHP编写的游戏,我们需要它来遍历每个玩家并允许他们移动。我们遇到的问题是PHP会在页面加载时循环遍历forwhile循环,而不是让每个玩家轮到他们。

实际上现在它处于一个无限循环中,因为它永远不会评估为true,因为它不会让它们轮到它们。它应该停止并让每个玩家moveHere()activePlayer为每个玩家启用游戏板,一旦moveHere正确执行,它会将$turnOver设置为true。但是,循环永远不会暂停并无限循环。

请参阅以下代码段:

for ($i=1; $i<=$characterCount; $i++)
{
    activatePlayer($i);

    while (!$turnOver){
        moveHere();
    }
}

3 个答案:

答案 0 :(得分:0)

“暂停”PHP毫无意义。 PHP是服务器端,您无法在客户端(浏览器)执行过程中与PHP页面进行交互。

您应该考虑阅读有关JavaScript和AJAX(以及客户端/服务器通信)的一些documentation

答案 1 :(得分:0)

在单独使用PHP时,您无法以当前格式实现此目的,您可能需要使用JS,Ajax等.PHP是基于服务器的语言,并且无法暂停等待客户端输入。

但是,如果您重新构建游戏以使用更友好的PHP格式,则可以获得所需的结果。

例如,当一个新的游戏&#39;开始你将初始化游戏的实例并在桌面上创建一个记录(例如游戏),然后你可以存储玩家(从玩家桌面链接?),转向它的玩家(currentTurn?)和他们最后一次搬家的日期/时间。使用此信息和查询,您可以确定是谁,并允许用户进行移动。

答案 2 :(得分:0)

考虑使用一些简单的JavaScript,从浏览器的角度设计游戏。

游戏可以定期向服务器发送AJAX请求以查看它是否是当前播放器,或者用新数据刷新屏幕等.jQuery很受欢迎,但有几个其他库(MooTools,Prototype等)。

PHP在这方面的作用则不需要考虑暂停:它只是回复消息。您必须重新考虑您的游戏逻辑,以便可以在您想到的循环上下文之外处理一个回合。这意味着游戏状态&#34;需要以某种形式保存,可能在数据库中保存。

无论每个玩家是在玩电脑还是玩家互相对抗,这种方法都适用。计算机记录并反映游戏的状态,如果它也在播放,它也有逻辑作用。

这种设计并非完全无足轻重,即使它只是一个简单的游戏 - 它确实需要思考的转换,从基于标准循环的编程到基于事件的范例。一旦掌握了这一点,就可以切换到使用套接字。这些是长时间运行的连接,比AJAX操作更快,但它们需要一个特殊的服务器(例如Node.js)。