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

MFC實現桌面版Flappy Bird

開發 后端 架構
flappy bird由一位來自越南河內的獨立游戲開發者阮哈東開發,是一款形式簡易但難度極高的休閑游戲。簡單但不粗糙的8比特像素畫面、超級馬里奧游戲中的水管、眼神有點呆滯的小鳥和幾朵白云便構成了游戲的一切。你需要不斷控制點擊屏幕的頻率來調節小鳥的飛行高度和降落速度,讓小鳥順利地通過畫面右端的通道,如果你不小心擦碰到了通道的話,游戲便宣告結束。

一、開發背景:

flappy bird由一位來自越南河內的獨立游戲開發者阮哈東開發,是一款形式簡易但難度極高的休閑游戲。簡單但不粗糙的8比特像素畫面、超級馬里奧游戲中的水管、眼神有點呆滯的小鳥和幾朵白云便構成了游戲的一切。你需要不斷控制點擊屏幕的頻率來調節小鳥的飛行高度和降落速度,讓小鳥順利地通過畫面右端的通道,如果你不小心擦碰到了通道的話,游戲便宣告結束。

這款虐心的小游戲一經推出,便引起火爆的下載。然后先后出現了各種平臺的移植開發:IOS平臺PC和手機版、采用HTML5+Canvas及Javascript技術來實現的Flappy Bird電腦版、以網頁html5+JS技術完全克隆了原版native app的Web App版、實現了在微信朋友圈和QQ空間中的無縫運行的微信/QQ空間版、WindowsPhone版….但是唯一沒有的是直接可在windows操作系統下的單機版,于是當時突發奇想,不如我來填補這個漏洞吧!

二、開發語言及運行環境:

此PC版采用C++的MFC技術在VS2012開發平臺下寫成,支持windows 7\8環境,XP不知道為啥不行~

三、效果展示:

[[124092]]

 [[124093]]

 [[124094]]

 [[124095]]

四、游戲框架說明:

整個游戲除了由MFC游戲基本框架CMyApp和CMainWindow外,這里特別封裝了以下幾個類:

  1. 1、  Bird類[專門處理鳥的飛行邏輯、碰撞檢測、音樂播放、貼圖] 
  2. 2、  PipeList類[內嵌Pipe類,并用CList創建一個Pipe鏈表,用來處理游戲中管道的移動邏輯、碰撞檢測等] 
  3. 3、  Panel類[主要是計分板的動畫效果邏輯和計分板的計分邏輯,數字貼圖,金幣種類運算等] 
  4. 4、  Land類[主要處理陸地運動邏輯及貼圖] 
  5. 5、  Button類[主要處理按鈕的動畫效果、貼圖及響應] 
  6. 6、  Pic類[是圖片資源類,主要負責存儲、加載、全局調用游戲的圖片資源] 

 

五、游戲狀態及邏輯說明:

這款游戲本身操作簡單、邏輯分明,大致可分為以下幾種狀態:

1、  初始態:基本上為靜態貼圖,只有鳥和陸地為簡單運動。由上往下依次為:

  1. [數字:0] 
  2.  
  3. [標志:Get Ready!] 
  4.  
  5. [圖標:操作方法] 
  6.  
  7. [鳥:上下飛行] 
  8.  
  9. [陸地:向左移動] 
  10.  
  11. [背景:隨機晝夜] 

2、  游戲進行態:當點擊一下屏幕,鳥、柱子被解封,陸地依然保持原來運動狀態,背景不變,這里采用相對運動效果,其實背景是沒有運動的,而鳥也只是上下運動,根本就沒有向前飛一點!

  1. [鳥:向上躍起,然后以豎直上拋的邏輯使鳥運動;同時,還要專門為鳥的姿態設計合理的旋轉函數] 
  2.  
  3. [柱子:向柱子鏈表里加入新的柱子,并使鏈表里的所有柱子開始向左移動,當柱子完全超出最左邊界時,將該柱子刪除;同樣的,當最后一個柱子到達某一特定距離時,向鏈表里加入一個新的柱子,這樣既保證了剛開始的柱子出現效果的真實、有趣性,又保證了資源的合理回收,提高算法高效性] 
  4.  
  5. [分數:當柱子到達鳥所在的位置時就要進行碰撞檢測,如果沒有碰撞且鳥跨過柱子,就讓分數+1,并響鈴] 
  6.  
  7. [陸地:保持勻速運動邏輯,采用循環貼圖技術,產生無縫效果] 

