精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

通過編寫掃雷游戲提高你的Bash技巧

系統 Linux
那些令人懷念的經典游戲可是提高編程能力的好素材。今天就讓我們仔細探索一番,怎么用 Bash 編寫一個掃雷程序。

 [[278449]]

那些令人懷念的經典游戲可是提高編程能力的好素材。今天就讓我們仔細探索一番,怎么用 Bash 編寫一個掃雷程序。

我在編程教學方面不是專家,但當我想更好掌握某一樣東西時,會試著找出讓自己樂在其中的方法。比方說,當我想在 shell 編程方面更進一步時,我決定用 Bash 編寫一個掃雷游戲來加以練習。

如果你是一個有經驗的 Bash 程序員,希望在提高技巧的同時樂在其中,那么請跟著我編寫一個你的運行在終端中的掃雷游戲。完整代碼可以在這個 GitHub 存儲庫中找到。

做好準備

在我編寫任何代碼之前,我列出了該游戲所必須的幾個部分:

  1. 顯示雷區
  2. 創建游戲邏輯
  3. 創建判斷單元格是否可選的邏輯
  4. 記錄可用和已查明(已排雷)單元格的個數
  5. 創建游戲結束邏輯

顯示雷區

在掃雷中,游戲界面是一個由 2D 數組(列和行)組成的不透明小方格。每一格下都有可能藏有地雷。玩家的任務就是找到那些不含雷的方格,并且在這一過程中,不能點到地雷。這個 Bash 版本的掃雷使用 10x10 的矩陣,實際邏輯則由一個簡單的 Bash 數組來完成。

首先,我先生成了一些隨機數字。這將是地雷在雷區里的位置。控制地雷的數量,在開始編寫代碼之前,這么做會容易一些。實現這一功能的邏輯可以更好,但我這么做,是為了讓游戲實現保持簡潔,并有改進空間。(我編寫這個游戲純屬娛樂,但如果你能將它修改的更好,我也是很樂意的。)

下面這些變量在整個過程中是不變的,聲明它們是為了隨機生成數字。就像下面的 a - g 的變量,它們會被用來計算可排除的地雷的值:

  1. # 變量
  2. score=0 # 會用來存放游戲分數
  3. # 下面這些變量,用來隨機生成可排除地雷的實際值
  4. a="1 10 -10 -1"
  5. b="-1 0 1"
  6. c="0 1"
  7. d="-1 0 1 -2 -3"
  8. e="1 2 20 21 10 0 -10 -20 -23 -2 -1"
  9. f="1 2 3 35 30 20 22 10 0 -10 -20 -25 -30 -35 -3 -2 -1"
  10. g="1 4 6 9 10 15 20 25 30 -30 -24 -11 -10 -9 -8 -7"
  11. #
  12. # 聲明
  13. declare -a room # 聲明一個 room 數組,它用來表示雷區的每一格。

接下來,我會用列(0-9)和行(a-j)顯示出游戲界面,并且使用一個 10x10 矩陣作為雷區。(M[10][10] 是一個索引從 0-99,有 100 個值的數組。) 如想了解更多關于 Bash 數組的內容,請閱讀這本書那些關于 Bash 你所不了解的事: Bash 數組簡介

創建一個叫 plough 的函數,我們先將標題顯示出來:兩個空行、列頭,和一行 -,以示意往下是游戲界面:

  1. printf '\n\n'
  2. printf '%s' "     a   b   c   d   e   f   g   h   i   j"
  3. printf '\n   %s\n' "-----------------------------------------"

然后,我初始化一個計數器變量,叫 r,它會用來記錄已顯示多少橫行。注意,稍后在游戲代碼中,我們會用同一個變量 r,作為我們的數組索引。 在 Bash for 循環中,用 seq 命令從 0 增加到 9。我用數字(d%)占位,來顯示行號($row,由 seq 定義):

  1. r=0 # 計數器
  2. for row in $(seq 0 9); do
  3. printf '%d ' "$row" # 顯示 行數 0-9

