日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁(yè) > 編程 > HTML > 正文

Html5原創(chuàng)俄羅斯方塊(基于canvas)

2024-08-26 00:21:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

第一次寫(xiě)俄羅斯方塊的時(shí)候已經(jīng)是1年多前了,也是我剛剛學(xué)js不久。

為了加強(qiáng)對(duì)js的理解又加上對(duì)游戲的愛(ài)好,于是在沒(méi)有參考他人的思路和代碼下,自己用最基本的js代碼寫(xiě)出了基于canvas的俄羅斯方塊。

Html5,俄羅斯方塊,canvas

在大三的暑假,我又用了es6的語(yǔ)法進(jìn)行了改進(jìn),包含了class的語(yǔ)法糖、箭頭函數(shù)等,進(jìn)一步增加自己對(duì)es6的理解,代碼有400+行

想要做這個(gè)小游戲,必須先熟悉H5的canvas,js對(duì)數(shù)組的處理,鍵盤事件監(jiān)聽(tīng)和處理,定時(shí)器的使用等,其他的就是基本的邏輯處理了。

游戲的規(guī)則就是核心,也是我們代碼的重中之重

這里的邏輯核心是需要判斷方塊是否碰撞(當(dāng)前運(yùn)動(dòng)的方塊和已經(jīng)定位好的方塊有碰撞以致于當(dāng)前的運(yùn)動(dòng)的方塊不能在向下走,因?yàn)槲覀兊姆綁K默認(rèn)是向下走的,如果不能向下走,是視為已經(jīng)定位好的方塊,然后在生成一個(gè)新的方塊從初始位置繼續(xù)往下走)。

而且這個(gè)碰撞還需要應(yīng)用在方塊變形的時(shí)候,同樣地,如果方塊在變形的過(guò)程中和其他定位好的方塊進(jìn)行碰撞,則我們應(yīng)該阻止這個(gè)方塊進(jìn)行變形成功,

