【问题标题】:PHP how to connect two playersPHP如何连接两个播放器
【发布时间】:2015-05-12 22:03:08
【问题描述】:

我正在做一个网站。我希望它具有的功能之一是有一个简单的游戏,可以将 2 个玩家连接在一起。我的问题是我不知道怎么做,所以两个玩家都在同一个“房间”里,因为房间里只有 2 个玩家。 在我接近的过程中,一旦有一名玩家加入,他会收到“等待下一个玩家”消息,并在向数据库发送一名玩家已加入的数据库时等待。如果下一个玩家加入,我如何让它继续检查接下来的 3 分钟?

更新

首先是到目前为止的代码:

<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 秒作为测试)直到其他玩家加入。我尝试这样做的方法是在数据库中有一个字段将知道玩家是否在该页面中并等待下一个玩家。我阅读了有关长轮询的内容,但不确定如何针对我的情况实施它。

任何反馈都会有所帮助,谢谢

【问题讨论】:

  • 您可能正在寻找网络套接字。
  • 如果您坚持将播放器和房间保存在数据库中,并且仅在 PHP 中连接播放器(没有 IPC 或 websockets 等),那么您需要像 for (10 times) { sleep(1 second); if (select_players_in_this_room() == 2) {print "ok"; return;} } 这样的循环,其中一个播放器(又名 http request aka php process) 等待另一个玩家。

标签: php html mysql pdo


【解决方案1】:

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

研究使用 Ratchet (http://socketo.me/),这是一个 PHP websocket 库。 websocket 是全双工的,这意味着服务器和客户端之间的连接保持打开状态。然后可以通过它传达游戏状态和玩家行为。

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

【讨论】:

  • 马上去研究,谢谢反馈
【解决方案2】:

首先,您需要 javascript 或一些客户端代码来处理此问题。因为 php 将在服务器端执行,然后显示给用户。如果您将 ajax 与 javascript 一起使用,您可以让客户端和服务器端一起工作。

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

在 while 循环中,您可以调用您想要的 ajax 脚本,直到获得您想要的结果。我假设你计划为玩家制作一个回合制的游戏。如果玩家 1 或玩家 2 在游戏中,您将需要一个将“真”设置为“真”的表格。如果双方都轮到,则游戏开始。

希望这个逻辑有帮助

【讨论】:

    猜你喜欢
    • 2016-02-24
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    相关资源
    最近更新 更多