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

首頁 > 編程 > JavaScript > 正文

使用非html5實現js板連連看游戲示例代碼

2019-11-20 22:16:33
字體:
來源:轉載
供稿:網友
向大家分享一款如何實現js版連連看游戲,如下圖所示:

首先看一下html的布局方式在index.html文件中:
復制代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>連連看</title>
<link rel="stylesheet" type="text/css" href="css/index.css"/>
</head>
<body>
<center>
<div id="whole">
<div id="gamePanel" tabindex="0">
<div id="pieces">
</div>
</div>
<div id="gameLogo">
</div>
<div id="scorePanel">
<span>分 數</span>
</div>
<div id="score">
<span>0</span>
</div>
<div id="timePanel">
<span>時 間</span>
</div>
<div id="time">
<span>0</span>
</div>
<div id="button">
<input id="start" type="button" onclick="Start();" value="開始"></input>
<input id="reset" type="button" onclick="Reset();"value="重置"></input>
</div>
</div>
</center>
<script type="text/javascript" src="js/map.js"></script>
<script type="text/javascript" src="js/piece.js"></script>
<script type="text/javascript" src="js/game.js"></script>
</body>
</html>

css文件夾下的index.css文件如下:
復制代碼 代碼如下:

body {

font-size : 16px;
font-weight : bold;
color : grey;

}

#whole {

border : 1px double #999999;
border-width : 5px;
width : 800px;
height : 505px;
position : relative;

}

#gamePanel {

margin: 1px 1px 1px 1px;
width : 602px;
height : 502px;
background : url(../img/background.gif) repeat;
position : absolute;

}

#pieces {

margin-top : 35px;
border : 1px solid #999999;
width : 546px;
height : 434px;
position: relative;

}

#pieces .piece {

width : 32px;
height : 36px;
position : relative;
cursor : pointer;
float : left;

}

#pieces .track {

width : 32px;
height : 36px;
position : relative;
float : left;

}

#pieces .track2 {

width : 32px;
height : 36px;
position : relative;
float : left;
background : red;

}

#gameLogo {

margin-top : 60px;
border : 1px solid #999999;
left : 607px;
width : 187px;
height : 73px;
background : url(../img/logo.gif);
position: absolute;

}

#scorePanel {

border : 1px solid #999999;
left : 607px;
top : 200px;
width : 187px;
height : 30px;
position : absolute;

}

#score {

border : 1px solid #999999;
left : 607px;
top : 240px;
width : 187px;
height : 30px;
position : absolute;

}

#timePanel {

border : 1px solid #999999;
left : 607px;
top : 300px;
width : 187px;
height : 30px;
position : absolute;

}

#time {

border : 1px solid #999999;
left : 607px;
top : 340px;
width : 187px;
height : 30px;
position : absolute;

}

#button {

border : 1px solid #999999;
left : 607px;
top : 400px;
width : 187px;
height : 30px;
position : absolute;


}

下面讓我們來看一下最核心的js部分實現代碼,js部分分為三個源文件即game.js、map.js、piece.js每一個源文件對應一個類,其中本游戲通過game類來操縱map和圖片piece對象:

game.js代碼如下:
復制代碼 代碼如下:

