手游开发Python和php哪个更快速呢?
先介绍本人以前工厂工人, 后来自学做过单片机, 目前涉及手游 cocos2d-x. 但是网络方面的知识匮乏, 现在我们团队打算做网络的手游, 程序只有2名, 都是前端, 后台知识需要重新学.问了很多的朋友, 有人说使用 Python 的, 有人说使用 php 的. Python 据我了解有一个叫 Firefly 的游戏服务器引擎, PHP 就不知道了. 对了, 我们的游戏主要以短连接为主. 其实我们的需求就是一个能够比较快上手适合做服务器端的语言. 请教下哪个语言比较适合我们现在的情况?其实我个人比较喜欢Python, 名字很酷, 有没有什么框架可以介绍呢?
PHP要写好,不是一般的难,常常要从整体框架上做一些改动,而且得有一个项目级别的大牛牵头写,否则很容易写成学生级别的项目(好像别的语言也多少有点,但是PHP表现太突出了这点)至于通讯方面,php有swoole这类的长连接server socket能做到一定的缓解,次一点的可以用rest接口,高并发node.js 都不是个事,根据项目而定。至于什么nosql 负载均衡等等严格说跟语言没多少关系,所以还是看项目的资源来决定。站在一个多年PHPER的角度,我只能告诉你:PHP做产品 demo易出,精品难寻。
PHP比python好用。曾经是Python程序员,python就是优雅就是绕,PHP就是简单直接。对于说PHP不能做socket的人,请参考这里 PHP写Server很简单,而且很强大。
用php做手游后台的非常多,很多成名手游是用php做后台
必须php,推荐CI框架,配合nginx+mysql+redis。nodejs的通信框架是,网易有一个基于的游戏框架。websocket,socket,http都有很好的支持。php的类有一个swoole,上手简单。
我也建议使用PHP,因为高效简单,如果做到后期。真的遇到大流量处理的瓶颈,可以采用C++来做server。业务逻辑层,仍然推荐使用PHP来完成。
Python没必要了, 现在大蟒的程序员都跑Golang的船上了题主敢不用PHP呢, 那么好的语言(笑)PHP人好招, 开发容易, 库又丰富, 对接方便. 还有啥不好的
如果楼主图快, 应该是找个会做的人来做(Java的 Python的 甚至Erlang的)如果资金匮乏要自己搞, 那也就是自学网络编程(Java的 Python的 甚至Erlang的)否则你用php做, 那后面呢要么项目死了要么项目做起来了, 死在php要重构上....不是说php养不活, 而是php要满足现有的游戏发展需求 速度慢难度大,你能招到的php程序员应该大多数也只是web应用级别的如果游戏是简单的需求用REST服务器就能搞定的话还好但是之后呢.升级了php还方便么还容易么 还能招到会做的能做的么正如王海所说的, demo可以(某些类型demo都未必可以), 正式项目的话, 还是让php靠边站站吧不要强调php可不可以, 要强调php合不合适
php做后端?我劝你如果没大牛还是别用php,erlang 要不就c++
作为一个3年PHP经验的程序员,我的建议就是:如果你追求快速快速开发,招人简单,用PHP是非常不错的。但是,如果你预计你的项目以后会做得很大,需要代码更好,选择其他语言吧。不一定是python,因为你将一个项目的语言定死,那么这个项目的局限性就太多了。队列这一块用nodejs、业务逻辑可以用python,ruby也不错哦,前端通信用nodejs的有一个html5通信框架(名字我忘记了),反正选择很多啦。数据库呢,redis做热点数据,mongodb做持久化存储,或者其他什么什么的。说得太复杂了……总之就是,在开发进度和项目框架级别上做一个均衡。先用PHP做没问题的,PHP可以胜任很多事情,虽然某些时候他的表现会很糟糕。
已有帐号?
无法登录?
社交帐号登录使用PHP实现动态网页
【娱乐休闲】
【生活服务】
【电脑网络】
【文体教育】
【行业部门】
文章浏览→→→使用PHP实现动态网页使用PHP实现动态网页
&今天,Web站点费尽心思想要为用户提供他们从未体验过的东西。除了友好的界面,细致的服务,实用的信息以外,为用户定制的动态的网页内容也能够提高Web站点的用处并加强访问的针对性,这使得用户更有可能在以后再次访问你的网站。在这篇文章里,我们将从对动态信息的一个概述开始。然后我们将解释如何使用PHP来在Web页面里创建动态的内容并察看一个演示的例子。动态信息理论据地解释,动态一词的意思是网页的内容由“通常是连续的和实时生成的活动或者改变的信息组成。”因此当我们谈论动态数据的时候,我们也就是在谈论作为Web页面发送给用户的信息是由不同的源数据组合而成的。这与静态网页的概念是相对的,静态网页的内容并不依赖用户输入的数据而改变而且通常是直接解析给用户。Web页面上的动态信息有三种主要的类型:动态数据--在一个Web页面里产生的变量。动态Web页面--整个Web页面都是动态生成的。动态内容--Web页面的一部分是动态生成的。你如果希望对动态内容产生的过程进行细微的控制,就象动态数据的那种类型一样,那么数据处理的过程就会复杂一些。而如果你想生成大范围的信息,就象动态Web页面的生成那样,那么程序的逻辑就会变得复杂。动态内容的生成是这两种方式的折衷,它能够让我们使用两个很有用的PHP函数,include()和require()。要记住,你在后端加入的逻辑越多,那么你的Web站点的性能将会损失得越严重。幸运的是,PHP能够很流畅的进行预处理过程,所以当我在处理动态内容和数据的时候都尽可能多的使用PHP的功能。数据源和PHP功能所有的动态内容都有一个共同点:它们从一个原始页面以外的数据源而来。图A列出了一些常见的数据源以及用来处理它们的相应的PHP函数。数据源PHP 函数注释User$HTTP_POST_VARS$HTTP_GET_VARS这些函数处理由用户通过Web表单直接输入的数据。Database (local or remote)&dbtype&_connect()&dbtype&_pconnect()&dbtype&_close()&dbtype&_&function&()example:mysql_fetch_array()这些都只是PHP许多数据库访问函数中的一部分,许多函数是为每个不同的数据库特别编写的。你能够在PHP函数参考手册里找到这些函数的完整列表。Remote filefopen(), fclose()fgets(), fputs()这些函数处理一个远程服务器上文件中的数据,这个文件可以通过FTP访问。Local fileinclude(), require()fopen(), fclose()这些函数处理位于本地服务器上的文件中的数据,比方说配置文件。常见的数据源和处理它们的PHP函数在这篇文章“教程:PHP起步中,”我们观看了一个演示的脚本,这个脚本要求用户输入他们最喜欢的数字。根据用户输入的结果,我们在Web页面上显示一条消息。这就是一个由用户驱动的动态Web内容的例子。从Web表单返回的结果将决定显示的内容。一个更复杂的例子是“点击流程”应用程序,这个程序能够根据一个用户在Web站点上访问过的页面来决定向他或者她发送什么广告。一旦数据已经输入,不管它是由用户或者其它的方式输入的,将会被保存在一个数据库中并在以后重新使用。如果它被用来决定显示的内容,那么这些内容将可以被认为是“由数据库驱动的动态内容。”我们将在下一篇文章中更仔细的看看这种类型的动态信息。目前,让我们先察看一个由文件驱动的动态内容的简单的PHP脚本的例子。我们将使用基于一个配置文件的逻辑来决定在Web页面上应该显示什么样的页面风格和字体。我们选择的页面风格将会在用户请求Web页面的时候显示出来。(这里我想就包括文件的例子给你提个醒:你真的应该在这个例子中为完成要求的功能而使用风格页。)例子程序:Display.phpDisplay脚本使用一个独立的配置文件来包含变量值和几个含有HTML的变量部分的包括文件。虽然这看起来不是特别动态,但是你能够轻易的要求用户使用Web表单来创建一个配置文件并使用一定的逻辑来判断应该加载哪一个配置文件,等等。(我们在“理解PHP的函数和类”这篇文章中所作的讨论将帮助你完成这个工作。)由于本文的目的所限,我们将跳过这方面的处理过程并尽量使它简化。表A展示了我们的主页面,以及你通过浏览器调用的页面,Display.php。(PHP代码将用粗体进行显示。)表A这段简单的代码必须做三件事情:使用PHP include()函数来包含&!-- display.php 这个Web页面的风格由一个配置文件决定 --& &html& &head& &title&Mood Page&/title&&/head& &?php include("displayconf.php"); $required_file = $display.".php"; require $required_?&&br&&br&¢er&This is the best "mood page" ever!&/center&&/font&&/body&&/html&Displayconf.php中的变量并对它们进行求值。创建一个表示用户请求的文件名的变量。在我们这个例子中,Displayconf.php文件里定义的变量$display被求值,然后加上.php后缀。(这是由我们的逻辑完成的。)使用PHP的require()函数显示正确的包含文件里的内容。你应该注意到在我们的例子中,PHPrequire()函数和include()函数是完全可以互换的。这两个函数之间主要的区别在于目标文件处理的方式不同。一个require()语句将会由它所调用的文件替换。这意味着在一个循环当中,远程的文件只会被调用一次。而另一方面,在每次遇到include()函数的时候,它都会被重新求值。这意味着在一个循环的过程中,文件将在每一次循环过程中都被访问一次,而且在包括文件中设置的变量每次都会更新。在这个例子中,我试图讲清楚什么时候使用什么函数合适。对于文件Displayconf.php,很有可能它里面的变量值已经改变。毕竟,这是一个配置文件。因此,我选择了include()函数。而另一方面,$required文件在交互的过程中很有可能不会改变。如果用户请求的是不同的文件体,那么我们有可能会创建一个新的文件再把它包括进来,所以我使用require()函数。高级用户可能希望看看PHP的手册来了解更多的关于函数require_once()和 include_once()的信息以便能够对文件处理和配置文件变量的管理进行更好的控制。表B显示了我们的配置文件,Displayconf.php。(为了简单化的目的,我们将把所有的文件放在和Web服务器相同的目录下。)我们在这里要做的就是将$display变量设置成一个可选的值。表B&?php# displayconf.php# display.php 的配置文件# -------------------------------------------------# 将变量 $display 设置成下列值之一:# happy, sad, 或者 generic$display = "happy";?&最后我们需要一些内容文件--对应配置文件中的每一个选项。因为这些内容都是静态的HTML,所以我们不需要在文件里加上PHP脚标。当你在PHP里使用include()或者require()函数的时候,被调用的文件在处理过程开始的时候被跳过然后在处理结束的时候被加进来。"happy"文件内容(happy.php)&bodybgcolor=pink text=yellow&&font size="+5"&"Sad"文件内容 (sad.php)&body bgcolor=blue text=white&&font face="arial, helvetica" size="+5"&"Generic"文件内容 (generic.php)&body bgcolor=white text=black&&font face="courier" size="+5"&当你单击页面Display.php的时候,这个页面的外观和感受将会根据你在配置文件中输入的值而改变。总结在本文中,我们讨论了动态信息的基础知识并使用一个脚本来创建由文件驱动的动态内容。特别的是,我们使用include()和 require() PHP函数来提取和发送我们的数据。下面是一些最后的话。虽然我相信你一定熟悉WAIWeb编程指南,但是你也许还应该看看W3C对于动态内容所说的支配以及用户对它的访问能力。你可能还要看看PHP手册中的这一章“使用远程文件”来学习如何使用FTP来提取配置数据。所属分类:→&&&&作者:新浪博客&&&&时间: 0:00:00
All Right ReservedPHP 编写的 25个游戏脚本
字体:[ ] 类型:转载 时间:
PHP 是一种易于使用、易于学习且可以广泛获取的编程语言。它非常适合开发在各种游戏中可以使用的简单脚本。
无论是一个人玩简单的使用纸和笔的游戏,还是同一群人玩复杂的桌面角色扮演游戏,或者任意类型的联机游戏,本系列都提供了适合您的内容。“用 PHP 可以编写的 30 个游戏脚本” 系列中的每篇文章都将分别用不到 300 词的文字介绍 10 个脚本(3d10 表示 “掷三个 10 面的骰子”),这些介绍性文字甚至对于开发新手来说都十分简单,而且对于经验丰富的游戏玩家来说也十分有用。本系列的目的在于为您提供可以修改的内容来满足自身的需求,以便您可以在下一次游戏交流会上通过展示您的笔记本来给朋友和玩家们留下深刻印象。 开始之前 作为一名游戏专家/设计者和开发人员,我经常发现自己在运行、规划和玩游戏时,很少编写有用的实用程序和脚本。有时我需要快速想出创意。其他时候,我只需要编出一大堆非玩家角色(Non-Player Character,NPC)的名称。偶尔,我还需要处理数字、处理一些异常或者将一些文字游戏集成到游戏中。只需事先完成一点脚本工作,就可以更好地管理这些任务。 本文将探究在各种游戏中可以使用的 10 个基本脚本。代码压缩包包含所讨论的每个脚本的完整源代码,并且可以在 chaoticneutral 查看脚本实际运行情况。 我们将快速地介绍这些脚本。有关如何查找主机或设置服务器的内容将不做介绍。有很多 Web 托管公司提供 PHP,并且如果需要***自己的 PHP,XAMPP ***程序使用起来也十分简单。我们将不会花费大量时间谈论 PHP 最佳实践或游戏设计技术。本文介绍的脚本易于理解、使用简单并可以快速掌握。 简单的掷骰器 许多游戏和游戏系统都需要骰子。让我们先从简单的部分入手:掷一个六面骰子。实际上,滚动一个六面骰子就是从 1 到 6 之间选择一个随机数字。在 PHP 中,这十分简单:echo rand(1,6);。 在许多情况下,这基本上很简单。但是在处理机率游戏时,我们需要一些更好的实现。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(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')); $antagonists = explode("\n", file_get_contents('scenario.antagonists.txt')); $complicati**** = explode("\n", file_get_contents('plicati****.txt')); shuffle($settings); shuffle($objectives); shuffle($antagonists); shuffle($complicati****); echo $settings[0] . ' ' . $objectives[0] . ' ' . $antagonists[0] . ' ' . $complicati****[0] . "&br /&\n"; 我们可以通过添加新文本文件向场景中添加元素,也可能希望添加多重复杂度。添加到基本文本文件中的内容越多,场景随时间的变化就越多。 牌组创建器(Deck builder)和装备(shuffler) 如果您要玩纸牌并且要处理与纸牌相关的脚本,我们需要用装备中的工具整合一副牌组构建器。首先,让我们构建一副标准纸牌。需要构建两个数组 — 一个用于保存同花色的组牌,而另一个用于保存牌面。如果稍后需要添加新组牌或牌类型,则这样做将获得很好的灵活性。 清单 7. 构建一副标准扑克牌
代码如下: $suits = array ( "Spades", "Hearts", "Clubs", "Diamonds" ); $faces = 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. 洗牌并随机抽出一张牌
代码如下: shuffle($deck); $card = array_shift($deck); echo $card['face'] . ' of ' . $card['suit']; 现在,我们就获得了抽取多副牌或构建多层牌盒(multideck shoe)的捷径。 胜率计算器:发牌 由于构建扑克牌时会分别跟踪每张牌的牌面和花色,因此可以通过编程方式利用这副牌来计算得到特定牌的几率。首先每只手分别抽出五张牌。 清单 10. 每只手抽出五张牌
代码如下: $hands = array(1 =& array(), 2=&array()); for ($i = 0; $i & 5; $i++) { $hands[1][] = implode(" of ", array_shift($deck)); $hands[2][] = implode(" of ", array_shift($deck)); } 然后可以查看这副牌,看看剩余多少张牌以及抽到特定牌的机率是多少。查看剩余的牌数十分简单。只需要计算 $deck 数组中包含的元素数。要获得抽到特定牌的机率,我们需要一个函数来遍历整副牌并估算其余牌以查看是否匹配。 清单 11. 计算抽到特定牌的几率
代码如下: function calculate_odds($draw, $deck) { $remaining = count($deck); $odds = 0; foreach ($deck as $card) { if ( ($draw['face'] == $card['face'] && $draw['suit'] == $card['suit'] ) || ($draw['face'] == '' && $draw['suit'] == $card['suit'] ) || ($draw['face'] == $card['face'] && $draw['suit'] == '' ) ) { $odds++; } } return $odds . ' in ' $ } 现在可以选出尝试抽出的牌。为了简单起见,传入看上去类似某张牌的数组。我们可以查找特定的一张牌。 清单 12. 查找指定的一张牌
代码如下: $draw = array('face' =& 'Ace', 'suit' =& 'Spades'); echo implode(" of ", $draw) . ' : ' . calculate_odds($draw, $deck); 或者可以查找指定牌面或花色的牌。 清单 13. 查找指定牌面或花色的牌
代码如下: $draw = array('face' =& '', 'suit' =& 'Spades'); $draw = array('face' =& 'Ace', 'suit' =& ''); 简单的扑克发牌器 现在已经得到牌组构建器和一些工具,可以帮助计算出抽出特定卡的机率,我们可以整合一个真正简单的发牌器来进行发牌。出于本例的目的,我们将构建一个可以抽出五张牌的发牌器。发牌器将从整副牌中提供五张牌。使用数字指定需要放弃哪些牌,并且发牌器将用一副牌中的其他牌替换这些牌。我们无需指定发牌限制或特殊规则,但是您可能会发现这些是非常有益的个人经验。 如上一节所示,生成并洗牌,然后每只手五张牌。按数组索引显示这些牌,以便可以指定返回哪些牌。您可以使用表示要替换哪些牌的复选框来完成此操作。 清单 14. 使用复选框表示要替换的牌 foreach ($hand as $index =&$card) { echo "&input type='checkbox' name='card[" . $index . "]'& " . $card['face'] . ' of ' . $card['suit'] . "&br /&"; } 然后,计算输入 array $_POST['card'],查看哪些牌已被选择用于替换。 清单 15. 计算输入
代码如下: $i = 0; while ($i & 5) { if (isset($_POST['card'][$i])) { $hand[$i] = array_shift($deck); } } 使用此脚本,您可以尝试找到处理特定一组牌的最佳方法。 Hangman 游戏 Hangman 实质上是一款猜字游戏。给定单词的长度,我们使用有限的几次机会猜这个单词。如果猜出了出现在该单词中的一个字母,则填充该字母出现的所有位置。在猜错若干次(通常为六次)后,您就输了比赛。要构建一个简陋的 hangman 游戏,我们需要从单词列表开始。现在,让我们把单词列表制作成一个简单的数组。 清单 16. 创建单词列表
代码如下: $words = array ( "giants", "triangle", "particle", "birdhouse", "minimum", "flood" ); 使用前面介绍的技术,我们可以把这些单词移动到外部单词列表文本文件中,然后根据需要导入。 在得到单词列表后,需要随机选出一个单词,将每个字母显示为空,然后开始猜测。我们需要在每次进行猜测时跟踪正确和错误的猜测。只需序列化猜测数组并在每次猜测时传递它们,就可实现跟踪目的。如果需要阻止人们通过查看页面源代码侥幸猜对,则需要执行一些更安全的操作。 构建数组以保存字母和正确/错误的猜测。对于正确的猜测,我们将用字母作为键并用句点作为值填充数组。 清单 17. 构建保存字母和猜测结果的数组
代码如下: $letters = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o', 'p','q','r','s','t','u','v','w','x','y','z'); $right = array_fill_keys($letters, '.'); $wrong = array(); 现在需要一些代码来评估猜测并在完成猜字游戏的过程中显示该单词。 清单 18. 评估猜测并显示进度
代码如下: if (stristr($word, $guess)) { $show = ''; $right[$guess] = $ $wordletters = str_split($word); foreach ($wordletters as $letter) { $show .= $right[$letter]; } } else { $show = ''; $wrong[$guess] = $ if (count($wrong) == 6) { $show = $ } else { foreach ($wordletters as $letter) { $show .= $right[$letter]; } } } 在 源代码归档 中,可以看到如何序列化猜测数组并将该数组从一次猜测传递到另一次猜测中。 纵横字谜助手 我知道这样做不合适,但是有时在玩纵横拼字谜时,您不得不费劲地找出以 C 开头并以 T 结尾、包含五个字母的单词。使用为 Hangman 游戏构建的相同单词列表,我们可以轻松地搜索符合某个模式的单词。首先,找到一种传输单词的方法。为了简单起见,用句点替换缺少的字母:$guess = "c...t";。由于正则表达式将把句点处理为单个字符,因此我们可以轻松地遍历单词列表以查找匹配。 清单 19. 遍历单词列表
代码如下: foreach ($words as $word) { if (preg_match("/^" . $_POST['guess'] . "$/",$word)) { echo $word . "&br /&\n"; } } 根据单词列表的质量及猜测的准确度,我们应当能够得到合理的单词列表以用于可能的匹配。您必须自己决定 “表示 ‘不按规则玩' 的由五个字母组成的单词” 的谜底是 “chest” 还是 “cheat”。 米德里比斯 米德里比斯是一款文字游戏,玩家在游戏中得到一个简短的故事并用同一类型的不同单词替换主要类型的单词,从而创建同一个故事的更无聊的新版本。阅读以下文本:“I was walking in the park when I found a lake. I jumped in and swallowed too much water. I had to go to the hospital.” 开始用其他单词标记替换单词类型。开始和结束标记带有下划线用于阻止意外的字符串匹配。 清单 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', 'wail', '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 ($matches[0]) { case '_VERB_' : shuffle($verbs); $text = preg_replace($matches[0], current($verbs), $text, 1); case '_PLACE_' : shuffle($places); $text = preg_replace($matches[0], current($places), $text, 1); case '_NOUN_' : shuffle($nouns); $text = preg_replace($matches[0], current($nouns), $text, 1); } } echo $ 很明显,这是一个简单而粗糙的示例。单词列表越精确,并且花在基本文本上的时间越多,结果就越好。我们已经使用了文本文件创建名称列表及基本单词列表。使用相同原则,我们可以创建按类型划分的单词列表并使用这些单词列表创建更加变化多端的米德里比斯游戏。 乐透机 全部选中乐透的六个正确号码 —— 退一步说 —— 在统计学上是不可能的。不过,许多人仍然花钱去玩,而且如果您喜欢号码,则查看趋势图可能很有趣。让我们构建一个脚本,该脚本将允许跟踪赢奖号码并在列表中提供选择次数最少的 6 个号码。 (免责声明:这不会帮助您中乐透奖,因此请不要花钱购买奖券。这只是为了娱乐)。 把赢奖的乐透选择保存到文本文件中。用逗号分隔各个号码并把每组号码放在单独一行中。使用换行符分隔文件内容并使用逗号分隔行后,可以得到类似清单 23 的内容。 清单 23. 把选择的赢奖乐透保存到文本文件中
代码如下: $picks = array( array('6', '10', '18', '21', '34', '40'), array('2', '8', '13', '22', '30', '39'), array('3', '9', '14', '25', '31', '35'), array('11', '12', '16', '24', '36', '37'), array('4', '7', '17', '26', '32', '33') ); 很明显,这不足以成为绘制统计数据的基本文件。但是它是一个开端,并且足以演示基本原理。 设置一个基本数组以保存选择范围。例如,如果选择 1 到 40 之间(例如,$numbers = array_fill(1,40,0);)的号码,则遍历我们的选择,递增相应的匹配值。 清单 24. 遍历选择
代码如下: foreach ($picks as $pick) { foreach ($pick as $number) { $numbers[$number]++; } } 最后,根据值将号码排序。此操作应当会把最少选择的号码放在数组的前部。 清单 25. 根据值将号码排序
代码如下: asort($numbers); $pick = array_slice($numbers,0,6,true); echo implode(',', array_keys($pick)); 通过有规律地向包含中奖号码列表的文本文件添加实际的乐透中奖号码,可以发现选号的长期趋势。查看某些号码的出现频率十分有趣。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具