PHP编写的25个游戏脚本

上传人:飞*** 文档编号:40337580 上传时间:2018-05-25 格式:DOC 页数:9 大小:59.50KB
返回 下载 相关 举报
PHP编写的25个游戏脚本_第1页
第1页 / 共9页
PHP编写的25个游戏脚本_第2页
第2页 / 共9页
PHP编写的25个游戏脚本_第3页
第3页 / 共9页
PHP编写的25个游戏脚本_第4页
第4页 / 共9页
PHP编写的25个游戏脚本_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《PHP编写的25个游戏脚本》由会员分享,可在线阅读,更多相关《PHP编写的25个游戏脚本(9页珍藏版)》请在金锄头文库上搜索。

1、PHP 编写的 25 个游戏脚本 脚本, PHP, 游戏, 编写脚本, PHP, 游戏, 编写 PHP 是一种易于使用、易于学习且可以广泛获取的编程语言。它非常适合开发在各种游戏 中可以使用的简单脚本。无论是一个人玩简单的使用纸和笔的游戏,还是同一群人玩复杂 的桌面角色扮演游戏,或者任意类型的联机游戏,本系列都提供了适合您的内容。 “用 PHP 可以编写的 30 个游戏脚本”系列中的每篇文章都将分别用不到 300 词的文字介绍 10 个脚本(3d10 表示 “掷三个 10 面的骰子” ) ,这些介绍性文字甚至对于开发新手来说 都十分简单,而且对于经验丰富的游戏玩家来说也十分有用。本系列的目的在

2、于为您提供 可以修改的内容来满足自身的需求,以便您可以在下一次游戏交流会上通过展示您的笔记 本来给朋友和玩家们留下深刻印象。 开始之前 作为一名游戏专家/设计者和开发人员,我经常发现自己在运行、规划和玩游戏时,很少编 写有用的实用程序和脚本。有时我需要快速想出创意。其他时候,我只需要编出一大堆非 玩家角色(Non-PlayerCharacter,NPC)的名称。偶尔,我还需要处理数字、处理一些异常 或者将一些文字游戏集成到游戏中。只需事先完成一点脚本工作,就可以更好地管理这些 任务。 本文将探究在各种游戏中可以使用的 10 个基本脚本。代码压缩包包含所讨论的每个脚本 的完整源代码,并且可以在

3、chaoticneutral 查看脚本实际运行情况。 我们将快速地介绍这些脚本。有关如何查找主机或设置服务器的内容将不做介绍。有很多 Web 托管公司提供 PHP,并且如果需要安装自己的 PHP,XAMPP 安装程序使用起来也 十分简单。我们将不会花费大量时间谈论 PHP 最佳实践或游戏设计技术。本文介绍的脚 本易于理解、使用简单并可以快速掌握。 简单的掷骰器 许多游戏和游戏系统都需要骰子。让我们先从简单的部分入手:掷一个六面骰子。实际上, 滚动一个六面骰子就是从 1 到 6 之间选择一个随机数字。在 PHP 中,这十分简单: echo rand(1,6);。 在许多情况下,这基本上很简单。但

4、是在处理机率游戏时,我们需要一些更好的实现。 PHP 提供了更好的随机数字生成器:mt_rand()。在不深入研究两者差别的情况下,可以认 为 mt_rand 是一个更快、更好的随机数字生成器:echo mt_rand(1,6);。如果把该随机数字 生成器放入函数中,则效果会更好。 清单 1. 使用 mt_rand() 随机数字生成器函数function roll () return mt_rand(1,6);echo roll(); 然后可以把需要滚动的骰子类型作为参数传递给函数。 清单 2. 将骰子类型作为参数传递function roll ($sides) return mt_rand(

5、1,$sides);echo roll(6); / roll a six-sided dieecho roll(10); / roll a ten-sided dieecho roll(20); / roll a twenty-sided die 从这里开始,我们可以继续根据需要一次滚动多个骰子,返回结果数组;也可以一次性滚 动多个不同类型的骰子。但是大多数任务都可以使用这个简单的脚本。 随机名称生成器 如果正在运行游戏、编写故事或者一次性创建大批字符,有时会疲于应付不断出现的新名 字。让我们看一看可用于解决此问题的一个简单随机名称生成器。首先,让我们创建两个 简单数组 一个用于名字,一个用于

