3

我一直在制作基于在线的 connect4 游戏,在大多数情况下,它运行良好。

唯一的问题是,当移动时,游戏会调用一个 PHP 脚本,该脚本将用于会话的数据写入一个公开可见的文本文件,然后由其他玩家(使用 jQuery)读取,并且其计算机更新并相应地呈现它。

但是,我觉得这是实现这一目标的一种非常糟糕的方式。我曾考虑过使用套接字,但由于计算机上没有运行监听传入数据包的守护程序,并且端口没有在玩家计算机上转发,我不确定如何使用套接字来实现这种效果。

4

2 回答 2

1

通常你使用带有 PHP 的 mySQL 数据库而不是文件。它允许您像这样编写游戏状态,但更好的是使用像 PDO 这样的数据库层:

$gamestate_serialized= mysql_real_escape_string(serialize($gamestate_array));
$gameID= intval($gameID);
$query= "insert into gamestate (gameID, state) values ($gameID,'$gamestate_serialized')";
$handle= mysql_query($query);
if(!$handle) print mysql_error();

并像这样阅读:

$gameID= intval($gameID);
$query= "select state from gamestate where gameID=$gameID"; 
$handle= mysql_query($query);
if(!$handle) print mysql_error();
$row = mysql_fetch_assoc($handle);
$state_array= unserialize($row['state']);
于 2012-10-09T07:54:57.590 回答
1

很少有网络游戏直接连接玩家。在几乎所有在线游戏中,所有数据交换都通过中央服务器进行。这对防止作弊很重要。只要中立的服务器管理游戏状态,任何客户端都无法操纵它来发挥自己的优势。

为了节省带宽,每一步都读取整个游戏状态并不是一个好方法。最好只告知客户另一位玩家做出的一个动作,因为所有其他信息都是多余的。

Javascript Websockets 是向其他玩家推送更新的最佳选择。不幸的是,并非所有浏览器都支持它(Internet Explorer 不太可能在 Windows 7 之前的任何操作系统上支持它)。AJAX 是一个较差但更广泛支持的选项。

于 2012-10-09T08:00:47.310 回答