3、  死亡狀態:鳥的死亡狀態看似簡單,但是仔細分析并非如此。各種細節都要分別考慮:

  1. [直接撞地態:中止所有運動邏輯,同時留一定的時間間隔,產生畫面轉換的質感] 
  2.  
  3. [高撞柱子態:旋轉為垂直態,然后自由落體;撞擊時發出聲音,然后發出墜落的聲音,同時進行碰撞檢測,碰到陸地中止一切運動,進行時間停留] 
  4.  
  5. [低撞柱子態:和高撞柱子態的區別是,墜落的時間少了,音樂沒有完頁面就跳轉了,所以要控制時間停留長度,產生高仿的效果] 

4、  死亡之后態:鳥撞地之后要有一定的時間逗留防止頁面跳轉過快不舒服的感覺。接下來首先貼上game_over的圖標,然后計分板從下往上飛來,接著開始計分并張貼是否為新紀錄和是否獲得金牌之類的,最后貼上兩個按鈕等待響應。

  1. [陸地:停止運動] 
  2.  
  3. [圖標:展示Game_Over] 
  4.  
  5. [計分板:動畫效果,從下往上飛來并帶有音效,當飛到指定位置時開始從0累計得分,并統計是否為新紀錄和是否獲得相應的獎牌] 
  6.  
  7. [按鈕:靜態貼圖,但是相應的時候有上下振動的效果] 

#p#

六、經典算法說明:

1、 ON_WM_TIMER:時間消息映射:

