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

首頁 > 編程 > HTML > 正文

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

2024-08-26 00:21:16
字體:
供稿:網(wǎng)友

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

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

Html5,俄羅斯方塊,canvas

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

想要做這個(gè)小游戲,必須先熟悉H5的canvas,js對(duì)數(shù)組的處理,鍵盤事件監(jiān)聽和處理,定時(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í)候,同樣地,如果方塊在變形的過程中和其他定位好的方塊進(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è)方塊邊長(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è)方塊邊長                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                // 用來計(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')                //獲取畫筆                self = this            }            // 封裝paints方法,讓代碼更簡潔            paintfr(x, y, scale=1){                this.paints.fillRect(x*this.side, y*this.side, scale*this.side, scale*this.side)            }            // 游戲開始            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ù)組畫方塊            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()            }            // 畫已經(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í)是否越過下邊界            judgeCollision_down(){                for(let i = 0; i < this.arr_bX.length; i++){                    if (this.arr_bY[i] + 1 == this.height){ //變形時(shí)是否越過下邊界                        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í)是否越過左右邊界            judgeCollision_other(num){                for(let i = 0; i < this.arr_bX.length; i++){                    if (num == 1) {            //變形時(shí)是否越過右邊界                        if (this.arr_bX[i] == this.width - 1)                             return false                    }                    if (num == -1) {                //變形時(shí)是否越過左邊界                        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ǔ)起來                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)提取出來,變形都以當(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ì)算成績grade                    this.grade++                                        document.getElementById('text').innerHTML = '當(dāng)前成績:'+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()        //重畫地圖                    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>

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


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到HTML教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
日韩亚洲欧美一区二区三区| 久久久精品电影| 97se亚洲国产综合在线| 亚洲成人动漫在线播放| 国产成人无码www免费视频播放| 国产高清视频在线播放| 91麻豆精品国产91久久久使用方法| 一区二区三区精品视频在线| 很黄很污的视频网站| 国产视频在线一区二区| 日韩精品一区二区三区四区| 都市激情久久综合| 精品久久一二三区| 国产精品电影久久久久电影网| 尤物国产精品| 日韩欧美亚洲另类| 成人黄色片免费| 99精品一区二区三区| 成人3d漫画免费无遮挡软件| 一区二区三区不卡视频| 国产裸体免费无遮挡| 最新中文字幕在线观看| 在线午夜视频| 色综合久久六月婷婷中文字幕| 国产欧美日韩综合精品一区二区| 日韩亚洲视频在线观看| 一区二区三区四区免费视频| 国产超碰在线一区| 91浏览器在线观看| 免费在线一区二区| 国产精品毛片一区二区| 精品无人码麻豆乱码1区2区| 麻豆一二三区精品蜜桃| 午夜不卡福利视频| 美女视频免费精品| 欧美电影免费观看网站| 久久国产成人精品国产成人亚洲| 麻豆网址在线观看| 大尺度一区二区| 媚黑女一区二区| 国产福利精品av综合导导航| 亚洲精品日韩综合观看成人91| 欧美多人野外伦交| 久久免费精品国产| 一区免费在线| 国产成人调教视频在线观看| 亚洲综合精品视频| 国产精品网站大全| 91麻豆国产精品| 黄色在线免费观看大全| 中文字幕不卡| 男人插女人欧美| 国产激情一区二区三区在线观看| 影院欧美亚洲| 天堂中文在线网| 欧美精品99久久| 久久精品72免费观看| 日韩高清免费观看| 欧美xxxx视频| 久久久久久久久久成人| 国产精品专区一| 国产女无套免费视频| 国产av无码专区亚洲av麻豆| 欧美日本韩国国产| 日韩黄色一级大片| 国产人成一区二区三区影院| 中文字幕亚洲欧美日韩| 国产破处视频在线观看| 亚洲欧洲精品一区二区三区波多野1战4| 视频在线观看一区二区| 亚洲人成在线观| 国产深夜精品| 91精品视频网站| 91九色在线porn| 日韩在线综合网| 国产 国语对白 露脸| 91丨porny丨探花| 日韩不卡视频一区二区| 国产黄色片免费| 精品国产31久久久久久| 天美星空大象mv在线观看视频| 婷婷伊人综合中文字幕| 久久精品一区二区免费播放| 今天的高清视频免费播放成人| fc2ppv在线观看| eeuss鲁一区二区三区| 亚洲第一网中文字幕| 色yeye香蕉凹凸一区二区av| 国产精品欧美久久久久一区二区| 拍拍拍在线观看视频免费| japanese日本护士撒尿| 啊啊啊久久久| 国产精品va在线播放| 深夜福利视频在线观看| 国产91亚洲精品| 亚洲高清毛片一区二区| 亚洲av成人无码久久精品| 四虎成人永久地址| 美女网站色精品尤物极品姐弟| 亚洲欧洲精品一区二区三区波多野1战4| 国产一级在线观看| 久久久久久久久电影| 亚洲精品一区久久久久久| 亚洲va在线va天堂成人| 欧美va亚洲va香蕉在线| 亚洲国产综合久久| 在线亚洲男人天堂| 欧美精品观看| 成人免费xx| 日韩一区二区三区资源| 天堂网成人在线| 欧美性高清videossexo| 欧美激情一区在线| 一区二区三区四区五区精品| 18禁男女爽爽爽午夜网站免费| 国产精品一二三区视频| 亚洲国产成人在人网站天堂| 亚洲综合久久久| 午夜一区二区三区| 黄色免费网址大全| 日本19禁啪啪吃奶大尺度| 日韩视频一区二区在线观看| 亚洲国产精品一区在线观看不卡| 成人福利片在线| 久久久久九九视频| 日韩精品一区二区三区在线| 中文字幕av一区中文字幕天堂| 国产欧美高清视频在线| 免费免费啪视频在线观播放| 美女把尿口扒开给男人桶视频| 国产激情偷乱视频一区二区三区| 在线黄色国产视频| 国产aⅴ精品一区二区三区黄| 欧美另类高清zo欧美| 久久91超碰青草在哪里看| 2023av在线| 国产超级av在线| 国产精品va在线播放我和闺蜜| 91肉色超薄丝袜脚交一区二区| 日本五十熟hd丰满| 亚洲国内自拍| 久久久午夜精品理论片中文字幕| 日韩成人在线看| heyzo视频在线播放| 日韩一区二区在线免费观看| 免费黄色网址在线观看| 亚洲少妇激情视频| 91tv亚洲精品香蕉国产一区| 亚洲小视频在线播放| 日韩一级欧美一级| 色综合亚洲精品激情狠狠| 国产精品免费人成网站| 精品国产一区二区三区四区vr| 成人高清伦理免费影院在线观看| 天天做夜夜操| 日韩精品久久久久久久电影99爱| 黄色大片a级| 视频在线观看你懂的| 国产精品久久久久久久久鸭| 日日爱夜夜操| 国产一区二区三区在线观看精品| 亚洲精品按摩视频| 国产高清一区二区三区视频| 日韩伦理片在线观看| 美洲天堂一区二卡三卡四卡视频| 奇米成人av国产一区二区三区| 久久国产精品毛片| 人人玩人人添人人澡免费| 人妻少妇精品视频一区二区三区| 91吃瓜在线观看| 91精品国偷自产在线电影| 一区二区三区视频免费视频观看网站| 68精品国产免费久久久久久婷婷| 中文字幕在线免费看线人| 同性恋视频网站资源| 成人影院大全| 欧美成在线观看| 精品中文字幕一区二区三区av| 亚洲图片第一页| 久久99国产精一区二区三区| 亚洲精品国产精品国产自| 九九热免费精品视频| 亚洲s色大片在线观看| 在线观看亚洲天堂| 欧美另类高清视频在线| 91精品国产九九九久久久亚洲| 高清毛片在线观看| 午夜精品久久久久久久99热| www.日韩在线| 6080yy午夜一二三区久久| 不卡在线视频| 国产精品久久一卡二卡| 精品久久久噜噜噜噜久久图片| 日韩中文字幕一区二区三区| 欧美成人黄色网| 久久品道一品道久久精品| 国产伦精品一区二区三区88av| 2001个疯子在线观看| 日本久久天堂| 国产一区二区三区四区五区六区| 亚洲一区二区三区久久久| 成人免费播放器| 亚洲国产日韩一区二区| 日本成年人网址| 一区二区三区四区在线免费视频| 亚洲高清福利视频| 日本不卡视频在线| 成人小说亚洲一区二区三区| 欧美综合在线视频| 在线天堂中文资源最新版| 成年人黄视频网站| 天堂а√在线最新版中文在线| 一级特黄曰皮片视频| 99久久99久久免费精品蜜臀| 国产精品免费精品自在线观看| 国产精品麻豆久久| 亚洲欧美国产77777| 激情综合亚洲| 亚洲国产精华液网站w| 国产成人永久免费视频| 成人免费黄色大片| 香蕉视频1024| 91久久综合亚洲鲁鲁五月天| 国产麻豆日韩| 国产成人精品一区二区三区在线| 中文字字幕码一二三区| 亚洲精品电影在线一区| 天天综合日日夜夜精品| 日韩视频在线观看视频| 国产色婷婷亚洲99精品小说| 亚洲精品美女久久| 最近中文字幕在线| 亚洲精品美女久久| 国产一二三四区在线观看| 奇米影音第四色| 人妻一区二区三区免费| 国产精品日日做人人爱| 一本一道久久久a久久久精品91| 亚洲图区一区| 午夜伊人狠狠久久| 天天揉久久久久亚洲精品| 欧美一区二区大片| 成人毛片在线| 羞羞色国产精品网站| 国精产品一区一区三区mba下载| 欧美啪啪免费视频| 欧美日韩国产精品一区二区| 日本中文字幕高清视频| 亚洲天堂一二三| 国产又粗又猛又爽又黄的网站| www.在线视频.com| 亚洲美女又黄又爽在线观看| 国产最新免费视频| 手机在线观看毛片| 国产电影一区二区| 一起草最新网址| 欧美国产另类| 欧美第一页草草影院浮力| 三上悠亚在线观看视频| 岛国毛片av在线| hitomi一区二区三区精品| 久久久亚洲欧洲日产国码αv| 欧美亚洲国产日本| 亚洲精品中文字幕乱码三区91| 一级黄色片在线免费观看| 欧美18一19xxx性| 免费毛片在线| 日韩美女主播视频| 国产又粗又猛又爽又| 影音先锋黄色资源| 国产秀色在线www免费观看| 中文字幕一区在线播放| 国产精品美女久久久久久久久| 蜜臀视频在线观看| 国产性生活一级片| 国产日韩电影| 天天摸天天碰天天爽天天弄| 中文字幕免费国产精品| 国产欧美日韩亚洲一区二区三区| 日本特黄特色aaa大片免费| shkd中文字幕久久在线观看| 成人黄网大全在线观看| 国产精品久久久久77777丨| 飘雪影院手机免费高清版在线观看| 免费国产自线拍一欧美视频| 国产精品特级毛片一区二区三区| 四虎永久成年免费影院| 男人的天堂99| 亚洲系列在线观看| 性生生活性生交a级| 日本aⅴ亚洲精品中文乱码| 国产一区二区三区网| 日本伊人久久| 国产乱妇无码大片在线观看| 菠萝蜜视频在线观看www入口| 丰满湿润大白屁股bbw按摩| 亚洲区欧洲区| 日韩在线观看视频免费| 成人免费在线播放| 免费av福利| 欧洲亚洲免费在线| 嫩草影院一区二区| 911精品美国片911久久久| 亚洲一区在线观看免费观看电影高清| 成年人视频网站在线| 三级在线观看视频| 影音先锋男人的网站| 一广人看www在线观看免费视频| 在线播放一级片| 美女网站在线看| 国产精品视频a| 亚洲精品国产一区二区精华液| 91视频入口| 日本xxxxxxxxxx75| 国产欧美一区二区三区精品观看| 亚洲欧美卡通另类91av| 成 人 黄 色 片 在线播放| 精品亚洲a∨一区二区三区18| 国产精品999久久久| 我的公把我弄高潮了视频| 1卡2卡3卡精品视频| 日韩欧美电影一区二区| 香蕉久久一区二区三区| 国产欧美在线观看一区| 色婷婷在线播放| 亚洲一区三区在线观看| 日本午夜精品一区二区三区| 成人精品在线播放|