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

首頁 > 語言 > JavaScript > 正文

jQuery實現的五子棋游戲實例

2024-05-06 16:22:26
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了jQuery實現的五子棋游戲,以完整實例形式分析了jQuery實現五子棋游戲的方法,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了jQuery實現的五子棋游戲。分享給大家供大家參考。具體如下:

這是一款非常不錯的代碼,就是人工智能方面差了一點

 

 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  3. <html xmlns="http://www.w3.org/1999/xhtml"
  4. <head> 
  5. <title>五子棋</title> 
  6. <style type="text/css"
  7. div{margin:0;padding:0;} 
  8. div.board{width:561px; height:561px; border:1px solid #ccc; margin:0 auto;} 
  9. div.board div{ width:31px; height:31px; border:1px solid #ccc; float:left; cursor:pointer; background-repeat:no-repeat; } 
  10. div.board .person { background-image:url('images/1/files/demo/white.jpg')} 
  11. div.board .machine{ background-image:url('images/1/files/demo/black.jpg')} 
  12. div.board .person_star{background-image:url('images/1/files/demo/white_star.jpg')} 
  13. div.board .machine_star{background-image:url('images/1/files/demo/black_star.jpg')} 
  14. input.ipt{ display:block; margin:0 auto; margin-top:8px;width:70px} 
  15. </style> 
  16. </head> 
  17. <body> 
  18. <div class='board' id='board'
  19. </div> 
  20. <input type='button' value='開始游戲' onclick="initGame(); 
  21. this.value='重新開始'class='ipt'/> 
  22. <script type='text/javascript'
  23. var TRANSVERSE = 16; 
  24. var VERTICAL = 16; 
  25. var LEFT = 1; 
  26. var RIGHT = 2; 
  27. var TOP = 3; 
  28. var BOTTOM = 4; 
  29. var LEFT_TOP = 5; 
  30. var LEFT_BOTTOM = 6; 
  31. var RIGHT_TOP = 7; 
  32. var RIGHT_BOTTOM = 8; 
  33. var Chess = function() 
  34. var owner = ''
  35. var victory = false
  36. this.getOwner = function(){return owner;}; 
  37. this.setOwner = function(value){owner = value;}; 
  38. this.getVictory = function(){ return victory;} 
  39. this.setVictory = function(value){ victory = value; }  
  40. var Board = function() 
  41. var chessBoard = []; 
  42. var isGameOver = false
  43. this.getChess = function(point) 
  44. var x = point.x , y = point.y; 
  45. return chessBoard[y][x]; 
  46. this.setChess = function(chess , point) 
  47. var x = point.x , y = point.y; 
  48. chessBoard[y][x] = chess; 
  49. this.setVictory = function(points) 
  50. for(var i = 0 ; i < points.length ; i ++) 
  51. for(var j = 0 ; j < points[i].length; j ++) 
  52. var chess = this.getChess(points[i][j]); 
  53. chess.setVictory(true); 
  54. this.getAvaiablePoints = function() 
  55. var avaiable = new Array; 
  56. for(var y = 0 ; y <= VERTICAL ; y ++) 
  57. for(var x = 0 ; x <= TRANSVERSE ; x ++) 
  58. if(chessBoard[y][x]) continue
  59. var point = {x : x , y : y}; 
  60. avaiable.push(point); 
  61. return avaiable; 
  62. this.getMap = function() 
  63. var map = {}; 
  64. for(var y = 0 ; y <= VERTICAL ; y ++) 
  65. for(var x = 0 ; x <= TRANSVERSE ; x++) 
  66. var chess = chessBoard[y][x]; 
  67. var value = ''
  68. if(chess) 
  69. value = chess.getOwner(); 
  70. if(chess.getVictory()) value += '_star'
  71. else 
  72. value = ''
  73. map[ x + ',' + y ] = value; 
  74. return map; 
  75. this.gameOver = function() 
  76. return isGameOver = true
  77. this.isGameOver = function() 
  78. return isGameOver; 
  79. this.getNextPoint = function(point , direction) 
  80. var next = {x : point.x , y : point.y}; 
  81. switch(direction) 
  82. case LEFT : 
  83. next.x -= 1; 
  84. break
  85. case RIGHT: 
  86. next.x += 1; 
  87. break
  88. case TOP: 
  89. next.y -= 1; 
  90. break
  91. case BOTTOM: 
  92. next.y += 1; 
  93. break
  94. case LEFT_TOP: 
  95. next.x-= 1 , next.y-= 1; 
  96. break
  97. case RIGHT_TOP: 
  98. next.x += 1 , next.y -= 1; 
  99. break
  100. case LEFT_BOTTOM: 
  101. next.x -= 1 , next.y += 1; 
  102. break
  103. case RIGHT_BOTTOM: 
  104. next.x += 1 , next.y += 1; 
  105. break
  106. default : 
  107. alert('方向錯誤'); 
  108. return next; 
  109. var initialize = function() 
  110. for(var i = 0 ; i <= VERTICAL ; i++ ) chessBoard.push([]); 
  111. }  
  112. initialize(); 
  113. var Compute = function(role) 
  114. var directions = [LEFT , TOP , RIGHT , BOTTOM , LEFT_TOP , LEFT_BOTTOM , RIGHT_TOP , RIGHT_BOTTOM]; 
  115. var score = 0; 
  116. var self = this
  117. this._computeScore = function(direction) 
  118. throw new Error('未實現'); 
  119. this._convertToPattern = function(chesslist) 
  120. return role.convertToPattern(chesslist) 
  121. this.compute = function(point) 
  122. score = 0; 
  123. for(var i = 0, direction ; direction = directions[i++];) 
  124. score += this._computeScore(point , direction); 
  125. }  
  126. this.getScore = function(refPoint) 
  127. return score ; 
  128. var Five = function(role) 
  129. Compute.call(this, role); 
  130. var computeScore1 = function(refPoint , direction) 
  131. var predefined = 'IIII'
  132. var chesslist = role.find(refPoint , direction , 4); 
  133. var pattern = role.convertToPattern(chesslist); 
  134. if(predefined == pattern) return true
  135. return false ;  
  136. var computeScore2 = function(refPoint , direction) 
  137. var prev = role.find(refPoint , direction , 2); 
  138. var next = role.find(refPoint , role.reverseDirection(direction) , 2); 
  139. var prevPattern = role.convertToPattern(prev); 
  140. var nextPattern = role.convertToPattern(next); 
  141. if(prevPattern == 'II' && nextPattern == 'II'return true
  142. return false
  143. var computeScore3 = function(refPoint , direction) 
  144. var prev = role.find(refPoint , direction , 3); 
  145. var next = role.find(refPoint , role.reverseDirection(direction) , 1); 
  146. var prevPattern = role.convertToPattern(prev); 
  147. var nextPattern = role.convertToPattern(next); 
  148. if(prevPattern == 'III' && nextPattern == 'I'return true
  149. return false;  
  150. this._computeScore = function(refPoint , direction) 
  151. if(computeScore1(refPoint , direction) || computeScore2(refPoint , direction) || computeScore3(refPoint , direction)) 
  152. return 100000; 
  153. else return 0; 
  154. var Four_Live = function(role) 
  155. Compute.call(this, role); 
  156. this._computeScore = function(refPoint , direction) 
  157. var score = 0; 
  158. var prev = role.find(refPoint , direction , 4); 
  159. var next = role.find(refPoint , role.reverseDirection(direction), 1); 
  160. var prevPattern = this._convertToPattern(prev); 
  161. var nextPattern = this._convertToPattern(next); 
  162. if(prevPattern == 'III0' && nextPattern == '0') score = 10000;  
  163. return score;  
  164. var Four_Live1 = function(role) 
  165. Compute.call(this, role); 
  166. this._computeScore = function(refPoint , direction) 
  167. var prev = role.find(refPoint , direction , 3); 
  168. var next = role.find(refPoint , role.reverseDirection(direction) , 2); 
  169. var prevPattern = this._convertToPattern(prev); 
  170. var nextPattern = this._convertToPattern(next);  
  171. if(prevPattern == 'II0' && nextPattern == 'I0'return 10000; 
  172. else return 0; 
  173. var Tree_Live = function(role) 
  174. Compute.call(this, role); 
  175. this._computeScore = function(refPoint , direction) 
  176. var score = 0; 
  177. var prev = role.find(refPoint , direction , 3); 
  178. var next = role.find(refPoint , role.reverseDirection(direction), 2); 
  179. var prevPattern = this._convertToPattern(prev); 
  180. var nextPattern = this._convertToPattern(next); 
  181. if(prevPattern == 'II0' && nextPattern == '00'
  182. score += 1000; 
  183. return score; 
  184. var Tree_Live1 = function(role) 
  185. Compute.call(this, role); 
  186. this._computeScore = function(refPoint , direction) 
  187. var prev = role.find(refPoint , direction , 2); 
  188. var next = role.find(refPoint , role.reverseDirection(direction), 3); 
  189. var prevPattern = this._convertToPattern(prev); 
  190. var nextPattern = this._convertToPattern(next); 
  191. if(prevPattern == 'I0' && nextPattern == 'I00'
  192. return 1000 
  193. else return 0;  
  194. var Two_Live = function(role) 
  195. Compute.call(this, role); 
  196. this._computeScore = function(refPoint , direction) 
  197. var prev = role.find(refPoint , direction , 3); 
  198. var next = role.find(refPoint , role.reverseDirection(direction), 2);  
  199. var prevPattern = this._convertToPattern(prev); 
  200. var nextPattern = this._convertToPattern(next); 
  201. if(prevPattern == 'I00' && nextPattern == '00'return 100; 
  202. else return 0;  
  203. var One_Live = function(role) 
  204. Compute.call(this, role); 
  205. this._computeScore = function(refPoint , direction) 
  206. var prev = role.find(refPoint , direction , 3); 
  207. var next = role.find(refPoint , role.reverseDirection(direction), 3);  
  208. var prevPattern = this._convertToPattern(prev); 
  209. var nextPattern = this._convertToPattern(next); 
  210. if(prevPattern == '000' && nextPattern == '000'return 10; 
  211. else return 0;  
  212. var Four_End = function(role) 
  213. Compute.call(this, role); 
  214. this._computeScore = function(refPoint , direction) 
  215. var prev = role.find(refPoint , direction , 3); 
  216. var next = role.find(refPoint , role.reverseDirection(direction), 1);  
  217. var prevPattern = this._convertToPattern(prev); 
  218. var nextPattern = this._convertToPattern(next); 
  219. if(prevPattern == 'III' && nextPattern == '0'return 150; 
  220. else return 0;  
  221. var Role = function(board) 
  222. var computers = []; 
  223. var self = this
  224. var isVictory = false
  225. this.isVictory = function() 
  226. return isVictory; 
  227. var getScore = function(point) 
  228. var score = 0; 
  229. for(var i = 0 , computer; computer = computers[i++];) 
  230. computer.compute(point); 
  231. score += computer.getScore(); 
  232. var result = {score: score , point : point}; 
  233. return result; 
  234. var getScoreList = function() 
  235. var result = []; 
  236. var avaiablePoints = board.getAvaiablePoints(); 
  237. for(var i = 0 , point; point = avaiablePoints[i++];)  
  238. result.push(getScore(point)); 
  239. return result; 
  240. this.getCode = function() 
  241. throw new Error('未實現'); 
  242. this.getPeak = function() 
  243. var scoreInfo = getScoreList(); 
  244. scoreInfo.sort(function(a,b){ 
  245. return b.score - a.score ; 
  246. }); 
  247. return scoreInfo[0]; 
  248. }  
  249. this.convertToPattern = function(chesslist) 
  250. var pattern = ''
  251. if(!chesslist) return ''
  252. for(var i = 0 ; i < chesslist.length ; i ++) 
  253. var chess = chesslist[i]; 
  254. if(chess == undefined) pattern += '0'
  255. else if(chess.getOwner() == this.getCode()) pattern += 'I'
  256. else pattern += 'Y'
  257. return pattern ; 
  258. this.reverseDirection = function(direction) 
  259. switch(direction) 
  260. case LEFT : return RIGHT; 
  261. case RIGHT : return LEFT; 
  262. case TOP : return BOTTOM; 
  263. case BOTTOM : return TOP; 
  264. case LEFT_TOP : return RIGHT_BOTTOM; 
  265. case RIGHT_BOTTOM : return LEFT_TOP; 
  266. case RIGHT_TOP : return LEFT_BOTTOM; 
  267. case LEFT_BOTTOM : return RIGHT_TOP; 
  268. default : alert('方向錯誤'); 
  269. }  
  270. this._checkGameOver = function(point) 
  271. var leftRight = findVictory(point , LEFT); 
  272. var topBottom = findVictory(point , TOP); 
  273. var leftTopRightBottom = findVictory(point , LEFT_TOP); 
  274. var rightTopLeftBottom = findVictory(point , RIGHT_TOP); 
  275. var array = [leftRight , topBottom , leftTopRightBottom , rightTopLeftBottom]; 
  276. var victory = []; 
  277. for(var i = 0 ; i < array.length ; i ++) 
  278. if(array[i].length >= 5) victory.push(array[i]); 
  279. if(victory.length > 0) 
  280. board.gameOver(); 
  281. board.setVictory(victory); 
  282. isVictory = true
  283. if(board.getAvaiablePoints().length ==0) board.gameOver(); 
  284. var isLicitPoint = function(point) 
  285. return point.x >= 0 && point.y >= 0 && point.x <= TRANSVERSE && point.y <= VERTICAL  
  286. && board.getChess(point) && board.getChess(point).getOwner() == self.getCode() 
  287. var findVictory = function(refPoint , direction) 
  288. var reverse = self.reverseDirection(direction); 
  289. var result = []; 
  290. var nextPoint ; 
  291. var currPoint = {x: refPoint.x , y: refPoint.y}; 
  292. while(true
  293. nextPoint = board.getNextPoint(currPoint, direction); 
  294. if(!isLicitPoint(nextPoint)) break
  295. currPoint = {x :nextPoint.x , y:nextPoint.y}; 
  296. while(true
  297. result.push(currPoint);  
  298. nextPoint = board.getNextPoint(currPoint , reverse); 
  299. if(!isLicitPoint(nextPoint)) break;  
  300. currPoint = { x: nextPoint.x , y: nextPoint.y }; 
  301. return result; 
  302. this.find = function(point , direction , deep) 
  303. var refPoint = {x: point.x , y : point.y}; 
  304. var result = new Array; 
  305. var index = 1; 
  306. var nextPoint; 
  307. while(index <= deep) 
  308. nextPoint = board.getNextPoint(refPoint, direction); 
  309. if(nextPoint.x < 0 || nextPoint.y < 0 ||  
  310. nextPoint.x > TRANSVERSE || nextPoint.y > VERTICAL) return null
  311. var chess = board.getChess(nextPoint); 
  312. if(chess) chess.point = {x:nextPoint.x , y:nextPoint.y}; 
  313. result.push(chess); 
  314. refPoint = nextPoint; 
  315. index ++; 
  316. return result; 
  317. }  
  318. var initialize = function() 
  319. computers.push(new Five(self)); 
  320. computers.push(new Four_Live(self)); 
  321. computers.push(new Tree_Live(self)); 
  322. computers.push(new Four_Live1(self)); 
  323. computers.push(new Tree_Live1(self)); 
  324. computers.push(new Two_Live(self)); 
  325. computers.push(new One_Live(self)); 
  326. computers.push(new Four_End(self)); 
  327. initialize(); 
  328. var Machine = function(board, rival) 
  329. Role.call(this, board); 
  330. this.setChess = function() 
  331. if(board.isGameOver()) return
  332. var myPeak = this.getPeak(); 
  333. var rivalPeak = rival.getPeak(); 
  334. var peak ; 
  335. if(myPeak.score >= rivalPeak.score) peak = myPeak; 
  336. else peak = rivalPeak; 
  337. var chess = new Chess(); 
  338. chess.setOwner(this.getCode()); 
  339. board.setChess(chess, peak.point); 
  340. this._checkGameOver(peak.point); 
  341. this.getCode = function(){return 'machine';} 
  342. var Person = function(board , rival) 
  343. Role.call(this, board); 
  344. this.setChess = function(x,y) 
  345. if(board.isGameOver()) return
  346. var point = new Object; 
  347. point.x = x; 
  348. point.y = y; 
  349. var chess = new Chess() 
  350. chess.setOwner(this.getCode()); 
  351. board.setChess(chess, point); 
  352. this._checkGameOver(point); 
  353. this.getCode = function(){ return 'person'; } 
  354. var UIBase = function() 
  355. var self = this
  356. this._id = '$UI' + (++ UIBase.index); 
  357. this._globalKey = ""
  358. this.getHTML = function() 
  359. return ""
  360. var setGlobalKey = function() 
  361. var magic = '$UI_Items'
  362. self._globalKey = 'window.'+magic+'.'+self._id;  
  363. window[magic] = window[magic] || {}; 
  364. window[magic][self._id] = self; 
  365. var formatHTML = function(html) 
  366. html = html.replace(//$/$/g, self._globalKey); 
  367. html = html.replace(/&&/g,self._id); 
  368. return html; 
  369. }  
  370. var initUIBase = function() 
  371. setGlobalKey(); 
  372. this.renderHTML = function() 
  373. return formatHTML(this.getHTML()); 
  374. this.getDOM = function() 
  375. var dom = document.getElementById(this._id) 
  376. return dom; 
  377. initUIBase(); 
  378. UIBase.index = 0; 
  379. var ChessUI = function(board, placeholder) 
  380. UIBase.call(this); 
  381. this.setChess = function(){} 
  382. this.getHTML = function() 
  383. var html = ''
  384. var map = board.getMap(); 
  385. for(var key in map) 
  386. var onclick = ''
  387. var className = map[key]; 
  388. if(className == '') onclick='$._setChess('+ key +')'
  389. html += '<div onclick="'+ onclick +'" class="'+ className +'"></div>'
  390. return html; 
  391. this.draw = function() 
  392. var html = this.renderHTML(); 
  393. document.getElementById(placeholder).innerHTML = html; 
  394. this._setChess = function(x,y) 
  395. this.setChess(x,y); 
  396. this.draw(); 
  397. function getMSIEVersion() 
  398. var regex = /MSIE([^;]+)/; 
  399. var userAgent = navigator.userAgent; 
  400. var result = regex.exec(userAgent); 
  401. if(result) return parseInt(result[1]); 
  402. function initGame() 
  403. var version = getMSIEVersion(); 
  404. if(version && version <= 8) 
  405. alert('請使用非IE瀏覽器(ie9、10除外)進行游戲(google chrome 、firefox等 )'); 
  406. return
  407. var board = new Board(); 
  408. var person = new Person(board); 
  409. var machine = new Machine(board, person); 
  410. var chessUI = new ChessUI(board, 'board'); 
  411. chessUI.setChess = function(x,y) 
  412. person.setChess(x,y); 
  413. machine.setChess(); 
  414. chessUI.draw(); 
  415. if(board.isGameOver()) 
  416. if(person.isVictory()) alert('您獲得了勝利'); 
  417. else if(machine.isVictory()) alert('機器獲得了勝利'); 
  418. else alert('游戲結束,勝負未分'); 
  419. if(Math.floor(Math.random() * 10) % 2) 
  420. alert('機器執棋'); 
  421. machine.setChess(); 
  422. chessUI.draw(); 
  423. else 
  424. alert('您執棋'); 
  425. </script> 
  426. </body> 
  427. </html> 

希望本文所述對大家的jQuery程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人精品三级在线观看| 成人h视频在线观看播放| 中文字幕在线观看亚洲| www.久久久久久.com| 欧美最猛性xxxx| 亚洲va国产va天堂va久久| 欧美成人午夜免费视在线看片| 亚洲一区二区在线| 亚洲最新av在线网站| 久久久午夜视频| 欧美最猛性xxxx| 久久激情五月丁香伊人| 91精品国产电影| 欧美亚洲国产日本| 欧美极品美女电影一区| 欧美日韩在线视频首页| 岛国av一区二区三区| 久久久精品免费视频| 在线播放国产一区中文字幕剧情欧美| x99av成人免费| 欧美激情亚洲另类| 91在线精品视频| 亚洲精品久久久一区二区三区| 日韩a**站在线观看| 精品久久久视频| 日韩麻豆第一页| 午夜精品一区二区三区在线| 曰本色欧美视频在线| 久久久国产精品亚洲一区| 日本成人免费在线| 全色精品综合影院| 精品中文字幕在线| 国产精品久久久久久影视| 亚洲最大福利网站| 国产精品久久久一区| 日韩欧美国产中文字幕| 亚洲成色777777女色窝| 久久久久久噜噜噜久久久精品| 欧美日韩亚洲国产一区| 欧美最顶级的aⅴ艳星| 色老头一区二区三区在线观看| 国产成人在线视频| 久久久亚洲福利精品午夜| 亚洲国产精彩中文乱码av在线播放| 成人亚洲综合色就1024| 欧美一级高清免费| 日韩美女主播视频| 一区二区三欧美| 日本免费在线精品| 亚洲综合日韩中文字幕v在线| 国产精品久久77777| 国产精品极品美女在线观看免费| 97视频在线观看免费高清完整版在线观看| 国产日韩精品入口| 亚洲人精品午夜在线观看| 国产成人精品av| 在线日韩精品视频| 精品久久久久久久久国产字幕| 成人激情春色网| 岛国av一区二区三区| 成人激情在线观看| 中文字幕日韩欧美在线视频| 两个人的视频www国产精品| 国产成人精品免高潮费视频| www国产精品视频| 国产成人精彩在线视频九色| 久久亚洲私人国产精品va| 91久久精品视频| 亚洲天堂av在线播放| 久久精品国产一区二区电影| 久久国内精品一国内精品| 91精品国产九九九久久久亚洲| 国产欧美日韩最新| 激情懂色av一区av二区av| 国产亚洲日本欧美韩国| 国产精品久久国产精品99gif| 精品国内产的精品视频在线观看| 日韩欧美精品免费在线| 欧美激情亚洲一区| 91免费精品视频| 日韩av大片在线| 成人欧美在线视频| 欧美精品一本久久男人的天堂| 欧美高清不卡在线| 久久亚洲国产精品成人av秋霞| 亚洲理论电影网| 国产日韩欧美另类| 最新国产精品拍自在线播放| 欧美电影电视剧在线观看| 久久综合伊人77777| 亚洲人成电影网站色…| 亚洲第一av网| 亚洲精品电影网站| 亚洲激情视频网| 成人精品在线观看| 91牛牛免费视频| 欧美巨猛xxxx猛交黑人97人| 91香蕉嫩草神马影院在线观看| 日产日韩在线亚洲欧美| 成人中心免费视频| 国内精品久久久久久| 亚洲欧美在线免费观看| 久久久www成人免费精品| 欧美高清在线视频观看不卡| 日韩欧美国产网站| 亚洲自拍偷拍色片视频| 亚洲精品美女在线| 欧美xxxx综合视频| 国产在线视频一区| 成人乱色短篇合集| 日韩美女免费观看| 91精品视频免费观看| …久久精品99久久香蕉国产| 91精品国产色综合久久不卡98| 亚洲一区二区在线播放| 欧美视频中文在线看| 日韩美女视频中文字幕| 久久久av电影| 国产精品久久视频| 亚洲高清色综合| 欧美亚洲国产成人精品| 亚洲欧美日本另类| 久久影院中文字幕| 国产精品久久国产精品99gif| 欧美日韩中文在线观看| 一本色道久久综合亚洲精品小说| 91理论片午午论夜理片久久| 青青草原一区二区| 国产精品成人av在线| 97久久精品视频| 国产在线拍偷自揄拍精品| 日韩亚洲一区二区| 国产成人精品在线视频| 国产亚洲在线播放| 日韩av电影在线播放| 欧美日韩国产综合视频在线观看中文| 国产精品白嫩初高中害羞小美女| 亚洲色图偷窥自拍| 国内精品小视频| 亚洲第一免费网站| 久久影视电视剧免费网站清宫辞电视| 国产精品高潮呻吟久久av黑人| 亚洲成人激情视频| 国产精品久久久久7777婷婷| 欧美日韩激情视频8区| 在线日韩第一页| 久久免费视频在线| 91夜夜揉人人捏人人添红杏| 深夜成人在线观看| 亚州欧美日韩中文视频| 国产91精品久| 国产自产女人91一区在线观看| 国产精品视频网站| 91综合免费在线| 日韩成人性视频| 国产成人a亚洲精品| 一本色道久久综合亚洲精品小说| 中文字幕9999| 欧美成人一二三| 国产91色在线| 国产aⅴ夜夜欢一区二区三区| 欧美成人sm免费视频| 国内精品美女av在线播放| 国产精品一区二区久久久|