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

跟著小白一起學鴻蒙—一起學做Tetris(上)

系統 OpenHarmony
小時候有個游戲叫俄羅斯方塊,大人小孩都喜歡玩,我們就一起看看如何能用OpenHarmony學習做個Tetris。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

簡介

小時候有個游戲叫俄羅斯方塊,大人小孩都喜歡玩,我們就一起看看如何能用OpenHarmony學習做個Tetris。

#盲盒+碼##跟著小白一起學鴻蒙# [番外三]一起學做Tetris(上)-開源基礎軟件社區

開發

1、HAP應用建立

《#跟著小白一起學鴻蒙#[六]如何編寫一個hap應用》里我們介紹了簡單的Hap應用的開發以及基礎控件的介紹,這里我們就不贅述Hap項目的建立過程,以下就是基礎的Hap的page文件:index.ets。

build() {
Row() {
Column() {
Canvas(this.context)
.width('100%')
.height('100%')
.onClick((ev: ClickEvent) => {
console.info("click!!")
this.doClick()
})
.onReady(() =>{
this.context.imageSmoothingEnabled = false
this.randomType()
this.drawall()
})
}
.width('100%')
}
.height('100%')
.backgroundColor("#cccccc")
}

build是基礎頁面的構造函數,用于界面的元素構造,其他的頁面的生命周期函數如下:

declare class CustomComponent {
/**
* Customize the pop-up content constructor.
* @since 7
*/
build(): void;
/**
* aboutToAppear Method
* @since 7
*/
aboutToAppear?(): void;
/**
* aboutToDisappear Method
* @since 7
*/
aboutToDisappear?(): void;
/**
* onPageShow Method
* @since 7
*/
onPageShow?(): void;
/**
* onPageHide Method
* @since 7
*/
onPageHide?(): void;
/**
* onBackPress Method
* @since 7
*/
onBackPress?(): void;
}

2、Canvas介紹

canvas是畫布組件用于自定義繪制圖形,具體的API頁面如下:

https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-components-canvas-canvas-0000001333641081。

頁面顯示前會調用aboutToAppear()函數,此函數為頁面生命周期函數。

canvas組件初始化完畢后會調用onReady()函數,函數內部實現小游戲的初始頁面的繪制。

(1)初始化頁面數據
drawall() {
this.drawBox()
this.drawSideBlock()
this.drawBoxBlock()
this.drawScore()
}

因為都是畫布畫的,所以布局有點麻煩,需要畫幾個部分:

  • 中間的大框:方塊下落和堆疊區域。
  • 右邊提升框:下個方塊類型。
  • 中間方塊:方塊運動和堆疊。
  • 下方計分:行數得分。
