亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

shell腳本編寫的俄羅斯方塊游戲代碼

2020-07-27 19:17:17
字體:
來源:轉載
供稿:網友

粘貼以下代碼到一個空的Shell腳本文件中,并在Bash 中運行即可!

復制代碼 代碼如下:

#!/bin/bash

# Tetris Game
# 10.21.2003 xhchen<[email]xhchen@winbond.com.tw[/email]>

#APP declaration
APP_NAME="${0##*[///]}"
APP_VERSION="1.0"

 
#顏色定義
cRed=1
cGreen=2
cYellow=3
cBlue=4
cFuchsia=5
cCyan=6
cWhite=7
colorTable=($cRed $cGreen $cYellow $cBlue $cFuchsia $cCyan $cWhite)

#位置和大小
iLeft=3
iTop=2
((iTrayLeft = iLeft + 2))
((iTrayTop = iTop + 1))
((iTrayWidth = 10))
((iTrayHeight = 15))

#顏色設置
cBorder=$cGreen
cScore=$cFuchsia
cScoreValue=$cCyan

#控制信號
#改游戲使用兩個進程,一個用于接收輸入,一個用于游戲流程和顯示界面;
#當前者接收到上下左右等按鍵時,通過向后者發送signal的方式通知后者。
sigRotate=25
sigLeft=26
sigRight=27
sigDown=28
sigAllDown=29
sigExit=30

#七中不同的方塊的定義
#通過旋轉,每種方塊的顯示的樣式可能有幾種
box0=(0 0 0 1 1 0 1 1)
box1=(0 2 1 2 2 2 3 2 1 0 1 1 1 2 1 3)
box2=(0 0 0 1 1 1 1 2 0 1 1 0 1 1 2 0)
box3=(0 1 0 2 1 0 1 1 0 0 1 0 1 1 2 1)
box4=(0 1 0 2 1 1 2 1 1 0 1 1 1 2 2 2 0 1 1 1 2 0 2 1 0 0 1 0 1 1 1 2)
box5=(0 1 1 1 2 1 2 2 1 0 1 1 1 2 2 0 0 0 0 1 1 1 2 1 0 2 1 0 1 1 1 2)
box6=(0 1 1 1 1 2 2 1 1 0 1 1 1 2 2 1 0 1 1 0 1 1 2 1 0 1 1 0 1 1 1 2)
#所有其中方塊的定義都放到box變量中
box=(${box0[@]} ${box1[@]} ${box2[@]} ${box3[@]} ${box4[@]} ${box5[@]} ${box6[@]})
#各種方塊旋轉后可能的樣式數目
countBox=(1 2 2 2 4 4 4)
#各種方塊再box數組中的偏移
offsetBox=(0 1 3 5 7 11 15)

#每提高一個速度級需要積累的分數
iScoreEachLevel=50        #be greater than 7

#運行時數據
sig=0                #接收到的signal
iScore=0        #總分
iLevel=0        #速度級
boxNew=()        #新下落的方塊的位置定義
cBoxNew=0        #新下落的方塊的顏色
iBoxNewType=0        #新下落的方塊的種類
iBoxNewRotate=0        #新下落的方塊的旋轉角度
boxCur=()        #當前方塊的位置定義
cBoxCur=0        #當前方塊的顏色
iBoxCurType=0        #當前方塊的種類
iBoxCurRotate=0        #當前方塊的旋轉角度
boxCurX=-1        #當前方塊的x坐標位置
boxCurY=-1        #當前方塊的y坐標位置
iMap=()                #背景方塊圖表

