日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

解析PHP編寫(xiě)的25個(gè)游戲腳本_PHP教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:解析php生成靜態(tài)頁(yè)面的辦法
首先說(shuō)原理。某駝查了那么多資料,發(fā)現(xiàn)不管用什么方法,原理都是一樣的。就是用程序讀取相應(yīng)的數(shù)據(jù)來(lái)替換模版中的變量,然后生成靜態(tài)頁(yè)。php中主要用到的就是要用到fread()和fwirte()。而靜態(tài)頁(yè)面生成了之后,就會(huì)牽扯到修改的問(wèn)題。這里可以用到正則匹配的

PHP是一種易于使用、易于學(xué)習(xí)且可以廣泛獲取的編程語(yǔ)言。它非常適合開(kāi)發(fā)在各種游戲中可以使用的簡(jiǎn)單腳本。無(wú)論是一個(gè)人玩簡(jiǎn)單的使用紙和筆的游戲,還是同一群人玩復(fù)雜的桌面角色扮演游戲,或者任意類(lèi)型的聯(lián)機(jī)游戲,本系列都提供了適合您的內(nèi)容。“用 PHP 可以編寫(xiě)的 30 個(gè)游戲腳本” 系列中的每篇文章都將分別用不到 300 詞的文字介紹 10 個(gè)腳本(3d10 表示 “擲三個(gè) 10 面的骰子”),這些介紹性文字甚至對(duì)于開(kāi)發(fā)新手來(lái)說(shuō)都十分簡(jiǎn)單,而且對(duì)于經(jīng)驗(yàn)豐富的游戲玩家來(lái)說(shuō)也十分有用。本系列的目的在于為您提供可以修改的內(nèi)容來(lái)滿(mǎn)足自身的需求,以便您可以在下一次游戲交流會(huì)上通過(guò)展示您的筆記本來(lái)給朋友和玩家們留下深刻印象。

開(kāi)始之前

作為一名游戲?qū)<?設(shè)計(jì)者和開(kāi)發(fā)人員,我經(jīng)常發(fā)現(xiàn)自己在運(yùn)行、規(guī)劃和玩游戲時(shí),很少編寫(xiě)有用的實(shí)用程序和腳本。有時(shí)我需要快速想出創(chuàng)意。其他時(shí)候,我只需要編出一大堆非玩家角色(Non-Player Character,NPC)的名稱(chēng)。偶爾,我還需要處理數(shù)字、處理一些異�;蛘邔⒁恍┪淖钟螒蚣傻接螒蛑小V恍枋孪韧瓿梢稽c(diǎn)腳本工作,就可以更好地管理這些任務(wù)。

本文將探究在各種游戲中可以使用的 10 個(gè)基本腳本。代碼壓縮包包含所討論的每個(gè)腳本的完整源代碼,并且可以在 chaoticneutral 查看腳本實(shí)際運(yùn)行情況。
我們將快速地介紹這些腳本。有關(guān)如何查找主機(jī)或設(shè)置服務(wù)器的內(nèi)容將不做介紹。有很多 Web 托管公司提供 PHP,并且如果需要安裝自己的 PHP,XAMPP 安裝程序使用起來(lái)也十分簡(jiǎn)單。我們將不會(huì)花費(fèi)大量時(shí)間談?wù)?PHP 最佳實(shí)踐或游戲設(shè)計(jì)技術(shù)。本文介紹的腳本易于理解、使用簡(jiǎn)單并可以快速掌握。

簡(jiǎn)單的擲骰器

許多游戲和游戲系統(tǒng)都需要骰子。讓我們先從簡(jiǎn)單的部分入手:擲一個(gè)六面骰子。實(shí)際上,滾動(dòng)一個(gè)六面骰子就是從 1 到 6 之間選擇一個(gè)隨機(jī)數(shù)字。在 PHP 中,這十分簡(jiǎn)單:echo rand(1,6);。

在許多情況下,這基本上很簡(jiǎn)單。但是在處理機(jī)率游戲時(shí),我們需要一些更好的實(shí)現(xiàn)。PHP 提供了更好的隨機(jī)數(shù)字生成器:mt_rand()。在不深入研究?jī)烧卟顒e的情況下,可以認(rèn)為 mt_rand 是一個(gè)更快、更好的隨機(jī)數(shù)字生成器:echo mt_rand(1,6);。如果把該隨機(jī)數(shù)字生成器放入函數(shù)中,則效果會(huì)更好。

