中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

PHP 編寫的 25個(gè)游戲腳本

無論是一個(gè)人玩簡(jiǎn)單的使用紙和筆的游戲,還是同一群人玩復(fù)雜的桌面角色扮演游戲,或者任意類型的聯(lián)機(jī)游戲,本系列都提供了適合您的內(nèi)容。“用 php 可以編寫的 30 個(gè)游戲腳本” 系列中的每篇文章都將分別用不到 300 詞的文字介紹 10 個(gè)腳本(3d10 表示 “擲三個(gè) 10 面的骰子”),這些介紹性文字甚至對(duì)于開發(fā)新手來說都十分簡(jiǎn)單,而且對(duì)于經(jīng)驗(yàn)豐富的游戲玩家來說也十分有用。本系列的目的在于為您提供可以修改的內(nèi)容來滿足自身的需求,以便您可以在下一次游戲交流會(huì)上通過展示您的筆記本來給朋友和玩家們留下深刻印象。
  開始之前
  作為一名游戲專家/設(shè)計(jì)者和開發(fā)人員,我經(jīng)常發(fā)現(xiàn)自己在運(yùn)行、規(guī)劃和玩游戲時(shí),很少編寫有用的實(shí)用程序和腳本。有時(shí)我需要快速想出創(chuàng)意。其他時(shí)候,我只需要編出一大堆非玩家角色(Non-Player Character,NPC)的名稱。偶爾,我還需要處理數(shù)字、處理一些異常或者將一些文字游戲集成到游戲中。只需事先完成一點(diǎn)腳本工作,就可以更好地管理這些任務(wù)。
  本文將探究在各種游戲中可以使用的 10 個(gè)基本腳本。代碼壓縮包包含所討論的每個(gè)腳本的完整源代碼,并且可以在 chaoticneutral 查看腳本實(shí)際運(yùn)行情況。
  我們將快速地介紹這些腳本。有關(guān)如何查找主機(jī)或設(shè)置服務(wù)器的內(nèi)容將不做介紹。有很多 Web 托管公司提供 php,并且如果需要安裝自己的 php,XAMPP 安裝程序使用起來也十分簡(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ù)
復(fù)制代碼 代碼如下:
  function roll () {
  return mt_rand(1,6);
  }
  echo roll();

  然后可以把需要滾動(dòng)的骰子類型作為參數(shù)傳遞給函數(shù)。
  清單 2. 將骰子類型作為參數(shù)傳遞
復(fù)制代碼 代碼如下:
  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

  從這里開始,我們可以繼續(xù)根據(jù)需要一次滾動(dòng)多個(gè)骰子,返回結(jié)果數(shù)組;也可以一次性滾動(dòng)多個(gè)不同類型的骰子。但是大多數(shù)任務(wù)都可以使用這個(gè)簡(jiǎn)單的腳本。
  隨機(jī)名稱生成器
  如果正在運(yùn)行游戲、編寫故事或者一次性創(chuàng)建大批字符,有時(shí)會(huì)疲于應(yīng)付不斷出現(xiàn)的新名字。讓我們看一看可用于解決此問題的一個(gè)簡(jiǎn)單隨機(jī)名稱生成器。首先,讓我們創(chuàng)建兩個(gè)簡(jiǎn)單數(shù)組 ― 一個(gè)用于名字,一個(gè)用于姓氏。
  清單 3. 名字和姓氏的兩個(gè)簡(jiǎn)單數(shù)組
復(fù)制代碼 代碼如下:
  $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è)名稱,只需混合數(shù)組并根據(jù)需要提取。
  清單 4. 混合名稱數(shù)組
復(fù)制代碼 代碼如下:
  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)建名稱的文本文件
  $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)作、寫作等情況)的情況下也十分有用。我最喜歡的游戲之一,Paranoia 在其 GM Pack 中包括了 “任務(wù)混合器(mission blender)”。任務(wù)混合器可用于在快速滾動(dòng)骰子時(shí)整合完整任務(wù)。讓我們整合自己的場(chǎng)景生成器。
  考慮以下場(chǎng)景:您醒來后發(fā)現(xiàn)自己迷失于叢林中。您知道自己必須趕去紐約,但是不知道原因。您可以聽到附近的狗叫聲及清晰的敵方搜尋者的聲音。您渾身發(fā)冷、不住顫抖,而且沒有武器。該場(chǎng)景中的每一句話都介紹場(chǎng)景的特定方面:
  “您醒來后發(fā)現(xiàn)自己迷失于叢林中” ― 這句話將建立設(shè)置。
  “您知道自己必須趕去紐約” ― 這句話將描述目標(biāo)。
  “您可以聽到狗叫聲” ― 這句話將介紹敵人。
  “您渾身發(fā)冷、不住顫抖,而且沒有武器” ― 這句話將添加復(fù)雜度。
  就像創(chuàng)建名字和姓氏的文本文件一樣,首先分別創(chuàng)建設(shè)置、目標(biāo)、敵人和復(fù)雜度的文本文件。代碼歸檔中附帶了樣例文件。在擁有這些文件后,生成場(chǎng)景的代碼與生成名稱的代碼基本相同。
  清單 6. 生成場(chǎng)景
