跳转到内容

创建你自己的模拟游戏/分解

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

如果你以前从未制作过游戏,或者没有多少编程经验,最好的方法之一就是将事物分解成最基本的组成部分。 我们将从一些非常简单的编程开始制作这款游戏,然后逐步添加功能,直到游戏完成。 它现在看起来并不多,但本教程结束后,你将能够下载一个完全可用的版本,该版本包含一个安装文件,你可以根据 GNU 公共许可证随意修改和编辑。

我要提到的最后一件事是,我将在本教程的所有课程中使用的教学风格。 我非常赞成让人们在得到答案之前先自己尝试一下。 假设你被要求参加历史考试。 如果我直接给你一张答案表,上面所有正确的选项都填好了,你将从考试中一无所获。 这是我坚持的一个理论。在本教程的每一课中,你都会发现我制作的每个文件的两个版本。 一个文件将没有代码。 这样,你可以尝试自己从头开始编写这个游戏。 但是,如果这太令人生畏,别担心。 另一个文件版本将包含所有工作代码。

即使你不是程序员,我也鼓励你尝试对每一课进行编程。 我将介绍完成编程所需的一些基本概念,然后总结我迄今为止所做工作的推理。 课程概念

关于 PHP

[edit | edit source]

PHP 是一种服务器端编程语言。 这意味着你在任何 PHP 文件上编写的任何代码都不会对访问包含 PHP 代码的任何文件的人可见。 这样做的优势是,你无需担心有人窃取你编写的任何代码。 当有人查看 PHP 页面时,他们看到的只是你用 PHP 生成的 HTML 或文本,或者你自己在页面上键入的文本。

PHP 文件具有 .php 扩展名。 我接触过许多人认为这意味着 PHP 文件不能显示 HTML 或 Javascript。 这是错误的。 .php 扩展名是服务器知道需要在请求页面的人看到页面之前评估文件上的任何 PHP 代码的方式。

PHP 最大的缺点是它是一种服务器端编程语言。 这意味着每当你想要更改用户在页面上看到的内容时,他们要么必须刷新页面,要么导航到新页面。 在你看到更改立即应用的网站(例如 Google 邮件、WordPress)中,它们使用一种称为 AJAX 的技术。 AJAX 是服务器和用户浏览器之间的一种异步中继。 这意味着他们无需刷新页面即可查看更改。 如果你对这类东西感兴趣,那么本教程仍然适合你。 PHP 通常与 AJAX 结合使用以创建更动态的网页。 但是,在本教程中,我不会介绍任何 AJAX,因此完成此游戏后,你需要找到一些 AJAX 教程。

输出到屏幕

[edit | edit source]

所有 PHP 代码都由一个开始和结束 PHP 标签分隔,如下所示

<?php
echo “Hello World!!”;
print “Hey there!”;
echo “<b>WOW!!</b>”;
print “This is sooooo neat…”;
?>

PHP 的开始和结束标签类似于匹配的 HTML 标签。 如果你没有任何 HTML 经验,我强烈建议你在继续学习本课程之前,先学习 lissaexplains.com 上的一些教程。

如果你没有正确的开始和结束标签,这将是人们可以在屏幕上看到你的 PHP 代码的原因之一。 没有 PHP 标签,服务器就无法知道你键入的内容需要以 PHP 方式进行评估。

在上面的代码中,你还会看到 print 和 echo 语句。 使用哪一个实际上并不重要,但这是你将内容输出到屏幕的方式。 注意第三个 print 语句中的引号中包含 HTML。 在 PHP 中使用 HTML 没有任何问题,事实上,这是 PHP 的一大优点。

需要注意的几个语法事项

1. 你始终需要匹配的开始和结束 <?php ?> 标签。

2. PHP 语句始终以分号  ; 结尾

3. 当你使用 echo 将内容输出到屏幕时,它应该位于单引号或双引号内