清單 1. 使用 mt_rand() 隨機(jī)數(shù)字生成器函數(shù)

  function roll () {
  return mt_rand(1,6);
  }
  echo roll();

然后可以把需要滾動(dòng)的骰子類(lèi)型作為參數(shù)傳遞給函數(shù)。

清單 2. 將骰子類(lèi)型作為參數(shù)傳遞

  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

從這里開(kāi)始,我們可以繼續(xù)根據(jù)需要一次滾動(dòng)多個(gè)骰子,返回結(jié)果數(shù)組;也可以一次性滾動(dòng)多個(gè)不同類(lèi)型的骰子。但是大多數(shù)任務(wù)都可以使用這個(gè)簡(jiǎn)單的腳本。

隨機(jī)名稱(chēng)生成器

如果正在運(yùn)行游戲、編寫(xiě)故事或者一次性創(chuàng)建大批字符,有時(shí)會(huì)疲于應(yīng)付不斷出現(xiàn)的新名字。讓我們看一看可用于解決此問(wèn)題的一個(gè)簡(jiǎn)單隨機(jī)名稱(chēng)生成器。首先,讓我們創(chuàng)建兩個(gè)簡(jiǎn)單數(shù)組 — 一個(gè)用于名字,一個(gè)用于姓氏。

清單 3. 名字和姓氏的兩個(gè)簡(jiǎn)單數(shù)組

  $male = array(
  "William",
  "Henry",
  "Filbert",
  "John",
  "Pat",
  );
  $last = array(
  "Smith",
  "Jones",
  "Winkler",
  "Cooper",
  "Cline",
  );

然后就可以從每個(gè)數(shù)組中選擇一個(gè)隨機(jī)元素:echo $male[array_rand($male)] . ' ' . $last[array_rand($last)];。要一次性提取多個(gè)名稱(chēng),只需混合數(shù)組并根據(jù)需要提取。

清單 4. 混合名稱(chēng)數(shù)組

  shuffle($male);
  shuffle($last);
  for ($i = 0; $i <= 3; $i++) {
  echo $male[$i] . ' ' . $last[$i];
  }

基于此基本概念,我們可以創(chuàng)建保存名字和姓氏的文本文件。如果在文本文件的每一行中存放一個(gè)名字,則可以輕松地用換行符分隔文件內(nèi)容以構(gòu)建源代碼數(shù)組。

清單 5. 創(chuàng)建名稱(chēng)的文本文件

  $male = explode('\n', file_get_contents('names.female.txt'));
  $last = explode('\n', file_get_contents('names.last.txt'));

構(gòu)建或查找一些好的名字文件(代碼歸檔 中附帶了一些文件),此后我們絕不再需要為名字煩惱。
場(chǎng)景生成器

利用構(gòu)建名字生成器使用的相同基本原理,我們可以構(gòu)建場(chǎng)景生成器。此生成器不但在角色扮演游戲中十分有用,而且在需要用到偽隨機(jī)環(huán)境集合(可用于角色扮演、即興創(chuàng)作、寫(xiě)作等情況)的情況下也十分有用。我最喜歡的游戲之一,Paranoia 在其 GM Pack 中包括了 “任務(wù)混合器(mission blender)”。任務(wù)混合器可用于在快速滾動(dòng)骰子時(shí)整合完整任務(wù)。讓我們整合自己的場(chǎng)景生成器。

考慮以下場(chǎng)景:您醒來(lái)后發(fā)現(xiàn)自己迷失于叢林中。您知道自己必須趕去紐約,但是不知道原因。您可以聽(tīng)到附近的狗叫聲及清晰的敵方搜尋者的聲音。您渾身發(fā)冷、不住顫抖,而且沒(méi)有武器。該場(chǎng)景中的每一句話都介紹場(chǎng)景的特定方面:

“您醒來(lái)后發(fā)現(xiàn)自己迷失于叢林中” — 這句話將建立設(shè)置。

“您知道自己必須趕去紐約” — 這句話將描述目標(biāo)。

“您可以聽(tīng)到狗叫聲” — 這句話將介紹敵人。

“您渾身發(fā)冷、不住顫抖,而且沒(méi)有武器” — 這句話將添加復(fù)雜度。

就像創(chuàng)建名字和姓氏的文本文件一樣,首先分別創(chuàng)建設(shè)置、目標(biāo)、敵人和復(fù)雜度的文本文件。代碼歸檔中附帶了樣例文件。在擁有這些文件后,生成場(chǎng)景的代碼與生成名稱(chēng)的代碼基本相同。