// 游戲控制類
var Game = {

// 游戲背景
gamePanel : null,

// 分數
score : 0,

// 時間
time : 0,

// 圖片映射表
pieceMap : null,

// 圖片列表
pieceList : [],

// 圖片列表不包含圖片
pieceImgList : [],

// 圖片隨機數列表
randomList : [],

// 軌跡列表
trackList : [],

// 游戲是否開始
isGameBigin : false,

// 游戲是否結束
isGameOver : false,

// 游戲是否重置
isGameReset : false,

// 圖片元素是否第一次點擊
isFirstClick : true,

// 開始游戲
start : function() {

document.getElementById("start").disabled = true;
document.getElementById("reset").disabled = false;

if (this.isGameReset) {

this.isGameOver = false;
this.startTime();

return;

} else if (this.isGameBegin) {

return;

} else {

this.init();

return;

}

},

reset : function() {

document.getElementById("start").disabled = false;
document.getElementById("reset").disabled = true;

this.clear();
this.initPieces();
this.initImgPieces();
this.time = 0;
document.getElementById("time").innerHTML = 0;

this.score = 0;
document.getElementById("score").innerHTML = 0;

this.isGameReset = true;
this.isGameBegin = true;

},

// 初始化
init : function() {

if (this.isGameBegin) {

return;

}

this.pieceMap = new Map();

var _this = this;

this.time = 0;
this.startTime();

this.gamePanel = document.getElementById("pieces");

this.initPieces();
this.initImgPieces();

this.isGameBegin = true;

},

// 將隨機生成的150張圖片添加進畫布
initPieces : function() {

var _this = this;

this.initRandomList();

// 打亂隨機列表排序
this.messRandomList();

for (var i = 0; i < 204; i ++) {

var piece = new Piece(this);
this.pieceList.push(piece);

var x = (i%17);
var y = Math.floor(i/17);

this.pieceMap.put(x+","+y, piece);

piece.setPosition(x, y);
this.gamePanel.appendChild(piece.dom);

if (x == 0 || x == 16 || y == 0 || y == 11) {

piece.track = document.createElement("div");
piece.track.className = "track";
piece.dom.appendChild(piece.track);
piece.isTracked = true;

continue;

} else {

if (x == 1 || x == 15 || y == 1 || y == 10) {

piece.setAtEdge(true);

}

this.pieceImgList.push(piece);

}

}

},

// 初始化圖片
initImgPieces : function() {

for (var i = 0; i < this.pieceImgList.length; i ++) {

this.pieceImgList[i].initImg();
this.pieceImgList[i].img.src = "img/pieces/"+this.randomList[i]+".gif"
this.pieceImgList[i].setImgSrc(this.pieceImgList[i].img.src);

// 執行圖片點擊事件
this.pieceImgList[i].onClick();

}

},

// 初始化隨機表
initRandomList : function() {

// 獲取隨機數列,成雙出現
for (var i = 0; i < 75; i ++) {

var random = parseInt(Math.random()*22*10000, 10);
var number = random%23;
this.randomList.push(number);
this.randomList.push(number);

}

},

// 打亂隨機表
messRandomList : function() {

for (var i = 0; i < this.randomList.length; i ++) {

var random = parseInt(Math.random()*15*10000, 10);
var number = random%150;

var temp;
temp = this.randomList[i];
this.randomList[i] = this.randomList[number];
this.randomList[number] = temp;

}

},

// 開始計時
startTime : function() {

var _this = this;

if (this.isGameOver) {

return;

} else {

this.time ++;
document.getElementById("time").innerHTML = this.time;
this.isGameBegin = true;
setTimeout(function() {_this.startTime();}, 1000);

}

},

// 清除
clear : function() {

for (var i = 0; i < this.pieceList.length; i ++) {

this.gamePanel.removeChild(this.pieceList[i].dom);

}

this.pieceList = [];
this.randomList = [];
this.pieceImgList = [];

this.isGameOver = true;
this.isGameBegin = false;

}

}

window.onload = function() {

document.getElementById("start").disabled = false;
document.getElementById("reset").disabled = true;

}

// 游戲開始入口
function Start() {

Game.start();

}

// 游戲重置入口
function Reset() {

Game.reset();

}

自定義的js版映射結構map.js源文件如下:
復制代碼 代碼如下:

var Map = function(){

this.data = [];

}

Map.prototype = {

put : function(key, value) {

this.data[key] = value;
},

get : function(key) {

return this.data[key];
},

remove : function(key) {

this.data[key] = null;

},

isEmpty : function() {

return this.data.length == 0;
},

size : function() {

return this.data.length;
}

}

圖片類piece.js源文件如下:
復制代碼 代碼如下:

var Piece = function(game) {

// 游戲對象
this.game = game;

// 是否為邊緣元素
this.isEdge = false;

// 是否挨著邊緣元素
this.atEdge = false;

// 圖片dom元素
this.dom = null;

// 圖片元素
this.img = null;

// 圖片元素來源
this.src = null;

// 軌跡元素
this.track = null;

// 是否可以作為軌跡
this.isTracked = false;

// 選中標記元素
this.selected = null;

// 圖片橫向排列
this.x = 0;

// 圖片縱向排列
this.y = 0;

// 圖片閃爍Id
this.flashId = null;

// 圖片是否點擊
this.onClicked = false;

// 閃爍次數
this.flashCount = 0;

this.init();

}

Piece.prototype = {

// 初始化
init : function() {

this.dom = document.createElement("div");
this.dom.className = "piece";

this.selected = document.createElement("img");

},

// 初始化圖片
initImg : function() {

this.img = document.createElement("img");

this.dom.appendChild(this.img);

},

// 滿足算法后初始化track元素
initTrack : function() {

if (this.flashId != null) {

// 停止閃爍
this.stopFlash();

}

//alert("initTrack middle");
if (this.track != null) {

return;
}

this.onClicked = false;

this.dom.removeChild(this.img);

this.track = document.createElement("div");
this.track.className = "track";
this.dom.appendChild(this.track);

},

// 位圖片設置來源
setImgSrc : function(src) {

this.src = src;

},

// 為圖片設置二維排列位置
setPosition : function(x, y) {

this.x = x;
this.y = y;

},

// 為圖片設置選中元素
setSelected : function() {

if (this.flashCount ++ % 2 == 0) {

//this.dom.removeChild(this.img);
//this.selected.src = "img/selected.gif";
//this.dom.appendChild(this.selected);
this.img.src = "img/pieces/flash.gif";

} else {

//if (this.selected != null) {

// this.dom.removeChild(this.selected);

//}

this.img.src = this.src;
//this.dom.appendChild(this.img);

}

},

// 設置是否為邊緣元素
setEdge : function(isEdge) {

this.isEdge = isEdge;

},

// 設置是否挨著邊緣元素
setAtEdge : function(atEdge) {

this.atEdge = atEdge;

},

// 開始閃爍
flash : function() {

var _this = this;
this.flashId = setInterval(function() {_this.setSelected();}, 500);

},

// 停止閃爍
stopFlash : function() {

clearInterval(this.flashId);

if (this.flashCount % 2 == 1) {

//if (this.selected != null) {

// this.dom.removeChild(this.selected);

//}

this.img.src = this.src;
//this.dom.appendChild(this.img);

}

},

// 對象被選擇的內部函數
onClick : function() {

if (this.onClicked) {

return;

}

var _this = this;

this.img.onclick = function() {

if (!document.getElementById("start").disabled) {

return;

}

if (_this.onClicked) {

return;

}

if (_this.checkPiece()) {

return;

}

_this.flash();
_this.onClicked = true;

};

},

// 檢查是否有被點擊的圖片
checkPiece : function() {

for (var i = 0; i < this.game.pieceList.length; i ++) {

if (this.game.pieceList[i].onClicked && !this.game.pieceList[i].equal(this)) {

if (this.game.pieceList[i].equalImage(this)) {

//alert("The same Image");
this.searchTrack(this.game.pieceList[i]);

} else {

this.game.pieceList[i].stopFlash();
this.game.pieceList[i].onClicked = false;
this.onClicked = false;

return false;

}

return true;

} else {

continue;

}

}

return false;

},

// 是否為同一個對象
equal : function(piece) {

return (this.x == piece.x && this.y == piece.y);

},

// 是否為同一個圖片
equalImage : function(piece) {

return this.src == piece.src;

},

// 搜尋路徑
searchTrack : function(piece) {

if (this.isNear(piece)) {

this.linkTrack(piece);

return;
}

if (this.isReach(piece) || this.isReach2(piece)) {

this.linkTrack(piece);

return;
}

},

// 是否相鄰
isNear : function(piece) {

var a = (Math.abs(piece.x - this.x) == 1) && (piece.y == this.y)
|| (Math.abs(piece.y - this.y) == 1) && (piece.x == this.x);

return a;
},

// 直線
isStraightReach : function(piece) {
//alert("isStraightReach");
if (this.isNear(piece)) {

return true;

}

var a = false;
var b = false;

// 沿y軸方向搜索
if (this.x == piece.x) {
//alert("!!!!!!!!!!!");
for (var i = this.min(this.y, piece.y) + 1; i < this.max(this.y, piece.y); i ++) {
//alert("this.x == piece.x: " + piece.x + "," + i);
if (this.game.pieceMap.get(piece.x + "," + i).isPass()) {

a = true;

this.game.trackList.push(this.game.pieceMap.get(piece.x + "," + i));

continue;
} else {

a = false;
this.game.trackList = [];

return a;
}

}

}

// 沿x軸方向搜索
if (this.y == piece.y) {
//alert("!!!!!!!!!!!");
for (var i = this.min(this.x, piece.x) + 1; i < this.max(this.x, piece.x); i ++) {
//alert("this.y == piece.y: " + i + "," + piece.y);
if (this.game.pieceMap.get(i + "," + piece.y).isPass()) {

b = true;
this.game.trackList.push(this.game.pieceMap.get(i + "," + piece.y));

continue;
} else {

b = false
this.game.trackList = [];

return b;
}

}

}

return a || b;
},


// 拐一次彎搜索
isReach1 : function(piece) {
//alert("isReach1");
var corner_1 = this.game.pieceMap.get(this.x + "," + piece.y);
var corner_2 = this.game.pieceMap.get(piece.x + "," + this.y);

var _this = this;


if ((_this.isStraightReach(corner_1))
&& (corner_1.isStraightReach(piece))
&& corner_1.isPass()) {

//alert("corner_1: " + this.x + "," + piece.y);
this.game.trackList.push(corner_1);

return true;
}

if ((_this.isStraightReach(corner_2))
&& (corner_2.isStraightReach(piece))
&& corner_2.isPass()) {
//alert("corner_2: " + piece.x + "," + this.y);
this.game.trackList.push(corner_2);

return true;
}

return false;
},

// 直接或拐一次彎搜索
isReach : function(piece) {

var a = this.isStraightReach(piece);

var b = this.isReach1(piece);

return a || b;
},

// 拐兩次彎搜索
isReach2 : function(piece) {

// 沿x軸正向搜索
for (var i = this.x + 1; i < 17; i ++) {

if (!this.game.pieceMap.get(i + "," + this.y).isPass()) {

this.game.trackList = [];

break;

} else if (this.game.pieceMap.get(i + "," + this.y).isReach(piece)
&& this.game.pieceMap.get(i + "," + this.y).isPass()) {

this.game.trackList.push(this.game.pieceMap.get(i + "," + this.y));

return true;
}

}

// 沿x軸搜索
for (var i = this.x - 1; i >= 0; i --) {

if (!this.game.pieceMap.get(i + "," + this.y).isPass()) {

this.game.trackList = [];

break;

} else if (this.game.pieceMap.get(i + "," + this.y).isReach(piece)
&& this.game.pieceMap.get(i + "," + this.y).isPass()) {

this.game.trackList.push(this.game.pieceMap.get(i + "," + this.y));

return true;
}

}

// 沿y軸搜索
for (var i = this.y - 1; i >= 0; i --) {

if (!this.game.pieceMap.get(this.x + "," + i).isPass()) {

this.game.trackList = [];

break;

} else if (this.game.pieceMap.get(this.x + "," + i).isReach(piece)
&& this.game.pieceMap.get(this.x + "," + i).isPass()) {

this.game.trackList.push(this.game.pieceMap.get(this.x + "," + i));

return true;
}

}

// 沿y軸正向搜索
for (var i = this.y + 1; i < 12; i ++) {

if (!this.game.pieceMap.get(this.x + "," + i).isPass()) {

this.game.trackList = [];

break;
} else if (this.game.pieceMap.get(this.x + "," + i).isReach(piece)
&& this.game.pieceMap.get(this.x + "," + i).isPass()) {

this.game.trackList.push(this.game.pieceMap.get(this.x + "," + i));

return true;
}

}

return false;
},

// 路徑連接
linkTrack : function(piece) {

this.initTrack();
piece.initTrack();
this.changeScore();
this.showTrack(piece);

},

// 顯示足跡
showTrack : function(piece) {

this.game.trackList.push(piece);
this.track.className = "track2";

for (var i = 0; i < this.game.trackList.length; i ++) {
//alert(i);
this.game.trackList[i].track.className = "track2";

}

var _this = this;
setTimeout(function() {_this.hideTrack()}, 500);

},

// 隱匿足跡
hideTrack : function() {

for (var i = 0; i < this.game.trackList.length; i ++) {

this.game.trackList[i].track.className = "track";

}

this.game.trackList = [];
this.track.className = "track";
this.isTracked = true;

},

// 分數增加
changeScore : function() {

this.game.score += 100;
document.getElementById("score").innerHTML = this.game.score;

},

min : function(a, b) {

if (a < b) {

return a;

} else {

return b;

}

},

max : function(a, b) {

if (a > b) {

return a;

} else {

return b;

}

},

// 判斷是否通過
isPass : function() {

return this.track != null;
}

}