復(fù)制代碼 代碼如下:
  $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";

  我們可以通過添加新文本文件向場(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è)用于保存牌面。如果稍后需要添加新組牌或牌類型,則這樣做將獲得很好的靈活性。
  清單 7. 構(gòu)建一副標(biāo)準(zhǔn)撲克牌
復(fù)制代碼 代碼如下:
  $suits = array (
  "Spades", "Hearts", "Clubs", "Diamonds"
  );
  $faces = array (
  "Two", "Three", "Four", "Five", "Six", "Seven", "Eight",
  "Nine", "Ten", "Jack", "Queen", "King", "Ace"
  );

  然后構(gòu)建一副牌數(shù)組來保存所有紙牌值。只需使用一對(duì) foreach 循環(huán)即可完成此操作。
  清單 8. 構(gòu)建一副牌數(shù)組
復(fù)制代碼 代碼如下:
  $deck = array();
  foreach ($suits as $suit) {
  foreach ($faces as $face) {
  $deck[] = array ("face"=>$face, "suit"=>$suit);
  }
  }
  在構(gòu)建了一副撲克牌數(shù)組后,我們可以輕松地洗牌并隨機(jī)抽出一張牌。
  清單 9. 洗牌并隨機(jī)抽出一張牌
復(fù)制代碼 代碼如下:
  shuffle($deck);
  $card = array_shift($deck);
  echo $card['face'] . ' of ' . $card['suit'];

  現(xiàn)在,我們就獲得了抽取多副牌或構(gòu)建多層牌盒(multideck shoe)的捷徑。
  勝率計(jì)算器:發(fā)牌
  由于構(gòu)建撲克牌時(shí)會(huì)分別跟蹤每張牌的牌面和花色,因此可以通過編程方式利用這副牌來計(jì)算得到特定牌的幾率。首先每只手分別抽出五張牌。
  清單 10. 每只手抽出五張牌
復(fù)制代碼 代碼如下:
  $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ù)來遍歷整副牌并估算其余牌以查看是否匹配。
  清單 11. 計(jì)算抽到特定牌的幾率
復(fù)制代碼 代碼如下:
  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)單起見,傳入看上去類似某張牌的數(shù)組。我們可以查找特定的一張牌。
  清單 12. 查找指定的一張牌
復(fù)制代碼 代碼如下:
  $draw = array('face' => 'Ace', 'suit' => 'Spades');
  echo implode(" of ", $draw) . ' : ' . calculate_odds($draw, $deck);

  或者可以查找指定牌面或花色的牌。
  清單 13. 查找指定牌面或花色的牌
復(fù)制代碼 代碼如下:
  $draw = array('face' => '', 'suit' => 'Spades');
  $draw = array('face' => 'Ace', 'suit' => '');

  簡(jiǎn)單的撲克發(fā)牌器
  現(xiàn)在已經(jīng)得到牌組構(gòu)建器和一些工具,可以幫助計(jì)算出抽出特定卡的機(jī)率,我們可以整合一個(gè)真正簡(jiǎn)單的發(fā)牌器來進(jìn)行發(fā)牌。出于本例的目的,我們將構(gòu)建一個(gè)可以抽出五張牌的發(fā)牌器。發(fā)牌器將從整副牌中提供五張牌。使用數(shù)字指定需要放棄哪些牌,并且發(fā)牌器將用一副牌中的其他牌替換這些牌。我們無需指定發(fā)牌限制或特殊規(guī)則,但是您可能會(huì)發(fā)現(xiàn)這些是非常有益的個(gè)人經(jīng)驗(yàn)。
  如上一節(jié)所示,生成并洗牌,然后每只手五張牌。按數(shù)組索引顯示這些牌,以便可以指定返回哪些牌。您可以使用表示要替換哪些牌的復(fù)選框來完成此操作。
  清單 14. 使用復(fù)選框表示要替換的牌
  foreach ($hand as $index =>$card) {
  echo "<input type='checkbox' name='card[" . $index . "]'>
  " . $card['face'] . ' of ' . $card['suit'] . "<br />";
  }
  然后,計(jì)算輸入 array $_POST['card'],查看哪些牌已被選擇用于替換。
  清單 15. 計(jì)算輸入
