跳转到内容

创建您自己的模拟游戏/混合事物

来自 Wikibooks,开放世界中的开放书籍

在上一课中,我们介绍了如何制作表单,检查按钮是否被按下,以及根据用户是否找到宝藏来显示消息。现在是时候将我们非常简单的导航页面提升到一个新的水平:随机的宝藏位置。

在我们最终的游戏中,宝藏的位置将由数据库中的数据预先确定。但是,当用户在游戏中四处移动角色时,我们不会知道宝藏位于哪个位置,因为这些信息将在他们玩游戏时加载。

在下一课中,我们将应用一个更高级的概念来确定宝藏是否位于正确的位置。我们不会总是知道宝藏在哪里,而是每次加载页面时让宝藏随机开始在一个方向。这样,我们每次都必须检查宝藏在哪里,以及玩家是否会掉进坑里。课程概念

在编程中,函数是将更大的任务分解成更小、更易于管理的片段,或者减少重复编写相同代码片段的需要的好方法。在 PHP 中,函数的语法非常简单

<?php

function myfunction ($parameter1, $parameter2)

{

echo $parameter1 . ” ” . $parameter2;
}

?>

这是一个非常简单的名为 myfunction 的函数。它接受两个参数,并在您调用它时简单地将它们回显到屏幕上。您在 echo 语句中看到的句点是将两个变量连接在一起并在它们之间添加空格的一种方法。

调用函数与创建函数一样容易。在您想要 myfunction 在屏幕上打印任何内容的地方,您所要做的就是

<?php

echo “Hey there, here is what myfunction has to say: “;

myfunction(“Hello”, “World!”);

?>

如果您运行此代码,您将看到:嘿,这就是 myfunction 要说的:Hello World!函数不仅可以打印到屏幕上,还可以返回值,然后您可以将这些值存储到变量中。让我们来看看这个函数

<?php

function Mod5 ($number)

{

return $number % 5;
}

?>

此函数接受您提供的任何数字,并对其取模 5。如果您不熟悉模运算符,您只需要知道它返回除法的余数,而不是将 $number 除以 5 所得的数字。

现在让我们看看如何使用返回一个值而不是在屏幕上打印它的函数

<?php

//declare our function
function Mod5 ($number)

{
return $number % 5;
}

if ($_POST['number']) //they’ve entered a number
{

echo “Your number is: ” . $_POST['number'] . “<br/>”;

$number = myfunction($_POST['number']); //we store the modulous of what they entered back into the number variable

echo “Your number % 5 is: $number”;
}
else //show them a form to enter a number

{
?>

<form action=”#” method=”post”>

Please Enter a Number: <input type=”text” name=”number”><br/>

<center><input type=”submit” name=”submit” value=”submit” /></center>
</form>
<?php
} //don’t forget to close our ELSE statement
?>

在这个例子中,我们获取用户输入到文本框中的数字,然后将数字连同该数字除以 5 的余数一起显示给他们。

PHP 的一大优点是它附带了大量您可以用来编程的预定义函数。您可以通过访问 php.net 查看所有函数。我想要在本课中重点介绍的一个函数是 random 函数。

正如您可能猜到的那样,您并不总是需要了解函数内部的所有细节,只要它始终为您提供您期望的结果即可。random 函数也是如此。我可以详细说明它是如何获取您计算机上的当前时间并对其进行大量数学运算的,但这太无聊了!

简而言之,rand 函数接受 2 个参数。第一个参数是您希望它在运行时生成的最低数字。第二个数字是您希望它在运行时生成的最高数字。因此,如果您想要一个介于 1 和 4 之间的随机数(包括 1 和 4),则可以这样做

<?php

echo “My random number is: “ . rand(1, 4);

?>

查看包含此 php 代码的页面。现在刷新页面。您会注意到数字不断变化。

您还需要了解的另一个函数是 unset() 函数。此函数非常棒,您可以将一个变量或一个对象传递给它(别担心,我们稍后会讲到),它会将该函数的值设置为 null。想象一下,拿着一罐饼干,打开盖子,把所有饼干都倒在地上。这本质上就是 unset() 函数所做的。

恭喜,您现在知道 rand 和 unset 函数是如何工作的了。您在本课中需要这两个函数!