在我們接著往下做之前,讓我們看看到現在都做了什么。我們先橫著顯示 [a-j] 然后再將 [0-9] 的行號顯示出來,我們會用這兩個范圍,來確定用戶排雷的確切位置。

接著,在每行中,插入列,所以是時候寫一個新的 for 循環了。這一循環管理著每一列,也就是說,實際上是生成游戲界面的每一格。我添加了一些輔助函數,你能在源碼中看到它的完整實現。 對每一格來說,我們需要一些讓它看起來像地雷的東西,所以我們先用一個點(.)來初始化空格。為了實現這一想法,我們用的是一個叫 is_null_field 的自定義函數。 同時,我們需要一個存儲每一格具體值的數組,這兒會用到之前已定義的全局數組 room , 并用 變量 r作為索引。隨著 r 的增加,遍歷所有單元格,并隨機部署地雷。

  1.   for col in $(seq 0 9); do
  2. ((r+=1)) # 循環完一列行數加一
  3. is_null_field $r # 假設這里有個函數,它會檢查單元格是否為空,為真,則此單元格初始值為點(.)
  4. printf '%s \e[33m%s\e[0m ' "|" "${room[$r]}" # 最后顯示分隔符,注意,${room[$r]} 的第一個值為 '.',等于其初始值。
  5. #結束 col 循環
  6. done

最后,為了保持游戲界面整齊好看,我會在每行用一個豎線作為結尾,并在最后結束行循環:

  1. printf '%s\n' "|" # 顯示出行分隔符
  2. printf ' %s\n' "-----------------------------------------"
  3. # 結束行循環
  4. done
  5. printf '\n\n'

完整的 plough 代碼如下:

  1. plough()
  2. {
  3.   r=0
  4.   printf '\n\n'
  5.   printf '%s' "     a   b   c   d   e   f   g   h   i   j"
  6.   printf '\n   %s\n' "-----------------------------------------"
  7.   for row in $(seq 0 9); do
  8.     printf '%d  ' "$row"
  9.     for col in $(seq 0 9); do
  10.        ((r+=1))
  11.        is_null_field $r
  12.        printf '%s \e[33m%s\e[0m ' "|" "${room[$r]}"
  13.     done
  14.     printf '%s\n' "|"
  15.     printf '   %s\n' "-----------------------------------------"
  16.   done
  17.   printf '\n\n'
  18. }

我花了點時間來思考,is_null_field 的具體功能是什么。讓我們來看看,它到底能做些什么。在最開始,我們需要游戲有一個固定的狀態。你可以隨便選擇個初始值,可以是一個數字或者任意字符。我最后決定,所有單元格的初始值為一個點(.),因為我覺得,這樣會讓游戲界面更好看。下面就是這一函數的完整代碼:

  1. is_null_field()
  2. {
  3. local e=$1 # 在數組 room 中,我們已經用過循環變量 'r' 了,這次我們用 'e'
  4. if [[ -z "${room[$e]}" ]];then
  5. room[$r]="." #這里用點(.)來初始化每一個單元格
  6. fi
  7. }

現在,我已經初始化了所有的格子,現在只要用一個很簡單的函數就能得出當前游戲中還有多少單元格可以操作:

  1. get_free_fields()
  2. {
  3. free_fields=0 # 初始化變量
  4. for n in $(seq 1 ${#room[@]}); do
  5. if [[ "${room[$n]}" = "." ]]; then # 檢查當前單元格是否等于初始值(.),結果為真,則記為空余格子。
  6. ((free_fields+=1))
  7.     fi
  8.   done
  9. }

這是顯示出來的游戲界面,[a-j] 為列,[0-9] 為行。

Minefield

創建玩家邏輯

玩家操作背后的邏輯在于,先從 stdin 中讀取數據作為坐標,然后再找出對應位置實際包含的值。這里用到了 Bash 的參數擴展,來設法得到行列數。然后將代表列數的字母傳給分支語句,從而得到其對應的列數。為了更好地理解這一過程,可以看看下面這段代碼中,變量 o 所對應的值。 舉個例子,玩家輸入了 c3,這時 Bash 將其分成兩個字符:c3。為了簡單起見,我跳過了如何處理無效輸入的部分。

  1. colm=${opt:0:1} # 得到第一個字符,一個字母
  2. ro=${opt:1:1} # 得到第二個字符,一個整數
  3. case $colm in
  4. a ) o=1;; # 最后,通過字母得到對應列數。
  5. b ) o=2;;
  6.     c ) o=3;;
  7.     d ) o=4;;
  8.     e ) o=5;;
  9.     f ) o=6;;
  10.     g ) o=7;;
  11.     h ) o=8;;
  12.     i ) o=9;;
  13.     j ) o=10;;
  14.   esac