清單 6. 生成場(chǎng)景

  $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('scenario.complicati****.txt'));
  shuffle($settings);
  shuffle($objectives);
  shuffle($antagonists);
  shuffle($complicati****);
  echo $settings[0] . ' ' . $objectives[0] . ' ' . $antagonists[0] . ' '
  . $complicati****[0] . "<br />\n";

我們可以通過(guò)添加新文本文件向場(chǎng)景中添加元素,也可能希望添加多重復(fù)雜度。添加到基本文本文件中的內(nèi)容越多,場(chǎng)景隨時(shí)間的變化就越多。

牌組創(chuàng)建器(Deck builder)和裝備(shuffler)


如果您要玩紙牌并且要處理與紙牌相關(guān)的腳本,我們需要用裝備中的工具整合一副牌組構(gòu)建器。首先,讓我們構(gòu)建一副標(biāo)準(zhǔn)紙牌。需要構(gòu)建兩個(gè)數(shù)組 — 一個(gè)用于保存同花色的組牌,而另一個(gè)用于保存牌面。如果稍后需要添加新組牌或牌類(lèi)型,則這樣做將獲得很好的靈活性。

清單 7. 構(gòu)建一副標(biāo)準(zhǔn)撲克牌

  $suits = array (
  "Spades", "Hearts", "Clubs", "Diamonds"
  );
  $faces = array (
  "Two", "Three", "Four", "Five", "Six", "Seven", "Eight",
  "Nine", "Ten", "Jack", "Queen", "King", "Ace"
  );

然后構(gòu)建一副牌數(shù)組來(lái)保存所有紙牌值。只需使用一對(duì) foreach 循環(huán)即可完成此操作。

清單 8. 構(gòu)建一副牌數(shù)組

  $deck = array();
  foreach ($suits as $suit) {
  foreach ($faces as $face) {
  $deck[] = array ("face"=>$face, "suit"=>$suit);
  }
  }

在構(gòu)建了一副撲克牌數(shù)組后,我們可以輕松地洗牌并隨機(jī)抽出一張牌。

清單 9. 洗牌并隨機(jī)抽出一張牌

  shuffle($deck);
  $card = array_shift($deck);
  echo $card['face'] . ' of ' . $card['suit'];

現(xiàn)在,我們就獲得了抽取多副牌或構(gòu)建多層牌盒(multideck shoe)的捷徑。

勝率計(jì)算器:發(fā)牌

由于構(gòu)建撲克牌時(shí)會(huì)分別跟蹤每張牌的牌面和花色,因此可以通過(guò)編程方式利用這副牌來(lái)計(jì)算得到特定牌的幾率。首先每只手分別抽出五張牌。

清單 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));
  }

然后可以查看這副牌,看看剩余多少?gòu)埮埔约俺榈教囟ㄅ频臋C(jī)率是多少。查看剩余的牌數(shù)十分簡(jiǎn)單。只需要計(jì)算 $deck 數(shù)組中包含的元素?cái)?shù)。要獲得抽到特定牌的機(jī)率,我們需要一個(gè)函數(shù)來(lái)遍歷整副牌并估算其余牌以查看是否匹配。

清單 11. 計(jì)算抽到特定牌的幾率

  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 ' $remaining;
  }

現(xiàn)在可以選出嘗試抽出的牌。為了簡(jiǎn)單起見(jiàn),傳入看上去類(lèi)似某張牌的數(shù)組。我們可以查找特定的一張牌。

清單 12. 查找指定的一張牌

  $draw = array('face' => 'Ace', 'suit' => 'Spades');
  echo implode(" of ", $draw) . ' : ' . calculate_odds($draw, $deck);

或者可以查找指定牌面或花色的牌。

 

 

分享:淺談微軟對(duì)PHP支持的改進(jìn) 及其它一些胡言亂語(yǔ)
這里有一份我覺(jué)得值得推薦給大家的幻燈片(下載鏈接)。這個(gè)幻燈片是不久前舉辦的WordCamp China 2009上微軟王超群的演講,演講主題是《熟悉的陌生人:微軟對(duì)PHP的新支持使WordPress在IIS7上雄起》。WordCamp是業(yè)界著名的PHP大會(huì),不過(guò)我這里推薦這個(gè)幻燈片

共2頁(yè)上一頁(yè)12下一頁(yè)
來(lái)源:模板無(wú)憂//所屬分類(lèi):PHP教程/更新時(shí)間:2009-10-06
相關(guān)PHP教程