4. 如果你需要在 print 语句中使用引号,则需要使用反斜杠对其进行转义,如下所示

<?php
echo “And he said \”Hi Mom, how are you today?\”";
?>

反斜杠告诉 PHP 将引号评估为文本,而不是字符串的结束。

5. 除非你查看页面,否则你不会在 PHP 中看到错误。 这是因为 PHP 仅在运行时进行评估。 有时这会让人非常沮丧,你可能以前见过错误代码。 如果你收到错误消息,请阅读它,因为它通常会告诉你代码中出错的地方。

常见的 PHP 错误 & 解决方法

[edit | edit source]

解析错误:语法错误,在 [文件位置] 的第 [#] 行意外出现 T_STRING

这意味着你忘记了某个地方的 ” 或 ‘。 字符串的开头和结尾应该始终存在。 如果你有一对匹配的引号,请确保没有多余的引号。 如果你在字符串中使用引号,则需要使用反斜杠对其进行转义,如下所示: \” 或 \’

解析错误:语法错误,在 [文件位置] 的第 [#] 行意外出现 ‘}’

这意味着你有一些多行语句,并且你忘记了大括号,或者大括号太多。 大括号总是成对出现。 有时这意味着你错过了前一个语句末尾的分号。

解析错误:语法错误,在 [文件位置] 的第 [#] 行意外出现 ‘”’

这意味着你可能忘记了双引号前面或后面的括号。 有时也可能意味着你忘记了转义双引号。

解析错误:语法错误,在 [文件位置] 的第 [#] 行意外出现 “‘”

这意味着你可能忘记了单引号前面或后面的括号。 有时也可能意味着你忘记了转义单引号。

解析错误:语法错误,在 [文件位置] 的第 [#] 行意外出现 ‘;’

这意味着你缺少语句末尾分号之前的某个内容。 通常是关闭的括号。 但是,也可能意味着你在 PHP 不希望出现分号的位置使用了分号。 这通常发生在循环中。

解析错误:语法错误,在 [文件位置] 的第 [#] 行意外出现 T_EXIT

这意味着你在 exit; 调用之前忘记了分号

解析错误:语法错误,在 [文件位置] 的第 [#] 行意外出现 $end

这通常意味着你忘记了分号,或者你的函数没有按预期返回值。

变量

[edit | edit source]

在 PHP 中,变量由 $ 美元符号定义。 这意味着任何带有美元符号的单词通常都会被评估为某种其他内容。 理解变量的最简单方法是将其视为一个罐子。 你可以在罐子里放东西,也可以从罐子里拿东西。 你可以在罐子上贴上标签,但随后又决定要更改标签。 变量的工作方式也是如此。

<?php

//this is a comment, comments are for you
//they aren’t processed as code
//get into the habit of leaving comments for yourself so if you come back later
//you can remember what you did or what you were trying to do

$myvariable = “Hello”;
$mysecond = ” World!”;

echo $myvariable;
echo $mysecond;

print “<br>”;

echo “$myvariable $mysecond<br>”;

$myvariable = 2;

echo $myvariable;
?>

在这个示例中,我有两个变量。 你可以使用等号为它们赋值。 PHP 中的变量是动态的。 这意味着你可以将它们分配给一种类型(字符串),然后重新分配[检查拼写]给另一种类型(整数),而无需进行任何转换。 如果这让你感到困惑,别担心。 你真正需要知道的是分配变量的语法。

If-Else 语句

[edit | edit source]

游戏都是关于决策的,这也是编程语言的优势。 为了使游戏中的任何内容都能正常工作,我们必须将其设置成按照我在第一课中简要概述的规则和逻辑进行操作。 为此,我们需要根据玩游戏的用户的选择做出不同的响应。

<?php

if ($_POST['button']) //someone clicked a button
{

echo “You pressed a button!”;
}
else
{
echo “You haven’t pressed a button yet. Go ahead, try it!”;
}

?>
<form action=”#” method=”post”>
<input type=”submit” name=”button” value=”Press Me!”>
</form>

在这个示例中,你看到一个 .php 文件,它包含一段 PHP 代码,然后在下面包含一些常规 HTML。 需要注意的是 if-else 部分。 在这里,我们根据用户是否点击了按钮向其显示不同的消息。 如果按下了按钮,则 if 部分的大括号 { } 之间的代码将执行。 否则,else 大括号之间的代码将执行。 我相信你已经看到了 PHP 在此示例中的强大之处。 如果你需要更多有关 if-else 语句的帮助,以及 if-else 语句的更多示例,请阅读我的教程: [教程链接]。 这将更深入地介绍一些 PHP 编程概念,并提供更多示例。

表单基础

[编辑 | 编辑源代码]

表单是获取用户在服务器和 PHP 之间来回操作信息的一种方式。所有表单都必须具有开始和结束 <form></form> 标签。为了将表单中的任何信息提交到服务器,您必须有一个提交按钮。如果没有提交按钮,您将无法告诉页面用户试图发送有关其操作的数据。您可以在上面的示例中看到一个小的表单。它同时具有开始和结束表单标签,以及一个按钮。如果这看起来不熟悉,那么您应该回到 lissaexplains.com 并在您的 HTML 技能方面进行一些弥补!

$_GET 和 $_POST 变量

[编辑 | 编辑源代码]

为了从表单中获取数据,PHP 为我们存储了两个特殊的变量。这些变量根据表单中使用的 METHOD 类型获取数据。如果您查看上面的示例,我们会使用 POST 方法。这意味着我们表单的所有名称和值都将发送到服务器并存储在 $_POST 变量中。这样,我们就可以从这些变量中提取信息,以查看用户是否点击了某个按钮或链接。在上面的示例中,我们正在检查是否有人点击了我们命名的名为 button 的提交按钮(为通用名称欢呼!)。如果我们将提交按钮命名为 BOB 并且没有更改 if 语句以检查 $_POST['BOB'],那么我们永远不会看到告诉我们我们按下了按钮的字样。就 PHP 而言,我们不再有一个名为 button 的提交按钮,因此它永远不会被按下。

就是这样。我简要概述了(如果您觉得不够简要——或者太简要了,我表示抱歉!)教程文件第一部分中的所有主要概念,您可以从下方下载这些文件。再说一次,如果您乐于挑战,请尝试自己编程这个文件,方法是打开 character2.php 文件。在页面顶部,它将概述我在本课程中针对这个特定文件想要完成的所有事情。如果您只是想查看一些工作代码,请下载 character.php 并直接进入下一课。

游戏文件(点击查看)

[编辑 | 编辑源代码]

character.php

character.php(无源代码)

您需要从这些文件之一中复制/粘贴源代码并为其添加 .php 扩展名,才能使教程的最后一部分有意义。所有这些文件都可以以 .txt 文件的形式查看,因此您可以看到它们内部的 PHP 代码。如果它们是 .php 文件,那么您将永远无法看到 .php 代码。您还记得为什么吗?

课程推理

[编辑 | 编辑源代码]

我们要制作的游戏背后的很多逻辑都与角色在游戏世界中的移动有关。请记住,成员和角色之间存在区别。成员是最终登录并玩这个游戏的人,而角色是成员用来在游戏中导航的东西。每个成员可以拥有多个角色。

Character.php 是从一个角色的角度出发的。每个角色都将面临可以移动的方向选择——左、右、前或后。每次角色移动时,我们都需要评估移动并根据他们移动到的新位置采取一些行动。

虽然此文件只检查一个方向并将“宝藏”放置在一个特定位置,但这朝着正确的方向迈进了一步。通过此文件,我们知道选择了哪个方向,我们可以将该方向与他们移动到的新位置进行比较,并且可以打印屏幕上的消息,指示角色根据是否找到宝藏而获胜或失败。

准备好阅读下一章了吗?

华夏公益教科书