下面的代碼會計算用戶所選單元格實際對應的數字,然后將結果儲存在變量中。

這里也用到了很多的 shuf 命令,shuf 是一個專門用來生成隨機序列的 Linux 命令-i 選項后面需要提供需要打亂的數或者范圍,-n 選項則規定輸出結果最多需要返回幾個值。Bash 中,可以在兩個圓括號內進行數學計算,這里我們會多次用到。

還是沿用之前的例子,玩家輸入了 c3。 接著,它被轉化成了 ro=3o=3。 之后,通過上面的分支語句代碼, 將 c 轉化為對應的整數,帶進公式,以得到最終結果 i 的值。

  1. i=$(((ro*10)+o)) # 遵循運算規則,算出最終值
  2. is_free_field $i $(shuf -i 0-5 -n 1) # 調用自定義函數,判斷其指向空/可選擇單元格。

仔細觀察這個計算過程,看看最終結果 i 是如何計算出來的:

  1. i=$(((ro*10)+o))
  2. i=$(((3*10)+3))=$((30+3))=33

最后結果是 33。在我們的游戲界面顯示出來,玩家輸入坐標指向了第 33 個單元格,也就是在第 3 行(從 0 開始,否則這里變成 4),第 3 列。

創建判斷單元格是否可選的邏輯

為了找到地雷,在將坐標轉化,并找到實際位置之后,程序會檢查這一單元格是否可選。如不可選,程序會顯示一條警告信息,并要求玩家重新輸入坐標。

在這段代碼中,單元格是否可選,是由數組里對應的值是否為點(.)決定的。如果可選,則重置單元格對應的值,并更新分數。反之,因為其對應值不為點,則設置變量 not_allowed。為簡單起見,游戲中警告消息這部分源碼,我會留給讀者們自己去探索。

  1. is_free_field()
  2. {
  3.   local f=$1
  4.   local val=$2
  5.   not_allowed=0
  6.   if [[ "${room[$f]}" = "." ]]; then
  7.     room[$f]=$val
  8.     score=$((score+val))
  9.   else
  10.     not_allowed=1
  11.   fi
  12. }

Extracting mines

如輸入坐標有效,且對應位置為地雷,如下圖所示。玩家輸入 h6,游戲界面會出現一些隨機生成的值。在發現地雷后,這些值會被加入用戶得分。

Extracting mines

還記得我們開頭定義的變量,a - g 嗎,我會用它們來確定隨機生成地雷的具體值。所以,根據玩家輸入坐標,程序會根據(m)中隨機生成的數,來生成周圍其他單元格的值(如上圖所示)。之后將所有值和初始輸入坐標相加,最后結果放在 i(計算結果如上)中。

請注意下面代碼中的 X,它是我們唯一的游戲結束標志。我們將它添加到隨機列表中。在 shuf 命令的魔力下,X 可以在任意情況下出現,但如果你足夠幸運的話,也可能一直不會出現。

  1. m=$(shuf -e a b c d e f g X -n 1) # X 添加到隨機列表中,當 m=X,游戲結束
  2. if [[ "$m" != "X" ]]; then # X 將會是我們爆炸地雷(游戲結束)的觸發標志
  3. for limit in ${!m}; do # !m 代表 m 變量的值
  4. field=$(shuf -i 0-5 -n 1) # 然后再次獲得一個隨機數字
  5. index=$((i+limit)) # m 中的每一個值和 index 加起來,直到列表結尾
  6. is_free_field $index $field
  7.     done