主要控制全局邏輯運算的時間進程,根據當前的狀態做相應的邏輯運算;同時邏輯運算也會對全局的游戲狀態進行改變,實現全局操控邏輯實現:(與此相同的draw函數這里就不再詳細介紹)

  1. void CMainWindow::OnTimer(UINT nTimerID){ 
  2.     switch(nTimerID){ 
  3.     case bird_time: 
  4.         if(game_state==before_game)bird.logic(before_game,game_state);//開始前 
  5.         break
  6.     case land_time: 
  7.         if(game_state==before_game){//開始前 
  8.             land.logic();//路 
  9.         }else if(game_state==during_game){//游戲中 
  10.             if(bird.state!=bird_delay)land.logic();//路 
  11.             bird.logic(1,game_state);//鳥正常運動 
  12.             if(bird.state!=bird_delay)pipe.logic(goals,bird,game_state);//管道 
  13.         }else if(game_state==dying_game){//失敗中 
  14.             bird.logic(2,game_state);//垂直下落 
  15.         }else if(game_state==end_game){//顯示game-over+計分板+2個按鈕 
  16.             if(panel.state==finish)button.logic(game_state); 
  17.             if(last_state>=10)panel.logic(goals,best_goals); 
  18.         }else if(game_state==start_game){//重新開始 
  19.             restart(); 
  20.             game_state=before_game; 
  21.         } 
  22.         break
  23.     default:break
  24.     } 
  25.     draw(); 

2、 ON_WM_LEFTBUTTONDOWN:鼠標左鍵按下監聽映射:

每次單擊鼠標左鍵相應該函數,然后該函數根據不同的游戲狀態做出不同的邏輯操作:①、[當游戲處于0態,即:游戲開始之前時,點擊鼠標,狀態改為1態,柱子加入開始移動,鳥躍起開始飛翔][當處于游戲態時:每次點擊鳥都會躍起];②、[當處于結束態時:按鈕等待鼠標按動,并根據區域做出判斷是否按了按鈕,按了哪一個]

  1. void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point){ 
  2.     if(game_state==0){ 
  3.         game_state=1; 
  4.         pipe.add(); 
  5.         bird.jump(); 
  6.     }else if(game_state==1){ 
  7.         bird.jump(); 
  8.     }else if(game_state==3){ 
  9.         button.click(point); 
  10.     } 

3、PipeList::logic柱子邏輯函數,包括碰撞檢測!

為了簡化起見,我把音頻播放的部分刪去了:這里是遍歷整個鏈表,對于每一個柱子,由上到下每一個if為:①、[判斷鳥是否正好穿越一個柱子,如果是則分數加1];②、[判斷柱子是否出界,超出就不把該柱子放回鏈表,相當于刪除];③、[鳥與地面的碰撞檢測];④、[鳥與柱子的碰撞檢測]⑤、[最后一個if是判斷最后一個柱子是否到達指定位置,如果到達就向鏈表尾部加入一個新的柱子,從而保證了柱子連續且間距統一]

  1. //--------------------------------------------------------------- 
  2. void PipeList::logic(int &goals,Bird &bird,int &game_state){//邏輯函數 
  3.     int count=pipe.GetCount(); 
  4.     for(int i=0;i<count;i++){ 
  5.         Pipe temp=pipe.GetHead(); 
  6.         pipe.RemoveHead(); 
  7.         temp.logic(); 
  8.         if(temp.pos_x==64){ 
  9.             goals+=1; 
  10.         } 
  11.         if(temp.pos_x>=-70)pipe.AddTail(temp); 
  12.         //碰撞檢測 
  13.         if(23+bird.y+48-$d>400){//與地面 
  14.             bird.y=400-230-48+$d; 
  15.             bird.stop(); 
  16.             game_state=2; 
  17.         }else if(!(65+48-$d < temp.pos_x || temp.pos_x+52<65+$d)){//與柱子 
  18.             if(!(230+bird.y+$d > temp.pos_y+320 && temp.pos_y+420 > 230+bird.y+48-$d)){ 
  19.                 game_state=2;//表示碰撞,游戲結束; 
  20.             } 
  21.         } 
  22.     } 
  23.     if((pipe.GetTail()).pos_x<=140){ 
  24.         Pipe temp; 
  25.         pipe.AddTail(temp); 
  26.     } 
  27. }//--------------------------------------------------------------- 

4、 Bird::logic鳥的運動邏輯,包括所有運動狀態(絕密算法!!!)

同樣的為了簡單我也把音頻部分的代碼刪去了。此函數是分別將鳥的運動的各個狀態做分別處理:①、[開始前:采用正弦函數波動飛行同時改變翅膀狀態];②、[正常飛行時:又把鳥的運動狀態劃分為向上、向下、旋轉、停留四個狀態分別處理];③、[下落死亡狀態:這里用了一個輔助時間變量,控制幀動畫播放]

  1. //--------------------------------------------------------------- 
  2. void Bird::logic(int ID,int &game_state){ 
  3.     if(ID==0){//開始前 
  4.         y=4*sin(Time*PI); 
  5.         Time+=0.25; 
  6.         fly_state=(fly_state+1)%3; 
  7.     }else if(ID==1){//正常 
  8.         switch(state){ 
  9.         case state_up: 
  10.             v+=a; 
  11.             y+=v; 
  12.             dis_state--; 
  13.             if(dis_state==0){ 
  14.                 state=state_turn; 
  15.                 Time=0; 
  16.             } 
  17.             break
  18.         case state_turn: 
  19.             v+=a; 
  20.             y+=v; 
  21.             if(230+y+48-$d>=400){ 
  22.                 y=400-230-48+$d; 
  23.                 stop(); 
  24.                 game_state=3; 
  25.             } 
  26.             dis_state++; 
  27.             if(dis_state==1 && Time<=0.4){ 
  28.                 Time+=0.1; 
  29.                 dis_state=0; 
  30.             } 
  31.             if(dis_state==6){ 
  32.                 state=state_down; 
  33.             } 
  34.             break
  35.         case state_down: 
  36.             v+=a; 
  37.             y+=v; 
  38.             if(delay==0 && 230+y+48-$d>=400){ 
  39.                 y=400-230-48+$d; 
  40.                 stop(); 
  41.                 state=state_delay; 
  42.             } 
  43.             break
  44.         case state_delay: 
  45.             delay++; 
  46.             if(delay==8){game_state=3;} 
  47.             break
  48.         default:break
  49.         } 
  50.         if(dis_state!=6)fly_state=(fly_state+1)%3; 
  51.     }else if(ID==2){//下落 
  52.         delay++; 
  53.         if(delay==8){//撞擊聲延時 
  54.         } 
  55.         if(delay<60){//下落運算 
  56.             y+=v; 
  57.             v+=a; 
  58.             if(dis_state!=6)dis_state++; 
  59.             if(230+y+48-$d>=400){//撞地檢測 
  60.                 y=400-230-48+$d; 
  61.                 stop(); 
  62.                 if(dis_state==6){delay=60;} 
  63.             } 
  64.         }else if(delay==66){//墜地后延時 
  65.             game_state=3; 
  66.         } 
  67.     } 
  68. }//--------------------------------------------------------------- 

5、Button::按鈕識別和按鈕動畫邏輯實現:

通過鼠標所在的點判斷是否在按鈕所在的矩形區域內來判斷是否點了該按鈕:

  1. //--------------------------------------------------------------- 
  2. void Button::click(CPoint &point){ 
  3.     if(point.x>=25 && point.x<=25+116 && point.y>=340 && point.y<=340+70){ 
  4.         kind=play; 
  5.         move=true
  6.     }else if(point.x>=155 && point.x<=155+116 && point.y>=340 && point.y<=340+70){ 
  7.         kind=score; 
  8.         move=true
  9.         LoadFromResource(IDR_HTML1); 
  10.     }else kind=none; 
  11. }//--------------------------------------------------------------- 
  12. //這里主要解決顫動效果實現及按鈕狀態復原: 
  13. //--------------------------------------------------------------- 
  14. void Button::logic(int &game_state){ 
  15.     if(kind==play){//顫動控制 
  16.         if(move==true){ 
  17.             play_y=2; 
  18.             move=false
  19.         }else
  20.             play_y=0; 
  21.             kind=none; 
  22.             game_state=4; 
  23.         } 
  24.     }else if(kind==score){ 
  25.         if(move==true){ 
  26.             score_y=2; 
  27.             move=false
  28.         }else
  29.             score_y=0; 
  30.             kind=none; 
  31.         } 
  32.     } 
  33. }//--------------------------------------------------------------- 

