个PHP游戏编程脚本代码.docx
文本预览下载声明
清单 1.简单的掷骰器 许多游戏和游戏系统都需要骰子。让我们先从简单的部分入手:掷一个六面骰子。实际上,滚动一个六面骰子就是从 1 到 6 之间选择一个随机数字。在 PHP 中,这十分简单:echo rand(1,6);。 在许多情况下,这基本上很简单。但是在处理机率游戏时,我们需要一些更好的实现。PHP 提供了更好的随机数字生成器:mt_rand()。在不深入研究两者差别的情况下,可以认为 mt_rand 是一个更快、更好的随机数字生成器:echo mt_rand(1,6);。如果把该随机数字生成器放入函数中,则效果会更好。 清单 1. 使用 mt_rand() 随机数字生成器函数function roll () { returnmt_rand(1,6); } echo roll(); 然后可以把需要滚动的骰子类型作为参数传递给函数。 清单 2. 将骰子类型作为参数传递function roll ($sides) { returnmt_rand(1,$sides); } echo roll(6); // roll a six-sided die echo roll(10); // roll a ten-sided die echo roll(20); // roll a twenty-sided die 从这里开始,我们可以继续根据需要一次滚动多个骰子,返回结果数组;也可以一次性滚动多个不同类型的骰子。但是大多数任务都可以使用这个简单的脚本。 随机名称生成器 如果正在运行游戏、编写故事或者一次性创建大批字符,有时会疲于应付不断出现的新名字。让我们看一看可用于解决此问题的一个简单随机名称生成器。首先,让我们创建两个简单数组一个用于名字,一个用于姓氏。 清单 3. 名字和姓氏的两个简单数组$male = array( William, Henry, Filbert, John, Pat, ); $last = array( Smith, Jones, Winkler, Cooper, Cline, ); 然后就可以从每个数组中选择一个随机元素:echo $male[array_rand($male)] . . $last[array_rand($last)];。要一次性提取多个名称,只需混合数组并根据需要提取。 清单 4. 混合名称数组shuffle($male); shuffle($last); for ($i = 0; $i = 3; $i++) { echo$male[$i] . . $last[$i]; } 基于此基本概念,我们可以创建保存名字和姓氏的文本文件。如果在文本文件的每一行中存放一个名字,则可以轻松地用换行符分隔文件内容以构建源代码数组。 清单 5. 创建名称的文本文件$male = explode(\n, file_get_contents(names.female.txt)); $last = explode(\n, file_get_contents(names.last.txt)); 构建或查找一些好的名字文件(代码归档中附带了一些文件),此后我们绝不再需要为名字烦恼。 场景生成器 利用构建名字生成器使用的相同基本原理,我们可以构建场景生成器。此生成器不但在角色扮演游戏中十分有用,而且在需要用到伪随机环境集合(可用于角色扮演、即兴创作、写作等情况)的情况下也十分有用。我最喜欢的游戏之一,Paranoia 在其 GM Pack 中包括了任务混合器(mission blender)。任务混合器可用于在快速滚动骰子时整合完整任务。让我们整合自己的场景生成器。 考虑以下场景:您醒来后发现自己迷失于丛林中。您知道自己必须赶去纽约,但是不知道原因。您可以听到附近的狗叫声及清晰的敌方搜寻者的声音。您浑身发冷、不住颤抖,而且没有武器。该场景中的每一句话都介绍场景的特定方面:您醒来后发现自己迷失于丛林中这句话将建立设置。您知道自己必须赶去纽约这句话将描述目标。您可以听到狗叫声这句话将介绍敌人。您浑身发冷、不住颤抖,而且没有武器这句话将添加复杂度。 就像创建名字和姓氏的文本文件一样,首先分别创建设置、目标、敌人和复杂度的文本文件。代码归档中附带了样例文件。在拥有这些文件后,生成场景的代码与生成名称的代码基本相同。 清单 6. 生成场景$settings = explode(\n, file_get_contents(scenario.settings.txt)); $objectives = explode(\n, file_get_contents(scenario.objectives.txt)); $anta
显示全部