2014-04-04 48 views
-4

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

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

看到这个代码片段:

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

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

你在说什么_player_? –

+2

单独使用php是不可能的。你将需要一个利用javascript,php和ajax的解决方案。 –

+0

while(!$ turnOver)< - yeurk – Su4p

回答

0

“暂停” PHP是没有意义的。 PHP是服务器端的,你不能在客户端(浏览器)的执行过程中与PHP页面交互。

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

0

在单独使用PHP的情况下,您将无法以当前格式实现此目标,您可能需要使用JS,Ajax等。PHP是一种基于服务器的语言,并且无法暂停等待签名为客户端输入。

但是,如果您将游戏重构为使用更友好的PHP格式,则可以实现您正在查找的结果。例如,当一个新的'游戏'开始时,你将初始化一个游戏实例并在表格上创建一个记录(例如游戏),然后你可以存储玩家(从玩家表格链接?),球员谁是(currentTurn?)和他们的最后一步的日期/时间。使用这些信息和查询,您可以确定是谁转身,并允许用户进行移动。

0

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

游戏可以定期向服务器发送一个AJAX请求,以查看它是否是当前玩家的转向,或者用新数据等刷新屏幕。jQuery对此很流行,但还有其他几个库( MooTools,Prototype等)。

PHP在这方面的作用不需要考虑暂停:它只是回复消息。你必须重新考虑你的游戏逻辑,以便在你想到的循环范围之外处理一个单一的转换。这意味着“游戏状态”需要以某种形式保存,可能在数据库中。

无论每个玩家在玩电脑还是玩家都在互相玩耍,这种方法都适用。计算机记录并反映游戏的状态,如果游戏也在玩,它也具有执行的逻辑角色。

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