七、重量級問題解決:

1、 飛翔弧度、旋轉狀態難題:

正如前面的鳥的飛翔邏輯代碼所示:鳥的飛翔過程并不是簡單的自由上拋就能解決的;我通過大量實驗發現必須把這個過程分為上面介紹的4步,然后每一步用更加詳細的數學公式計算鳥的運行邏輯[因為此處我們必須考慮鳥的旋轉效果和鳥的速度同步,所以這才是難點所在]。因為上面已經詳細說明了,這里就不再重復,但這是一大難點!

2、 混音效果、完美封裝處理:

本來音樂播放只要用PlaySound函數一句話就能產生音樂播放效果,但是當全部節點都放好音樂時,發現當鳥正好越過柱子發出加分的鈴聲時和鳥飛翔的聲音無法混合播放,而是出現了嚴重的打斷效果!導致聽起來很不舒服。難道只有重新用Direct-X來處理混音嗎?想想就冒汗….畢竟游戲已經接近尾聲了,沒必要再推翻MFC框架而用Direct-X來吧!于是發現用用2個不同的函數可以解決這個問題,即:其他部分不變還是用PlaySound函數,而分數增加的音樂用mciSendString函數來播放可以解決問題。

但是mciSendString只能加在特定路徑下的音頻,無法處理資源文件下的wav文件,這該怎么辦呢?難道要放棄資源的全封裝效果?那多不好,于是還是被我解決了!我采用的思路是:把資源文件讀到一個中間虛擬文件,然后把該中間文件加載金mciSendString就可以啦!下面是如何讀取資源文件并轉為中間文件的函數:

注:PlaySound(MAKEINTRESOURCE(ID),AfxGetResourceHandle(),SND_RESOURCE|SND_ASYNC);

  1. //--------------------------------------------------------------- 
  2. bool ExtractResource(LPCTSTR strDstFile, LPCTSTR strResType, LPCTSTR strResName) 
  3.     // 創建文件 
  4.     HANDLE hFile = ::CreateFile(strDstFile, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NULL); 
  5.     if (hFile == INVALID_HANDLE_VALUE) 
  6.         return false
  7.  
  8.     // 查找資源文件中、加載資源到內存、得到資源大小 
  9.     HRSRC    hRes    = ::FindResource(NULL, strResName, strResType); 
  10.     HGLOBAL    hMem    = ::LoadResource(NULL, hRes); 
  11.     DWORD    dwSize    = ::SizeofResource(NULL, hRes); 
  12.      
  13.     // 寫入文件 
  14.     DWORD dwWrite = 0;      // 返回寫入字節 
  15.     ::WriteFile(hFile, hMem, dwSize, &dwWrite, NULL); 
  16.     ::CloseHandle(hFile); 
  17.  
  18.     return true
  19. }//-------------------------------------------------------------- 

3、 創建分享、窗口截屏技術:

其實已經解決上面幾個問題已經仿的差不多啦,但是還不完美!于是開始著手解決那個分享按鈕[要知道這對MFC來說難度不亞于不用引擎來做圖像處理!]可是這并不代表問題不可解。先不說,先看看效果!

知道難度了吧!這是分享按鈕自動創建的網頁,然后還有圖片信息,下載鏈接[這樣才會吸引更多的人玩]由于這里涉及到非基礎MFC知識,這里只提示一下:用到的技術是HTML+JS技術[也就是網頁編程+腳本設計]

八、開發感想: 

實踐出真知,通過開發這款簡單的像素游戲,遇到了很多問題,也學到了很多,如今將近一年后拿出來還覺得當時做的這個是一個小奇跡~雖然這一年里也做了不少好玩的軟件、神奇的硬件、以及一些軟硬結合的小東西,但是都沒有這個讓人感覺充實。仔細想想,我覺得之所以它能讓開發它的人如此留念,很大一部分原因是因為對它的反復斟酌修改與追求完美的過程中所積淀的解決問題、享受成果的樂趣吧!如今大三上也快GAME OVER了。這一年可能太過于浮躁,一方面想施展下身手、另一方面又技藝不精,會的挺多但都淺嘗輒止,好的想法要很長時間才能實現,遇到優化又不能靜下心來,整天忙忙碌碌基本1~2點休息,可是很少出這種精致的作品~時間很快,暑假實習過后留在大學里的日子就不多啦,且行且珍惜~

博主主頁:http://www.cnblogs.com/zjutlitao/

上述工程資料:http://pan.baidu.com/s/18i2dS

責任編輯:張偉 來源: 博客園
相關推薦

2023-07-19 21:48:45

2009-07-14 09:02:30

Ubuntu開源操作系統Linux

2009-07-13 08:49:54

Ubuntu桌面版Linux

2019-10-09 09:25:08

谷歌編程開發者

2009-05-13 08:35:21

2009-10-29 08:29:09

Ubuntu 9.10

2016-03-21 14:47:45

微軟桌面版Office 2

2021-05-15 08:56:00

Chrome瀏覽器往返緩存

2014-02-12 17:31:17

Flappy Bird

2009-10-15 09:49:10

2009-12-23 13:53:54

Linux桌面版

2013-11-25 16:36:06

Linux企業級桌面版Ubuntu

2021-08-02 10:09:15

Chrome桌面版截圖功能

2021-02-02 06:29:52

Windows10操作系統騰訊 QQ

2011-08-16 23:06:28

firefox6移動版桌面版

2021-04-29 05:48:59

微軟Office 桌面應用

2009-03-27 17:56:59

Linux紅帽CEO桌面版

2009-04-04 09:31:34

Windows 7微軟操作系統

2022-01-04 12:51:40

Ubuntu服務器桌面版

2009-04-07 08:49:46

微軟Windows 7操作系統
點贊
收藏

51CTO技術棧公眾號