6、姓氏。 清单 3. 名字和姓氏的两个简单数组$male = array(“William“,“Henry“,“Filbert“,“John“,“Pat“,);$last = array(“Smith“,“Jones“,“Winkler“,“Cooper“,“Cline“,); 然后就可以从每个数组中选择一个随机元素:echo $malearray_rand($male) . . $lastarray_rand($last);。要一次性提取多个名称,只需混合数组并根据需要提取。 清单 4. 混合名称数组shuffle($male);shuffle($last);for ($i = 0; $i n

7、“; 我们可以通过添加新文本文件向场景中添加元素,也可能希望添加多重复杂度。添加到基 本文本文件中的内容越多,场景随时间的变化就越多。 牌组创建器(Deck builder)和装备(shuffler)如果您要玩纸牌并且要处理与纸牌相关的脚本,我们需要用装备中的工具整合一副牌组构 建器。首先,让我们构建一副标准纸牌。需要构建两个数组 一个用于保存同花色的组 牌,而另一个用于保存牌面。如果稍后需要添加新组牌或牌类型,则这样做将获得很好的 灵活性。 清单 7. 构建一副标准扑克牌$suits = array (“Spades“, “Hearts“, “Clubs“, “Diamonds“);$fac

8、es = array (“Two“, “Three“, “Four“, “Five“, “Six“, “Seven“, “Eight“,“Nine“, “Ten“, “Jack“, “Queen“, “King“, “Ace“); 然后构建一副牌数组来保存所有纸牌值。只需使用一对 foreach 循环即可完成此操作。 清单 8. 构建一副牌数组$deck = array();foreach ($suits as $suit) foreach ($faces as $face) $deck = array (“face“=$face, “suit“=$suit); 在构建了一副扑克牌数组后,我们

9、可以轻松地洗牌并随机抽出一张牌。 清单 9. 洗牌并随机抽出一张牌shuffle($deck);$card = array_shift($deck);echo $cardface . of . $cardsuit; 现在,我们就获得了抽取多副牌或构建多层牌盒(multideck shoe)的捷径。 胜率计算器:发牌 由于构建扑克牌时会分别跟踪每张牌的牌面和花色,因此可以通过编程方式利用这副牌来 计算得到特定牌的几率。首先每只手分别抽出五张牌。 清单 10. 每只手抽出五张牌$hands = array(1 = array(), 2=array();for ($i = 0; $i Ace, su

10、it = Spades);echo implode(“ of “, $draw) . : . calculate_odds($draw, $deck); 或者可以查找指定牌面或花色的牌。清单 13. 查找指定牌面或花色的牌$draw = array(face = , suit = Spades);$draw = array(face = Ace, suit = ); 简单的扑克发牌器 现在已经得到牌组构建器和一些工具,可以帮助计算出抽出特定卡的机率,我们可以整合 一个真正简单的发牌器来进行发牌。出于本例的目的,我们将构建一个可以抽出五张牌的 发牌器。发牌器将从整副牌中提供五张牌。使用数字指定需

11、要放弃哪些牌,并且发牌器将 用一副牌中的其他牌替换这些牌。我们无需指定发牌限制或特殊规则,但是您可能会发现 这些是非常有益的个人经验。 如上一节所示,生成并洗牌,然后每只手五张牌。按数组索引显示这些牌,以便可以指定 返回哪些牌。您可以使用表示要替换哪些牌的复选框来完成此操作 。 清单 14. 使用复选框表示要替换的牌foreach ($hand as $index =$card) echo “ . $cardface . of . $cardsuit . “; 然后,计算输入 array $_POSTcard,查看哪些牌已被选择用于替换。 清单 15. 计算输入$i = 0;while ($i

12、 n“; 根据单词列表的质量及猜测的准确度,我们应当能够得到合理的单词列表以用于可能的匹 配。您必须自己决定 “表示 不按规则玩 的由五个字母组成的单词” 的谜底是 “chest” 还是 “cheat” 。 米德里比斯 米德里比斯是一款文字游戏,玩家在游戏中得到一个简短的故事并用同一类型的不同单词 替换主要类型的单词,从而创建同一个故事的更无聊的新版本。阅读以下文本:“I was walking in the park when I found a lake. I jumped in andswallowed too much water. I had to go to the hospita

13、l.”开始用其他单词标记替换单词类型。开始和结束标记带有下划线用于阻止意 外的字符串匹配。 清单 20. 用单词标记替换单词类型$text = “I was _VERB_ing in the _PLACE_ when I found a _NOUN_.I _VERB_ed in, and _VERB_ed too much _NOUN_. I had to go to the _PLACE_.“; 接下来,创建几个基本单词列表。对于本例,我们也不会做得太复杂。 清单 21. 创建几个基本单词列表$verbs = array(pump, jump, walk, swallow, crawl, w

14、ail, roll);$places = array(park, hospital, arctic, ocean, grocery, basement,attic, sewer);$nouns = array(water, lake, spit, foot, worm,dirt, river, wankel rotary engine); 现在可以重复地评估文本来根据需要替换标记。 清单 22. 评估文本while (preg_match(“/(_VERB_)|(_PLACE_)|(_NOUN_)/“, $text, $matches) switch ($matches0) case _VER

15、B_ :shuffle($verbs);$text = preg_replace($matches0, current($verbs), $text, 1);break;case _PLACE_ :shuffle($places);$text = preg_replace($matches0, current($places), $text, 1);break;case _NOUN_ :shuffle($nouns);$text = preg_replace($matches0, current($nouns), $text, 1);break;echo $text; 很明显,这是一个简单而粗

16、糙的示例。单词列表越精确,并且花在基本文本上的时间越多, 结果就越好。我们已经使用了文本文件创建名称列表及基本单词列表。使用相同原则,我 们可以创建按类型划分的单词列表并使用这些单词列表创建更加变化多端的米德里比斯游 戏。乐透机 全部选中乐透的六个正确号码 退一步说 在统计学上是不可能的。不过,许多 人仍然花钱去玩,而且如果您喜欢号码,则查看趋势图可能很有趣。让我们构建一个脚本, 该脚本将允许跟踪赢奖号码并在列表中提供选择次数最少的 6 个号码。 (免责声明:这不会帮助您中乐透奖,因此请不要花钱购买奖券。这只是为了娱乐) 。 把赢奖的乐透选择保存到文本文件中。用逗号分隔各个号码并把每组号码放在单独一行中

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号