#初始化所有背景方塊為-1, 表示沒有方塊
for ((i = 0; i < iTrayHeight * iTrayWidth; i++)); do iMap[$i]=-1; done

 
#接收輸入的進程的主函數
function RunAsKeyReceiver()
{
        local pidDisplayer key aKey sig cESC sTTY

        pidDisplayer=$1
        aKey=(0 0 0)

        cESC=`echo -ne "/033"`
        cSpace=`echo -ne "/040"`

        #保存終端屬性。在read -s讀取終端鍵時,終端的屬性會被暫時改變。
        #如果在read -s時程序被不幸殺掉,可能會導致終端混亂,
        #需要在程序退出時恢復終端屬性。
        sTTY=`stty -g`

        #捕捉退出信號
        trap "MyExit;" INT TERM
        trap "MyExitNoSub;" $sigExit

        #隱藏光標
        echo -ne "/033[?25l"

 
        while :
        do
                #讀取輸入。注-s不回顯,-n讀到一個字符立即返回
                read -s -n 1 key

                aKey[0]=${aKey[1]}
                aKey[1]=${aKey[2]}
                aKey[2]=$key
                sig=0

                #判斷輸入了何種鍵
                if [[ $key == $cESC && ${aKey[1]} == $cESC ]]
                then
                        #ESC鍵
                        MyExit
                elif [[ ${aKey[0]} == $cESC && ${aKey[1]} == "[" ]]
                then
                        if [[ $key == "A" ]]; then sig=$sigRotate        #<向上鍵>
                        elif [[ $key == "B" ]]; then sig=$sigDown        #<向下鍵>
                        elif [[ $key == "D" ]]; then sig=$sigLeft        #<向左鍵>
                        elif [[ $key == "C" ]]; then sig=$sigRight        #<向右鍵>
                        fi
                elif [[ $key == "W" || $key == "w" ]]; then sig=$sigRotate        #W, w
                elif [[ $key == "S" || $key == "s" ]]; then sig=$sigDown        #S, s
                elif [[ $key == "A" || $key == "a" ]]; then sig=$sigLeft        #A, a
                elif [[ $key == "D" || $key == "d" ]]; then sig=$sigRight        #D, d
                elif [[ "[$key]" == "[]" ]]; then sig=$sigAllDown        #空格鍵
                elif [[ $key == "Q" || $key == "q" ]]                        #Q, q
                then
                        MyExit
                fi

                if [[ $sig != 0 ]]
                then
                        #向另一進程發送消息
                        kill -$sig $pidDisplayer
                fi
        done
}