以上是源文件的代碼,具體的實現代碼請關注CSDN中zhangjinpeng66下載。下面講一下連連看游戲最核心的部分,js實現搜索路徑。

js實現搜索路徑算法首先最簡單的是判斷兩個圖片能否直線到達函數代碼如下:
復制代碼 代碼如下:

// 直線
isStraightReach : function(piece) {
//alert("isStraightReach");
if (this.isNear(piece)) {

return true;

}

var a = false;
var b = false;

// 沿y軸方向搜索
if (this.x == piece.x) {
//alert("!!!!!!!!!!!");
for (var i = this.min(this.y, piece.y) + 1; i < this.max(this.y, piece.y); i ++) {
//alert("this.x == piece.x: " + piece.x + "," + i);
if (this.game.pieceMap.get(piece.x + "," + i).isPass()) {

a = true;

this.game.trackList.push(this.game.pieceMap.get(piece.x + "," + i));

continue;
} else {

a = false;
this.game.trackList = [];

return a;
}

}

}

// 沿x軸方向搜索
if (this.y == piece.y) {
//alert("!!!!!!!!!!!");
for (var i = this.min(this.x, piece.x) + 1; i < this.max(this.x, piece.x); i ++) {
//alert("this.y == piece.y: " + i + "," + piece.y);
if (this.game.pieceMap.get(i + "," + piece.y).isPass()) {

b = true;
this.game.trackList.push(this.game.pieceMap.get(i + "," + piece.y));

continue;
} else {

b = false
this.game.trackList = [];

return b;
}

}

}

return a || b;
},

