tcl脚本创建多个进程

在本文中,我们将为您的角色扮演游戏构建一个库存管理系统和笔记脚本,同时研究您PHP脚本的交互性。 我们还构建了一个基于图像的ID卡生成器,并使用PHP来执行图像处理。 我们将创建一个扑克手评估器,一台老虎机生成器和一个赌场银行,使您可以练习一些更棘手PHP逻辑。 我们将通过构建复杂的字谜生成器,密码求解器等来进一步解决困难的逻辑,从而进一步发展文字游戏脚本。

这些脚本比第1 部分和第2 部分中的脚本要难一些,因为它们可以完成很多工作。 本文的代码档案包含我们将讨论的每个脚本的完整源代码。

与第1部分和第2部分一样 ,我们将非常快地浏览这些脚本。 如果您尚未阅读第1部分和第2部分,则应在开始本文之前进行。

基本库存管理系统

已经编写了一个脚本来管理角色统计信息,让我们将脚本更进一步,并添加一些基本的库存管理。 使用此脚本,我们可以跟踪消耗的弹药,火炬燃烧和发现的物品(请参见清单1)。 而不是尝试布置您可能会找到的所有项目,我们创建两个输入字段-一个用于项目名称,一个用于项目计数: <input name='newitem' /> <input name='newcount' /> 。 提交脚本后,我们想将新项目添加到库存阵列,并将该阵列与字符表一起保存。 然后,我们遍历库存数组并创建新的输入字段来保存物料。

内容1.添加一些基本的库存管理
foreach ($character['inventory'] as $name => $count) {echo $name . " : <input name='inventory[" . $name . "]' value='" .
$count . "' /><br />";
}

这些输入名称可能看起来很怪异,但是通过以这种方式构造它们,PHP将自动创建“库存”数组,并带有名称/值对。 请参阅脚本档案,以了解如何将它们组合在一起。

一个简单的笔记脚本

播放RPG记录一些音符时非常有用。 当您不知道在哪里写下重要部分时,这些说明的用处不大。 让我们一起编写一个脚本,以帮助存储和查找游戏记录。

做笔记仅需要两个表单字段: <input name='title' /> <br /> <textarea name='body'> <br />

与字符表一样,这些注释会添加到数组中,进行序列化并存储在文本文件中。 保存便笺时,您将分析单词。 字数统计也存储在同一文本文件中。 要简化此操作,请替换任何不是字母或数字的内容,并将整个音符小写(仅用于分析): $analyze = preg_replace('/[^0-9a-z\s]/', strtolower($_POST['body'])); 。 然后在空白处分割,并将注释ID推入每个单词的单词计数数组。

清单2.有助于轻松存储和查找游戏记录的脚本
$noteid = count($masternotes);
$masternotes[] = array('title' => htmlentities($_POST['title']), 'body' => htmlentities($_POST['body']));
$words = preg_split('/\s/', $note['body'] . ' ' . $note['title']);
foreach ($words as $word) {$word = preg_replace('/[^0-9a-z]/', '', strtolower($word));if (!in_array($word, $ignore_these_words)) {if (isset($counts[$word])) {$counts[$word][$noteid] = $noteid;} else {$counts[$word] = array($noteid => $noteid);}}
}

您可以尝试测试脚本或查看代码档案库 ,了解如何检索单个注释或按关键字检索注释。

身份证生成器

如果您正在玩现代游戏,那么拥有角色的实体身份证可以打动您的朋友,并为游戏增添真实感。 您将组合一些PHP图像处理代码,这些代码将允许您创建适合层压的ID卡图像。 首先,我们需要一个基本图像用作ID空白。 在本示例中,我们将使用我收集的原始ID空白。

图1.示例ID空白

我们需要一个基本表格来收集ID卡的字段(姓名,授权,家庭,出生日期,头发和眼睛的颜色)。 然后,我们需要将这些值作为字符串推送到图像中。 在确定开始和停止文本的正确位置时,其中一些需要反复试验才能正确: imagettftext ( $img , 40 , 0 , 600 , 200 , 0 , "tarzeau_-_OCR-A", $_POST['name'] ); 。 如果您正确地完成了所有操作,则应该能够填写该表格并获得如图2所示的内容。