我想要游戲界面中,所有隨機顯示出來的單元格,都靠近玩家選擇的單元格。

Extracting mines

記錄已選擇和可用單元格的個數

這個程序需要記錄游戲界面中哪些單元格是可選擇的。否則,程序會一直讓用戶輸入數據,即使所有單元格都被選中過。為了實現這一功能,我創建了一個叫 free_fields 的變量,初始值為 0。用一個 for 循環,記錄下游戲界面中可選擇單元格的數量。 如果單元格所對應的值為點(.),則 free_fields 加一。

  1. get_free_fields()
  2. {
  3.   free_fields=0
  4.   for n in $(seq 1 ${#room[@]}); do
  5.     if [[ "${room[$n]}" = "." ]]; then
  6.       ((free_fields+=1))
  7.     fi
  8.   done
  9. }

等下,如果 free_fields=0 呢? 這意味著,玩家已選擇過所有單元格。如果想更好理解這一部分,可以看看這里的源代碼

  1. if [[ $free_fields -eq 0 ]]; then # 這意味著你已選擇過所有格子
  2. printf '\n\n\t%s: %s %d\n\n' "You Win" "you scored" "$score"
  3.       exit 0
  4. fi

創建游戲結束邏輯

對于游戲結束這種情況,我們這里使用了一些很巧妙的技巧,將結果在屏幕中央顯示出來。我把這部分留給讀者朋友們自己去探索。

  1. if [[ "$m" = "X" ]]; then
  2. g=0 # 為了在參數擴展中使用它
  3. room[$i]=X # 覆蓋此位置原有的值,并將其賦值為X
  4. for j in {42..49}; do # 在游戲界面中央,
  5. out="gameover"
  6. k=${out:$g:1} # 在每一格中顯示一個字母
  7. room[$j]=${k^^}
  8.       ((g+=1))
  9.     done
  10. fi

最后,我們顯示出玩家最關心的兩行。

  1. if [[ "$m" = "X" ]]; then
  2.       printf '\n\n\t%s: %s %d\n' "GAMEOVER" "you scored" "$score"
  3.       printf '\n\n\t%s\n\n' "You were just $free_fields mines away."
  4.       exit 0
  5. fi

Minecraft Gameover

文章到這里就結束了,朋友們!如果你想了解更多,具體可以查看我的 GitHub 存儲庫,那兒有這個掃雷游戲的源代碼,并且你還能找到更多用 Bash 編寫的游戲。 我希望,這篇文章能激起你學習 Bash 的興趣,并樂在其中。

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2020-12-28 06:29:31

Bash互動游戲Linux

2018-03-29 08:30:48

Linux命令BASH

2020-04-08 10:21:58

bash腳本語言

2020-04-14 09:22:47

bash腳本技巧

2017-06-19 15:46:08

LinuxBash腳本技巧

2017-08-15 11:32:21

LinuxBash腳本技巧

2019-12-12 10:23:34

Linux 代碼 開發

2021-03-18 07:52:42

代碼性能技巧開發

2010-05-20 09:07:30

jQuery

2021-01-12 06:42:50

Lua腳本語言編程語言

2018-09-30 14:46:38

Linux命令技巧

2022-07-08 14:53:46

掃雷小游戲鴻蒙

2012-09-11 09:19:35

JavaScriptJSjQ

2022-06-03 16:59:13

編程語言Awk

2021-02-06 14:21:12

Linux 開發操作系統

2017-05-18 09:16:54

前端CSS技巧

2020-08-04 08:30:18

JS數組技巧

2021-01-03 16:30:34

Rust編程語言

2021-01-14 08:55:20

C語言編程

2017-04-13 10:51:17

Bash建議
點贊
收藏

51CTO技術棧公眾號

精品电影一区| 999在线精品| 国产日韩欧美高清在线| 国产精品直播网红| 麻豆chinese极品少妇| 欧美亚洲大陆| 欧美剧情电影在线观看完整版免费励志电影| 亚洲一区二区三区加勒比| av中文字幕免费| 午夜亚洲性色福利视频| 这里只有精品在线观看| 特黄特色免费视频| 97人人做人人爽香蕉精品| 亚洲黄色av一区| 日韩电影天堂视频一区二区| 国产国语亲子伦亲子| 久久精品一区| 欧美日韩国产成人| 亚洲AV无码片久久精品| 美女久久精品| 欧美影院精品一区| 人人干视频在线| 国产二区三区在线| 欧美韩国日本不卡| 久久精品成人一区二区三区蜜臀| 国产喷水福利在线视频| 日韩av在线发布| 久久久久久久久久国产精品| 国产成人精品视频免费| 亚洲福利网站| 亚洲精品国产精品乱码不99按摩| 91小视频在线播放| 成人午夜毛片| 欧美三级日韩三级国产三级| 欧美激情 国产精品| 欧美xxxx黑人又粗又长| 综合激情成人伊人| 亚洲欧洲国产精品久久| 精品久久久久一区二区三区| 成人黄色小视频在线观看| 成人激情视频在线| 伊人22222| 蜜桃在线一区二区三区| 国产精品久久91| 9i看片成人免费看片| 在线亚洲国产精品网站| 97精品国产97久久久久久免费| 欧美日韩在线观看成人| 亚洲一区色图| 久久中文字幕视频| 老妇女50岁三级| 亚洲欧美文学| 久久99精品视频一区97| 欧美精品久久久久性色| 欧美一区久久| 久久综合久久美利坚合众国| 一本一本久久a久久| 欧美成人激情| 久热精品在线视频| a级片在线观看免费| 国产精品chinese| 久久免费精品视频| 国产精品100| 老鸭窝亚洲一区二区三区| 欧美自拍视频在线观看| 区一区二在线观看| 日本女优在线视频一区二区| 国产精品青青在线观看爽香蕉| 亚洲av无码乱码国产精品fc2| 蜜臀久久99精品久久久画质超高清| 国产美女直播视频一区| 国产suv精品一区二区69| 国产精品一区二区免费不卡| 99porn视频在线| 午夜18视频在线观看| 久久久久久99精品| 日韩中文字幕一区二区| 黄色网址免费在线观看| 一二三四社区欧美黄| 少妇高潮毛片色欲ava片| 日韩电影网站| 欧美日韩国产经典色站一区二区三区| 天天干天天av| swag国产精品一区二区| 亚洲人成电影在线| 91n在线视频| 激情综合久久| 国产精品成人在线| 国产绿帽刺激高潮对白| 成人av免费在线播放| 日韩av高清在线播放| av网址在线免费观看| 欧美日韩国产区| 热久久久久久久久| 日韩aaa久久蜜桃av| 在线亚洲午夜片av大片| 久草免费新视频| 日韩精品亚洲专区| 国产成人av一区二区三区| 国自产拍在线网站网址视频| 亚洲欧美激情小说另类| 国产第一页视频| 亚洲日本va午夜在线电影| 亚洲精品中文字| 黄色片在线观看网站| 男女精品网站| 91丝袜脚交足在线播放| 国产免费av高清在线| 亚洲一区二区三区小说| 青青青在线视频免费观看| 成人av地址| 日韩在线中文视频| 免费看毛片网站| 粉嫩13p一区二区三区| 亚洲人一区二区| 涩涩涩在线视频| 欧美一区二区视频免费观看| 人妻一区二区视频| 伊人成年综合电影网| 亚洲一区二区三区毛片 | 色欲一区二区三区精品a片| 亚洲国产午夜| av免费精品一区二区三区| 成年人在线观看视频| 欧美日韩中文字幕在线视频| 绯色av蜜臀vs少妇| 亚洲精品2区| 成人h视频在线观看播放| 美女做暖暖视频免费在线观看全部网址91| 亚洲黄色小视频| 在线a免费观看| 日韩欧美字幕| 国产精品成久久久久三级| 天天操天天射天天舔| 一区二区三区色| 网站在线你懂的| 91视频久久| 国产欧美va欧美va香蕉在| 黄色视屏网站在线免费观看| 午夜精品久久一牛影视| 亚洲麻豆一区二区三区| 你懂的一区二区| 亚洲aⅴ日韩av电影在线观看| 91大神xh98hx在线播放| 欧美性大战久久久久久久蜜臀| 爱爱的免费视频| 亚洲欧美日韩视频二区| 蜜桃臀一区二区三区| 永久免费毛片在线播放| 日韩高清a**址| 天天做天天爱夜夜爽| 91片黄在线观看| 蜜臀av午夜一区二区三区| 天海翼精品一区二区三区| 57pao成人国产永久免费| 婷婷伊人综合中文字幕| 精品久久香蕉国产线看观看gif| 亚洲精品激情视频| 一本色道精品久久一区二区三区| 国产一区高清视频| 精品极品在线| 亚洲视频在线视频| 伊人精品在线视频| 亚洲品质自拍视频网站| 一区二区三区人妻| 在线欧美日韩| 欧美日韩精品不卡| 91天天综合| 欧美日韩不卡合集视频| 少妇无码一区二区三区| 日韩欧美第一页| 中文字幕有码在线播放| 蜜臀av性久久久久蜜臀aⅴ| 懂色av粉嫩av蜜臀av| youjizzjizz亚洲| 全球成人中文在线| 欧美性猛交xxx乱大交3蜜桃| 日韩欧美成人激情| 亚洲日本韩国在线| 国产精品国产成人国产三级| 初高中福利视频网站| 亚洲最黄网站| 中文字幕中文字幕99| 欧美一级片网址| 77777少妇光屁股久久一区| 理论视频在线| 日韩午夜精品视频| jizz国产在线观看| 亚洲人成影院在线观看| 国产精品300页| 蓝色福利精品导航| 日本欧美视频在线观看| 欧美先锋资源| 国产九区一区在线| 懂色aⅴ精品一区二区三区| 久久99国产综合精品女同| 手机福利在线| 日韩精品最新网址| 高潮毛片又色又爽免费 | 国产美女激情视频| 亚洲欧美色一区| 91精品人妻一区二区| 国产综合久久久久影院| 2022亚洲天堂| 欧美色综合网| 亚洲欧美久久久久一区二区三区| 最新国产一区二区| 国产精品视频xxxx| 亚洲欧美小说色综合小说一区| xxx一区二区| 你懂的在线观看视频网站| 欧美日韩激情一区二区三区| 91国产丝袜播放在线| 自拍偷拍亚洲欧美日韩| 国产特级黄色录像| 成人性生交大片免费看视频在线| 手机在线看福利| 亚洲精品影视| 日本aa在线观看| 99精品视频精品精品视频| 久热国产精品视频一区二区三区| 欧美大片91| 国产区亚洲区欧美区| 午夜日韩成人影院| 7777kkkk成人观看| av在线资源| 欧美乱妇高清无乱码| 日本中文在线观看| 中文字幕免费精品一区| 欧美一区二区少妇| 亚洲精品美女在线| 色哟哟国产精品色哟哟| 日韩精品一区二区三区中文精品| 国产乱码一区二区| 欧美理论电影在线| 一区二区小视频| 欧美日韩视频第一区| 国产寡妇亲子伦一区二区三区四区| 亚洲成人免费在线| 久久高清免费视频| 天天做天天摸天天爽国产一区 | 你懂的国产精品| 九一免费在线观看| 欧美精品国产一区二区| 老司机午夜网站| 在线一区免费| 97久久国产亚洲精品超碰热| 欧美成人一品| 六月婷婷激情综合| 亚洲大片在线| 亚洲美免无码中文字幕在线| 亚洲毛片一区| 男人日女人下面视频| 亚洲一区免费| 乱子伦视频在线看| 蜜臀av性久久久久蜜臀aⅴ四虎| 男女无套免费视频网站动漫| 日韩电影免费在线看| 一本岛在线视频| 精品午夜久久福利影院| 欧美污在线观看| 高清国产一区二区三区| 漂亮人妻被黑人久久精品| 91一区在线观看| 极品人妻videosss人妻| 国产精品第四页| xxxx日本少妇| 天天免费综合色| 国产黄色免费视频| 在线不卡一区二区| 亚洲女同志亚洲女同女播放| 日韩国产中文字幕| 国产人成在线观看| 久国内精品在线| 亚洲同志男男gay1069网站| 国产精品视频男人的天堂| 91成人小视频| 精品国产区在线| 波多野结衣在线观看一区二区三区| 亚洲欧美精品| 日韩视频一区| 亚洲国产日韩欧美在线观看| 国产成人精品亚洲777人妖| 日本少妇xxxx| 国产精品乱码一区二区三区软件 | 国产精品videosex极品| 拔插拔插海外华人免费| 日韩经典一区二区| 真实乱偷全部视频| 国产亚洲精品久| 欧美三级 欧美一级| 欧美性猛交xxxx| 99热这里只有精品99| 亚洲免费精彩视频| 怡红院av在线| 国产精品第10页| 8848成人影院| 亚洲视频小说| 中文在线不卡| 手机在线播放av| 国产精品蜜臀在线观看| 日产亚洲一区二区三区| 欧美三级日韩三级国产三级| 五月天婷婷视频| 久久天天躁狠狠躁夜夜躁| 国产高清不卡| 高清国产一区| 99久久婷婷这里只有精品| 中文字幕日本最新乱码视频| 国产成人综合在线| gv天堂gv无码男同在线观看| 欧美日韩免费区域视频在线观看| 国产熟女一区二区丰满| 国产亚洲欧美日韩一区二区| 超碰97免费在线| 91免费版网站在线观看| 成人女性视频| 精品99在线视频| 不卡电影免费在线播放一区| 9999热视频| 欧美女孩性生活视频| 激情小视频在线观看| 38少妇精品导航| 另类ts人妖一区二区三区| bt天堂新版中文在线地址| 国产一区二区美女诱惑| youjizz亚洲女人| 色94色欧美sute亚洲线路一ni| 日批免费在线观看| 欧美精品成人在线| 亚洲视频国产精品| 樱空桃在线播放| 国内久久婷婷综合| 免费黄色激情视频| 欧美亚洲综合网| 东凛在线观看| 国产精品久久激情| 欧美色女视频| 一级黄色香蕉视频| 日本一区二区三区高清不卡| 国产成人精品网| 亚洲色无码播放| 午夜欧美巨大性欧美巨大| 日韩精品久久久| 日韩高清中文字幕一区| 无码一区二区三区在线| 色婷婷综合久久久久中文一区二区 | 欧美一区二区三区免费观看视频| 久做在线视频免费观看| 亚洲free性xxxx护士hd| 亚洲国产一成人久久精品| 亚洲精品视频三区| 亚洲免费观看在线观看| 国产极品999| 欧美国产日本在线| 91亚洲无吗| 欧美黑人经典片免费观看| bt7086福利一区国产| 日韩一区二区视频在线| 亚洲午夜av久久乱码| 成人国产一区| 手机在线视频你懂的| 国产成人精品免费网站| 国产精彩视频在线| 亚洲男人的天堂网站| 99精品国自产在线| 黄色网络在线观看| 成人毛片视频在线观看| 超碰超碰超碰超碰| 夜夜嗨av一区二区三区四区| 亚洲高清影院| 久草视频这里只有精品| 91偷拍与自偷拍精品| 久草热在线观看| 久久久国产精品x99av| 国产 日韩 欧美 综合 一区| 91黄色小网站| 成人免费在线视频观看| 黄色福利在线观看| 国产成人精品免高潮费视频| 国产精品久久久久久麻豆一区软件| 久久久久中文字幕亚洲精品| 欧美性xxxx在线播放| 免费在线看黄网站| 精品高清视频| 狠狠色丁香久久婷婷综合丁香| 国产无遮挡免费视频| 亚洲一区第一页| 伊人www22综合色| 久久久精品三级| 亚洲在线视频免费观看| 精品欧美不卡一区二区在线观看| 91久久久久久久久久久久久| 一本色道88久久加勒比精品| 少妇视频一区二区| 日韩国产欧美区| 一区二区精彩视频| 欧美大尺度做爰床戏| 亚洲国产另类av| 久草免费在线观看|