該函數實現了連連看判斷兩圖片是否符合連接條件的最簡單的一步,然后是拐一次彎搜索。
復制代碼 代碼如下:

// 拐一次彎搜索
isReach1 : function(piece) {
//alert("isReach1");
var corner_1 = this.game.pieceMap.get(this.x + "," + piece.y);
var corner_2 = this.game.pieceMap.get(piece.x + "," + this.y);

var _this = this;


if ((_this.isStraightReach(corner_1))
&& (corner_1.isStraightReach(piece))
&& corner_1.isPass()) {

//alert("corner_1: " + this.x + "," + piece.y);
this.game.trackList.push(corner_1);

return true;
}

if ((_this.isStraightReach(corner_2))
&& (corner_2.isStraightReach(piece))
&& corner_2.isPass()) {
//alert("corner_2: " + piece.x + "," + this.y);
this.game.trackList.push(corner_2);

return true;
}

return false;
},

在拐一次彎搜索的函數中調用了直接搜索的函數,同樣最復雜的拐兩次彎搜索也會調用拐一次彎搜索的函數。
復制代碼 代碼如下:

// 拐兩次彎搜索
isReach2 : function(piece) {

// 沿x軸正向搜索
for (var i = this.x + 1; i < 17; i ++) {

if (!this.game.pieceMap.get(i + "," + this.y).isPass()) {

this.game.trackList = [];

break;

} else if (this.game.pieceMap.get(i + "," + this.y).isReach(piece)
&& this.game.pieceMap.get(i + "," + this.y).isPass()) {

this.game.trackList.push(this.game.pieceMap.get(i + "," + this.y));

return true;
}

}

// 沿x軸搜索
for (var i = this.x - 1; i >= 0; i --) {

if (!this.game.pieceMap.get(i + "," + this.y).isPass()) {

this.game.trackList = [];

break;

} else if (this.game.pieceMap.get(i + "," + this.y).isReach(piece)
&& this.game.pieceMap.get(i + "," + this.y).isPass()) {

this.game.trackList.push(this.game.pieceMap.get(i + "," + this.y));

return true;
}

}

// 沿y軸搜索
for (var i = this.y - 1; i >= 0; i --) {

if (!this.game.pieceMap.get(this.x + "," + i).isPass()) {

this.game.trackList = [];

break;

} else if (this.game.pieceMap.get(this.x + "," + i).isReach(piece)
&& this.game.pieceMap.get(this.x + "," + i).isPass()) {

this.game.trackList.push(this.game.pieceMap.get(this.x + "," + i));

return true;
}

}

// 沿y軸正向搜索
for (var i = this.y + 1; i < 12; i ++) {

if (!this.game.pieceMap.get(this.x + "," + i).isPass()) {

this.game.trackList = [];

break;
} else if (this.game.pieceMap.get(this.x + "," + i).isReach(piece)
&& this.game.pieceMap.get(this.x + "," + i).isPass()) {

this.game.trackList.push(this.game.pieceMap.get(this.x + "," + i));

return true;
}

}

return false;
},

