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

解析PHP編寫的25個游戲腳本(2)_PHP教程

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

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

 

清單 13. 查找指定牌面或花色的牌

  $draw = array('face' => '', 'suit' => 'Spades');
  $draw = array('face' => 'Ace', 'suit' => '');

簡單的撲克發(fā)牌器

現(xiàn)在已經(jīng)得到牌組構(gòu)建器和一些工具,可以幫助計算出抽出特定卡的機率,我們可以整合一個真正簡單的發(fā)牌器來進行發(fā)牌。出于本例的目的,我們將構(gòu)建一個可以抽出五張牌的發(fā)牌器。發(fā)牌器將從整副牌中提供五張牌。使用數(shù)字指定需要放棄哪些牌,并且發(fā)牌器將用一副牌中的其他牌替換這些牌。我們無需指定發(fā)牌限制或特殊規(guī)則,但是您可能會發(fā)現(xiàn)這些是非常有益的個人經(jīng)驗。

如上一節(jié)所示,生成并洗牌,然后每只手五張牌。按數(shù)組索引顯示這些牌,以便可以指定返回哪些牌。您可以使用表示要替換哪些牌的復(fù)選框來完成此操作
。

清單 14. 使用復(fù)選框表示要替換的牌

  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 實質(zhì)上是一款猜字游戲。給定單詞的長度,我們使用有限的幾次機會猜這個單詞。如果猜出了出現(xiàn)在該單詞中的一個字母,則填充該字母出現(xiàn)的所有位置。在猜錯若干次(通常為六次)后,您就輸了比賽。要構(gòu)建一個簡陋的 hangman 游戲,我們需要從單詞列表開始。現(xiàn)在,讓我們把單詞列表制作成一個簡單的數(shù)組。

清單 16. 創(chuàng)建單詞列表

  $words = array (
  "giants",
  "triangle",
  "particle",
  "birdhouse",
  "minimum",
  "flood"
  );

使用前面介紹的技術(shù),我們可以把這些單詞移動到外部單詞列表文本文件中,然后根據(jù)需要導(dǎo)入。

在得到單詞列表后,需要隨機選出一個單詞,將每個字母顯示為空,然后開始猜測。我們需要在每次進行猜測時跟蹤正確和錯誤的猜測。只需序列化猜測數(shù)組并在每次猜測時傳遞它們,就可實現(xiàn)跟蹤目的。如果需要阻止人們通過查看頁面源代碼僥幸猜對,則需要執(zhí)行一些更安全的操作。

構(gòu)建數(shù)組以保存字母和正確/錯誤的猜測。對于正確的猜測,我們將用字母作為鍵并用句點作為值填充數(shù)組。

清單 17. 構(gòu)建保存字母和猜測結(jié)果的數(shù)組

  $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();

現(xiàn)在需要一些代碼來評估猜測并在完成猜字游戲的過程中顯示該單詞。

清單 18. 評估猜測并顯示進度

  if (stristr($word, $guess)) {
  $show = '';
  $right[$guess] = $guess;
  $wordletters = str_split($word);
  foreach ($wordletters as $letter) {
  $show .= $right[$letter];
  }
  } else {
  $show = '';
  $wrong[$guess] = $guess;
  if (count($wrong) == 6) {
  $show = $word;
  } else {
  foreach ($wordletters as $letter) {
  $show .= $right[$letter];
  }
  }
  }

在源代碼歸檔 中,可以看到如何序列化猜測數(shù)組并將該數(shù)組從一次猜測傳遞到另一次猜測中。

縱橫字謎助手

我知道這樣做不合適,但是有時在玩縱橫拼字謎時,您不得不費勁地找出以 C 開頭并以 T 結(jié)尾、包含五個字母的單詞。使用為 Hangman 游戲構(gòu)建的相同單詞列表,我們可以輕松地搜索符合某個模式的單詞。首先,找到一種傳輸單詞的方法。為了簡單起見,用句點替換缺少的字母:$guess = "c...t";。由于正則表達式將把句點處理為單個字符,因此我們可以輕松地遍歷單詞列表以查找匹配。

