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

首頁 > 編程 > JavaScript > 正文

原生JavaScript實現(xiàn)連連看游戲(附源碼)

2019-11-20 21:47:17
字體:
供稿:網(wǎng)友
向大家推薦一款原生JavaScript版連連看游戲,源碼下載,首頁如下圖所示:
 
首先看一下html的布局方式在index.html文件中:
復(fù)制代碼 代碼如下:

<!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>分 數(shù)</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文件如下:
復(fù)制代碼 代碼如下:

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部分實現(xiàn)代碼,js部分分為三個源文件即game.js、map.js、piece.js每一個源文件對應(yīng)一個類,其中本游戲通過game類來操縱map和圖片piece對象:
game.js代碼如下:
復(fù)制代碼 代碼如下:

// 游戲控制類
var Game = {
// 游戲背景
gamePanel : null,
// 分?jǐn)?shù)
score : 0,
// 時間
time : 0,
// 圖片映射表
pieceMap : null,
// 圖片列表
pieceList : [],
// 圖片列表不包含圖片
pieceImgList : [],
// 圖片隨機數(shù)列表
randomList : [],
// 軌跡列表
trackList : [],
// 游戲是否開始
isGameBigin : false,
// 游戲是否結(jié)束
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);
// 執(zhí)行圖片點擊事件
this.pieceImgList[i].onClick();
}
},
// 初始化隨機表
initRandomList : function() {
// 獲取隨機數(shù)列,成雙出現(xiàn)
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版映射結(jié)構(gòu)map.js源文件如下:
復(fù)制代碼 代碼如下:

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源文件如下:
復(fù)制代碼 代碼如下:

var Piece = function(game) {
// 游戲?qū)ο?
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;
// 選中標(biāo)記元素
this.selected = null;
// 圖片橫向排列
this.x = 0;
// 圖片縱向排列
this.y = 0;
// 圖片閃爍Id
this.flashId = null;
// 圖片是否點擊
this.onClicked = false;
// 閃爍次數(shù)
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);
},
// 位圖片設(shè)置來源
setImgSrc : function(src) {
this.src = src;
},
// 為圖片設(shè)置二維排列位置
setPosition : function(x, y) {
this.x = x;
this.y = y;
},
// 為圖片設(shè)置選中元素
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);
}
},
// 設(shè)置是否為邊緣元素
setEdge : function(isEdge) {
this.isEdge = isEdge;
},
// 設(shè)置是否挨著邊緣元素
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);
}
},
// 對象被選擇的內(nèi)部函數(shù)
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;
},
// 分?jǐn)?shù)增加
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;
}
}

以上是源文件的代碼,具體的實現(xiàn)代碼請關(guān)注CSDN中zhangjinpeng66下載。下面講一下連連看游戲最核心的部分,js實現(xiàn)搜索路徑。
js實現(xiàn)搜索路徑算法首先最簡單的是判斷兩個圖片能否直線到達函數(shù)代碼如下:
復(fù)制代碼 代碼如下:

// 直線
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;
},

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

// 拐一次彎搜索
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;
},

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

// 拐兩次彎搜索
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;
},