图2.填写的示例ID

指定的字体包含在代码存档中,并且源图像为300DPI。 在某些系统上,使字体和ID卡正常工作可能很棘手,但是脚本档案库中的源代码指出了问题所在。

基于图块的地图生成器

早期的计算机游戏使用磁贴来创建游戏地图。 今天,在某些情况下仍使用相同的基本平铺方法。 让我们放一个脚本来生成基本地图。 该地图不会很大,但是我们可以使用相同的原理来创建更大的,具有不同细节的地图。 首先,创建一些不同的地形类型,然后将一些真正的基本地图图块放在一起,以表示每种地形类型。

图3.基本地形类型

现在我们有了基本的地形类型,您可以想象接下来会发生什么:我们为每一行创建一个地图图块阵列。 但是,仅通过随机选择地形类型并将其推入数组中,我们将获得较差的结果。

我们来制作一张20格大小的地图。 选择地形类型时,请在制定决策时考虑周围的瓷砖。 查看四个最接近的图块:当前行中的最后一个图块和当前图块正上方的三个图块。 我们可以设置复杂的规则来控制地形的生成方式,但是现在,从简单的事情开始:将四个最接近的图块的地形类型添加到数组中,然后随机选择它们。 我们添加以前的地形类型的次数越多,我们获得均匀区域的可能性就越大。 结果类似于清单3。

清单3.一组地图图块
$map = array();
$terrain = array ('plains', 'forest', 'swamp', 'hills', 'mountain', 'water');
for ($row = 0; $row < 20; $row++) {$map[] = array();for ($column = 0; $column < 20; $column++) {$pool = $terrain;if (isset($map[$row-1])) {if (isset($map[$row-1][$column-1])) {$pool[] = $map[$row-1][$column-1];$pool[] = $map[$row-1][$column-1];}$pool[] = $map[$row-1][$column];$pool[] = $map[$row-1][$column];if (isset($map[$row-1][$column+1])) {$pool[] = $map[$row-1][$column+1];$pool[] = $map[$row-1][$column+1];}}if (isset($map[$row][$column-1])) {$pool[] = $map[$row][$column-1];$pool[] = $map[$row][$column-1];}shuffle($pool);$map[$row][$column] = $pool[0];}
}

一旦有了地图数组,我们便会遍历每一行和每一列,包括每种地形类型的图像。 试用测试脚本,以查看此脚本将生成哪些类型的地图。 天空是此脚本的极限。 通过将它们多次推入池中,我们可以为各个地形类型赋予不同的权重,并为可以触摸哪些地形类型创建更复杂的规则。 不要害怕尝试。

扑克手评估师

我们已经写了扑克发牌人和二十一点发牌人。 让我们更进一步,为扑克编写一个人工评估器。 这更加复杂,并且如何对同一类型的手进行分类可能需要花费一些时间才能解决。 但是让脚本看五张牌并告诉您是否有顺子,同花等是很容易的。

查看手中的卡片时,有几个简单的规则可以应用:

  1. 如果当前卡的花色与最后一张卡的花色不同,则不会出现同花顺。
  2. 如果任何一张牌的正面与任何先前一张牌的正面匹配,则没有笔直。
  3. 如果没有纸牌匹配,并且$ highcard减去$ lowcard正好是五,则为顺子。

这些简单的规则到位后,请应用简单的检查来确定匹配项:

  1. 如果有五张不同的面Kong,则没有匹配项。
  2. 如果有四个不同的面Kong,那么会有一对。
  3. 如果存在三个不同的面Kong,则可能有两对或三个。
  4. 如果有两个不同的面Kong,则有一个满屋子或四个。
  5. 如果只有一张脸,那么您就被骗了。

通过查看存档中的示例脚本,了解如何发挥这些规则的作用。

老虎机

现代老虎机是具有视频屏幕,多条支付线,更多按钮和更少拉杆的复杂野兽。 在此示例中,我们模拟了一条带有一条支付线的简单三轮老虎机。 让我们首先确定方向盘上有哪些面Kong。