清單 19. 遍歷單詞列表

  foreach ($words as $word) {
  if (preg_match("/^" . $_POST['guess'] . "$/",$word)) {
  echo $word . "<br />\n";
  }
  }

根據(jù)單詞列表的質(zhì)量及猜測的準確度,我們應(yīng)當能夠得到合理的單詞列表以用于可能的匹配。您必須自己決定 “表示 ‘不按規(guī)則玩’ 的由五個字母組成的單詞” 的謎底是 “chest” 還是 “cheat”。

米德里比斯

米德里比斯是一款文字游戲,玩家在游戲中得到一個簡短的故事并用同一類型的不同單詞替換主要類型的單詞,從而創(chuàng)建同一個故事的更無聊的新版本。閱讀以下文本:“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.” 開始用其他單詞標記替換單詞類型。開始和結(jié)束標記帶有下劃線用于阻止意外的字符串匹配。

清單 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_.";

接下來,創(chuàng)建幾個基本單詞列表。對于本例,我們也不會做得太復(fù)雜。

清單 21. 創(chuàng)建幾個基本單詞列表

  $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');

現(xiàn)在可以重復(fù)地評估文本來根據(jù)需要替換標記。

清單 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);
  break;
  case '_PLACE_' :
  shuffle($places);
  $text = preg_replace($matches[0], current($places), $text, 1);
  break;
  case '_NOUN_' :
  shuffle($nouns);
  $text = preg_replace($matches[0], current($nouns), $text, 1);
  break;
  }
  }
  echo $text;

很明顯,這是一個簡單而粗糙的示例。單詞列表越精確,并且花在基本文本上的時間越多,結(jié)果就越好。我們已經(jīng)使用了文本文件創(chuàng)建名稱列表及基本單詞列表。使用相同原則,我們可以創(chuàng)建按類型劃分的單詞列表并使用這些單詞列表創(chuàng)建更加變化多端的米德里比斯游戲。
  
樂透機

全部選中樂透的六個正確號碼 —— 退一步說 —— 在統(tǒng)計學(xué)上是不可能的。不過,許多人仍然花錢去玩,而且如果您喜歡號碼,則查看趨勢圖可能很有趣。讓我們構(gòu)建一個腳本,該腳本將允許跟蹤贏獎號碼并在列表中提供選擇次數(shù)最少的 6 個號碼。

(免責(zé)聲明:這不會幫助您中樂透獎,因此請不要花錢購買獎券。這只是為了娛樂)。

把贏獎的樂透選擇保存到文本文件中。用逗號分隔各個號碼并把每組號碼放在單獨一行中。使用換行符分隔文件內(nèi)容并使用逗號分隔行后,可以得到類似清單 23 的內(nèi)容。

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

很明顯,這不足以成為繪制統(tǒng)計數(shù)據(jù)的基本文件。但是它是一個開端,并且足以演示基本原理。

設(shè)置一個基本數(shù)組以保存選擇范圍。例如,如果選擇 1 到 40 之間(例如,$numbers = array_fill(1,40,0);)的號碼,則遍歷我們的選擇,遞增相應(yīng)的匹配值。

清單 24. 遍歷選擇

  foreach ($picks as $pick) {
  foreach ($pick as $number) {
  $numbers[$number]++;
  }
  }

最后,根據(jù)值將號碼排序。此操作應(yīng)當會把最少選擇的號碼放在數(shù)組的前部。

清單 25. 根據(jù)值將號碼排序

  asort($numbers);
  $pick = array_slice($numbers,0,6,true);
  echo implode(',', array_keys($pick));

通過有規(guī)律地向包含中獎號碼列表的文本文件添加實際的樂透中獎號碼,可以發(fā)現(xiàn)選號的長期趨勢。查看某些號碼的出現(xiàn)頻率十分有趣。

 

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

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