(2)繪制大框
drawBox() {
this.context.lineWidth = 4
this.context.beginPath()
this.context.lineCap = 'butt'
this.context.moveTo(0, 100)
this.context.lineTo(270, 100)
this.context.moveTo(270, 100)
this.context.lineTo(270, 690)
this.context.moveTo(0, 690)
this.context.lineTo(270, 690)
}
(3)繪制提示方塊
drawSideBlock() {
this.context.fillStyle = 'rgb(250,0,0)'
let bs = this.blockSize
let coords = this.blockShapBasic[this.blockType]
let x = this.sideStartX + coords[0][0]*this.blockSize
let y = this.sideStartY + coords[0][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
x = this.sideStartX + coords[1][0]*this.blockSize
y = this.sideStartY + coords[1][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
x = this.sideStartX + coords[2][0]*this.blockSize
y = this.sideStartY + coords[2][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
x = this.sideStartX + coords[3][0]*this.blockSize
y = this.sideStartY + coords[3][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
this.context.stroke()
}
(4)繪制運動方塊
drawBoxBlock() {
this.setDirection()
this.context.fillStyle = 'rgb(250,0,0)'
let bs = this.blockSize
let coords = this.curBlockShap
let starty = this.slotStartY + this.step * this.blockSize
let x = this.slotStartX + coords[0][0]*this.blockSize
let y = starty + coords[0][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
x = this.slotStartX + coords[1][0]*this.blockSize
y = starty + coords[1][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
x = this.slotStartX + coords[2][0]*this.blockSize
y = starty + coords[2][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
x = this.slotStartX + coords[3][0]*this.blockSize
y = starty + coords[3][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
this.context.stroke()
this.slotBottomY = y
}
(5)繪制得分區域
drawScore() {
this.context.fillStyle = 'rgb(0,0,0)'
this.context.font = '80px sans-serif'
this.context.fillText("Score:"+this.score.toString(), 20, 740)
}

3、游戲邏輯

簡單的小游戲主體游戲邏輯為:等待開始,開始,結束流程圖如下:

graph LR
timer開始 --> 方塊下落
timer開始 --> click[點擊]
click[點擊] --> 方塊變形
方塊下落 --> |落到底| 能消除 --> 計分 --> 堆積
方塊下落 --> |落到底| 不能消除 --> 堆積
堆積 --> |堆積到頂| 滿了 --> 游戲結束
堆積 --> |堆積到頂| 未滿 --> 方塊下落
doClick() {
this.direction += 1
}

4、完整邏輯

@Entry
@Component
struct Index {
@State message: string = 'Hello World'
private settings: RenderingContextSettings = new RenderingContextSettings(true);
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
private blockType: number = 0
private blockSize: number = 30
private blockShapBasic = [
[[0,0],[0,1],[0,2],[0,3]],
[[0,0],[0,1],[0,2],[1,2]],
[[0,0],[0,1],[1,1],[0,2]],
[[0,0],[0,1],[1,1],[1,2]],
[[0,0],[0,1],[1,0],[1,1]],
]
private blockShap = [
[[0,0],[0,1],[0,2],[0,3]],
[[0,0],[0,1],[0,2],[1,2]],
[[0,0],[0,1],[1,1],[0,2]],
[[0,0],[0,1],[1,1],[1,2]],
[[0,0],[0,1],[1,0],[1,1]],
]
private curBlockShap = []
private sideStartX = 300;
private sideStartY = 150;
private slotStartX = 120;
private slotStartY = 150;
private slotBottomY = 150;;
private score = 0;
private step = 0;
private direction = 0;
aboutToDisappear() {
}
aboutToAppear() {
this.sleep(1000)
}
async sleep(ms: number) {
return new Promise((r) => {
setInterval(() => {
console.log(this.message)
this.drawStep()
}, ms)
})
}
doClick() {
this.direction += 1
}
drawBox() {
this.context.lineWidth = 4
this.context.beginPath()
this.context.lineCap = 'butt'
this.context.moveTo(0, 100)
this.context.lineTo(270, 100)
this.context.moveTo(270, 100)
this.context.lineTo(270, 690)
this.context.moveTo(0, 690)
this.context.lineTo(270, 690)
}
setDirection() {
this.curBlockShap = this.blockShap[this.blockType]
if (this.direction > 0) {
for (let i=0;i<4;i++) {
let x = this.curBlockShap[i][0]
this.curBlockShap[i][0] = this.curBlockShap[i][1]
this.curBlockShap[i][1] = x
}
this.direction = 0
}
}
drawSideBlock() {
this.context.fillStyle = 'rgb(250,0,0)'
let bs = this.blockSize
let coords = this.blockShapBasic[this.blockType]
let x = this.sideStartX + coords[0][0]*this.blockSize
let y = this.sideStartY + coords[0][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
x = this.sideStartX + coords[1][0]*this.blockSize
y = this.sideStartY + coords[1][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
x = this.sideStartX + coords[2][0]*this.blockSize
y = this.sideStartY + coords[2][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
x = this.sideStartX + coords[3][0]*this.blockSize
y = this.sideStartY + coords[3][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
this.context.stroke()
}
drawBoxBlock() {
this.setDirection()
this.context.fillStyle = 'rgb(250,0,0)'
let bs = this.blockSize
let coords = this.curBlockShap
let starty = this.slotStartY + this.step * this.blockSize
let x = this.slotStartX + coords[0][0]*this.blockSize
let y = starty + coords[0][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
x = this.slotStartX + coords[1][0]*this.blockSize
y = starty + coords[1][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
x = this.slotStartX + coords[2][0]*this.blockSize
y = starty + coords[2][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
x = this.slotStartX + coords[3][0]*this.blockSize
y = starty + coords[3][1]*this.blockSize
this.context.fillRect(x, y, bs, bs)
this.context.rect(x, y, bs, bs)
console.info("x,y"+x.toString()+":"+y.toString())
this.context.stroke()
this.slotBottomY = y
}
drawScore() {
this.context.fillStyle = 'rgb(0,0,0)'
this.context.font = '80px sans-serif'
this.context.fillText("Score:"+this.score.toString(), 20, 740)
}
randomType() {
this.blockType = Math.floor(Math.random()*5)
console.info("blocktype:"+this.blockType.toString())
}
drawStep() {
this.context.clearRect(0,0,this.context.width,this.context.height)
this.step += 1
this.drawBox()
this.drawSideBlock()
this.drawBoxBlock()
this.drawScore()
if (this.slotBottomY >= 660) {
this.step = 0
this.randomType()
}
}
drawall() {
this.drawBox()
this.drawSideBlock()
this.drawBoxBlock()
this.drawScore()
}
build() {
Row() {
Column() {
Canvas(this.context)
.width('100%')
.height('100%')
.onClick((ev: ClickEvent) => {
console.info("click!!")
this.doClick()
})
.onReady(() =>{
this.context.imageSmoothingEnabled = false
this.randomType()
this.drawall()
})
}
.width('100%')
}
.height('100%')
.backgroundColor("#cccccc")
}
}

遺留問題:

  1. 沒實現堆積計分(接下來會做)。
  2. 可實現網絡對戰(分布式對戰)。

5、獲取源碼

等游戲完整發布,會有兩個版本,單機和聯機版本。

總結

本文主要介紹了小游戲的開發,畫布功能的使用。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: 51CTO開源基礎軟件社區
相關推薦

2022-12-02 14:20:09

Tetris鴻蒙

2022-11-14 17:01:34

游戲開發畫布功能

2023-03-30 09:32:27

2023-04-04 09:24:11

鴻蒙HiDumper

2022-10-10 14:47:04

藍牙應用鴻蒙

2022-08-19 19:02:20

開源鴻蒙操作系統

2023-02-27 16:30:32

鴻蒙開源協議分析

2023-03-30 09:19:54

SELinux安全子系統

2023-01-03 15:09:10

鴻蒙常用工具

2023-03-15 16:19:03

BinderIPC工具

2022-12-06 15:39:16

鴻蒙主干代碼

2022-11-24 14:34:41

Hap程序鴻蒙

2022-10-09 15:05:50

NAPI框架鴻蒙

2022-10-20 16:40:16

JS應用控制LED鴻蒙

2023-04-06 09:18:52

鴻蒙AVPlayerAVRecorder

2022-10-17 14:29:24

鴻蒙應用開發

2023-02-24 16:02:45

WebSocket網絡通訊協議

2022-11-28 15:42:39

分布式軟總線鴻蒙

2022-12-05 15:02:14

鴻蒙用戶鑒權

2022-12-09 15:34:38

點贊
收藏

51CTO技術棧公眾號

色噜噜一区二区三区| www.97视频| 涩涩视频在线免费看| eeuss国产一区二区三区| 久久久久久久亚洲精品| 五月天婷婷影视| av免费看在线| 成人av资源在线观看| 97avcom| 波多野结衣 在线| 韩国成人在线| 亚洲欧美偷拍另类a∨色屁股| 91免费版黄色| 日本网站在线播放| 蜜乳av综合| 91久久国产最好的精华液| 亚洲午夜精品一区二区| 成人福利小视频| 国产精品呻吟| 久久精品男人天堂| 精品人妻伦一二三区久| 日韩电影av| 亚洲天堂成人在线观看| 精品视频高清无人区区二区三区| 天堂网一区二区| 天天做天天爱综合| 亚洲精品久久久久国产| xxx国产在线观看| av午夜在线观看| 国产精品亲子乱子伦xxxx裸| 国产精品日韩欧美一区二区三区| 337p粉嫩色噜噜噜大肥臀| 亚洲九九在线| 亚洲欧美制服第一页| 欧美日韩久久婷婷| 国产精品迅雷| 亚洲一区二区三区爽爽爽爽爽| 日本不卡久久| 97人妻精品一区二区三区| 亚洲美女一区| 欧美成人免费全部| 性欧美13一14内谢| 婷婷综合国产| 欧美美女网站色| 免费观看精品视频| wwww亚洲| 亚洲精品乱码久久久久久| 日韩视频专区| 天天色综合av| 蜜桃av一区二区| 97高清免费视频| av激情在线观看| 国内精品久久久久久久久电影网| 亚洲福利在线观看| 不卡的一区二区| 日韩成人在线电影| 在线观看欧美黄色| 一女被多男玩喷潮视频| 欧美韩日亚洲| 悠悠色在线精品| 久久国产精品免费观看| av免费在线一区二区三区| 国产亚洲va综合人人澡精品| 国产一区免费在线| 亚洲AV无码一区二区三区少妇 | 一本色道综合久久欧美日韩精品 | 91免费福利视频| 探花国产精品一区二区| 男女精品视频| 88xx成人精品| 国产精品suv一区二区三区| 亚洲一级特黄| 久久久久久香蕉网| 国产一级片播放| 好看不卡的中文字幕| 91精品国产色综合久久不卡电影| 九九热免费精品视频| 日韩成人一区| 精品久久久久久无| 国产男男chinese网站| 日韩国产一区二区| 久久6精品影院| 日韩精品久久久久久久| 日韩激情一二三区| 亚洲一区二区三区乱码aⅴ| 亚洲国产www| 久久久久9999亚洲精品| 中文字幕一区二区三区四区五区六区 | 成人小视频免费在线观看| 国内精品视频免费| 99免在线观看免费视频高清| 一区二区三区四区不卡视频| 女性女同性aⅴ免费观女性恋| 成人精品国产| 亚洲第一天堂无码专区| 国产午夜精品久久久久久久久| 欧美三级小说| 国产精品免费网站| 韩国av在线免费观看| 亚洲国产精品黑人久久久| 久久久天堂国产精品| 刘亦菲一区二区三区免费看| 91精品欧美综合在线观看最新| 538国产视频| 亚洲欧美偷拍自拍| 日韩美女在线观看一区| www.亚洲天堂.com| 国产精品久久久久久久第一福利| 国产老熟妇精品观看| 高清精品久久| 亚洲人成伊人成综合网久久久| 国产大学生自拍| 日韩黄色一级片| 成人综合色站| 国产黄色在线免费观看| 欧美亚洲动漫精品| 成人免费毛片日本片视频| 欧美1区3d| 国产精品自拍视频| 国产精品一区二区婷婷| 午夜精品成人在线| 中文字幕无码毛片免费看| 残酷重口调教一区二区| 欧美做受高潮电影o| 草草视频在线播放| 亚洲欧美综合网| 国产精品久久久毛片| 羞羞色国产精品网站| 久操成人在线视频| 国产伦精品一区二区三区四区| 国产午夜精品福利| 国产麻花豆剧传媒精品mv在线| 9999久久久久| 欧美国产日韩中文字幕在线| 一级特黄aaaaaa大片| 国产目拍亚洲精品99久久精品| 男人天堂1024| 老牛影视av一区二区在线观看| 九九精品在线视频| 国产丝袜视频在线观看| 亚洲欧美日韩成人高清在线一区| 杨幂毛片午夜性生毛片| 国产剧情一区| 国产成人福利视频| 国产在线视频网| 欧美三片在线视频观看| 国产精品美女高潮无套| 日韩激情视频网站| 亚洲精品一区二区三区蜜桃久| 粉嫩一区二区三区| 亚洲一区www| 伊人久久中文字幕| 国产精品美女一区二区| 三上悠亚在线一区| 日韩欧美一区二区三区在线视频| 国产精品欧美日韩久久| 在线免费观看黄色| 在线91免费看| 欧美又粗又大又长| av在线播放一区二区三区| 久久成人免费观看| 九九亚洲视频| 国产精品视频区1| 老司机福利在线视频| 日韩免费电影网站| 在线观看免费国产视频| 国产网站一区二区| 老司机午夜性大片| 欧美成人高清| 久久精品人人做人人爽电影| 老司机成人影院| 精品国产视频在线| www夜片内射视频日韩精品成人| 亚洲国产另类av| 巨胸大乳www视频免费观看| 美日韩一级片在线观看| 最近免费观看高清韩国日本大全| 超碰地址久久| 国产精品久久久久久av| 最新国产露脸在线观看| 亚洲精品国产精品国自产在线 | 狠狠色综合欧美激情| 韩国久久久久久| 中文字幕在线亚洲| 黄色三级网站在线观看| 在线观看免费一区| 欧美成人精品欧美一级| 久久综合av免费| 国产传媒免费观看| 亚洲久久成人| 亚洲激情图片| 激情小说亚洲图片| 国产精品揄拍一区二区| av电影在线地址| 中文字幕日韩欧美| 婷婷在线免费观看| 欧美精品一二三区| 国产九色在线播放九色| 亚洲蜜桃精久久久久久久| 日韩av一二区| 国产美女在线观看一区| 日日碰狠狠躁久久躁婷婷| 欧美wwwww| 欧美日韩电影一区二区| 欧美欧美在线| 国产精品丝袜视频| 美女的胸无遮挡在线观看| 久久天堂电影网| 久久精品a一级国产免视看成人| 日韩欧美国产午夜精品| 亚洲成人av网址| 精品福利视频导航| 免费无遮挡无码永久在线观看视频| 国产欧美一区二区在线| 91传媒理伦片在线观看| 韩国三级中文字幕hd久久精品| 欧美一级在线看| 伊人久久成人| 午夜探花在线观看| 成人激情电影在线| 麻豆成人在线播放| 久久夜色电影| 99视频日韩| 国产精品成人3p一区二区三区| 国产999在线| 不卡一二三区| 91av在线网站| 国产v日韩v欧美v| 欧美丰满少妇xxxx| 第九色区av在线| 亚洲精品电影网| 亚洲第一色视频| 日韩一区二区视频| 国产精品久久久久久久久久久久久久久久 | 国产精品毛片高清在线完整版| 国内精品久久99人妻无码| 高清在线观看日韩| 超碰人人cao| 国产精品亚洲人在线观看| 亚洲一区二区三区三州| 蜜臀av性久久久久蜜臀aⅴ流畅| 阿v天堂2017| 亚洲人成毛片在线播放女女| 黄色a级片免费看| 欧美va天堂在线| 999久久欧美人妻一区二区| 中文字幕日韩一区二区不卡| 9l视频自拍9l视频自拍| 香蕉av一区二区| 中文字幕精品在线播放| 欧美国产另类| 国产一区二区片| 亚洲国产专区校园欧美| 日日碰狠狠添天天爽超碰97| 香蕉亚洲视频| 嫩草av久久伊人妇女超级a| 青青草97国产精品免费观看| 91插插插插插插插插| 极品少妇一区二区三区精品视频| 在线不卡一区二区三区| 国产一区二区0| 涩视频在线观看| 91香蕉视频污| 1024手机在线观看你懂的| 最新成人av在线| 精品无码免费视频| 欧美午夜激情视频| 中文字幕一二三四| 日韩一卡二卡三卡四卡| 欧美一级片免费| 亚洲人成网站777色婷婷| 91高清在线视频| 欧美成年人视频网站| av在线播放资源| 国产成+人+综合+亚洲欧洲| 久久免费资源| 粉嫩av免费一区二区三区| 天堂日韩电影| 亚洲综合欧美日韩| 激情综合中文娱乐网| 青青青在线播放| 国产在线日韩欧美| 一区二区视频观看| 国产精品久久久久久福利一牛影视| 亚洲国产美女视频| 一本一道综合狠狠老| 国产一区二区波多野结衣| 亚洲国产精品网站| 77导航福利在线| 97精品久久久中文字幕免费| 日韩毛片在线| 国产在线精品一区| 久久精品国产www456c0m| 日本a视频在线观看| 日本不卡的三区四区五区| 一级黄色片毛片| 国产精品黄色在线观看| 日韩乱码在线观看| 欧美精品1区2区| 久久经典视频| 国内自拍欧美激情| 亚洲精品777| 欧美一区二区在线视频观看| 欧美另类专区| 鲁一鲁一鲁一鲁一av| 99re热这里只有精品免费视频| 日韩一卡二卡在线观看| 精品福利免费观看| 亚洲福利在线观看视频| 日韩网站免费观看| 中文字幕不卡三区视频| av一本久道久久波多野结衣| 日韩精品久久| 欧美视频免费播放| 成人一区在线观看| 国产精品 欧美激情| 欧美性受xxxx黑人xyx性爽| 天堂中文在线资源| 欧美大荫蒂xxx| 亚洲色图综合| 杨幂一区欧美专区| 日韩精品电影在线| 波多野吉衣中文字幕| 午夜久久电影网| 欧美 日韩 人妻 高清 中文| 欧美伦理91i| 福利一区三区| 国产又大又长又粗又黄| 免费在线观看视频一区| 四虎国产精品成人免费入口| 疯狂蹂躏欧美一区二区精品| 日韩在线视频免费| 久久久久久国产| 999久久精品| 又大又硬又爽免费视频| 国产盗摄一区二区三区| www.97视频| 日韩午夜中文字幕| av免费在线免费| 成人国产一区二区| 欧美日韩三区| 国产激情第一页| 亚洲6080在线| 天天在线女人的天堂视频| 91国产中文字幕| 欧美激情极品| 国产亚洲综合视频| 久久久久88色偷偷免费| 天堂免费在线视频| 色偷偷噜噜噜亚洲男人| 999精品嫩草久久久久久99| 国产手机视频在线观看| 国产精品888| 欧美不卡视频在线观看| 亚洲精品在线视频| 日韩色淫视频| 强开小嫩苞一区二区三区网站 | 5g国产欧美日韩视频| 欧美在线高清| 久久性爱视频网站| 欧美性极品xxxx娇小| 国产二区在线播放| 成人性教育视频在线观看| 欧美激情视频一区二区三区在线播放| 97人人模人人爽人人澡| 亚洲国产va精品久久久不卡综合 | 原创国产精品91| 一区在线不卡| 久草视频国产在线| 国产视频一区在线观看| 一卡二卡三卡在线观看| 欧美乱大交xxxxx另类电影| 欧美亚洲国产日韩| 天天影视综合色| 亚洲精品日日夜夜| 天堂在线资源库| 国产精品亚洲一区二区三区| 午夜国产精品视频| 草草影院第一页| 欧美欧美欧美欧美首页| 91九色在线播放| 五月天综合网| 成人深夜福利app| www.五月婷婷.com| 欧美国产第一页| 精品国产91久久久久久浪潮蜜月| 黄色aaaaaa| 色综合天天天天做夜夜夜夜做| 欧美极品视频| 精品无人区一区二区三区竹菊| 麻豆国产欧美日韩综合精品二区| 麻豆一区产品精品蜜桃的特点| 亚洲偷熟乱区亚洲香蕉av| 香蕉成人app| 无需播放器的av| 天天操天天色综合| 超碰在线最新| 日韩av一级大片| 97久久精品人人做人人爽50路| 亚洲综合精品在线|