#退出前的恢復
function MyExitNoSub()
{
        local y

        #恢復終端屬性
        stty $sTTY
        ((y = iTop + iTrayHeight + 4))

        #顯示光標
        echo -e "/033[?25h/033[${y};0H"
        exit
}

 
function MyExit()
{
        #通知顯示進程需要退出
        kill -$sigExit $pidDisplayer

        MyExitNoSub
}

 
#處理顯示和游戲流程的主函數
function RunAsDisplayer()
{
        local sigThis
        InitDraw

        #掛載各種信號的處理函數
        trap "sig=$sigRotate;" $sigRotate
        trap "sig=$sigLeft;" $sigLeft
        trap "sig=$sigRight;" $sigRight
        trap "sig=$sigDown;" $sigDown
        trap "sig=$sigAllDown;" $sigAllDown
        trap "ShowExit;" $sigExit

        while :
        do
                #根據當前的速度級iLevel不同,設定相應的循環的次數
                for ((i = 0; i < 21 - iLevel; i++))
                do
                        sleep 0.02
                        sigThis=$sig
                        sig=0

                        #根據sig變量判斷是否接受到相應的信號
                        if ((sigThis == sigRotate)); then BoxRotate;        #旋轉
                        elif ((sigThis == sigLeft)); then BoxLeft;        #左移一列
                        elif ((sigThis == sigRight)); then BoxRight;        #右移一列
                        elif ((sigThis == sigDown)); then BoxDown;        #下落一行
                        elif ((sigThis == sigAllDown)); then BoxAllDown;        #下落到底
                        fi
                done
                #kill -$sigDown $$
                BoxDown        #下落一行
        done
}

 
#BoxMove(y, x), 測試是否可以把移動中的方塊移到(x, y)的位置, 返回0則可以, 1不可以
function BoxMove()
{
        local j i x y xTest yTest
        yTest=$1
        xTest=$2
        for ((j = 0; j < 8; j += 2))
        do
                ((i = j + 1))
                ((y = ${boxCur[$j]} + yTest))
                ((x = ${boxCur[$i]} + xTest))
                if (( y < 0 || y >= iTrayHeight || x < 0 || x >= iTrayWidth))
                then
                        #撞到墻壁了
                        return 1
                fi
                if ((${iMap[y * iTrayWidth + x]} != -1 ))
                then
                        #撞到其他已經存在的方塊了
                        return 1
                fi
        done
        return 0;
}

 
#將當前移動中的方塊放到背景方塊中去,
#并計算新的分數和速度級。(即一次方塊落到底部)
function Box2Map()
{
        local j i x y xp yp line

        #將當前移動中的方塊放到背景方塊中去
        for ((j = 0; j < 8; j += 2))
        do
                ((i = j + 1))
                ((y = ${boxCur[$j]} + boxCurY))
                ((x = ${boxCur[$i]} + boxCurX))
                ((i = y * iTrayWidth + x))
                iMap[$i]=$cBoxCur
        done

        #消去可被消去的行
        line=0
        for ((j = 0; j < iTrayWidth * iTrayHeight; j += iTrayWidth))
        do
                for ((i = j + iTrayWidth - 1; i >= j; i--))
                do
                        if ((${iMap[$i]} == -1)); then break; fi
                done
                if ((i >= j)); then continue; fi

                ((line++))
                for ((i = j - 1; i >= 0; i--))
                do
                        ((x = i + iTrayWidth))
                        iMap[$x]=${iMap[$i]}
                done
                for ((i = 0; i < iTrayWidth; i++))
                do
                        iMap[$i]=-1
                done
        done

        if ((line == 0)); then return; fi

        #根據消去的行數line計算分數和速度級
        ((x = iLeft + iTrayWidth * 2 + 7))
        ((y = iTop + 11))
        ((iScore += line * 2 - 1))
        #顯示新的分數
        echo -ne "/033[1m/033[3${cScoreValue}m/033[${y};${x}H${iScore}         "
        if ((iScore % iScoreEachLevel < line * 2 - 1))
        then
                if ((iLevel < 20))
                then
                        ((iLevel++))
                        ((y = iTop + 14))
                        #顯示新的速度級
                        echo -ne "/033[3${cScoreValue}m/033[${y};${x}H${iLevel}        "
                fi
        fi
        echo -ne "/033[0m"

 
        #重新顯示背景方塊
        for ((y = 0; y < iTrayHeight; y++))
        do
                ((yp = y + iTrayTop + 1))
                ((xp = iTrayLeft + 1))
                ((i = y * iTrayWidth))
                echo -ne "/033[${yp};${xp}H"
                for ((x = 0; x < iTrayWidth; x++))
                do
                        ((j = i + x))
                        if ((${iMap[$j]} == -1))
                        then
                                echo -ne "  "
                        else
                                echo -ne "/033[1m/033[7m/033[3${iMap[$j]}m/033[4${iMap[$j]}m[]/033[0m"
                        fi
                done
        done
}

 
#下落一行
function BoxDown()
{
        local y s
        ((y = boxCurY + 1))        #新的y坐標
        if BoxMove $y $boxCurX        #測試是否可以下落一行
        then
                s="`DrawCurBox 0`"        #將舊的方塊抹去
                ((boxCurY = y))
                s="$s`DrawCurBox 1`"        #顯示新的下落后方塊
                echo -ne $s
        else
                #走到這兒, 如果不能下落了
                Box2Map                #將當前移動中的方塊貼到背景方塊中
                RandomBox        #產生新的方塊
        fi
}

#左移一列
function BoxLeft()
{
        local x s
        ((x = boxCurX - 1))
        if BoxMove $boxCurY $x
        then
                s=`DrawCurBox 0`
                ((boxCurX = x))
                s=$s`DrawCurBox 1`
                echo -ne $s
        fi
}