波多野结衣三级在线| 色偷偷偷亚洲综合网另类| 精品一区二区三区无码视频| 韩国av电影在线观看| 亚洲欧美高清| 久久影院资源网| 国产免费一区二区三区最新6| 一区二区乱码| 亚洲视频在线一区二区| 国产欧美日韩一区二区三区| 日韩欧美二区三区| 亚洲一区二区在线免费观看| www.xxx国产| 91大神在线网站| 日韩福利电影在线观看| 久久精品在线视频| 精品人妻一区二区三区日产乱码卜| 日韩欧美一区二区三区免费观看 | 国产精品日韩久久久| 一区二区三区天堂av| 99精品视频免费版的特色功能| 久久影院午夜精品| 亚洲黄色av一区| 日本视频精品一区| 高清乱码毛片入口| 另类小说综合欧美亚洲| 97视频在线免费观看| 国产中文字幕久久| 中文字幕精品影院| 亚洲国产日韩一区| 91精品国产三级| 亚洲成人一区在线观看| 精品女同一区二区三区在线播放 | 午夜伦理在线| 91伊人久久大香线蕉| 7777奇米亚洲综合久久| 涩涩视频在线观看| 性欧美videos另类喷潮| 欧美激情国产日韩精品一区18| 微拍福利一区二区| 欧美日韩一本| 精品国产伦理网| 肉色超薄丝袜脚交| 欧美aaa级| 91久久精品网| 红桃av在线播放| 92久久精品| 一区二区视频免费在线观看| 影音先锋欧美资源| av福利精品| 国产欧美精品在线观看| 欧美日本韩国国产| 免费资源在线观看| 久久影院视频免费| 欧美另类一区| 狠狠狠综合7777久夜色撩人| 久久蜜桃一区二区| 欧美日本韩国一区二区三区| 水中色av综合| 久久精品一区二区三区不卡 | www.桃色.com| 国产欧美视频在线| 日韩一区二区麻豆国产| 久久精品无码一区二区三区毛片 | 国产亚洲午夜| 韩国三级电影久久久久久| 精品无码m3u8在线观看| 亚洲激情网站| 欧美一区二区三区图| 亚洲第一在线播放| 亚洲在线国产日韩欧美| 国产成人精品综合久久久| 在线免费观看国产精品| 日韩国产成人精品| 成人激情在线播放| 亚洲第一色网站| 99麻豆久久久国产精品免费优播| 激情视频在线观看一区二区三区| 天堂在线观看免费视频| 91玉足脚交白嫩脚丫在线播放| 欧美裸体网站| 免费高清完整在线观看| 亚洲已满18点击进入久久| 成人一区二区免费视频| 黄色综合网址| 欧美日韩一区二区三区在线| 国产精品熟女一区二区不卡| 精品深夜福利视频| 亚洲欧美日韩区| 国产欧美小视频| 欧美一区在线看| 8090成年在线看片午夜| 中文字幕视频二区| 国产91精品免费| 日本在线一区| 99福利在线| 欧美日韩一区二区三区 | 国产福利91精品一区| 精品伦精品一区二区三区视频| 免费福利在线观看| 亚洲精品视频在线看| 欧美日韩二三区| 亚洲男女网站| 日韩h在线观看| 一级性生活免费视频| 亚洲福利一区| 国产精品美女在线观看| 午夜精品久久久久久久99老熟妇 | 日日夜夜免费精品| 91蜜桃网站免费观看| 激情小视频在线观看| 樱花影视一区二区| 午夜激情福利在线| 成人香蕉社区| 日韩在线视频免费观看| 999这里只有精品| 国产麻豆91精品| 欧美一区二区三区四区夜夜大片 | 无码国产精品高潮久久99| 国产精品色一区二区三区| 免费拍拍拍网站| 91精品在线免费视频| 精品亚洲一区二区| 精品爆乳一区二区三区无码av| 久久综合影视| 激情小说网站亚洲综合网 | 国产成人精品三级高清久久91| 欧美成人黄色小视频| 精人妻无码一区二区三区| 成人18精品视频| 神马午夜伦理影院| 欧美97人人模人人爽人人喊视频| 亚洲精品综合精品自拍| 精品少妇久久久| 国产精品12区| 男女h黄动漫啪啪无遮挡软件| 成人看片网页| 亚洲欧洲高清在线| www.国产色| 成av人片一区二区| 大伊香蕉精品视频在线| 日韩在线视频一区二区三区| 久久久国产91| 在线免费看91| 国产精品天天看| 香蕉视频禁止18| 成人a'v在线播放| 国产999精品久久久| 日产精品久久久久久久性色| 精品久久久久久久久久| aaaaaaaa毛片| 你懂的网址国产 欧美| 国产人妖伪娘一区91| 日韩伦理在线观看| 欧美夫妻性生活| 中文字幕美女视频| 国内成人精品2018免费看| 一区二区三区视频在线播放| 午夜av成人| 一道本无吗dⅴd在线播放一区| 欧美一区二区三区网站| 久久久久国产一区二区三区四区| 97xxxxx| 国产精品一在线观看| 国产精品久久二区| 日本精品在线| 91麻豆精品国产91久久久久久久久| 国产精品综合激情| 韩国三级在线一区| 日本天堂免费a| 北条麻妃在线一区二区免费播放| 欧美激情伊人电影| 午夜视频在线免费播放| 色综合天天综合网国产成人综合天 | 无遮挡亚洲一区| 日韩成人在线电影| 九九精品视频在线观看| 成人午夜精品福利免费| 福利一区视频在线观看| 久久精品视频18| 久久精品国产一区二区| 日韩中文字幕在线不卡| 牛牛影视久久网| 国产精品91久久久久久| 黄色网址在线免费观看| 精品久久国产老人久久综合| 国产www在线| 国产精品三级久久久久三级| 91精品国产三级| 国产欧美日本| 亚洲一区三区| 激情av综合| 国产精品视频地址| 狂野欧美性猛交xxxxx视频| 国产视频亚洲视频| 亚洲一线在线观看| 亚洲影视资源网| 五月天精品在线| 粉嫩aⅴ一区二区三区四区| 日韩毛片在线免费看| 亚洲午夜精品一区 二区 三区| 国产在线一区二| 色999久久久精品人人澡69 | 亚洲在线不卡| 久久精品凹凸全集| 成人在线中文字幕| 性感女国产在线| 欧美成人三级视频网站| 免费在线观看污视频| 欧美一区二区久久久| 亚洲欧美偷拍一区| 亚洲国产成人91porn| 午夜精品久久久久99蜜桃最新版| 99视频精品在线| 天天久久综合网| 亚洲在线国产日韩欧美| 99热这里只有精品免费| 日韩欧美大片| 欧美日韩喷水| 久久影院资源站| 999视频在线观看| 欧美极品在线| 国产成人精品综合久久久| 国产精品原创| 久久6精品影院| av片在线观看免费| 日韩在线视频网站| 成人福利在线| 亚洲视频日韩精品| 婷婷五月综合激情| 日韩免费观看高清完整版 | 久久精品国产亚洲一区二区三区| 免费观看日韩毛片| 亚洲天堂黄色| 蜜桃视频一区二区在线观看| 97精品中文字幕| 日韩亚洲欧美精品| 激情综合网站| 欧美福利精品| 鲁大师精品99久久久| 91在线精品观看| 免费一区二区三区在线视频| 91精品久久久久久久久久另类| 99久久精品一区二区成人| 欧美综合激情网| 国产精品av一区二区三区| 69精品小视频| 黑森林国产精品av| 2019av中文字幕| 亚洲性受xxx喷奶水| 91av在线播放| 在线免费av资源| 热久久视久久精品18亚洲精品| 天堂电影一区| 日本精品中文字幕| 日本精品在线一区| 成人久久久久久久| 久久99成人| 国产高清在线一区二区| 精品一区二区男人吃奶| 久久大片网站| 精品国产aⅴ| 亚洲精品影院| 亚洲五月综合| 男女视频网站在线观看| 老鸭窝91久久精品色噜噜导演| 久久美女福利视频| 日韩av高清在线观看| 国产精品久久久久久久av福利| 国产一区二区在线观看视频| 1314成人网| 99精品视频一区二区| 国产 欧美 在线| 国产精品福利在线播放| 强乱中文字幕av一区乱码| 亚洲成人精品一区| www.久久久久久久| 88在线观看91蜜桃国自产| 亚洲精品久久久久avwww潮水| 亚洲精品国产精品久久清纯直播 | 都市激情亚洲欧美| 欧美激情视频一区二区三区| 青青草97国产精品麻豆| 久久久天堂国产精品| 久热re这里精品视频在线6| 五月花丁香婷婷| 成人av在线资源网站| 欧美黄色一级生活片| 亚洲图片激情小说| 国产精品第72页| 欧美午夜寂寞影院| 亚洲AV无码一区二区三区性| 国产亚洲人成a一在线v站| 少女频道在线观看高清| 日本高清不卡的在线| 玖玖玖视频精品| 日本电影一区二区三区| 在线精品国产| 无码人妻精品一区二区三区66| 国产精品一区专区| 亚洲一级中文字幕| 亚洲精品视频在线观看免费| 欧美性猛交xxxx乱大交hd| 日韩欧美高清在线| 97在线观看免费观看高清 | 欧美成人免费网站| 久久99久久| 欧美激情第一页xxx| 久久三级毛片| 久久青青草原一区二区| 欧美一区影院| 超碰超碰在线观看| 97精品久久久久中文字幕| 国产免费一区二区三区四区| 日韩欧美福利视频| 丁香六月天婷婷| 日日噜噜噜夜夜爽亚洲精品| 九色porny视频在线观看| 91亚洲精品视频| 日本女优一区| 可以免费在线看黄的网站| 成人免费黄色大片| 国产探花在线播放| 在线成人av网站| 成a人v在线播放| 日本国产一区二区三区| 久久婷婷国产| 男女超爽视频免费播放| 国产成人av在线影院| 国产一区二区三区在线视频观看| 欧美视频精品在线| 国产二区视频在线观看| 欧洲亚洲妇女av| 欧美亚洲国产日韩| 成人性生活视频免费看| 成人在线综合网| 美女视频黄免费| 精品三级av在线| 性xxxxfjsxxxxx欧美| 5g影院天天爽成人免费下载| 91九色精品| 手机av在线网站| 亚洲免费看黄网站| 国产高清精品软件丝瓜软件| 精品国产一区久久久| 亚洲福利影视| 女女同性女同一区二区三区按摩| 精品一区二区免费| 国产一区在线观看免费| 欧美日韩亚洲综合一区二区三区 | 极品束缚调教一区二区网站| 农民人伦一区二区三区| 丁香激情综合五月| 国产在线成人精品午夜| 亚洲丁香久久久| 国产精品高颜值在线观看| 国产欧美综合精品一区二区| 激情欧美日韩| 亚洲美女在线播放| 黑人巨大精品欧美一区二区一视频| 天堂中文在线官网| 国产91精品久| 国内成人自拍| 中文字幕 日韩 欧美| 一区二区三区鲁丝不卡| 日韩一区免费视频| 青青a在线精品免费观看| 精品国内自产拍在线观看视频| 国产色视频在线播放| 亚洲欧美激情插| 日本毛片在线观看| 青青精品视频播放| 97视频精品| 超碰caoprom| 91传媒视频在线播放| 免费在线观看av片| 国产成人亚洲欧美| 久久人人精品| 色哟哟一一国产精品| 精品国产污网站| 日韩性xxx| 精品日韩在线播放| 99re热视频精品| 91tv国产成人福利| 久久久最新网址| 成人午夜av| 国产伦精品一区二区三区88av| 色综合久久综合| 国产乱色在线观看| 久久久久久亚洲精品不卡4k岛国 | 国产精品青青在线观看爽香蕉| 91精品一区国产高清在线gif | 91中文字幕在线播放| 欧美激情女人20p| 欧美少妇性xxxx| 在线精品视频播放| 欧美色大人视频| 538在线精品| 成人手机视频在线| 99免费精品视频|