清单4.识别方向盘上的面Kong
$faces = array ('Cherry', 'Bar', 'Double Bar', 'Triple Bar', 'Diamond', 'Seven');

接下来,确定获胜结果是什么。 获胜结果可能有很多变化,但是例如,假设获胜结果是支付线上的三个匹配结果。 我们需要与获胜结果和支出建立某种联系。 您可能会执行类似清单5的操作。

清单5.获奖结果和支出
$payouts = array ('Bar|Bar|Bar' => '5','Double Bar|Double Bar|Double Bar' => '10','Triple Bar|Triple Bar|Triple Bar' => '15','Cherry|Cherry|Cherry' => '20','Seven|Seven|Seven' => '70','Diamond|Diamond|Diamond' => '100',
);

当您旋转轮子时,第一个和第三个轮子沿一个方向旋转,而第二个轮子则沿另一个方向旋转。 考虑到这一点,让我们安装轮子。

清单6.安装轮子
$wheel1 = array();
foreach ($faces as $face) {$wheel1[] = $face;
}
$wheel2 = array_reverse($wheel1);
$wheel3 = $wheel1;

在代码中,我们反转了数组以设置$wheel2 。 我们想跟踪不同游戏的方向盘位置,但是其余练习非常简单。 每个轮子必须绕转至少一次,不超过10次。 使用取模模拟滚轮: $result1 = $wheel1[rand(count($wheel1), 10*count($wheel1)) % count($wheel1)]; 。 最后,在$ payouts中查找结果。

清单7.在$ payouts中查找结果
if (isset($payouts[$result1.'|'.$result2.'|'.$result3])) {// give the payout
}

请注意:这真的很基本。 实际的老虎机要复杂得多,并且平衡支出非常困难。 这只是一个学习练习。 使用脚本档案库中的代码,看看是否可以调整支出以使其更合理。

基诺

基诺是宾果游戏和彩票之间的交叉。 从1到80中随机选择20个数字,玩家下注将抽取数字(最多选择15个数字)。 Keno的支出差异很大,但是设置脚本来模拟玩Keno的过程非常简单,特别是因为我们在本系列中已经做过非常相似的事情。 对于初学者,您需要一个从1到80的数字数组。

清单8.从1到80的数字数组
$balls = array();
for ($i = 1; $i <= 80; $i++) {$balls[] = $i;
}shuffle($balls);

在单个文本字段中输入您的猜测,并用逗号分隔。 然后只需从$balls数组中切出20个数字,然后根据绘制的数字检查猜测。 这很容易完成,可以在代码存档中看到。 可以通过在Keno风格的面板中显示选择来改进脚本。 熟悉脚本后,请尝试此操作。

密码助手

加密是大多数报纸上使用的一种游戏,其目标是解码使用替换密码进行编码的给定短语,就像我们在第2部分中编写的那样。 让我们写一些使用基本频率分析来解码编码消息的东西。 您可以使用相同的方法来帮助解决加密问题。

频率分析只是说“计数字母”的一种奇特方法。 采样未编码的文本,计算特定字母在文本中出现的次数,并按从高到低的顺序对字母进行排序。 然后对编码的文本执行相同的操作。 完成后,将两个字母列表彼此相邻放置,结果是对解码键的合理猜测。 这在大块文本中效果最好,但是在处理较短的短语时仍然可以使用该方法。 从两个文本框开始:一个文本框用于未编码的文本,另一个文本框用于加密。 计算未编码文本中的字母,并对数组结果进行排序。

清单9.计算未编码文本中的字母并对数组结果进行排序
$unencoded = str_split(preg_replace('/[^a-z]/', '', strtolower($_POST['unencoded'])));
foreach ($unencoded as $letter) {$lettercount[$letter]++;
}arsort($lettercount);

然后,对编码的文本执行相同的操作。 一旦我们按字母频率对数组进行了排序,就创建一个字母映射,并使用它们尝试对文本进行解码。 如果您特别幸运,文本将在第一次解码,但不要指望它。 结果可能是部分解码的文本,这是解决难题的一个很好的起点。 查看脚本样本以获取更多详细信息。 有足够的空间来改进此脚本。