復(fù)制代碼 代碼如下:
  $i = 0;
  while ($i < 5) {
  if (isset($_POST['card'][$i])) {
  $hand[$i] = array_shift($deck);
  }
  }

  使用此腳本,您可以嘗試找到處理特定一組牌的最佳方法。
  Hangman 游戲
  Hangman 實(shí)質(zhì)上是一款猜字游戲。給定單詞的長(zhǎng)度,我們使用有限的幾次機(jī)會(huì)猜這個(gè)單詞。如果猜出了出現(xiàn)在該單詞中的一個(gè)字母,則填充該字母出現(xiàn)的所有位置。在猜錯(cuò)若干次(通常為六次)后,您就輸了比賽。要構(gòu)建一個(gè)簡(jiǎn)陋的 hangman 游戲,我們需要從單詞列表開始。現(xiàn)在,讓我們把單詞列表制作成一個(gè)簡(jiǎn)單的數(shù)組。
  清單 16. 創(chuàng)建單詞列表
復(fù)制代碼 代碼如下:
  $words = array (
  "giants",
  "triangle",
  "particle",
  "birdhouse",
  "minimum",
  "flood"
  );

  使用前面介紹的技術(shù),我們可以把這些單詞移動(dòng)到外部單詞列表文本文件中,然后根據(jù)需要導(dǎo)入。
  在得到單詞列表后,需要隨機(jī)選出一個(gè)單詞,將每個(gè)字母顯示為空,然后開始猜測(cè)。我們需要在每次進(jìn)行猜測(cè)時(shí)跟蹤正確和錯(cuò)誤的猜測(cè)。只需序列化猜測(cè)數(shù)組并在每次猜測(cè)時(shí)傳遞它們,就可實(shí)現(xiàn)跟蹤目的。如果需要阻止人們通過查看頁面源代碼僥幸猜對(duì),則需要執(zhí)行一些更安全的操作。
  構(gòu)建數(shù)組以保存字母和正確/錯(cuò)誤的猜測(cè)。對(duì)于正確的猜測(cè),我們將用字母作為鍵并用句點(diǎn)作為值填充數(shù)組。
  清單 17. 構(gòu)建保存字母和猜測(cè)結(jié)果的數(shù)組
復(fù)制代碼 代碼如下:
  $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)在需要一些代碼來評(píng)估猜測(cè)并在完成猜字游戲的過程中顯示該單詞。
  清單 18. 評(píng)估猜測(cè)并顯示進(jìn)度
復(fù)制代碼 代碼如下:
  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];
  }
  }
  }

  在 源代碼歸檔 中,可以看到如何序列化猜測(cè)數(shù)組并將該數(shù)組從一次猜測(cè)傳遞到另一次猜測(cè)中。
  縱橫字謎助手
  我知道這樣做不合適,但是有時(shí)在玩縱橫拼字謎時(shí),您不得不費(fèi)勁地找出以 C 開頭并以 T 結(jié)尾、包含五個(gè)字母的單詞。使用為 Hangman 游戲構(gòu)建的相同單詞列表,我們可以輕松地搜索符合某個(gè)模式的單詞。首先,找到一種傳輸單詞的方法。為了簡(jiǎn)單起見,用句點(diǎn)替換缺少的字母:$guess = "c...t";。由于正則表達(dá)式將把句點(diǎn)處理為單個(gè)字符,因此我們可以輕松地遍歷單詞列表以查找匹配。
  清單 19. 遍歷單詞列表
復(fù)制代碼 代碼如下:
  foreach ($words as $word) {
  if (preg_match("/^" . $_POST['guess'] . "$/",$word)) {
  echo $word . "<br />/n";
  }
  }

  根據(jù)單詞列表的質(zhì)量及猜測(cè)的準(zhǔn)確度,我們應(yīng)當(dāng)能夠得到合理的單詞列表以用于可能的匹配。您必須自己決定 “表示 ‘不按規(guī)則玩' 的由五個(gè)字母組成的單詞” 的謎底是 “chest” 還是 “cheat”。
  米德里比斯
  米德里比斯是一款文字游戲,玩家在游戲中得到一個(gè)簡(jiǎn)短的故事并用同一類型的不同單詞替換主要類型的單詞,從而創(chuàng)建同一個(gè)故事的更無聊的新版本。閱讀以下文本:“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.” 開始用其他單詞標(biāo)記替換單詞類型。開始和結(jié)束標(biāo)記帶有下劃線用于阻止意外的字符串匹配。
  清單 20. 用單詞標(biāo)記替換單詞類型
  $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)建幾個(gè)基本單詞列表。對(duì)于本例,我們也不會(huì)做得太復(fù)雜。
  清單 21. 創(chuàng)建幾個(gè)基本單詞列表
