成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > Html5原創(chuàng)俄羅斯方塊(基于canvas)

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

熱門標(biāo)簽:智能電銷機(jī)器人被禁用了么 高德地圖標(biāo)注商戶怎么標(biāo) 惡搞電話機(jī)器人 ok電銷機(jī)器人 黃石ai電銷機(jī)器人呼叫中心 如何查看地圖標(biāo)注 欣鼎電銷機(jī)器人 效果 地圖標(biāo)注軟件打印出來 電話機(jī)器人技術(shù)

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

為了加強(qiáng)對(duì)js的理解又加上對(duì)游戲的愛好,于是在沒有參考他人的思路和代碼下,自己用最基本的js代碼寫出了基于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è)方塊邊長(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                // 用來計(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方法,讓代碼更簡(jiǎn)潔
            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ì)算成績(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()        //重畫地圖
                    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í)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:盤錦 聊城 赤峰 綏化 萍鄉(xiāng) 金昌 中山 阿壩

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Html5原創(chuàng)俄羅斯方塊(基于canvas)》,本文關(guān)鍵詞  Html5,原創(chuàng),俄羅斯,方塊,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Html5原創(chuàng)俄羅斯方塊(基于canvas)》相關(guān)的同類信息!
  • 本頁收集關(guān)于Html5原創(chuàng)俄羅斯方塊(基于canvas)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    777色狠狠一区二区三区| 美女极度色诱视频www免费观看| 中文字幕视频免费观看| 国产v日产∨综合v精品视频| 国产毛片一区二区三区| 亚洲精品鲁一鲁一区二区三区| 欧美在线黄色| 99久免费精品视频在线观看| 天天躁日日躁狠狠躁超碰2020| 先锋影院av| 粉嫩av一区二区三区四区五区| 中国精品18videos性欧美| 欧美另类videoxo高潮| 日韩一卡二卡三卡| 精品一区2区三区| 精品视频在线观看网站| 免费在线成人网| 五月综合激情婷婷六月色窝| 日韩av网站电影| 亚洲美女尤物影院| 成人av小说网| 欧美高清在线一区二区| 日韩精品免费电影| 精品人妻一区二区三区免费看| 蜜桃av一区| 日韩免费一级| 91精品国产91久久久久久吃药| 久久影视电视剧免费网站清宫辞电视| 久久久无码人妻精品一区| 欧美日本韩国一区二区三区| 亚州欧美在线| 亚洲国产天堂网精品网站| 欧美18—19sex性hd| 亚洲欧美自拍偷拍色图| 国精产品一区二区| 久草视频中文在线| 国产又粗又长又硬| 亚洲高清999| 日本免费高清视频| 都市激情亚洲色图| 国产精成人品免费观看| 91成人app| 91极品视觉盛宴| 青青草华人在线视频| 91中文字幕在线| 国产一二三区精品| 俺去啦最新官网| 国产二级c片l毛片| 韩国视频一区二区| 亚洲国产精品一区制服丝袜| 精品国产欧美一区二区| 日韩免费观看高清| 性高潮久久久久久久久久| 欧美一级网站| 国产一区二区在线免费视频| 三上悠亚在线观看二区| 国产精品久久久久一区二区三区共| 成人av在线网| 清纯唯美一区二区三区| zjzjzjzjzj亚洲女人| 国产九色在线| 国产精品国产自产拍在线| 久久久91精品| 欧美日韩亚洲三区| 99精品国产高清在线观看| 丰满少妇一区二区三区| 久久国产精品网| 91九色视频蝌蚪| 国产一区二区三区久久悠悠色av| 免费高清视频在线观看| 亚洲97av| 日韩高清专区| 超碰国产精品一区二页| 成人一区二区在线| 97国产精品videossex| 天天在线视频色| 亚洲欧洲综合另类| 密臀av在线| 婷婷综合在线观看| 美女精品导航| 精品不卡一区二区三区| 欧美激情精品在线| 美女被到爽高潮视频| 日本丰满大乳奶| 先锋影音av中文资源| 日av在线播放| 日本人妻一区二区三区| 亚洲大胆人体在线| 林心如三级全黄裸体| 天天操天天爱天天干| 欧美日韩综合久久| 欧美娇小性xxxx| 婷婷五月在线视频| 在线中文字幕视频| 国产精品沙发午睡系列990531| av男人的天堂在线| 日本中文字幕在线视频观看| 久久国产精品免费精品3p| 日韩av一二三四区| 日本一区二区三区在线视频| wwwwww.欧美系列| 日皮视频在线观看| 欧美午夜理伦三级在线观看| 国产91精品精华液一区二区三区| 国产亚洲小视频| 午夜在线观看一区| 精品久久国产97色综合| 亚洲精品456| 国产91亚洲精品久久久| 国产偷拍一区二区| 色先锋aa成人| 亚洲综合色一区| 老司机午夜免费福利视频| 黄色不卡一区| 久久久无码人妻精品无码| 亚洲女人天堂色在线7777| 中文字幕不卡每日更新1区2区| 成人av高清在线| 蜜臀av午夜精品| 日韩精品福利视频| 美国黄色一级毛片| 不卡的av电影| 国产午夜精品一区在线观看| 一个色免费成人影院| 日韩一区欧美小说| 国产一区 在线播放| 亚洲国产高清在线观看视频| 黄色在线看片| 韩国视频一区二区三区| 国产美女网站视频| 色综合久久久久综合一本到桃花网| 中文一区二区在线观看| 国产精品探花视频| 国产精品12p| 国产欧美在线看| 成人免费在线网址| 亚洲伦乱视频| 国产精品第十页| 真人抽搐一进一出视频| 国产欧美一区二区三区精品酒店| 在线免费观看一级片| 国产呻吟对白刺激无套视频在线| 亚洲黄色av网址| 日本精品国语自产拍在线观看| 欧美videos另类齐全| 国产在线播精品第三| 亚洲免费国产视频| 97精品国产99久久久久久免费| 一个人www视频在线免费观看| 啦啦啦免费高清视频在线观看| 国产传媒久久文化传媒| 国产精品115| 99re6在线观看| 97视频免费在线看| 亚洲成人网在线| 91成人在线观看喷潮教学| 国产高清久久久久| 久久精品亚洲无码| 91麻豆精品91久久久久久清纯| 国产精品亚洲专一区二区三区| 国产精品社区| 天涯成人国产亚洲精品一区av| 亚洲精品**不卡在线播he| av日韩精品| 91蝌蚪精品视频| 久操视频在线观看免费| 亚洲欧美偷拍一区| 真人bbbbbbbbb毛片| 日韩av在线第一页| 亚洲夂夂婷婷色拍ww47| 99久久99久久久精品棕色圆| 国产呻吟对白刺激无套视频在线| 精品少妇v888av| 在线免费观看一区二区三区| 极品美女一区| 内射后入在线观看一区| 欧美在线xxx| 在线亚洲国产精品网站| 色www永久免费视频首页在线| 在线成人直播| 亚洲成人精品在线播放| 生活片a∨在线观看| 国产va免费精品观看精品视频| 在线视频不卡一区二区| 精品免费久久久| 摸摸摸bbb毛毛毛片| 成人女同在线观看| 少妇高潮露脸国语对白| 麻豆视频在线免费看| 水蜜桃色314在线观看| 欧美爱爱视频网站| 啊啊啊射了视频网站| 九七电影院97理论片久久tvb| 日本国产一区| 国产精品1区2区| 国产传媒欧美日韩成人精品大片| 欧美天天综合色影久久精品| 久久香蕉国产线看观看网| 亚洲精品激情| 亚洲精品性视频| 精品无码人妻一区二区免费蜜桃| 久久精品亚洲欧美日韩精品中文字幕| 欧美性猛片xxxxx免费中国| 欧美激情综合五月色丁香小说| 中文网丁香综合网| 九七影院97影院理论片免费| 国产一区二区三区影视| 欧美女王vk| 亚洲人人夜夜澡人人爽| 亚洲精品之草原avav久久| 91精品视频播放| 欧美成人高清电影在线| 色呦呦呦在线观看| 免费视频一区二区三区在线观看| 国产成人亚洲欧洲在线| 亚洲视频福利| av在线免费播放网址| 中文字幕日韩精品一区| 蜜臀av.com| 欧美专区国产专区| 欧美毛片在线观看| 国产一级片大全| 欧美6699| 成年人影院在线观看| 香蕉视频色版| 668精品在线视频| 在线视频 91| 国产精品宾馆在线精品酒店| 欧美在线视频在线播放完整版免费观看| 国产精品日韩在线播放| 99精品久久久久久| 欧洲成人在线观看| 精品欧美一区二区久久久久| 色欲色香天天天综合网www| 色呦呦在线免费观看| 91丝袜国产在线播放| 国产欧美日韩免费| xxxx欧美xxxx黑人| 中文字幕日韩一区二区| 电影天堂爱爱爱爱| 亚洲理论电影网| 国产在线观看中文字幕| 欧美日韩在线视频观看| 欧美日韩一区免费| 国产成人精品三级麻豆| 亚洲视频www| 日韩在线观看视频网站| 国产精品一区二区在线观看| 好吊色视频988gao在线观看| 成人午夜免费视频| 日韩一区二区三区四区视频| 色乱码一区二区三在线看| 黄色一级二级三级| 日本免费黄网站| 日韩成人在线视频观看| 日韩精品乱码av一区二区| 红桃成人av在线播放| 欧美资源在线| 青青久久av北条麻妃海外网| 动漫一区二区三区| 人人干在线观看| 日本中文字幕电影在线观看| 欧美亚洲另类在线一区二区三区| 夜夜精品浪潮av一区二区三区| 亚洲精品久久久久久久久久久| 美女视频一区二区三区| www国产在线| 91视频最新网址| 国产免费一区二区三区在线观看| 一级视频在线观看视频在线啦啦| 国产探花一区二区| 三级网站在线| 亚州国产精品久久久| 日韩成人在线一区| 迷人的保姆韩国| 国产中文字幕精品| 日韩在线观看一区二区| 国产欧美精品国产国产专区| 成熟人妻av无码专区| 老熟妻内射精品一区| 久久夜精品va视频免费观看| 国产三级视频在线播放线观看| 黄黄的网站在线观看| 国产精品一区二区三区四| 偷窥韩漫第三季| 中文字幕免费在线| 国模娜娜一区二区三区| 人人妻人人澡人人爽欧美一区双| 精品久久久一区| 婷婷在线免费观看| 女女同性女同一区二区三区按摩| 黄色一级片国产| 一区二区不卡视频| 噜噜噜躁狠狠躁狠狠精品视频| 日本三级在线电影| 久久九九国产精品| 国产一二区在线| 午夜精品免费| 激情综合闲人网| 成人黄色视屏网站| 国产东北露脸精品视频| 久久久影视传媒| 欧美第一页浮力影院| 国产精品国产对白熟妇| 1000精品久久久久久久久| 91视频88av| 男人艹女人在线观看| 91福利国产精品| 国产一区视频观看| 97人人香蕉| 亚洲欧美在线高清| 美女视频一区免费观看| 欧美日本一区二区高清播放视频| 久久国产这里只有精品| 国产区在线观看| 欧美激情视频一区二区三区在线播放| 欧美一区二区在线视频观看| 456国产精品| 色黄网站在线观看| 91精品国产福利尤物| 欧美一区二区三区免费| 日韩欧美一区二区久久婷婷| 91精品国产成人www| 久久久女人电视剧免费播放下载| 日韩一区欧美小说| 91夜夜蜜桃臀一区二区三区| 亚洲国产第一| 久久国产露脸精品国产|