2015-05-12 61 views
-3

我在做一个网站。我希望它的一个特点是有一个简单的游戏可以将两个玩家连接在一起。我的问题是我不知道如何制作,所以两个玩家都在同一个“房间”,因为在房间里只有两个玩家。 在我接近的时候,一旦一个玩家加入,他会得到一个“等待下一个玩家”的消息,并等待向数据库发送一个玩家加入的消息。如果下一个玩家加入,我如何让它继续检查下3分钟?PHP如何连接两个玩家

UPDATE

首先这里是迄今为止代码:

<html> 
<title>SiteName (test)</title> 
<head> 
<?php 
$servername = "localhost"; 
$u 

sername = 
$password = 
$dbname = 

try 
{ 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$stmt = $conn->prepare('SELECT * FROM game'); 
$stmt->execute(array('gameID' => $gameID)); 

while($row = $stmt->fetch()) { 
    print_r($row); 
    echo "<br />\n"; 

} 
} 
catch(PDOException $e) 
{ 
    echo $sql . "<br>" . $e->getMessage(); 
} 
?> 
<button onclick="myFunction()" id="w">Look for Game</button><br> 
<a href="https://www.google.com" id="lbl" class="button"></a> 
<script> 
function myFunction() { 
var elem = document.getElementById("w").innerHTML = "Wait"; 
var counter = 10; 
var label= document.getElementById("lbl"); 
var counter = 10; 
var clabel= document.createElement("p"); 
clabel.innerHTML = "You can download the file in 10 seconds."; 
var id; 

label.parentNode.replaceChild(clabel, label); 

id = setInterval(function() { 
    counter--; 
    if(counter < 0) { 
     clabel.parentNode.replaceChild(label, clabel); 
     clearInterval(id); 

    } else { 
     clabel.innerHTML = "You can download the file in " + counter.toString() + " seconds."; 
    } 
}, 1000); 
    } 
</script> 

<?php 
$conn = null; 
?> 
</body> 
</html> 

我试图让这个如果第一个球员加盟,他将等待(我有它10秒这里作为测试),直到其他人加入。我试图这样做的方式是让数据库中的一个字段知道玩家是否在该页面并等待下一个玩家。我读了一些关于长轮询的内容,但不知道如何为我的情况实施它。

任何反馈将是有益的,谢谢

+2

您可能正在寻找一个web套接字。 – Mike

+0

如果你坚持让玩家和房间保持在db,并且只用PHP连接玩家(没有IPC或websockets等),那么你需要一个循环,例如(10次){sleep(1秒)。如果(select_players_in_this_room()== 2){print“ok”; return;}}'一个玩家(又名http请求又名PHP进程)等待另一个玩家。 –

回答

0

首先你会想JavaScript或某些客户端代码来处理这个问题。因为php将在服务器端执行,然后显示给用户。如果你使用JavaScript的Ajax你可以让客户端和服务器端一起工作。

你会想要使用一个while循环,在这个循环中你将设置一个timeout

在while循环中,你可以调用你想要的ajax脚本,直到你得到你想要的结果。我假设你打算让这个轮到玩家轮流转。如果玩家1或玩家2在游戏中,您需要一张设置为“真”的表格。如果两者都转向,那么游戏开始。

希望这有助于逻辑

+0

这就是我要找的。非常感谢! – shintax

2

PHP是不是这样做的最好的语言,但如果你仍然想这样做。

看看使用棘轮(http://socketo.me/),这是一个PHP websocket库。 websocket是全双工的,这意味着服务器和客户端之间的连接保持打开状态。游戏状态和玩家动作可以通过这个来传达。

http://socketo.me/docs/hello-world是一个你可以学习的例子。

+0

现在就去看看,谢谢你的反馈 – shintax