復(fù)制代碼 代碼如下:
  $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ù)地評(píng)估文本來根據(jù)需要替換標(biāo)記。
  清單 22. 評(píng)估文本
復(fù)制代碼 代碼如下:
  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;

  很明顯,這是一個(gè)簡(jiǎn)單而粗糙的示例。單詞列表越精確,并且花在基本文本上的時(shí)間越多,結(jié)果就越好。我們已經(jīng)使用了文本文件創(chuàng)建名稱列表及基本單詞列表。使用相同原則,我們可以創(chuàng)建按類型劃分的單詞列表并使用這些單詞列表創(chuàng)建更加變化多端的米德里比斯游戲
  樂透機(jī)
  全部選中樂透的六個(gè)正確號(hào)碼 ―― 退一步說 ―― 在統(tǒng)計(jì)學(xué)上是不可能的。不過,許多人仍然花錢去玩,而且如果您喜歡號(hào)碼,則查看趨勢(shì)圖可能很有趣。讓我們構(gòu)建一個(gè)腳本,該腳本將允許跟蹤贏獎(jiǎng)號(hào)碼并在列表中提供選擇次數(shù)最少的 6 個(gè)號(hào)碼。
  (免責(zé)聲明:這不會(huì)幫助您中樂透獎(jiǎng),因此請(qǐng)不要花錢購(gòu)買獎(jiǎng)券。這只是為了娛樂)。
  把贏獎(jiǎng)的樂透選擇保存到文本文件中。用逗號(hào)分隔各個(gè)號(hào)碼并把每組號(hào)碼放在單獨(dú)一行中。使用換行符分隔文件內(nèi)容并使用逗號(hào)分隔行后,可以得到類似清單 23 的內(nèi)容。
  清單 23. 把選擇的贏獎(jiǎng)樂透保存到文本文件中
復(fù)制代碼 代碼如下:
  $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)計(jì)數(shù)據(jù)的基本文件。但是它是一個(gè)開端,并且足以演示基本原理。
  設(shè)置一個(gè)基本數(shù)組以保存選擇范圍。例如,如果選擇 1 到 40 之間(例如,$numbers = array_fill(1,40,0);)的號(hào)碼,則遍歷我們的選擇,遞增相應(yīng)的匹配值。
  清單 24. 遍歷選擇
復(fù)制代碼 代碼如下:
  foreach ($picks as $pick) {
  foreach ($pick as $number) {
  $numbers[$number]++;
  }
  }

  最后,根據(jù)值將號(hào)碼排序。此操作應(yīng)當(dāng)會(huì)把最少選擇的號(hào)碼放在數(shù)組的前部。
  清單 25. 根據(jù)值將號(hào)碼排序
復(fù)制代碼 代碼如下:
  asort($numbers);
  $pick = array_slice($numbers,0,6,true);
  echo implode(',', array_keys($pick));

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

php技術(shù)PHP 編寫的 25個(gè)游戲腳本,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲v区| 国产成人精品免高潮在线观看 | 午夜精品一区二区三区在线视 | 久久亚洲春色中文字幕久久久 | 亚洲精品一区二区三区蜜桃久 | 人人九九精 | 欧美一级二级三级视频 | 欧美日韩在线播放 | 亚洲黄色一级毛片 | 亚洲精品视频在线观看视频 | 亚洲高清一区二区三区 | 亚洲 欧美 日韩在线 | 成人一区精品 | 亚洲午夜精品一区二区三区 | 亚洲一区国产精品 | 精品视频一区二区三区在线观看 | 欧美日本在线观看 | 日韩午夜一区二区三区 | 中文字幕国产 | 香蕉视频一区二区 | 精品亚洲第一 | 中文字幕一区二区三区四区五区 | 丁香一区二区 | 久草中文在线 | 精区3d动漫一品二品精区 | 精品国产伦一区二区三区观看说明 | 在线一区视频 | 草草草久久久 | 在线不卡| 人人爱干 | 狠狠久| 国产黄色精品在线观看 | 福利视频一区二区三区 | 久久久久亚洲av毛片大全 | 91精品免费视频 | 精品国产一级片 | 久久久久高清 | 国产午夜精品一区二区三区在线观看 | 91精品国产综合久久精品 | 亚洲成人黄色 | 国产乱码精品1区2区3区 |