該函數(shù)以點擊的圖片為中心分別沿x軸,y軸展開搜索。
以上是本游戲代碼的全部內(nèi)容。具體游戲源碼請到CSDN中zhangjinpeng66的資源里下載。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
香蕉综合视频| 国产精品免费人成网站酒店| 成人国产亚洲精品a区天堂华泰| 国产精品一区视频| 欧美大片网站| 少妇无套内谢久久久久| 欧美性猛交 xxxx| 一区二区三区国产精华| 亚洲视频在线观看一区二区三区| 黄色工厂这里只有精品| 一区二区国产盗摄色噜噜| 99久久久久成人国产免费| 一起操在线播放| 三级网站在线| 欧美精品免费在线观看| 日韩a∨精品日韩在线观看| 亚洲美腿欧美偷拍| 4388成人网| 99精品视频在线观看免费| 91制片厂毛片| 久久久久成人网| 人妻激情偷乱视频一区二区三区| 日本一区视频在线观看| 极品美女销魂一区二区三区免费| 羞羞视频网站| 女尊高h男高潮呻吟| 日韩经典一区二区三区| 夜夜嗨av一区二区三区网站四季av| 亚洲精品中字| 波多野结衣在线影院| 午夜激情视频在线观看| 欧美日韩国产电影| 国产精品日韩一区二区| 久久在线精品视频| 色综合天天爱| 精品久久美女| 午夜亚洲性色福利视频| 一区二区三区免费在线观看视频| 国产剧情久久久久久| 91精品在线视频观看| 欧美日韩精品免费观看| 给我看免费高清在线观看| 青娱乐在线免费视频| 99这里只有精品| 成人午夜两性视频| 成人午夜免费福利| 小说区视频区图片区| 天堂网www在线资源中文| 精品一区二区三区免费视频| 欧美视频四区| 色吊一区二区三区| 一区二区三区在线视频111| 一二三在线视频社区| 又色又爽又黄无遮挡的免费视频| 韩国日本一区| 美女大黄三级视频在线观看| y97精品国产97久久久久久| 日韩av在线中文字幕| 亚洲伦理一区二区| 日韩二区三区在线| 国产精品白浆流出视频| 电影天堂国产精品| 亚洲国产www| 午夜视频一区在线观看| 久久久久久女乱国产| 先锋成人av| 精品久久免费| 欧美精品videosbestsex另类| 国产成人亚洲欧洲在线| 日韩美女在线看| 一区二区久久久久| 亚洲高清一二三区| 性久久久久久久久久久久久久| 九九热hot精品视频在线播放| 黑人巨大精品欧美一区二区奶水| 蜜桃视频在线观看免费视频网站www| 亚洲精品中文字幕乱码三区不卡| 91|九色|视频| 国产三级一区二区| 免费成人高清在线视频theav| 国产成人一区在线| 欧美激情在线播放| 国产jizz18女人高潮| 色777狠狠狠综合伊人| 欧美日韩国产91| 91精品国产自产91精品| 视频一区在线播放| 九色91播放| 6080午夜| 亚洲一区国产精品| 亚洲美洲欧洲综合国产一区| 国产精品偷伦视频免费观看国产| 日韩欧美一二三区| 国内成人精品| 欧美综合激情| 亚洲美女av在线| 麻豆传媒在线完整视频| 四虎影院观看视频在线观看| 大胆亚洲人体视频| 欧洲精品一区二区三区久久| 狠狠色狠狠色合久久伊人| 色久综合一二码| 欧美一区二区三区综合| 你懂的国产精品永久在线| 91污片在线观看| 国产精品乱码一区二三区小蝌蚪| 在线中文字幕视频| 欧洲第一无人区观看| 亚洲高清在线观看一区| 欧美激情综合在线| 我看黄色一级片| 亚洲影音一区| 三级网站在线看| 粗大的内捧猛烈进出视频| 91欧美激情一区二区三区成人| 国产精品一卡二卡在线观看| 美女又爽又黄免费视频| 欧美精品videosex牲欧美| 亚洲综合无码一区二区| 国产69久久精品成人看| 视频在线观看入口黄最新永久免费国产| 日日嗨av一区二区三区四区| yw.尤物在线精品视频| 一本久久a久久免费精品不卡| 亚洲中文字幕无码一区二区三区| 无码视频一区二区三区| 久久成人精品无人区| 肉色超薄丝袜脚交69xx图片| 女同性互吃奶乳免费视频| 中文字幕在线不卡国产视频| 欧美午夜理伦三级在线观看| 日韩免费电影在线观看| 欧美日韩国产精品一卡| 亚洲qvod图片区电影| 日韩成人在线电影网| 色哟哟国产精品色哟哟| 国产私拍精品| 污视频在线免费观看| 日韩高清在线免费观看| 国产aⅴ一区二区三区| 免费av毛片在线看| 老司机很黄的视频免费| 国产精品极品国产中出| 欧美成人精品激情在线视频| 久久伊人中文字幕| 91精品国产乱码久久久| 亚洲动漫在线观看| 日韩在线观看免费全| 国内高清免费在线视频| av免费在线观看网址| 欧美日韩性视频一区二区三区| 嫩草视频免费在线观看| 一区二区三区短视频| 国模极品一区二区三区| 国产日韩视频在线播放| 激情小说亚洲一区| av有声小说一区二区三区| 日韩影院免费视频| 国产清纯白嫩初高生在线观看91| 欧美日韩精品一区二区三区视频播放| 在线一区观看| 国产一区欧美二区三区| 在线视频亚洲专区| 亚洲另类色综合网站| 亚洲欧美久久久久| 一区二区精品区| 亚洲一区中文字幕在线观看| 日本女优一区| 国产欧美一区二区三区在线老狼| 国产精品美女久久| 精品一区二区三区蜜桃在线| 精品999久久久| 亚洲欧美日韩综合网| 午夜精品久久久久久久99热黄桃| 成人免费看视频网站| 亚洲高清视频一区二区| 色多多视频在线观看| 无码人妻一区二区三区精品视频| 日本欧美肥老太交大片| 亚洲精品国偷自产在线99热| 国产美女在线播放| 亚洲成人av综合| www.四虎影视.com| 日韩精品每日更新| av中文在线资源| fc2ppv素人在线| 国产色99精品9i| 在线免费观看亚洲视频| 国产偷窥洗澡视频| 六月丁香综合网| 爱高潮www亚洲精品| 欧美性受ⅹ╳╳╳黑人a性爽| 国产中文字幕一区| 韩国v欧美v日本v亚洲| 欧美性xxxx极品hd欧美| 精品久久久久中文慕人妻| 国产青春久久久国产毛片| 亚洲另类一区二区| 日本午夜精品一区二区| 成人资源视频网站免费| 国产一级粉嫩xxxx| 欧美日本一区二区视频在线观看| 羞羞视频在线观看免费| 91久久久一线二线三线品牌| www视频免费| 日韩免费中文专区| 精品国产精品国产精品| 亚洲性感美女99在线| 国产欧美精品一区二区| 国产h色视频在线观看| 中文字幕久热精品视频在线| 亚洲欧美久久久久一区二区三区| 182tv在线播放| 黄色片在线播放| h片视频在线观看| 综合在线亚洲| 亚洲国产精品区| 国产又白又嫩又紧又爽18p| 91麻豆精品国产91| 精产国品一二三区| 先锋影音资源999| 天天综合天天做| av电影免费在线| 日韩电影免费观看高清完整版在线观看| 91在线视频免费播放| 在线观看你懂| 99久久精品国产一区二区成人| 日韩av午夜在线观看| 日韩私人影院| 久久成人18免费网站| 色哟哟一一国产精品| 影院免费视频| 福利片在线观看| 免费a级在线播放| 亚洲第一综合| 中文字幕视频免费在线观看| 亚洲啊v在线观看| 91麻豆国产精品久久| 亚洲精品中文字| 亚洲一本视频| 国产一区二区不卡视频在线观看| 国产黄色在线免费观看| av免费在线观看网址| 成人精品视频一区| 国产成人女人毛片视频在线| 国产一区二区三区美女秒播| 日韩精品久久久久久免费| 欧美一区二区免费观在线| 精品亚洲第一| 久久久99久久精品欧美| 男人草女人视频| 9色视频在线观看| 中文字幕在线观看日韩| 国产亚洲女人久久久久毛片| 变态黄色小视频网站| 欧美一区二区三区粗大| 久久综合九色综合97婷婷女人| 精品这里只有精品| 亚洲一区二区三区日韩| 精品一区在线| 一本色道久久综合亚洲精品不卡| 久久久精品一区二区毛片免费看| 久久久噜噜噜久久人人看| 久久久久久久久久久久久av| 亚洲+变态+欧美+另类+精品| 极品白嫩的小少妇| 亚洲精品中文字幕在线观看| 久久国产精品黑丝| 肉色超薄丝袜脚交一区二区| 爱草在线视频| 韩国毛片一区二区三区| 99re6这里只有精品视频在线观看| 欧美变态tickling挠脚心| 在线观看91| a级黄色片免费看| 日韩午夜av电影| 欧洲乱码伦视频免费| 欧美日韩一区二区三区69堂| 国产麻豆一区二区三区在线观看| 99免费精品| 口述被爽到呻吟高潮自述| 欧美激情导航| 一色屋成人免费精品网| 日韩av中文字幕在线| 国产精品视频yy9299一区| 国产成人激情小视频| 黄色av网址在线播放| 91香蕉视频在线播放| 国产黄视频网站| 九九99九九精彩| 婷婷成人基地| 久久精品国产亚洲777| 2021国产视频| 日本欧美色图| 二区三区四区视频| 男人天堂2024| 黄瓜视频在线观看| 亚洲精品suv精品一区二区| 国产欧美精品一区aⅴ影院| 人妻少妇精品久久| 中文字幕第100页| 蜜桃视频m3u8在线观看| 91性高湖久久久久久久久_久久99| 第一社区sis001原创亚洲| 亚洲欧美丝袜中文综合| 自拍一级黄色片| 国产寡妇亲子伦一区二区三区四区| 在线免费观看成年人视频| 中文字幕免费高清网站| 26uuu另类亚洲欧美日本一| 成人免费高清观看| 日韩专区第一页| 亚洲欧洲日产国产综合网| 欧美日韩国产综合视频在线观看中文| 久久电影网站| 色偷偷网友自拍| 巨胸喷奶水www久久久| 97视频在线免费观看| 亚洲国产成人精品女人| 五月婷婷激情视频| 欧美tickling挠脚心丨vk| 久久深夜福利| 极品魔鬼身材女神啪啪精品| 97超碰在线人人| 在线一区亚洲| 你懂的网站在线观看| 亚洲尤物av| 国产成人啪精品午夜在线观看|