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

首頁 > 語言 > JavaScript > 正文

JavaScript制作windows經典掃雷小游戲

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

掃雷是一款相當大眾的小游戲,游戲目標是在最短的時間內根據點擊格子出現的數字找出所有非雷格子,同時避免踩雷。今天我們來看看如何使用javascript來實現這款小游戲

代碼其實很簡單,這里就不多廢話了

 

 
  1. <html> 
  2. <head> 
  3. <meta http-equiv="Content-Language" content="zh-cn"
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"
  5. <title>掃雷-JavaScript Mine Sweeper</title> 
  6. <style type="text/css"
  7. table{TABLE-LAYOUT: fixed;cursor:pointer} 
  8. td{width: 20px; height: 20px; font-size: 12px; font-family: Verdana;font-weight:bold; text-align:center;background:#CECECE;} 
  9. td.Normal, .Flag{border-left:2px solid #F5F5F5; border-right:2px outset #F5F5F5; border-top:2px solid #F5F5F5; border-bottom:2px outset #F5F5F5; font-weight:bold} 
  10. .Mine, .Boom, .M0, .M1, .M2, .M3, .M4, .M5, .M6, .M7, .M8{background:#C5C5C5;border-right:1px solid #B4B4B4; border-bottom:1px solid #B4B4B4;} 
  11. td.Mine{background: url(http://sandbox.runjs.cn/uploads/rs/202/xyovf5xj/mine.gif) no-repeat center} 
  12. td.Boom{background:#F00 url(http://sandbox.runjs.cn/uploads/rs/202/xyovf5xj/mine.gif) no-repeat center} 
  13. td.Flag, td.ErrFlag{background-image: url(http://sandbox.runjs.cn/uploads/rs/202/xyovf5xj/flag.gif);background-repeat: no-repeat; background-position: center;} 
  14. td.ErrFlag{background:#0F0} 
  15. td.M1 {color: #00f} 
  16. td.M2 {color: #008000} 
  17. td.M3 {color: #f00} 
  18. td.M4 {color: #000080} 
  19. td.M5 {color: #800000} 
  20. td.M6 {color: #008080} 
  21. td.M7 {color: #000} 
  22. td.M8 {color: #808080} 
  23. </style> 
  24. <script> 
  25. var $=function(id){return document.getElementById(id)}, 
  26. MouseButton=LeftMouse=0,//作為雙鍵單擊的計數,mouseup事件置0,mousedown事件+1,當MouseButton=2說明雙鍵同時單擊;鼠標左鍵是否按下,當鼠標左鍵按下時為1,松開為0 
  27. FlagImg=new Image(), 
  28. HappyImg=new Image(), 
  29. MineImg=new Image(), 
  30. SadImg=new Image(), 
  31. SuccessImg=new Image(), 
  32.  
  33. WhichButton=function(e){ 
  34. e=e||window.event; 
  35. var b=getOs(); 
  36. if(b!=2){ //非FF 
  37. switch(e.button){ 
  38. case 2: 
  39. return 0; 
  40. case 0: 
  41. return b==1?0:1; //b==1,IE 
  42. default
  43. return 1; 
  44. }else//FF 
  45. return e.which==3?0:1; 
  46. }, 
  47.  
  48. OMine={ 
  49. MaxX:9,MaxY:9,//最大的坐標 
  50. MineCount:10,//定義雷的個數,可改 
  51. FlagCount:0, //已經標記的旗子的數量 
  52. OpenedCount:0, //已經打開的地區的數量 
  53. MaxOpenCount:0,//應該要打開的最大地區數量 
  54. //當OpenedCount=MaxOpenCount&&FlagCount=MineCount的時候,判斷游戲成功結束 
  55. Mine:[], 
  56. GameOver:false//true代表游戲失敗結束 
  57. Success:false//true代表游戲成功結束 
  58. aClear:[],//臨時開雷的數組 
  59.  
  60. //刷新網頁的時候初始化 
  61. fInit:function(){ 
  62. var T=this,MaxX=T.MaxX,MaxY=T.MaxY,nX,nY=MaxY,MineCount=T.MineCount, 
  63. AStr=['<table bordercolor="#000000" border="0" cellpadding="0" cellspacing="0" height="'+20*MaxY+'px" width="'+20*MaxX+'px" style="border: 10px inset #a0a0a0">'], 
  64. i=0,TAr,TMine=T.Mine; 
  65. T.MaxOpenCount=MaxX*MaxY-MineCount; 
  66. while(nY--){ 
  67. AStr[++i]='<tr>'
  68. TAr=TMine[nY]=[]; 
  69. nX=MaxX; 
  70. while(nX--){ 
  71. AStr[++i]='<td class="Normal" onmousedown="OMine.fMouseDown('+nX+','+nY+',event);" onmouseup="OMine.fMouseUp('+nX+','+nY+',event);" onmouseover="OMine.fButtonMouseOver('+nX+','+nY+')" onmouseout="OMine.fButtonMouseOut('+nX+','+nY+')" id="Img'+nX+'_'+nY+'"> </td>'
  72. TAr[nX]={ 
  73. Mine:0, //0表示沒有雷,1表示有雷 
  74. State:0,//0表示未開啟,1表示左鍵開啟,2表示右鍵標記 
  75. MineCount:0//周圍有幾個雷 
  76. AStr[++i]='</tr>'
  77. AStr[++i]='</table>'
  78. $('dMap').innerHTML=T.InitStr=AStr.join(''); 
  79. $('txtFlagCount').value=MineCount; 
  80. T.fInitMine(); 
  81. $('btnRefreshMap').src='http://sandbox.runjs.cn/uploads/rs/202/xyovf5xj/happy.gif'
  82. T.GameOver=T.Success=false
  83. T.OpenedCount=T.FlagCount=T.aClear.lenght=0; 
  84. }, 
  85.  
  86. //為了方便循環賦值,給表格數組賦值的時候是XY倒過來循環的,所以調用的時候要倒回去 
  87. //比如要獲得該格子是否有雷,用OMine.fGetMine(x,y).Mine; 
  88. fGetMine:function(X,Y){return this.Mine[Y][X]}, 
  89.  
  90. //僅當按重新開始的按鈕,不初始化大表格字符 
  91. fRefreshMap:function(){ 
  92. var T=this
  93. $('dMap').innerHTML=T.InitStr; 
  94. T.fResetOMine();//必須先重置OMine,再重置99個雷 
  95. T.fInitMine(); 
  96. T.GameOver=T.Success=false
  97. $('btnRefreshMap').src='http://sandbox.runjs.cn/uploads/rs/202/xyovf5xj/happy.gif'
  98. $('txtFlagCount').value=T.MineCount; 
  99. T.OpenedCount=T.FlagCount=T.aClear.lenght=0; 
  100. }, 
  101.  
  102. //重置OMine.Mine數組 
  103. fResetOMine:function(){ 
  104. var T=this,MaxY=T.MaxY,MaxX=T.MaxX,X,Y=MaxY,M,Mine=T.Mine,TAr; 
  105. while(Y--){ 
  106. X=MaxX; 
  107. TAr=Mine[Y]; 
  108. while(X--)(M=TAr[X]).Mine=M.State=M.MineCount=0; 
  109. }, 
  110.  
  111. //初始化雷的數組 
  112. fInitMine:function(){ 
  113. var T=this,MaxX=T.MaxX,MaxY=T.MaxY,a,fGetMine=T.fGetMine, 
  114. aOld=[],x,y=MaxY,n=0,l=T.MineCount,xRand; //一個隨機數字 
  115. while(y--){ 
  116. x=MaxX; 
  117. while(x--)aOld[n++]=[x,y]; 
  118. while(l--){ 
  119. a=aOld[xRand=Math.floor(Math.random()*(n-1))]; 
  120. T.fGetMine(a[0],a[1]).Mine=1; 
  121. aOld.splice(xRand,1); 
  122. --n; 
  123. }, 
  124.  
  125. //鼠標移動到某格子的時候 
  126. fButtonMouseOver:function(X,Y){ 
  127. var T=this
  128. switch(MouseButton){ 
  129. case 2://雙鍵按下的狀態 
  130. var arr=T.fGetAround(X,Y),i=arr.length,TAr; 
  131. while(i--)T.fButtonDown((TAr=arr[i])[0],TAr[1]); 
  132. case 1: 
  133. LeftMouse==1&&T.fButtonDown(X,Y); //左鍵是按下的 
  134. }, 
  135.  
  136. //鼠標移出某格子的時候 
  137. fButtonMouseOut:function(X,Y){ 
  138. var T=this
  139. switch(MouseButton){ 
  140. case 2://雙鍵按下的狀態 
  141. var arr=T.fGetAround(X,Y),i=arr.length,TAr; 
  142. while(i--)T.fButtonUp((TAr=arr[i])[0],TAr[1]); 
  143. case 1: 
  144. LeftMouse==1&&T.fButtonUp(X,Y); //左鍵是按下的 
  145. }, 
  146.  
  147. //鼠標按下時沒被開啟的格子呈現被按下 
  148. fButtonDown:function(X,Y){ 
  149. var srcEle=$('Img'+X+'_'+Y); 
  150. srcEle.className=='Normal'&&(srcEle.className='M0'); 
  151. }, 
  152.  
  153. //讓沒被開啟并且已經呈現被按下的格子回復Normal 
  154. fButtonUp:function(X,Y){ 
  155. var srcEle=$('Img'+X+'_'+Y); 
  156. srcEle.className=='M0'&&!this.fGetMine(X,Y).State&&(srcEle.className='Normal'); 
  157. }, 
  158.  
  159. //獲取8個方向的坐標 
  160. fGetAround:function(X,Y){ 
  161. var TX,TY,i=8,MX=this.MaxX-1,MY=this.MaxY-1, 
  162. Arr=[[-1,0],[-1,-1],[0,-1],[1,-1],[1,0],[1,1],[0,1],[-1,1]], 
  163. newArr=[],TAr; 
  164. while(i--){ 
  165. TX=X+(TAr=Arr[i])[0]; 
  166. TY=Y+TAr[1]; 
  167. !(TX<0||TX>MX||TY<0||TY>MY)&&newArr.push([TX,TY]); 
  168. return newArr; 
  169. }, 
  170.  
  171. //鼠標在格子按下 
  172. fMouseDown:function(X,Y,evt){ 
  173. var T=this
  174. if(T.GameOver){ 
  175. alert('游戲失敗,再接再厲!'); 
  176. return
  177. if(T.Success){ 
  178. alert('恭喜游戲成功!再來一局吧?'); 
  179. return
  180. var srcEle=$('Img'+X+'_'+Y),ObXY=T.fGetMine(X,Y),arr,i,TAr; 
  181. ++MouseButton; 
  182. evt=evt||window.event; 
  183. switch(MouseButton){ 
  184. case 2: 
  185. arr=T.fGetAround(X,Y);i=arr.length; 
  186. while(i--)T.fButtonDown((TAr=arr[i])[0],TAr[1]); 
  187. break
  188. case 1: 
  189. if(WhichButton(evt)){ 
  190. LeftMouse=1; 
  191. T.fButtonDown(X,Y); 
  192. }else
  193. switch(ObXY.State){ 
  194. case 0: 
  195. ObXY.State=2; 
  196. srcEle.className='Flag'
  197. --$('txtFlagCount').value; 
  198. ++T.FlagCount; 
  199. break
  200. case 2: 
  201. ObXY.State=0; 
  202. srcEle.className='Normal'
  203. ++$('txtFlagCount').value; 
  204. --T.FlagCount; 
  205. }, 
  206.  
  207. //鼠標在格子彈起 
  208. fMouseUp:function(X,Y,evt){ 
  209. var T=this
  210. evt=evt||window.event; 
  211. var srcEle=$('Img'+X+'_'+Y),ObXY=T.fGetMine(X,Y),arr,i,TAr; 
  212. switch(MouseButton){ 
  213. case 2: //MouseDown為兩個鍵都單擊按下,任意一個鍵彈起都判斷為雙鍵彈起 
  214. LeftMouse=0; 
  215. //鼠標彈起,把呈現被按下狀態的格子恢復 
  216. arr=T.fGetAround(X,Y);i=arr.length; 
  217. while(i--)T.fButtonUp((TAr=arr[i])[0],TAr[1]); 
  218. !ObXY.State&&T.fButtonUp(X,Y); 
  219. ObXY.State==1&&ObXY.MineCount&&T.fOpenFlagMine(X,Y); 
  220. break
  221. case 1: //當MouseDown為一個鍵單擊時,MouseUp才判斷為一個鍵彈起 
  222. if(WhichButton(evt)){ 
  223. //只有在State=0才起作用,跟是否有雷沒關系 
  224. LeftMouse=0; 
  225. if(ObXY.State){break;} 
  226. ObXY.Mine?( 
  227. //觸雷,結束該局 
  228. T.fFail(), 
  229. srcEle.className='Boom' 
  230. ):( 
  231. ObXY.State=1, //壓棧之前就要設置為已經開啟 
  232. T.aClear.push([X,Y]), 
  233. T.fClearMine() 
  234. MouseButton=0; 
  235. if(T.OpenedCount==T.MaxOpenCount&&T.FlagCount==T.MineCount){ 
  236. T.fSuccess(); 
  237. alert('恭喜游戲成功!再來一局吧?'); 
  238. return
  239. //當剩余未開啟的格子數=剩余的旗子數,自動完成 
  240. T.MaxOpenCount+T.MineCount-T.OpenedCount-T.FlagCount==$('txtFlagCount').value&&( 
  241. T.fSuccess(), 
  242. T.fAutoFlag(), 
  243. alert('恭喜游戲成功!再來一局吧?'
  244. }, 
  245.  
  246. //自動填充未開啟的地區的雷 
  247. fAutoFlag:function(){ 
  248. var T=this,nX,nY=T.MaxY,MaxX=T.MaxX,Mine=T.Mine,TAr; 
  249. while(nY--){ 
  250. nX=MaxX; 
  251. TAr=Mine[nY]; 
  252. while(nX--)!TAr[nX].State&&($('Img'+nX+'_'+nY).className='Flag'); 
  253. $('txtFlagCount').value=0; 
  254. }, 
  255.  
  256. //遞歸開雷 
  257. fClearMine:function(){ 
  258. var T=this
  259. if(T.aClear.length==0){return
  260. ++T.OpenedCount; 
  261. var aXY=T.aClear.pop(),X=aXY[0],Y=aXY[1],TX,TY, 
  262. aTmpClear=[], //一個臨時數組 
  263. srcEle=$('Img'+X+'_'+Y), 
  264. ObXY,ObTXTY, 
  265. countMine=0, //獲取周圍雷的個數 
  266. //從正左開始的8個方向 
  267. arr=T.fGetAround(X,Y),i=arr.length,TAr; 
  268. while(i--){ 
  269. //TX,TY獲得本格周圍的坐標 
  270. (ObTXTY=T.fGetMine(TX=(TAr=arr[i])[0],TY=TAr[1])).Mine==1&&++countMine; 
  271. !ObTXTY.State&&aTmpClear.push([TX,TY]); 
  272. ObXY=T.fGetMine(X,Y); 
  273. ObXY.MineCount=countMine; 
  274. srcEle.className='M'+countMine; 
  275. if(!countMine){ 
  276. Array.prototype.push.apply(T.aClear,aTmpClear); 
  277. i=aTmpClear.length; 
  278. while(i--)T.fGetMine((TAr=aTmpClear[i])[0],TAr[1]).State=1; 
  279. }else
  280. getOs()==2? 
  281. srcEle.textContent=countMine 
  282. :srcEle.innerText=countMine 
  283. T.fClearMine(); 
  284. }, 
  285.  
  286. //獲得雙鍵輔助開啟 
  287. fOpenFlagMine:function(X,Y){ 
  288. var T=this,FlagCount=0,TX,TY,ObXY,ObTXTY,aTmpClear=[],FlagErr=false
  289. arr=T.fGetAround(X,Y),i=arr.length,TAr; 
  290. while(i--){ 
  291. //TX,TY獲得本格周圍的坐標 
  292. ObTXTY=T.fGetMine(TX=(TAr=arr[i])[0],TY=TAr[1]); 
  293. switch(ObTXTY.State){ 
  294. case 0: //未開啟未標記 
  295. !ObTXTY.Mine&&aTmpClear.push([TX,TY]); //沒雷也沒旗子的時候加入到被輔助開啟的數組} 
  296. break
  297. case 2: //標記了旗子 
  298. ++FlagCount; //只要標記了旗子,無論對錯,都記錄標記數+1 
  299. !ObTXTY.Mine&&(FlagErr=true); //沒有雷但是標記了旗子,標記錯誤 
  300. if(FlagCount<T.fGetMine(X,Y).MineCount||aTmpClear.length==0)return
  301. //旗子比實際雷少,無論標記對錯,不開啟 
  302. //沒有可以提供開啟的空格 
  303. if(FlagErr){ //有錯誤則進行結束游戲處理 
  304. T.fFail(); 
  305. return
  306. Array.prototype.push.apply(T.aClear,aTmpClear); 
  307. i=aTmpClear.length; 
  308. while(i--)T.fGetMine((TAr=aTmpClear[i])[0],TAr[1]).State=1; 
  309. T.fClearMine(); 
  310. }, 
  311.  
  312. //顯示所有的雷 
  313. fShowMine:function(){ 
  314. var T=this,X=0,Y=T.MaxY,MaxX=T.MaxX,Mine=T.Mine,TAr,TArX; 
  315. while(Y--){ 
  316. X=MaxX; 
  317. TAr=Mine[Y]; 
  318. while(X--){ 
  319. TArX=TAr[X]; 
  320. switch(TArX.Mine){ 
  321. case 0: 
  322. TArX.State==2&&($('Img'+X+'_'+Y).className='ErrFlag'); 
  323. break
  324. case 1: 
  325. $('Img'+X+'_'+Y).className='Mine'
  326. }, 
  327.  
  328. //游戲成功結束 
  329. fSuccess:function(){ 
  330. this.Success=true
  331. $('btnRefreshMap').src='http://sandbox.runjs.cn/uploads/rs/202/xyovf5xj/success.gif'
  332. }, 
  333.  
  334. //游戲失敗結束 
  335. fFail:function(){ 
  336. this.GameOver=true
  337. $('btnRefreshMap').src='http://sandbox.runjs.cn/uploads/rs/202/xyovf5xj/sad.gif'
  338. this.fShowMine(); 
  339. }, 
  340.  
  341. //換地圖 
  342. ChangeMap=function(Map){ 
  343. var O=OMine; 
  344. switch(Map){ 
  345. case 1: 
  346. O.MaxX=O.MaxY=9; 
  347. O.MineCount=10; 
  348. break
  349. case 2: 
  350. O.MaxX=O.MaxY=16; 
  351. O.MineCount=40; 
  352. break
  353. case 3: 
  354. O.MaxX=30; 
  355. O.MaxY=16; 
  356. O.MineCount=99; 
  357. O.fInit(); 
  358. }, 
  359.  
  360. getOs=function(){ 
  361. if(navigator.userAgent.indexOf("MSIE")>0)return 1; 
  362. if(isFirefox=navigator.userAgent.indexOf("Firefox")>0)return 2; 
  363. if(isSafari=navigator.userAgent.indexOf("Safari")>0)return 3;  
  364. if(isCamino=navigator.userAgent.indexOf("Camino")>0)return 4; 
  365. if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0)return 5; 
  366. return 0; 
  367. }; 
  368.  
  369.  
  370. FlagImg.src='http://sandbox.runjs.cn/uploads/rs/202/xyovf5xj/flag.gif'
  371. HappyImg.src='http://sandbox.runjs.cn/uploads/rs/202/xyovf5xj/happy.gif'
  372. MineImg.src='http://sandbox.runjs.cn/uploads/rs/202/xyovf5xj/mine.gif'
  373. SadImg.src='http://sandbox.runjs.cn/uploads/rs/202/xyovf5xj/sad.gif'
  374. SuccessImg.src='http://sandbox.runjs.cn/uploads/rs/202/xyovf5xj/success.gif'
  375. </script> 
  376. </head> 
  377. <body topmargin="0" oncontextmenu="return false" ondragstart="return false" onselectstart="return false" onload="OMine.fInit()" bgcolor="#808080"
  378. <center> 
  379. <div id="dTop" align="center" style="border-style: inset; border-width: 10;width:400"
  380. <table cellpadding="0" cellspacing="0" style="border-collapse: collapse;" width="380" height="44"
  381. <tr> 
  382. <td style="width: 102; height:50px"
  383. <input type="text" id="txtFlagCount" size="20" style="width: 60; height: 30; color:#FF0000; text-align:center; font-family:Verdana; font-weight:bold; background-color:#000000; font-size:13pt" value=""></td> 
  384. <td style="width: 136; height:50px"
  385. <input onclick="OMine.fRefreshMap()" type="image" id="btnRefreshMap" src="happy.gif"><input onclick="OMine.fShowMine();" type="button" name="B3" value="顯雷"style="display:none"></td> 
  386. <td style="width: 142; height:50px"
  387. <input type="radio" value="V1" checked name="R1" id="R1" onclick="ChangeMap(1)">初級<input type="radio" value="V1" name="R1" id="R2" onclick="ChangeMap(2)">中級<input type="radio" value="V1" name="R1" id="R3" onclick="ChangeMap(3)">高級</td> 
  388. </tr> 
  389.  
  390. </table> 
  391. </div> 
  392. <div id="dMap" align="center"></div> 
  393. </center> 
  394. </body> 
  395. </html> 

以上所述就是本文的全部內容了,希望大家能夠喜歡。

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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久999精品视频| 国产在线一区二区三区| 欧美亚洲激情视频| 成人激情免费在线| 欧美精品制服第一页| 亚洲综合中文字幕68页| 久久久久久久久久久国产| 国产有码在线一区二区视频| 亚洲网址你懂得| 欧美另类在线观看| 国产精品丝袜视频| 欧美日韩一区二区免费视频| 91影视免费在线观看| 国产亚洲一区二区在线| 色婷婷久久一区二区| 欧美亚洲成人网| 亚洲免费一级电影| 2019av中文字幕| 奇米成人av国产一区二区三区| 亚洲无av在线中文字幕| 神马国产精品影院av| 日本精品免费一区二区三区| 亚洲人成网站免费播放| 久久久噜噜噜久噜久久| 久久久久久久久国产精品| 欧美性少妇18aaaa视频| 亚洲精品一区久久久久久| 日韩久久精品电影| 国产啪精品视频| 欧美大尺度激情区在线播放| 亚洲精品视频网上网址在线观看| 日韩电影免费观看中文字幕| 日本国产高清不卡| 精品国产成人av| 亚洲女人天堂av| 国产精品流白浆视频| 美日韩精品免费观看视频| 日韩电影中文字幕一区| 精品久久香蕉国产线看观看gif| 亚洲女人被黑人巨大进入| 欧美大片免费观看在线观看网站推荐| 亚洲曰本av电影| 最新69国产成人精品视频免费| 亚洲国产精品久久| 亚洲情综合五月天| 精品伊人久久97| 国产欧美精品一区二区| 亚洲天堂网站在线观看视频| 国产精品专区h在线观看| 国产日韩欧美中文在线播放| 国产91精品青草社区| 国产深夜精品福利| 国产精品久久一区主播| 精品无人区乱码1区2区3区在线| 亚洲日本aⅴ片在线观看香蕉| 亚洲欧洲xxxx| 中文字幕日韩电影| 91色视频在线导航| 人人爽久久涩噜噜噜网站| 亚洲欧美日韩中文视频| 成人性生交大片免费看小说| 国产98色在线| 成人久久精品视频| 国产成人精品免高潮费视频| 国产精品免费一区| 国产欧美va欧美va香蕉在| 国产99久久久欧美黑人| 久久国产视频网站| 欧美乱妇40p| 亚洲午夜未满十八勿入免费观看全集| 国产在线精品播放| 日韩高清有码在线| 国产精品麻豆va在线播放| 国产成人在线一区| 91在线视频免费| 狠狠色香婷婷久久亚洲精品| 精品成人国产在线观看男人呻吟| 日韩欧美高清视频| 欧美精品一区在线播放| 欧美午夜性色大片在线观看| 国产精品日韩专区| 懂色aⅴ精品一区二区三区蜜月| 国产精品久久久久久搜索| 亚洲女人被黑人巨大进入| 国产一区玩具在线观看| 精品福利视频导航| 成人网在线免费观看| 91成人国产在线观看| 亚洲成人网在线观看| 成人在线视频福利| 国产精品一区二区三区毛片淫片| 最新69国产成人精品视频免费| www.日本久久久久com.| 国产一区二区在线免费| 欧美日本啪啪无遮挡网站| 美女少妇精品视频| 欧美在线一区二区视频| 狠狠做深爱婷婷久久综合一区| 国产精品吊钟奶在线| 91大神在线播放精品| 欧美激情亚洲另类| 欧美中文在线视频| 亚洲国产欧美一区二区丝袜黑人| 91系列在线播放| 久久久亚洲影院| 亚洲成色777777在线观看影院| 亚洲国语精品自产拍在线观看| 国产精品色午夜在线观看| 亚洲欧美在线x视频| 欧美一区二区三区图| 国产一区二区黄| www.99久久热国产日韩欧美.com| 欧日韩不卡在线视频| 日韩欧美在线国产| 日韩av123| www.亚洲人.com| 中文字幕亚洲精品| 国产v综合v亚洲欧美久久| 4k岛国日韩精品**专区| 日韩精品中文字幕有码专区| 97精品免费视频| 国产91精品久久久久久久| 97在线视频免费看| 蜜臀久久99精品久久久久久宅男| 97在线视频免费| 亚洲色无码播放| 欧美精品在线看| 日韩欧美在线中文字幕| 亚洲人成网站777色婷婷| 亚洲美女黄色片| 91老司机在线| 日本高清视频一区| 高清一区二区三区日本久| 国产日韩欧美影视| 国模吧一区二区三区| 美女啪啪无遮挡免费久久网站| 欧美日韩美女在线| 69精品小视频| 亚洲性猛交xxxxwww| 国产精品久久久久福利| 91色琪琪电影亚洲精品久久| 亚洲第一色中文字幕| 中文字幕一区二区三区电影| 久久久亚洲福利精品午夜| 亚洲影院色在线观看免费| 日本欧美一级片| 亚洲精品欧美日韩| 国产91精品高潮白浆喷水| 亚洲国产成人精品久久久国产成人一区| 亚洲四色影视在线观看| 亚洲色图五月天| 欧美裸身视频免费观看| 亚洲国产精品久久久久久| 91av视频在线免费观看| 一区二区三区亚洲| 亚洲精品97久久| 欧美成人一二三| 国内精品久久久久影院优| 色噜噜狠狠色综合网图区| 91色中文字幕| 久久久久久久国产精品视频| 国产成人涩涩涩视频在线观看| 欧美壮男野外gaytube| 日韩免费观看在线观看|