策划者

Mastermind是一种棋盘游戏(基于旧游戏),玩家必须猜出编解码器设置的钉子的顺序和颜色。 在此版本中,脚本将是代码编写者,您将进行一系列猜测。 该脚本将告诉您多少猜测是正确的颜色,但位置错误,以及多少猜测是正确的。 策划者使用六个不同颜色的钉子,您可以重复颜色。 首先建立如下所示的代码。

清单10.六个不同颜色的钉子的数组
$pegs = array ('R','O','Y','G','B','V');
$code = array();
for ($i = 0; $i < 4; $i++) {$code[] = $pegs[rand(0,5)];
}

接下来,我们需要一些东西来分析猜测(参见清单11)。 猜测输入在单个文本字段中,例如OOGBVR。

清单11.分析猜测
$guess = str_split($_POST['guess']);
if ($guess == $code) {// the code has been guessed.
} else {for ($i = 0;$i < 4;$i++) {if ($guess[$i] == $code[$i]) {// A correct guess} else {// Keep track of the guessed colors, for output later}}
}

在示例脚本中了解如何将它们组合在一起。 这是一个有趣的小游戏,可以通过多种方式进行修改。

字链

您可能在玩一个单词之前,只更改一个字母以改成另一个单词,就玩了游戏。 通常,此游戏的目的是使用以下单词链从一个单词更改为另一个单词,例如从单词BIKE更改为FATE单词:BIKE,LIKE,LAKE,LATE,FATE。 让我们使用为填字游戏助手创建的一些代码,创建一个脚本来从单个单词生成单词链(请参见清单12)。 给定一个单词(例如BIKE),我们可以创建四个字母缺失的单词(.IKE,B.KE,BI.E和BIK。),这些单词可以通过填字游戏助手传递以查找可能的匹配项。

清单12.从单个单词生成单词链
$letters = str_split($link);
foreach ($letters as $key => $letter) {foreach ($words as $word) {if ($key == 0) {$guess =  '.' . substr($link, 1);} else if ($key+1 == count($letters)) {$guess =  substr($link, 0, $key) . '.';} else {$guess =  substr($link, 0, $key) . '.' . substr($link, $key+1);}if (preg_match("/^" . $guess . "$/",$word)) {$matches[] = $word;}}
}

找到匹配项后,我们会对匹配项执行相同的操作(确保不重复单词)。 只要您继续查找匹配项,就继续执行相同的逻辑。 我们甚至可以为每种可能的匹配分支解决方案。 这样做将是一个有用的练习,对于失控的递归将是一个有益的教训。 一旦对示例脚本感到满意,就应该尝试一下。

摘要

我希望这个“ 您可以用PHP编写的30个游戏脚本 ”系列让您踏上使用PHP创建有趣的游戏脚本的道路。 无论您喜欢哪种游戏,都可以使用本系列中提供的简单实用程序来丰富游戏体验。 PHP为完成这些任务提供了不错的语言选择,并且如果您按照这里的说明进行操作,无疑会在玩乐的同时提高了PHP编程技能。


翻译自: https://www.ibm.com/developerworks/opensource/library/os-php-gamescripts3/index.html

tcl脚本创建多个进程

tcl脚本创建多个进程_创建10个高级脚本相关推荐

  1. mysql创建sql文件命令_创建包含sql命令的sql脚本文件

    sql脚本是包含一到多个sql命令的sql语句,我们可以将这些sql脚本放在一个文本文件中(我们称之为"sql脚本文件"),然后通过相关的命令执行这个sql脚本文件.基本步骤如下: ...

  2. linux下的进程创建,Linux下进程的创建

    这篇文章主要是讲解到Linux进程的控制,包括程序和进程.守护进程.守护进程的出错处理. 1.程序和进程 程序(program)是存放在磁盘文件中的可执行文件,程序的执行实例被称为进程(process ...

  3. Linux进程的创建图文教程,进程的创建和终止(超详细)

    大多数系统的进程能够并发执行,它们可以动态创建和删除.因此,操作系统必须提供机制,用于创建进程和终止进程. 进程创建 进程在执行过程中可能创建多个新的进程.创建进程称为父进程,而新的进程称为子进程.每 ...

  4. IntelliJ IDEA for Mac 如何创建普通的Java项目_创建项目_新建项目

    文章目录 创建 Java 新项目的流程 普通 Java 项目结构 Java 项目结构特例讲解 创建 Java 新项目的流程 Create New Project Empty Project (1)选择 ...

  5. linux运维脚本编写,最强Linux自动化运维 Shell高级脚本编程实战 带习题+项目实战案例+全套配置脚本...

    最强Linux自动化运维 Shell高级脚本编程实战 带习题+项目实战案例+全套配置脚本 大家可以通过参考下面的课程学习目录,就会发现单单只从目录上来分析就知道这是一部非常系统的Shell自动化脚本运 ...

  6. potplayer 多个进程_创建守护进程的步骤

    什么是守护进程? 答:守护进程是后台运行的.系统启动是就存在的.不予任何终端关联的,用于处理一些系统级别任务的特殊进程. 实现思路: 实现一个守护进程,其实就是将普通进程按照上述特性改造为守护进程的过 ...

  7. java什么时候新建进程_创建名为“ {java}”的线程(即轻量级进程)是为了什么?...

    小编典典 所有这些线程都属于JVM. 运行jstack 以获取线程列表. "main" #1 prio=5 os_prio=0 cpu=150.00ms elapsed=8.04s ...

  8. 手动创建线程池 效果会更好_创建更好的,可访问的焦点效果

    手动创建线程池 效果会更好 Most browsers has their own default, outline style for the :focus psuedo-class. 大多数浏览器 ...

  9. c#创建web应用程序_创建Web应用程序图标集的6个步骤

    c#创建web应用程序 I am not great at creating logos or icons, mainly because of the lack of practice. So wh ...

最新文章

  1. ubuntu kylin 18.04 安装 Qt Creator 5.11
  2. mysql-5.5.25_Linux下安装Mysql-5.5.25
  3. jQuery ajax 传递JSON数组到Spring Controller
  4. 找区间连续值(HDU5247)
  5. Saltstack 介绍、安装、配置(一)
  6. spark入门_Spark技术入门——配置部署、SparkSQL应用
  7. https下不加www的强制跳转 - Nginx
  8. Java的class文件批量反编译成Java文件
  9. mysql 类似 oracle connect by,mysql中实现相仿oracle的SYS_CONNECT_BY_PATH功能
  10. 让皮肤看起来更加水嫩光泽
  11. oracle12c dba或者sys身份的账户和密码,怎么一次性安装好oracle 12c依赖包
  12. myeclipse修改maven settings
  13. C# 如何将Excel表格复制到Word中并保留格式
  14. Matlab实现Taylor展开近似计算、五角星画法
  15. javaweb基于SSM框架的书籍小说在线阅读下载网站
  16. 电子科技大学人工智能期末复习笔记(四):概率与贝叶斯网络
  17. JDK8新特性详解Lambda、StreamAPI、Optional等
  18. spring和jump区别_jump和leap之间的区别
  19. 论文查重:降低重复率技巧
  20. 神经退行性疾病的新希望

热门文章

  1. 清明雨纷,且容我思念
  2. Google Earth Engine(GEE)——Landsat9的使用和去云分析以青海省为例
  3. 【Image2Lcd与PCtoLCD2002】实现stm32 上 接oled 显示图片
  4. 问题空间让理工男也敢追求自己心仪的女孩
  5. 音乐网站php开发视频,搭建自己的音乐网站
  6. 担心爸妈接诈骗电话?春节回家帮家人防骗
  7. 电商巨头阿里巴巴将区块链整合到知识产权保护系统中
  8. 硬盘变成RAW格式无法读取的解决办法
  9. 关键词搜索框的单击事件代码(jQuery)
  10. 【土味情话】想你太多一点也不累