现在,我们遇到的一个最大问题是如何跟踪用户的过去响应。或者如何从一个页面到另一个页面跟踪有关用户的任何信息。这就是会话的用武之地。会话是跟踪用户从一个页面到另一个页面时的信息的一种方法。最终,我们将使用数据库中的信息来跟踪用户使用他们的角色进行的大量移动,但我们仍然需要知道用户从一个页面到另一个页面时的身份。现在,我们将使用会话来跟踪用户选择的路线。现在,我们不会再让用户在他们掉入坑后继续选择路线,而是会给他们一个游戏结束的消息,直到他们决定重置游戏并重新尝试。

会话非常易于使用。它们的工作原理几乎与您可以用来访问有关用户在页面上输入的内容的信息的 $_POST 和 $_GET 变量完全相同。但是,有一些主要区别

 1. You can set the values of the $_SESSION variable
 2. Session variables remain with the user until you tell them to expire, they don’t change page by page.
 3. Session variables can be set to expire so they don’t last forever, or you can set them so they never expire and DO last forever.

现在使用会话可以使您在编程变得更加复杂之前熟悉它们。

如果您以前使用过任何 cookie,那么会话对您来说将是小菜一碟。会话是 cookie 的一个不错的替代方案,因为如果浏览器禁用了 cookie 功能,您仍然可以从一个页面到另一个页面跟踪有关用户的信息。如果您对此一无所知,别担心,它对于本课来说不是必需的。

关于会话,有一点您必须牢记。为了使用会话,您必须在每个 php 页面的顶部调用一个特殊函数,并在您进行任何类型的输出之前调用它!!这一点很重要。如果您尝试在调用 session_start() 函数之前输出任何内容,您将收到错误。

现在让我们设置一个简单的会话。创建两个页面,一个名为 welcome.php,另一个名为 main.php。welcome.php 是您可能看到的一个欢迎您并询问您姓名的网页的示例。main.php 是您在访问了 welcome.php 页面后可能看到的页面的示例。

在 welcome.php 中,我们有以下内容

<?php
session_start(); //the first thing we do is start our sessions

if ($_POST['name']) //they entered their name in the form
{
$_SESSION['name'] = $_POST['name'];

//now we’re going automatically to redirect them our next page
//using a function called header() that’s built into PHP
header(“Location: main.php”);
exit;
}

?>
<form action=”#” method=”post”>

Enter your name for our first session variable! <input type=”text” name=”name” />
<center><input type=”submit” name=”submit” value=”All Done!”></center>
</form>

现在,在 main.php 中,我们将放置以下内容

<?php
session_start(); //we have to start our session again to get the data we saved before

echo “Welcome to the main menu “ . $_SESSION['name'] . “!”;
?>

在 main.php 文件中,我们提取存储在 name 会话变量中的信息,并将其回显到屏幕上。很不错!现在我们知道,无论用户从现在开始访问哪个页面,只要我们调用 session_start(),我们就能从 $_SESSION['name'] 变量中访问他们的姓名。

恭喜!您现在应该理解会话的基本概念了。

在本课中,我们学习了如何创建自己的函数,并讨论了 PHP 如何拥有我们自己的预定义函数,这些函数可以让我们轻松地完成工作。我讨论了如何制作一个在屏幕上打印内容的函数,以及如何制作一个返回值的函数。返回一个值的函数也可以打印到屏幕上,但您必须在函数调用之前加上一个 echo 来执行此操作。

接下来,我们讨论了会话。会话是用户在您的网站上从一个页面移动到另一个页面时存储数据的一种方法。如果没有会话,我们无法区分谁是谁,因为最终会有很多人加载此游戏并尝试玩它。现在,我们将使用会话来跟踪游戏是否结束,但最终我们只使用会话来跟踪用户在玩游戏时的身份。

游戏文件

[编辑 | 编辑源代码]

character.php

character2.php(无源代码)

注意:这些是文本文件,因此您可以复制/粘贴所有源代码。课程推理

在本课中,character.php 现在让宝藏从一个随机位置开始。如果用户选择了错误的位置,他们会收到游戏结束的消息,而无法再次选择路线。为了再次玩游戏,用户必须点击重置按钮来重新开始游戏。我介绍了函数、会话和更抽象的检查。

一旦我们开始从数据库中提取信息,我们除了他们的 x、y、z 坐标和他们所在的地图外,在运行时不会知道任何关于角色当前位置的信息。每次角色尝试移动到某个地方时,都必须测试有关该位置的项目的相关信息。通过在随机位置引入宝藏,我们开始习惯在选择特定方向时检查有关我们位置的信息。

下一章

[编辑 | 编辑源代码]

阅读下一章

华夏公益教科书