附上代碼,歡迎討論和指正

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>es6-重構(gòu)俄羅斯方塊(基于canvas)</title>    <style type="text/css">        #tetris{ margin: 10px 250px;}    </style></head><body>    <canvas width="700" height="525" id="tetris"></canvas>    <div id="text" style='color: red;font-size: 30px;'>當(dāng)前分?jǐn)?shù):0</div>    <script type="text/javascript">        /**         * [一個(gè)完整的俄羅斯方塊類 design by magic_xiang]         * @param  {number} side     [每個(gè)方塊邊長(zhǎng)(px),默認(rèn)35]         * @param  {number} width     [一行包含的方塊數(shù)(個(gè)),默認(rèn)20]         * @param  {number} height     [一列包含的方塊數(shù)(個(gè)),默認(rèn)15]         * @param  {number} speed     [方塊下落移動(dòng)速度(ms),默認(rèn)400]         */        class tetris{            constructor(side=35, width=20, height=15, speed=400){                this.side = side            // 每個(gè)方塊邊長(zhǎng)                this.width = width            // 一行包含的方塊數(shù)                this.height = height        // 一列包含的方塊數(shù)                this.speed = speed             // 方塊下落移動(dòng)速度                this.num_blcok                // 當(dāng)前方塊類型的數(shù)字變量                this.type_color                // 當(dāng)前顏色類型的字符串變量                this.ident                    // setInterval的標(biāo)識(shí)                this.direction = 1            // 方塊方向,初始化為1,默認(rèn)狀態(tài)                    this.grade = 0                // 用來(lái)計(jì)算分?jǐn)?shù)                this.over = false            // 游戲是否結(jié)束                this.arr_bX = []            // 存放當(dāng)前方塊的X坐標(biāo)                this.arr_bY = []            // 存放當(dāng)前方塊的Y坐標(biāo)                this.arr_store_X = []        // 存放到達(dá)底部所有方塊的X坐標(biāo)                this.arr_store_Y = []        // 存放到達(dá)底部所有方塊的Y坐標(biāo)                this.arr_store_color = []    // 存放到達(dá)底部所有方塊的顏色                this.paints = document.getElementById('tetris').getContext('2d')                //獲取畫(huà)筆                self = this            }            // 封裝paints方法,讓代碼更簡(jiǎn)潔            paintfr(x, y, scale=1){                this.paints.fillRect(x*this.side, y*this.side, scale*this.side, scale*this.side)            }            // 游戲開(kāi)始            gameStart(){                this.init()                this.run()            }            // 初始化工作            init(){                this.initBackground()                this.initBlock()            }            // 方塊自動(dòng)下落            run(){                this.ident = setInterval("self.down_speed_up()", this.speed)            }            // 初始化地圖            initBackground(){                this.paints.beginPath()                this.paints.fillStyle='#000000'        //地圖填充顏色為黑色                for(let i = 0; i < this.height; i++){                    for(let j = 0; j < this.width; j++){                        this.paintfr(j, i)                    }                }                this.paints.closePath()            }            // 初始化方塊的位置和顏色            initBlock(){                this.paints.beginPath()                this.createRandom('rColor')        //生成顏色字符串,                this.paints.fillStyle = this.type_color                this.createRandom('rBlock')        //生成方塊類型數(shù)字                this.arr_bX.forEach((item, index) => {                    this.paintfr(item, this.arr_bY[index], 0.9)                })                this.paints.closePath()            }            // 利用數(shù)組畫(huà)方塊            drawBlock(color){                this.paints.beginPath()                this.paints.fillStyle = color                this.arr_bX.forEach((item, index) => {                    this.paintfr(item, this.arr_bY[index], 0.9)                })                this.paints.closePath()            }            // 畫(huà)已經(jīng)在定位好的方塊            drawStaticBlock(){                this.arr_store_X.forEach((item, index) => {                    this.paints.beginPath()                    this.paints.fillStyle = this.arr_store_color[index]                    this.paintfr(item, this.arr_store_Y[index], 0.9)                    this.paints.closePath()                })            }            // 生成隨機(jī)數(shù)返回方塊類型或顏色類型            createRandom(type){                let temp = this.width/2-1                if (type == 'rBlock'){         //如果是方塊類型                    this.num_blcok = Math.round(Math.random()*4+1)                    switch(this.num_blcok){                        case 1:                            this.arr_bX.push(temp,temp-1,temp,temp+1)                            this.arr_bY.push(0,1,1,1)                            break                        case 2:                            this.arr_bX.push(temp,temp-1,temp-1,temp+1)                            this.arr_bY.push(1,0,1,1)                            break                        case 3:                            this.arr_bX.push(temp,temp-1,temp+1,temp+2)                            this.arr_bY.push(0,0,0,0)                            break                        case 4:                            this.arr_bX.push(temp,temp-1,temp,temp+1)                            this.arr_bY.push(0,0,1,1)                            break                        case 5:                            this.arr_bX.push(temp,temp+1,temp,temp+1)                            this.arr_bY.push(0,0,1,1)                            break                    }                }                if (type == 'rColor'){                         //如果是顏色類型                    let num_color = Math.round(Math.random()*8+1)                     switch(num_color){                        case 1:                            this.type_color='#3EF72A'                            break                        case 2:                            this.type_color='yellow'                            break                        case 3:                            this.type_color='#2FE0BF'                            break                        case 4:                            this.type_color='red'                            break                        case 5:                            this.type_color='gray'                            break                        case 6:                            this.type_color='#C932C6'                            break                        case 7:                            this.type_color= '#FC751B'                            break                        case 8:                            this.type_color= '#6E6EDD'                            break                        case 9:                            this.type_color= '#F4E9E1'                            break                    }                }            }            // 判斷方塊之間是否碰撞(下),以及變形時(shí)是否越過(guò)下邊界            judgeCollision_down(){                for(let i = 0; i < this.arr_bX.length; i++){                    if (this.arr_bY[i] + 1 == this.height){ //變形時(shí)是否越過(guò)下邊界                        return false                    }                     if (this.arr_store_X.length != 0) {    //判斷方塊之間是否碰撞(下)                        for(let j = 0; j < this.arr_store_X.length; j++){                            if (this.arr_bX[i] == this.arr_store_X[j]) {                                if (this.arr_bY[i] + 1 == this.arr_store_Y[j]) {                                    return false                                }                            }                                                    }                    }                    }                return true            }            //判斷方塊之間是否碰撞(左右),以及變形時(shí)是否越過(guò)左右邊界            judgeCollision_other(num){                for(let i = 0; i < this.arr_bX.length; i++){                    if (num == 1) {            //變形時(shí)是否越過(guò)右邊界                        if (this.arr_bX[i] == this.width - 1)                             return false                    }                    if (num == -1) {                //變形時(shí)是否越過(guò)左邊界                        if (this.arr_bX[i] == 0)                            return false                    }                    if (this.arr_store_X.length != 0) {                    //判斷方塊之間是否碰撞(左右)                        for(let j = 0; j < this.arr_store_X.length; j++){                            if (this.arr_bY[i] == this.arr_store_Y[j]) {                                if (this.arr_bX[i] + num == this.arr_store_X[j]) {                                    return false                                }                            }                        }                    }                }                return true;            }            //方向鍵為下的加速函數(shù)            down_speed_up(){                let flag_all_down = true                flag_all_down = this.judgeCollision_down()                                if (flag_all_down) {                    this.initBackground()                    for(let i = 0; i < this.arr_bY.length; i++){                        this.arr_bY[i] = this.arr_bY[i] + 1                    }                }                else{                    for(let i=0; i < this.arr_bX.length; i++){                        this.arr_store_X.push(this.arr_bX[i])                        this.arr_store_Y.push(this.arr_bY[i])                        this.arr_store_color.push(this.type_color)                    }                                    this.arr_bX.splice(0,this.arr_bX.length)                    this.arr_bY.splice(0,this.arr_bY.length)                    this.initBlock()                }                this.clearUnderBlock()                this.drawBlock(this.type_color)                this.drawStaticBlock()                this.gameover()            }            //方向鍵為左右的左移動(dòng)函數(shù)            move(dir_temp){                this.initBackground()                if (dir_temp == 1) {                    //右                    let flag_all_right = true                    flag_all_right = this.judgeCollision_other(1)                                        if (flag_all_right) {                        for(let i = 0; i < this.arr_bY.length; i++){                            this.arr_bX[i] = this.arr_bX[i]+1                        }                    }                }                else{                    let flag_all_left = true                    flag_all_left = this.judgeCollision_other(-1)                    if (flag_all_left) {                        for(let i=0; i < this.arr_bY.length; i++){                            this.arr_bX[i] = this.arr_bX[i]-1                        }                    }                }                this.drawBlock(this.type_color)                this.drawStaticBlock()            }            //方向鍵為空格的變換方向函數(shù)            up_change_direction(num_blcok){                 if (num_blcok == 5) {                    return                }                                let arr_tempX = []                let arr_tempY = []                //因?yàn)椴恢朗欠衲軌蜃冃纬晒Γ韵却鎯?chǔ)起來(lái)                for(let i = 0;i < this.arr_bX.length; i++){                        arr_tempX.push(this.arr_bX[i])                    arr_tempY.push(this.arr_bY[i])                }                this.direction++                //將中心坐標(biāo)提取出來(lái),變形都以當(dāng)前中心為準(zhǔn)                let ax_temp = this.arr_bX[0]                    let ay_temp = this.arr_bY[0]                                this.arr_bX.splice(0, this.arr_bX.length)            //將數(shù)組清空                 this.arr_bY.splice(0, this.arr_bY.length)                if (num_blcok == 1) {                                        switch(this.direction%4){                        case 1:                            this.arr_bX.push(ax_temp,ax_temp-1,ax_temp,ax_temp+1)                            this.arr_bY.push(ay_temp,ay_temp+1,ay_temp+1,ay_temp+1)                            break                        case 2:                            this.arr_bX.push(ax_temp,ax_temp-1,ax_temp,ax_temp)                            this.arr_bY.push(ay_temp,ay_temp,ay_temp-1,ay_temp+1)                            break                        case 3:                            this.arr_bX.push(ax_temp,ax_temp-1,ax_temp,ax_temp+1)                            this.arr_bY.push(ay_temp,ay_temp,ay_temp+1,ay_temp)                            break                        case 0:                            this.arr_bX.push(ax_temp,ax_temp,ax_temp,ax_temp+1)                            this.arr_bY.push(ay_temp,ay_temp-1,ay_temp+1,ay_temp)                            break                    }                }                if (num_blcok == 2) {                                        switch(this.direction%4){                        case 1:                            this.arr_bX.push(ax_temp,ax_temp-1,ax_temp-1,ax_temp+1)                            this.arr_bY.push(ay_temp,ay_temp,ay_temp-1,ay_temp)                            break                        case 2:                            this.arr_bX.push(ax_temp,ax_temp,ax_temp,ax_temp-1)                            this.arr_bY.push(ay_temp,ay_temp-1,ay_temp+1,ay_temp+1)                            break                        case 3:                            this.arr_bX.push(ax_temp,ax_temp-1,ax_temp+1,ax_temp+1)                            this.arr_bY.push(ay_temp,ay_temp,ay_temp,ay_temp+1)                            break                        case 0:                            this.arr_bX.push(ax_temp,ax_temp,ax_temp,ax_temp+1)                            this.arr_bY.push(ay_temp,ay_temp-1,ay_temp+1,ay_temp-1)                            break                    }                }                if (num_blcok == 3) {                                        switch(this.direction%4){                        case 1:                            this.arr_bX.push(ax_temp,ax_temp-1,ax_temp+1,ax_temp+2)                            this.arr_bY.push(ay_temp,ay_temp,ay_temp,ay_temp)                            break                        case 2:                            this.arr_bX.push(ax_temp,ax_temp,ax_temp,ax_temp)                            this.arr_bY.push(ay_temp,ay_temp-1,ay_temp+1,ay_temp+2)                            break                        case 3:                            this.arr_bX.push(ax_temp,ax_temp-1,ax_temp+1,ax_temp+2)                            this.arr_bY.push(ay_temp,ay_temp,ay_temp,ay_temp)                            break                        case 0:                            this.arr_bX.push(ax_temp,ax_temp,ax_temp,ax_temp)                            this.arr_bY.push(ay_temp,ay_temp-1,ay_temp+1,ay_temp+2)                            break                    }                }                if (num_blcok == 4) {                                        switch(this.direction%4){                        case 1:                            this.arr_bX.push(ax_temp,ax_temp-1,ax_temp,ax_temp+1)                            this.arr_bY.push(ay_temp,ay_temp,ay_temp+1,ay_temp+1)                            break                        case 2:                            this.arr_bX.push(ax_temp,ax_temp,ax_temp+1,ax_temp+1)                            this.arr_bY.push(ay_temp,ay_temp+1,ay_temp,ay_temp-1)                            break                        case 3:                            this.arr_bX.push(ax_temp,ax_temp,ax_temp-1,ax_temp+1)                            this.arr_bY.push(ay_temp,ay_temp-1,ay_temp,ay_temp-1)                            break                        case 0:                            this.arr_bX.push(ax_temp,ax_temp,ax_temp+1,ax_temp+1)                            this.arr_bY.push(ay_temp,ay_temp-1,ay_temp,ay_temp+1)                            break                    }                }                                if (! (this.judgeCollision_other(-1) && this.judgeCollision_down() && this.judgeCollision_other(1)  )) {            //如果變形不成功則執(zhí)行下面代碼                    this.arr_bX.splice(0, this.arr_bX.length)                                 this.arr_bY.splice(0, this.arr_bY.length)                    for(let i=0; i< arr_tempX.length; i++){                        this.arr_bX.push(arr_tempX[i])                        this.arr_bY.push(arr_tempY[i])                    }                }                this.drawStaticBlock()            }            //一行滿了清空方塊,上面方塊Y坐標(biāo)+1            clearUnderBlock(){                //刪除低層方塊                let arr_row=[]                let line_num                if (this.arr_store_X.length != 0) {                    for(let j = this.height-1; j >= 0; j--){                        for(let i = 0; i < this.arr_store_color.length; i++){                            if (this.arr_store_Y[i] == j) {                                arr_row.push(i)                            }                        }                        if (arr_row.length == this.width) {                            line_num = j                            break                        }else{                            arr_row.splice(0, arr_row.length)                        }                    }                }                                    if (arr_row.length == this.width) {                    //計(jì)算成績(jī)grade                    this.grade++                                        document.getElementById('text').innerHTML = '當(dāng)前成績(jī):'+this.grade                    for(let i = 0; i < arr_row.length; i++){                        this.arr_store_X.splice(arr_row[i]-i, 1)                        this.arr_store_Y.splice(arr_row[i]-i, 1)                        this.arr_store_color.splice(arr_row[i]-i, 1)                    }                                    //讓上面的方塊往下掉一格                    for(let i = 0; i < this.arr_store_color.length; i++){                        if (this.arr_store_Y[i] < line_num) {                            this.arr_store_Y[i] = this.arr_store_Y[i]+1                        }                    }                }            }            //判斷游戲結(jié)束            gameover(){                for(let i=0; i < this.arr_store_X.length; i++){                    if (this.arr_store_Y[i] == 0) {                        clearInterval(this.ident)                        this.over = true                    }                }            }        }        let tetrisObj = new tetris()        tetrisObj.gameStart()                //方向鍵功能函數(shù)        document.onkeydown = (e) => {               if (tetrisObj.over)                return            switch(e.keyCode){                case 40:  // 方向?yàn)橄?                   tetrisObj.down_speed_up()                    break                case 32:  // 空格換方向                    tetrisObj.initBackground()        //重畫(huà)地圖                    tetrisObj.up_change_direction(tetrisObj.num_blcok)                    tetrisObj.drawBlock(tetrisObj.type_color)                    break                case 37:  // 方向?yàn)樽?                   tetrisObj.initBackground()                    tetrisObj.move(-1)                    tetrisObj.drawBlock(tetrisObj.type_color)                    break                case 39:  // 方向?yàn)橛?                   tetrisObj.initBackground()                    tetrisObj.move(1)                    tetrisObj.drawBlock(tetrisObj.type_color)                    break            }            }    </script></body></html>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到HTML教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
欧美亚洲视频在线看网址| 国产蜜臀在线| 亚洲一区三区在线观看| 精品国内自产拍在线视频| 综合激情一区| 日韩 欧美 综合| 麻豆一区二区99久久久久| 国产欧美一级| 一区二区在线视频播放| 日韩欧美一级精品久久| 激情久久99| 日本中文字幕在线观看| 一区二区在线高清视频| 国产永久在线观看| 精品网站999| 中文字幕高清在线播放| 国产成人精品亚洲| 精品国内自产拍在线视频| 国产丝袜一区| aa国产成人| av三级在线观看| 日韩欧美国产片| 日韩中文首页| 日韩在线视频二区| 欧美久久综合性欧美| 国内不卡的二区三区中文字幕| 91精品国产综合久久香蕉最新版| 中文字幕五月天| 亚洲国产一区自拍| а√天堂8资源中文在线| 99久热re在线精彩视频| 国产欧美日韩在线视频| 日韩欧美一级二级三级久久久| 欧美自拍一区| 天天摸日日摸狠狠添| 国产网站欧美日韩免费精品在线观看| 欧美亚洲国产日韩2020| 国产香蕉免费精品视频| 日韩av不卡在线观看| 91麻豆视频网站| 国内精品99| 蜜桃视频一日韩欧美专区| 精品国产欧美日韩| 欧美日韩在线视频一区| 日韩不卡一二三区| 亚洲小说春色综合另类电影| 国产在线精品日韩| 天天在线视频色| 日本免费在线视频不卡一不卡二| 日韩免费不卡avV| 精品日韩av| 日韩欧美在线综合| 亚洲一区激情| 欧美色视频一区二区三区在线观看| 亚洲欧美中文字幕在线观看| 一区在线视频观看| 欧美一级欧美三级在线观看| 影音先锋中文字幕在线观看| 久久激情一区| 欧美日韩中文精品| 亚洲.国产.中文慕字在线| 国产999在线观看| 国产欧美日韩中文| 91极品视频在线观看| 成人久久在线| 中文欧美字幕免费| 日韩视频不卡中文| 本道综合精品| 国产日韩av一区二区| 九七久久人人| 日韩欧美中文第一页| 欧美一级欧美三级在线观看| 久久精品日韩欧美| 日韩视频1区| 日韩视频 中文字幕| 日韩.com| 欧美日韩中文字幕视频| 欧美国产一区视频在线观看| 欧美日韩中文字幕精品| va中文字幕| 亚洲电影中文字幕在线观看| 91九色在线看| 国产在线小视频| 精品国产欧美日韩不卡在线观看| 午夜精品一区二区三区免费视频| 欧美日韩视频在线| 免费视频二区| 精品久久91| 精品网站999| a√免费观看在线网址www| 欧美日韩精品在线播放| 日韩在线高清视频| 日韩免费视频| 精品日韩在线观看| 中文字幕最新精品| 亚洲二区自拍| 欧美 日韩 国产在线观看| 日韩福利视频导航| 欧美日韩国产首页在线观看| 欧美日韩一级黄| 国产在线播放一区二区| 国产一区免费视频| 美女尤物久久精品| 国产一级久久久| 欧美日韩国产专区| 日韩欧美中文字幕一区| 欧美日韩在线三级| 在线视频观看日韩| 中文字幕日韩在线视频| 欧洲精品二区| 欧美日韩国产观看视频| 中文字幕亚洲第一| 日韩在线观看视频一区二区| 日韩中文字幕在线播放| 日韩亚洲不卡在线| 中文字幕不卡三区| 欧美亚洲国产日韩2020| 日本一级一片免费视频| 精品日韩欧美| 国产欧美日韩综合| 91精品婷婷国产综合久久| 成人精品国产福利| 欧美日韩国产中文精品字幕自在自线 | 欧美精选午夜久久久乱码6080| 欧美日韩国产大片| 亚洲一区中文| 91精品国产入口| 91精品在线观| 国产欧美三级| 欧美日韩视频不卡| 在线中文字幕视频观看| 精品色蜜蜜精品视频在线观看| 久久精品最新免费国产成人| 久久91精品久久久久久秒播| 中文字幕2020第一页| 欧美三级三级三级爽爽爽| 日韩视频在线一区二区| 日韩免费久久| 亚洲免费精品视频| 免费视频二区| 一区二区中文视频| 欧美日韩成人综合| 成人a在线观看| 欧美亚洲国产免费| 91精品国产91久久久久久不卡| 99视频精品全国免费| 亚洲社区在线| 樱花草www在线| 中文av字幕一区| 日韩亚洲欧美中文在线| 97国产视频| 亚洲免费播放| 国产欧美日韩不卡免费| 99久热re在线精彩视频| 91日韩中文字幕| 欧美日韩夫妻久久| 二区三区不卡不卡视频| 午夜少妇久久久久久久久| 欧美婷婷精品激情| 日韩亚洲国产欧美| 91欧美在线视频| 中文字幕欧美日韩在线不卡| 欧美久久在线观看| 久久人人88| 91九色在线播放| 国产欧美日韩在线视频| 日韩一二三四区| 日韩欧美在线视频日韩欧美在线视频 | 欧美日韩国产综合视频在线观看中文| 一区二区三区在线免费| 免费日韩精品中文字幕视频在线| 中文字幕欧美国内| 国产欧美日韩在线| 国产日韩1区| 亚洲综合在线中文字幕| 激情婷婷亚洲| 日韩精品国产欧美| 久久99精品久久久久婷婷| 国产成人精品三级| 婷婷久久综合九色国产成人| 国产视频二区| 伊人精品视频| 欧美一级免费看| 92久久精品| 精品人妻一区二区三区视频| 欧美日韩一区二区在线视频| 欧美激情视频一区二区三区在线播放 | 日本亚洲欧美天堂免费| 日韩一级免费视频| 国产一区在线不卡| 国产三级免费观看| 一二三区精品视频| 在线免费播放av| 91精品国产丝袜白色高跟鞋| 九九精品调教| 国产 欧美 在线| 日韩激情一区| wwwav在线播放| 亚洲娇小xxxx欧美娇小| 中文字幕成人乱码在线电影| 亚洲成av人综合在线观看| 日韩在线视频二区| 91麻豆视频网站| 大香一本蕉伊线亚洲网| 久久99精品久久久久久青青日本 | 日韩高清不卡一区| 成人h视频在线观看| 欧美大片在线观看一区| 国产免费电影网站入口| 中文字幕亚洲第一| 国产亚洲污的网站| 日韩欧美在线精品| 午夜影院在线观看欧美| 亚洲成年人在线播放| 欧美日韩国产区| 精品成人久久久| 天堂中文在线视频| 精品综合久久久久| 亚洲视频一二三四| 欧美日韩国产第一页| 久久99精品久久久| 中文字幕在线观看国产| 精品福利在线观看| 国产卡1卡2卡三卡在线| 日韩午夜一区| 欧美日韩在线视频免费观看| 亚洲女人天堂a在线播放| 欧美日韩久久不卡| 精品国产免费视频| 精品日韩一区二区三区免费视频| 在线视频日韩欧美| 中文字幕在线视频第一页| 国产一卡2卡3卡4卡网站免费| 欧美日韩夫妻久久| 福利在线国产| 欧美日韩中文在线| 国产在成人精品线拍偷自揄拍| 成人久久久久| 国产在线黄色| 中文av字幕一区| 国产日韩专区| 国自产拍在线网站网址视频| 日本精品福利视频| 亚洲视频在线观看日本a| 欧美国产亚洲一区| 国产区日韩欧美| 国产中文在线观看| 亚洲第一中文字幕| 国产亚洲人成a一在线v站| 久久综合九色欧美综合狠狠| 欧美日韩国产一中文字不卡| 一区二区三区四区五区视频在线观看| 九一久久久久久| 欧美日韩在线三级| 国产一区深夜福利| 伊人伊成久久人综合网小说| 正在播放日韩精品| 日韩美女中文字幕| 中文字幕一区免费| 亚洲视频资源在线| 国产成人精品综合久久久| 久久精品一级爱片| 久久蜜桃精品| 亚洲成年人在线播放| 亚洲乱码中文字幕| 日韩欧美亚洲视频| 亚洲欧美99| 欧美日本精品在线| 欧美不卡一二三| xxxcom在线观看| 99精品一级欧美片免费播放| 中文字幕不卡三区| 大香一本蕉伊线亚洲网| 精品国产乱码一区二区| 亚洲欧美99| 日韩欧美视频一区二区三区四区| 中文字幕在线播出| 欧美日韩精品在线视频| 日韩高清不卡| aaa欧美日韩| 日韩欧美久久| 欧美三级在线看| 中文国产字幕在线观看| 日韩精品欧美在线| 日韩中文欧美在线| 国产欧美日韩精品在线| 日本精品福利视频| 亚洲二区自拍| 国产香蕉精品视频| 欧美日韩国产片| 久久99久久久久| 精品日韩欧美| 精品国内自产拍在线视频| 日韩中文字幕综合| 日韩中文字幕视频在线观看| 精品一区二区在线观看视频| 蜜桃久久av一区| 欧美 日韩 国产 在线观看| 国产午夜精品全部视频播放| 精品国产乱码久久久久久蜜臀| 999视频精品| 欧美久久久久久蜜桃| 欧美日韩国产综合视频在线观看| 欧美日韩精品免费| 国产欧美日韩中文| а√天堂中文在线资源8| 中文字幕欧美日韩精品| 国产拍揄自揄精品视频麻豆| 日韩专区视频网站| 亚洲三级网站| 在线资源av| 久久久久久久久综合| 亚洲高清在线观看一区| 国产中文伊人| av免费观看国产| 一区二区中文字幕在线| 日韩在线欧美| 首页国产欧美久久| 久久99精品久久久久婷婷| www.日韩免费| 欧美不卡123| 精品在线一区二区| 高清在线一区| 日韩在线中文视频| 51精品免费网站| 中文字幕第一页在线| 国产91一区| 亚洲一区中文| 国产成人精品999在线观看| 精品在线一区二区| 日韩欧美国产午夜精品| 国产自产视频| 中文字幕精品国产| 日韩欧美国产午夜精品| 国产在线精品日韩| 久久riav| 中文字幕最新精品| 欧美日韩免费精品| 亚洲经典中文字幕| 99视频精品全国免费| 国产资源中文字幕| 精品综合久久久久| 精品日韩视频在线观看 | 91精品啪在线观看国产60岁 | 91久久久精品国产| 午夜伦欧美伦电影理论片| 国产三级第一页| 日韩 国产 一区| 日韩手机在线观看视频| 精人妻一区二区三区| av中文天堂在线| 国产一二三四| 91精品免费在线观看| 国产免费一级| 亚洲国产综合久久| 国产欧美三级| 中文在线视频观看| 中文字幕在线中文字幕二区| 国产亚洲一区字幕| 亚洲免费福利视频| 国产一级在线免费观看| 欧美日韩中文字幕视频| 国产一级在线| 91精品国产亚洲| 亚洲综合日韩| 精品视频—区二区三区免费| 日本亚洲欧美| 在线中文免费视频| 国产欧美综合视频| 蜜桃久久av一区| 亚洲一区视频在线观看视频| 一区二区不卡久久精品| 黄色国产网站在线观看| 久久久精品午夜少妇| 二区三区不卡不卡视频| 欧美三级日本三级少妇99| 精品调教chinesegay| 中文字幕线观看| 在线日韩欧美| 久久91精品久久久久久秒播| 日韩在线视频免费观看高清中文 | 亚洲高清在线免费| 中文字幕在线视频精品| 91欧美日韩在线| 久久电影国产免费久久电影| 日韩精品在线第一页| 日本不卡视频一区| 91精品国产入口| 日韩福利视频导航| 在线资源av| 中文字幕精品在线| 亚洲一区日韩在线| av免费在线网站| 正在播放日韩精品| 精品九九久久| 国产调教精品| 国产三级在线播放| 一区二区三区在线免费 | 欧美日韩亚洲国内综合网| 欧美 日韩 国产 高清|