該函數以點擊的圖片為中心分別沿x軸,y軸展開搜索。
以上是本游戲代碼的全部內容。具體游戲源碼請到CSDN中zhangjinpeng66的資源里下載。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人精品视| 国产日产欧美精品| 国产精品日韩在线一区| 91久久精品国产91久久性色| 国产日韩中文字幕在线| 亚洲精品国产精品自产a区红杏吧| 国模私拍一区二区三区| 国产精品露脸自拍| 久久综合色影院| 日韩暖暖在线视频| 国产精品人成电影在线观看| 91a在线视频| 色综久久综合桃花网| 国产亚洲精品美女久久久| 国产精品自拍小视频| 成人日韩在线电影| 欧洲成人在线视频| 亚洲japanese制服美女| 亚洲网站视频福利| 亚洲欧美日韩中文视频| 久久久精品一区二区| 亚洲精品中文字幕女同| 国内免费精品永久在线视频| 国产视频精品xxxx| 少妇精69xxtheporn| 欧美限制级电影在线观看| 在线观看不卡av| 日韩av电影在线免费播放| 欧美在线观看网址综合| 国产一区二区日韩| 亚洲综合大片69999| 欧美亚洲日本网站| 久久不射热爱视频精品| 欧美最顶级丰满的aⅴ艳星| 国产精品国产三级国产aⅴ浪潮| 欧美视频裸体精品| 欧美午夜精品伦理| 久久久精品亚洲| 91精品综合久久久久久五月天| 97色在线视频| 亚洲最大av在线| 日韩电视剧在线观看免费网站| 国产精品久久久久久久久久ktv| 国产在线一区二区三区| 国产成人精品国内自产拍免费看| 亚洲高清一区二| 成人国产精品久久久| 热久久美女精品天天吊色| 91精品国产91久久久久久久久| 精品香蕉一区二区三区| 亚洲成色www8888| 亚洲欧洲第一视频| 精品偷拍一区二区三区在线看| 久久影院资源站| 91精品久久久久久久久久久久久| 欧美激情欧美激情在线五月| 国产91露脸中文字幕在线| 最近日韩中文字幕中文| 成人免费自拍视频| 欧美大秀在线观看| **欧美日韩vr在线| 亚洲欧洲国产伦综合| 欧美精品亚州精品| 欧美日韩国产限制| 亚洲日韩中文字幕| 国产精品极品美女粉嫩高清在线| 亚洲人成网站免费播放| 伊人久久综合97精品| 色悠悠国产精品| 日韩欧美在线免费观看| 俺去亚洲欧洲欧美日韩| 久久免费少妇高潮久久精品99| 国产亚洲精品久久| 日韩美女在线播放| 欧美性xxxx极品hd欧美风情| 久久夜色精品国产欧美乱| 亚洲天堂第二页| 精品伊人久久97| 欧美福利小视频| 久久露脸国产精品| 欧美精品一区二区免费| 91精品视频观看| 欧美日韩一区二区在线| 亚洲美女又黄又爽在线观看| 最近中文字幕mv在线一区二区三区四区| 国产一区二区三区欧美| 亚洲欧美精品中文字幕在线| 成人欧美一区二区三区黑人孕妇| 岛国av一区二区在线在线观看| 午夜精品一区二区三区在线播放| 国产精品自拍小视频| 亚洲激情在线观看视频免费| 亚洲影院色在线观看免费| 日韩精品一区二区视频| 国产欧美一区二区三区视频| 亚洲精品久久久久中文字幕二区| 国内精品久久久久伊人av| 精品亚洲精品福利线在观看| 亚洲护士老师的毛茸茸最新章节| 亚洲一级黄色av| 久久影视电视剧凤归四时歌| 狠狠久久亚洲欧美专区| 狠狠综合久久av一区二区小说| 中文字幕在线精品| 97成人精品区在线播放| 8090理伦午夜在线电影| 亚洲福利精品在线| 97久久伊人激情网| 欧美老女人在线视频| 岛国视频午夜一区免费在线观看| 日韩av电影院| 成人免费高清完整版在线观看| 国产精品成人品| 欧美一级视频免费在线观看| 久久精品国产亚洲| 91视频国产高清| 国产综合视频在线观看| 日本精品一区二区三区在线| 欧美日韩国产综合视频在线观看中文| 国产一区二区动漫| 亚洲社区在线观看| 992tv成人免费影院| 在线电影av不卡网址| 亚洲欧美一区二区三区四区| 欧美性受xxxx黑人猛交| 欧美在线激情视频| 日本精品va在线观看| 91精品国产电影| 久热精品视频在线观看一区| 亚洲美女视频网站| 久久中文精品视频| 欧美成人精品一区二区三区| 久久久久国产精品www| 欧美专区日韩视频| 2019亚洲日韩新视频| 欧美激情免费视频| 亚洲精品国产精品自产a区红杏吧| 色哟哟网站入口亚洲精品| 92看片淫黄大片欧美看国产片| 97视频免费在线观看| 成人久久久久久| 亚洲一区二区三区在线免费观看| 国外日韩电影在线观看| 亚洲人成电影网| 国产欧美在线视频| 伊人久久精品视频| 日本高清视频精品| 亚洲香蕉av在线一区二区三区| 精品免费在线视频| 久久精品国产视频| 亚洲va男人天堂| 91在线播放国产| 孩xxxx性bbbb欧美| 91在线视频免费| 国产91色在线|| 国产成人一区三区| 日韩在线观看免费全| 亚洲性视频网站| 亚洲天堂久久av| 欧美午夜精品久久久久久人妖| 68精品久久久久久欧美| 久久亚洲精品视频| 性欧美xxxx视频在线观看| 1769国内精品视频在线播放|