#右移一列
function BoxRight()
{
        local x s
        ((x = boxCurX + 1))
        if BoxMove $boxCurY $x
        then
                s=`DrawCurBox 0`
                ((boxCurX = x))
                s=$s`DrawCurBox 1`
                echo -ne $s
        fi
}

 
#下落到底
function BoxAllDown()
{
        local k j i x y iDown s
        iDown=$iTrayHeight

        #計算一共需要下落多少行
        for ((j = 0; j < 8; j += 2))
        do
                ((i = j + 1))
                ((y = ${boxCur[$j]} + boxCurY))
                ((x = ${boxCur[$i]} + boxCurX))
                for ((k = y + 1; k < iTrayHeight; k++))
                do
                        ((i = k * iTrayWidth + x))
                        if (( ${iMap[$i]} != -1)); then break; fi
                done
                ((k -= y + 1))
                if (( $iDown > $k )); then iDown=$k; fi
        done

        s=`DrawCurBox 0`        #將舊的方塊抹去
        ((boxCurY += iDown))
        s=$s`DrawCurBox 1`        #顯示新的下落后的方塊
        echo -ne $s
        Box2Map                #將當前移動中的方塊貼到背景方塊中
        RandomBox        #產生新的方塊
}

 
#旋轉方塊
function BoxRotate()
{
        local iCount iTestRotate boxTest j i s
        iCount=${countBox[$iBoxCurType]}        #當前的方塊經旋轉可以產生的樣式的數目

        #計算旋轉后的新的樣式
        ((iTestRotate = iBoxCurRotate + 1))
        if ((iTestRotate >= iCount))
        then
                ((iTestRotate = 0))
        fi

        #更新到新的樣式, 保存老的樣式(但不顯示)
        for ((j = 0, i = (${offsetBox[$iBoxCurType]} + $iTestRotate) * 8; j < 8; j++, i++))
        do
                boxTest[$j]=${boxCur[$j]}
                boxCur[$j]=${box[$i]}
        done

        if BoxMove $boxCurY $boxCurX        #測試旋轉后是否有空間放的下
        then
                #抹去舊的方塊
                for ((j = 0; j < 8; j++))
                do
                        boxCur[$j]=${boxTest[$j]}
                done
                s=`DrawCurBox 0`

                #畫上新的方塊
                for ((j = 0, i = (${offsetBox[$iBoxCurType]} + $iTestRotate) * 8; j < 8; j++, i++))
                do
                        boxCur[$j]=${box[$i]}
                done
                s=$s`DrawCurBox 1`
                echo -ne $s
                iBoxCurRotate=$iTestRotate
        else
                #不能旋轉,還是繼續使用老的樣式
                for ((j = 0; j < 8; j++))
                do
                        boxCur[$j]=${boxTest[$j]}
                done
        fi
}

 
#DrawCurBox(bDraw), 繪制當前移動中的方塊, bDraw為1, 畫上, bDraw為0, 抹去方塊。
function DrawCurBox()
{
        local i j t bDraw sBox s
        bDraw=$1

        s=""
        if (( bDraw == 0 ))
        then
                sBox="/040/040"
        else
                sBox="[]"
                s=$s"/033[1m/033[7m/033[3${cBoxCur}m/033[4${cBoxCur}m"
        fi

        for ((j = 0; j < 8; j += 2))
        do
                ((i = iTrayTop + 1 + ${boxCur[$j]} + boxCurY))
                ((t = iTrayLeft + 1 + 2 * (boxCurX + ${boxCur[$j + 1]})))
                #/033[y;xH, 光標到(x, y)處
                s=$s"/033[${i};${t}H${sBox}"
        done
        s=$s"/033[0m"
        echo -n $s
}

 
#更新新的方塊
function RandomBox()
{
        local i j t

        #更新當前移動的方塊
        iBoxCurType=${iBoxNewType}
        iBoxCurRotate=${iBoxNewRotate}
        cBoxCur=${cBoxNew}
        for ((j = 0; j < ${#boxNew[@]}; j++))
        do
                boxCur[$j]=${boxNew[$j]}
        done

 
        #顯示當前移動的方塊
        if (( ${#boxCur[@]} == 8 ))
        then
                #計算當前方塊該從頂端哪一行"冒"出來
                for ((j = 0, t = 4; j < 8; j += 2))
                do
                        if ((${boxCur[$j]} < t)); then t=${boxCur[$j]}; fi
                done
                ((boxCurY = -t))
                for ((j = 1, i = -4, t = 20; j < 8; j += 2))
                do
                        if ((${boxCur[$j]} > i)); then i=${boxCur[$j]}; fi
                        if ((${boxCur[$j]} < t)); then t=${boxCur[$j]}; fi
                done
                ((boxCurX = (iTrayWidth - 1 - i - t) / 2))

                #顯示當前移動的方塊
                echo -ne `DrawCurBox 1`

                #如果方塊一出來就沒處放,Game over!
                if ! BoxMove $boxCurY $boxCurX
                then
                        kill -$sigExit ${PPID}
                        ShowExit
                fi
        fi

 

        #清除右邊預顯示的方塊
        for ((j = 0; j < 4; j++))
        do
                ((i = iTop + 1 + j))
                ((t = iLeft + 2 * iTrayWidth + 7))
                echo -ne "/033[${i};${t}H        "
        done

        #隨機產生新的方塊
        ((iBoxNewType = RANDOM % ${#offsetBox[@]}))
        ((iBoxNewRotate = RANDOM % ${countBox[$iBoxNewType]}))
        for ((j = 0, i = (${offsetBox[$iBoxNewType]} + $iBoxNewRotate) * 8; j < 8; j++, i++))
        do
                boxNew[$j]=${box[$i]};
        done

        ((cBoxNew = ${colorTable[RANDOM % ${#colorTable[@]}]}))

        #顯示右邊預顯示的方塊
        echo -ne "/033[1m/033[7m/033[3${cBoxNew}m/033[4${cBoxNew}m"
        for ((j = 0; j < 8; j += 2))
        do
                ((i = iTop + 1 + ${boxNew[$j]}))
                ((t = iLeft + 2 * iTrayWidth + 7 + 2 * ${boxNew[$j + 1]}))
                echo -ne "/033[${i};${t}H[]"
        done
        echo -ne "/033[0m"
}

 
#初始繪制
function InitDraw()
{
        clear
        RandomBox        #隨機產生方塊,這時右邊預顯示窗口中有方快了
        RandomBox        #再隨機產生方塊,右邊預顯示窗口中的方塊被更新,原先的方塊將開始下落
        local i t1 t2 t3

        #顯示邊框
        echo -ne "/033[1m"
        echo -ne "/033[3${cBorder}m/033[4${cBorder}m"

        ((t2 = iLeft + 1))
        ((t3 = iLeft + iTrayWidth * 2 + 3))
        for ((i = 0; i < iTrayHeight; i++))
        do
                ((t1 = i + iTop + 2))
                echo -ne "/033[${t1};${t2}H||"
                echo -ne "/033[${t1};${t3}H||"
        done

        ((t2 = iTop + iTrayHeight + 2))
        for ((i = 0; i < iTrayWidth + 2; i++))
        do
                ((t1 = i * 2 + iLeft + 1))
                echo -ne "/033[${iTrayTop};${t1}H=="
                echo -ne "/033[${t2};${t1}H=="
        done
        echo -ne "/033[0m"

 
        #顯示"Score"和"Level"字樣
        echo -ne "/033[1m"
        ((t1 = iLeft + iTrayWidth * 2 + 7))
        ((t2 = iTop + 10))
        echo -ne "/033[3${cScore}m/033[${t2};${t1}HScore"
        ((t2 = iTop + 11))
        echo -ne "/033[3${cScoreValue}m/033[${t2};${t1}H${iScore}"
        ((t2 = iTop + 13))
        echo -ne "/033[3${cScore}m/033[${t2};${t1}HLevel"
        ((t2 = iTop + 14))
        echo -ne "/033[3${cScoreValue}m/033[${t2};${t1}H${iLevel}"
        echo -ne "/033[0m"
}

 
#退出時顯示GameOVer!
function ShowExit()
{
        local y
        ((y = iTrayHeight + iTrayTop + 3))
        echo -e "/033[${y};0HGameOver!/033[0m"
        exit
}

 
#顯示用法.
function Usage
{
        cat << EOF
Usage: $APP_NAME
Start tetris game.

  -h, --help              display this help and exit
      --version           output version information and exit
EOF
}

 
#游戲主程序在這兒開始.
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
        Usage
elif [[ "$1" == "--version" ]]; then
        echo "$APP_NAME $APP_VERSION"
elif [[ "$1" == "--show" ]]; then
        #當發現具有參數--show時,運行顯示函數
        RunAsDisplayer
else
        bash $0 --show&        #以參數--show將本程序再運行一遍
        RunAsKeyReceiver $!        #以上一行產生的進程的進程號作為參數
fi

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美在线视频日韩欧美在线视频| 国产区亚洲区欧美区| 日韩在线视频国产| 国产精品91久久| 欧美一区二区.| 亚洲性av在线| 国产精品久久久久久久久久东京| 91国产中文字幕| 欧美肥老太性生活视频| 国产成人精品午夜| 亚洲天堂久久av| 欧美日韩国产999| 欧洲亚洲在线视频| 日韩精品有码在线观看| 国产精品久久久久久av下载红粉| 国产精品久久久久久久久久| 欧美香蕉大胸在线视频观看| 亚洲一区二区三区在线视频| 国产精品偷伦免费视频观看的| 国产91对白在线播放| 自拍偷拍免费精品| 欧美肥老太性生活视频| 国产美女久久精品| 亚洲国产成人久久综合| 精品国产一区久久久| 久久久最新网址| 亚洲精品国产品国语在线| 成人性生交大片免费观看嘿嘿视频| 日韩在线观看免费av| 欧美日韩ab片| 777午夜精品福利在线观看| 国内外成人免费激情在线视频| 精品国内自产拍在线观看| 狠狠色香婷婷久久亚洲精品| 亚洲一区亚洲二区| 国产一区二区三区免费视频| 成人午夜激情免费视频| 国产日韩欧美一二三区| 亚洲品质视频自拍网| 国产视频自拍一区| 国产精品日本精品| 亚洲精品电影网在线观看| 国产精品久久久久一区二区| 亚洲iv一区二区三区| 国产欧美日韩最新| 91亚洲精品一区| 久久福利视频导航| 美女精品久久久| 国产精品在线看| 亚州av一区二区| 中文字幕亚洲一区在线观看| 性色av香蕉一区二区| 国产精品久久久久久久久男| 国产一区二区三区三区在线观看| 久久成人人人人精品欧| 亚洲激情久久久| 国产69精品久久久久9| 亚洲精品欧美日韩| 成人亚洲综合色就1024| 在线观看91久久久久久| 91精品国产成人| 日本三级久久久| 亚洲精品自产拍| 亚洲欧美精品伊人久久| 日韩高清电影好看的电视剧电影| 欧日韩在线观看| 欧美日韩第一页| 欧美贵妇videos办公室| 亚洲自拍高清视频网站| 色与欲影视天天看综合网| 国产日韩在线观看av| 国模叶桐国产精品一区| 欧美性少妇18aaaa视频| 91精品啪aⅴ在线观看国产| 亚洲韩国青草视频| 日韩av中文在线| 日韩精品中文字幕在线观看| 欧美一区二区大胆人体摄影专业网站| 亚洲精品黄网在线观看| 91免费看国产| 91福利视频在线观看| 成人激情视频在线| 日韩成人在线播放| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩av一卡二卡| 欧美日韩一区二区免费视频| 尤物99国产成人精品视频| 久久中文字幕在线视频| 欧美xxxx做受欧美.88| 国产拍精品一二三| 中文字幕精品www乱入免费视频| 亚洲开心激情网| 日韩大片在线观看视频| 一个人www欧美| 色综合91久久精品中文字幕| 欧美乱妇高清无乱码| xxxxxxxxx欧美| 国产一区二区美女视频| 一色桃子一区二区| 福利微拍一区二区| 91亚洲永久免费精品| 日韩专区在线播放| 中文字幕最新精品| 欧美二区乱c黑人| 在线看国产精品| 人体精品一二三区| 亚洲国产成人久久综合一区| 国产午夜精品全部视频在线播放| 国产精品成人av性教育| 81精品国产乱码久久久久久| 日韩免费av一区二区| 日本精品久久久久影院| 日韩美女中文字幕| 久久精品国亚洲| 成人精品视频在线| 精品人伦一区二区三区蜜桃免费| 国产性猛交xxxx免费看久久| 在线午夜精品自拍| 国产91精品不卡视频| 国产精品国产三级国产aⅴ9色| 欧美日韩国产中文精品字幕自在自线| 成人观看高清在线观看免费| 精品亚洲aⅴ在线观看| 成人性生交大片免费观看嘿嘿视频| 日韩精品电影网| 欧美国产极速在线| 欧美一级视频一区二区| 麻豆乱码国产一区二区三区| 国产精品美女av| 精品亚洲aⅴ在线观看| 欧美日韩中文字幕综合视频| 久久久噜噜噜久久中文字免| xxxx欧美18另类的高清| 日韩免费看的电影电视剧大全| 国产99久久精品一区二区| 国产精品视频一区国模私拍| 日韩精品久久久久| 国产精品入口日韩视频大尺度| 亚洲欧洲午夜一线一品| 国产精品久久久久久一区二区| 欧美成年人视频网站欧美| 成人黄色激情网| 亚洲第一网站男人都懂| 欧美性生活大片免费观看网址| 伊人久久大香线蕉av一区二区| 日韩欧美国产中文字幕| 国产精品aaa| 亚洲三级免费看| 欧美另类第一页| 久久国产天堂福利天堂| 性色av一区二区咪爱| 亚洲成人精品在线| 日韩有码视频在线| 成人黄色免费网站在线观看| 曰本色欧美视频在线| 欧洲s码亚洲m码精品一区| 国模精品视频一区二区| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品欧美在线| 欧美激情在线观看视频| 深夜福利91大全| 欧美在线视频免费观看| 亚洲欧美中文另类| 国产精品日日做人人爱|