欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

C++貪吃蛇游戲編程入門:從零實(shí)現(xiàn)控制臺(tái)版

C++貪吃蛇游戲編程入門:從零實(shí)現(xiàn)控制臺(tái)版 1. 為什么貪吃蛇是C入門游戲編程的最佳練手項(xiàng)目很多人學(xué)完C的基礎(chǔ)語法之后都會(huì)卡在一個(gè)尷尬的階段語法書翻完了循環(huán)、數(shù)組、函數(shù)、類都認(rèn)識(shí)但讓自己從零寫一個(gè)能跑起來的東西腦子里一片空白。這個(gè)階段最需要的不是繼續(xù)啃更厚的書而是找一個(gè)規(guī)模適中、邏輯閉環(huán)、能立刻看到畫面反饋的小項(xiàng)目來練手。貪吃蛇就是這樣一個(gè)幾乎完美的選擇。我見過太多初學(xué)者一上來就想做五子棋、俄羅斯方塊甚至RPG小游戲結(jié)果卡在圖形界面或者復(fù)雜的碰撞邏輯上三天就放棄了。貪吃蛇的好處在于它的核心邏輯用一維數(shù)組或者二維數(shù)組就能描述清楚不需要任何圖形庫(kù)也能在控制臺(tái)里跑起來而且它的游戲循環(huán)、狀態(tài)更新、輸入處理這套骨架和后面做任何游戲都是相通的。你把這一個(gè)項(xiàng)目吃透等于把游戲編程最基礎(chǔ)的思維方式建立起來了。這篇文章我會(huì)帶你從零開始用C寫一個(gè)能在控制臺(tái)運(yùn)行的貪吃蛇。不依賴任何第三方圖形庫(kù)純標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)Windows和Linux都能編譯。我會(huì)把每一步的設(shè)計(jì)理由講清楚包括為什么用數(shù)組而不是鏈表、為什么用Sleep控制幀率、蛇身移動(dòng)的坐標(biāo)更新為什么要從尾到頭遍歷。這些細(xì)節(jié)才是真正決定你能不能獨(dú)立寫出第二個(gè)、第三個(gè)游戲的關(guān)鍵。適合誰看學(xué)過C基礎(chǔ)語法變量、循環(huán)、數(shù)組、函數(shù)、結(jié)構(gòu)體或類但沒做過完整項(xiàng)目的朋友。如果你連for循環(huán)和數(shù)組下標(biāo)都還不熟建議先把這些補(bǔ)上再回來。整篇內(nèi)容我會(huì)盡量用大白話解釋代碼給全注釋給足你照著敲一遍就能跑。2. 動(dòng)手之前先把游戲循環(huán)這件事想明白2.1 游戲本質(zhì)上就是一個(gè)死循環(huán)初學(xué)者最容易忽略的一個(gè)概念是游戲程序的核心結(jié)構(gòu)就是一個(gè)不停轉(zhuǎn)的循環(huán)。你看到的每一幀畫面、每一次蛇的移動(dòng)、每一個(gè)按鍵的響應(yīng)都是這個(gè)循環(huán)轉(zhuǎn)一圈的結(jié)果。這個(gè)循環(huán)通常叫游戲主循環(huán)Game Loop它的基本節(jié)奏是這樣的處理玩家輸入有沒有按鍵更新游戲狀態(tài)蛇往哪走、吃到食物沒有、撞墻沒有渲染畫面把當(dāng)前狀態(tài)畫到屏幕上等待一小段時(shí)間控制游戲速度回到第1步貪吃蛇也不例外。你只要把這個(gè)循環(huán)搭起來剩下的就是往每個(gè)環(huán)節(jié)里填邏輯。很多人寫游戲?qū)懖幌氯ゾ褪且驗(yàn)槟X子里沒有這個(gè)循環(huán)的框架東寫一塊西寫一塊最后邏輯全亂。2.2 控制臺(tái)游戲?yàn)槭裁催€需要渲染有人會(huì)問控制臺(tái)不就是cout輸出文字嗎哪來的渲染其實(shí)控制臺(tái)游戲一樣需要渲染只不過渲染的方式是清屏重畫。每一幀我們都把整個(gè)游戲畫面重新打印一遍然后清掉上一幀的內(nèi)容視覺上就形成了動(dòng)畫效果。在Windows下可以用system(cls)清屏Linux下用system(clear)。但system調(diào)用開銷比較大畫面會(huì)閃。更優(yōu)雅的做法是用ANSI轉(zhuǎn)義序列把光標(biāo)移回左上角然后覆蓋重畫這樣幾乎不閃。不過為了代碼的跨平臺(tái)和簡(jiǎn)單入門階段用system(cls)完全夠用等你熟練了再優(yōu)化。2.3 幀率控制為什么不能讓它全速跑如果你不加任何延時(shí)游戲循環(huán)會(huì)以CPU能跑的最快速度瘋狂轉(zhuǎn)圈蛇會(huì)瞬間飛出去撞墻玩家根本來不及反應(yīng)。所以必須有一個(gè)節(jié)拍器來控制游戲速度。最簡(jiǎn)單的方式是調(diào)用Sleep函數(shù)Windows下是Sleep(毫秒)Linux下是usleep(微秒)。這里有個(gè)經(jīng)驗(yàn)值貪吃蛇的每幀間隔設(shè)在100到200毫秒之間比較舒服。太快了反應(yīng)不過來太慢了蛇像蝸牛。我一般用150毫秒起步隨著分?jǐn)?shù)增加逐漸減小間隔來提升難度這就是所謂的動(dòng)態(tài)難度。// 跨平臺(tái)的延時(shí)封裝 #ifdef _WIN32 #include windows.h #define SLEEP(ms) Sleep(ms) #else #include unistd.h #define SLEEP(ms) usleep((ms) * 1000) #endif這段宏定義很實(shí)用寫一次以后所有項(xiàng)目都能復(fù)用。注意Linux的usleep參數(shù)是微秒所以要乘1000。3. 數(shù)據(jù)結(jié)構(gòu)選型蛇身到底該用什么存3.1 數(shù)組方案和鏈表方案的取舍蛇身本質(zhì)上是一串有序的坐標(biāo)點(diǎn)。存這串坐標(biāo)最直覺的兩種選擇是數(shù)組和鏈表。很多教程一上來就用鏈表理由是蛇頭插入、蛇尾刪除鏈表是O(1)。這話理論上沒錯(cuò)但對(duì)初學(xué)者來說鏈表方案有幾個(gè)坑需要手寫節(jié)點(diǎn)結(jié)構(gòu)體和指針操作容易出內(nèi)存泄漏調(diào)試的時(shí)候沒法直接print整個(gè)蛇身得遍歷代碼量翻倍邏輯復(fù)雜度上升而數(shù)組方案呢蛇的最大長(zhǎng)度是有限的受地圖大小限制我們完全可以用一個(gè)固定大小的數(shù)組來存蛇身坐標(biāo)用一個(gè)變量記錄當(dāng)前長(zhǎng)度。蛇移動(dòng)的時(shí)候本質(zhì)上是頭部長(zhǎng)出一個(gè)新坐標(biāo)尾部刪掉一個(gè)舊坐標(biāo)用數(shù)組實(shí)現(xiàn)就是整體挪動(dòng)或者用環(huán)形緩沖。我的建議是入門階段用數(shù)組等你能熟練寫出數(shù)組版本之后再自己改寫成鏈表版本作為進(jìn)階練習(xí)。這樣你能親身體會(huì)兩種數(shù)據(jù)結(jié)構(gòu)的差異比直接抄鏈表代碼收獲大得多。3.2 坐標(biāo)點(diǎn)的表示蛇身的每個(gè)節(jié)點(diǎn)就是一個(gè)(x, y)坐標(biāo)。用一個(gè)簡(jiǎn)單的結(jié)構(gòu)體表示最清晰struct Point { int x; int y; };然后蛇身就是一個(gè)Point數(shù)組const int MAX_SNAKE_LEN 100; Point snake[MAX_SNAKE_LEN]; int snakeLength 3; // 初始長(zhǎng)度3節(jié)這里MAX_SNAKE_LEN取100是個(gè)保守值實(shí)際能到多長(zhǎng)取決于地圖大小。如果你的地圖是20x20那蛇最長(zhǎng)也就400節(jié)取100夠用了。想更嚴(yán)謹(jǐn)可以取地圖格子總數(shù)。3.3 蛇身移動(dòng)的坐標(biāo)更新順序這是整個(gè)項(xiàng)目里最容易寫錯(cuò)的一個(gè)點(diǎn)我必須重點(diǎn)講。蛇移動(dòng)的時(shí)候你不能簡(jiǎn)單地讓每一節(jié)都往前挪一格因?yàn)槟菢訒?huì)互相覆蓋。正確的做法是從尾巴開始每一節(jié)都變成它前面那一節(jié)的坐標(biāo)// 從尾到頭遍歷每節(jié)追上它前面一節(jié) for (int i snakeLength - 1; i 0; i--) { snake[i] snake[i - 1]; } // 然后單獨(dú)更新蛇頭 snake[0].x dirX; snake[0].y dirY;為什么必須從尾到頭因?yàn)槿绻銖念^到尾遍歷snake[1]會(huì)先被改成snake[0]的新位置然后snake[2]又去追snake[1]結(jié)果整條蛇會(huì)瞬間塌縮成一團(tuán)。從尾到頭就不會(huì)有這個(gè)問題因?yàn)槊恳还?jié)讀取的前一節(jié)都還沒被修改。這個(gè)細(xì)節(jié)我在第一次寫的時(shí)候踩過坑蛇會(huì)莫名其妙變成一坨排查了半天才反應(yīng)過來是遍歷順序的問題。你如果自己寫一定要記住這個(gè)順序。4. 地圖、食物與碰撞檢測(cè)的完整實(shí)現(xiàn)4.1 地圖邊界怎么畫控制臺(tái)地圖最簡(jiǎn)單的畫法是用字符拼一個(gè)矩形框。比如20列寬、15行高四周用#圍起來中間是空格。每次渲染的時(shí)候先打印上邊框然后逐行打印左右邊框和中間內(nèi)容最后打印下邊框。const int MAP_WIDTH 20; const int MAP_HEIGHT 15; void drawMap() { // 上邊框 for (int i 0; i MAP_WIDTH 2; i) cout #; cout endl; // 中間行 for (int y 0; y MAP_HEIGHT; y) { cout #; for (int x 0; x MAP_WIDTH; x) { // 這里根據(jù)(x,y)位置畫蛇、食物或空格 } cout # endl; } // 下邊框 for (int i 0; i MAP_WIDTH 2; i) cout #; cout endl; }注意邊框占了額外兩列所以實(shí)際游戲區(qū)域是MAP_WIDTH x MAP_HEIGHT坐標(biāo)范圍是x: 0~MAP_WIDTH-1y: 0~MAP_HEIGHT-1。這個(gè)坐標(biāo)系一定要統(tǒng)一否則碰撞檢測(cè)會(huì)出錯(cuò)。4.2 食物生成怎么避免生成到蛇身上食物就是一個(gè)隨機(jī)坐標(biāo)。但你不能隨便隨機(jī)因?yàn)橛锌赡茈S機(jī)到蛇身占據(jù)的格子上那樣食物就藏在蛇里了玩家永遠(yuǎn)吃不到。所以生成食物之后必須檢查這個(gè)位置是否和蛇身重疊如果重疊就重新生成。Point generateFood() { Point food; bool valid false; while (!valid) { food.x rand() % MAP_WIDTH; food.y rand() % MAP_HEIGHT; valid true; for (int i 0; i snakeLength; i) { if (snake[i].x food.x snake[i].y food.y) { valid false; break; } } } return food; }這個(gè)while循環(huán)理論上可能轉(zhuǎn)很多次但實(shí)際游戲中蛇身占比很小通常一兩次就成功了。如果地圖特別小、蛇特別長(zhǎng)可以考慮用收集所有空格再隨機(jī)選一個(gè)的方式效率更穩(wěn)定。4.3 碰撞檢測(cè)的三種情況碰撞檢測(cè)要處理三種情況缺一不可碰撞類型判斷條件處理方式撞墻蛇頭x0 或 xMAP_WIDTH 或 y0 或 yMAP_HEIGHT游戲結(jié)束撞自己蛇頭坐標(biāo)和任意一節(jié)蛇身坐標(biāo)相同游戲結(jié)束吃到食物蛇頭坐標(biāo)和食物坐標(biāo)相同蛇身加長(zhǎng)分?jǐn)?shù)1重新生成食物撞自己的檢測(cè)有個(gè)細(xì)節(jié)只需要檢測(cè)蛇頭是否和蛇身的第1節(jié)到第N-1節(jié)重疊不用檢測(cè)第0節(jié)蛇頭自己。因?yàn)樯哳^不可能和自己重疊。另外如果蛇的長(zhǎng)度是1那永遠(yuǎn)不會(huì)撞到自己。bool checkCollision() { // 撞墻 if (snake[0].x 0 || snake[0].x MAP_WIDTH || snake[0].y 0 || snake[0].y MAP_HEIGHT) { return true; } // 撞自己從第1節(jié)開始檢查 for (int i 1; i snakeLength; i) { if (snake[0].x snake[i].x snake[0].y snake[i].y) { return true; } } return false; }4.4 吃到食物后蛇怎么變長(zhǎng)吃到食物后蛇要加長(zhǎng)一節(jié)。最簡(jiǎn)單的做法是不刪除尾巴。正常移動(dòng)時(shí)我們會(huì)把尾巴那節(jié)丟掉通過坐標(biāo)覆蓋實(shí)現(xiàn)吃到食物時(shí)就不丟這樣蛇自然就長(zhǎng)了一節(jié)。具體實(shí)現(xiàn)上可以在移動(dòng)邏輯里加一個(gè)判斷如果這一幀吃到了食物就跳過尾巴的更新同時(shí)snakeLength。但要注意數(shù)組越界snakeLength不能超過MAX_SNAKE_LEN。// 移動(dòng)邏輯簡(jiǎn)化版 for (int i snakeLength - 1; i 0; i--) { snake[i] snake[i - 1]; } snake[0].x dirX; snake[0].y dirY; // 如果吃到食物 if (snake[0].x food.x snake[0].y food.y) { if (snakeLength MAX_SNAKE_LEN) { snakeLength; // 加長(zhǎng)尾巴不動(dòng) } score; food generateFood(); }這里有個(gè)小技巧加長(zhǎng)的時(shí)候新加的那節(jié)坐標(biāo)其實(shí)是上一幀尾巴的坐標(biāo)因?yàn)槲覀儧]有更新它。視覺上看起來就是蛇尾長(zhǎng)出了一節(jié)很自然。5. 輸入處理與方向控制的那些坑5.1 控制臺(tái)怎么讀取方向鍵這是控制臺(tái)游戲最煩人的地方之一。Windows下用_getch()可以讀取按鍵方向鍵是特殊鍵需要讀兩次第一次返回0或224第二次才返回具體的方向碼上72、下80、左75、右77。Linux下則要用termios把終端設(shè)成非規(guī)范模式然后讀getchar()方向鍵是ESC序列\(zhòng)033[A等。為了代碼簡(jiǎn)潔我建議入門階段用WASD或者方向鍵的字母替代方案W上、S下、A左、D右。這樣跨平臺(tái)簡(jiǎn)單一行cin或者getchar就能搞定。等你把游戲邏輯跑通了再花時(shí)間研究方向鍵的讀取。char input; if (_kbhit()) { // Windows下檢測(cè)是否有按鍵 input _getch(); switch (input) { case w: case W: if (dirY ! 1) { dirX 0; dirY -1; } break; case s: case S: if (dirY ! -1) { dirX 0; dirY 1; } break; case a: case A: if (dirX ! 1) { dirX -1; dirY 0; } break; case d: case D: if (dirX ! -1) { dirX 1; dirY 0; } break; } }5.2 為什么不能直接反向注意上面代碼里的if判斷當(dāng)蛇正在向右走時(shí)不能直接按左鍵讓它反向。因?yàn)榉聪驎?huì)導(dǎo)致蛇頭瞬間撞上自己的脖子游戲立刻結(jié)束。這不是bug是規(guī)則。所以每次改變方向前都要檢查新方向是否和當(dāng)前方向相反相反就忽略這次輸入。這個(gè)判斷看起來簡(jiǎn)單但如果你忘了寫玩家一按反向鍵就死體驗(yàn)極差。我見過不少新手版本都有這個(gè)問題。5.3 輸入緩沖和按鍵丟失控制臺(tái)輸入還有個(gè)坑如果你用cin input它是阻塞的游戲循環(huán)會(huì)卡在等待輸入上蛇就不動(dòng)了。所以必須用非阻塞的方式檢測(cè)按鍵。Windows下_kbhit()配合_getch()是標(biāo)準(zhǔn)做法。Linux下需要自己封裝稍微麻煩一點(diǎn)。另一個(gè)問題是按鍵緩沖。如果玩家快速按了好幾個(gè)方向鍵這些按鍵會(huì)排隊(duì)游戲會(huì)依次處理可能導(dǎo)致蛇走出奇怪的路徑。解決辦法是每幀只處理一個(gè)按鍵或者干脆清空緩沖區(qū)只取最后一個(gè)。入門階段每幀處理一個(gè)就夠了。6. 把代碼組裝起來完整可運(yùn)行版本6.1 完整代碼結(jié)構(gòu)下面是一個(gè)完整的、可以直接編譯運(yùn)行的版本。我把它拆成幾個(gè)函數(shù)每個(gè)函數(shù)職責(zé)單一方便你理解和修改。#include iostream #include cstdlib #include ctime #ifdef _WIN32 #include windows.h #include conio.h #define CLEAR cls #define SLEEP(ms) Sleep(ms) #else #include unistd.h #include termios.h #include fcntl.h #define CLEAR clear #define SLEEP(ms) usleep((ms) * 1000) #endif using namespace std; const int MAP_WIDTH 20; const int MAP_HEIGHT 15; const int MAX_SNAKE_LEN 200; struct Point { int x, y; }; Point snake[MAX_SNAKE_LEN]; int snakeLength; Point food; int dirX, dirY; int score; bool gameOver; void initGame() { snakeLength 3; snake[0] {MAP_WIDTH / 2, MAP_HEIGHT / 2}; snake[1] {MAP_WIDTH / 2 - 1, MAP_HEIGHT / 2}; snake[2] {MAP_WIDTH / 2 - 2, MAP_HEIGHT / 2}; dirX 1; dirY 0; score 0; gameOver false; srand((unsigned)time(nullptr)); // 生成第一個(gè)食物 food.x rand() % MAP_WIDTH; food.y rand() % MAP_HEIGHT; } void draw() { system(CLEAR); // 上邊框 for (int i 0; i MAP_WIDTH 2; i) cout #; cout \n; for (int y 0; y MAP_HEIGHT; y) { cout #; for (int x 0; x MAP_WIDTH; x) { bool printed false; // 先判斷是不是蛇頭 if (snake[0].x x snake[0].y y) { cout O; printed true; } // 再判斷是不是蛇身 if (!printed) { for (int i 1; i snakeLength; i) { if (snake[i].x x snake[i].y y) { cout o; printed true; break; } } } // 再判斷是不是食物 if (!printed food.x x food.y y) { cout *; printed true; } if (!printed) cout ; } cout #\n; } // 下邊框 for (int i 0; i MAP_WIDTH 2; i) cout #; cout \n; cout Score: score Length: snakeLength \n; cout Controls: WASD to move, Q to quit\n; } void handleInput() { #ifdef _WIN32 if (_kbhit()) { char c _getch(); switch (c) { case w: case W: if (dirY ! 1) { dirX 0; dirY -1; } break; case s: case S: if (dirY ! -1) { dirX 0; dirY 1; } break; case a: case A: if (dirX ! 1) { dirX -1; dirY 0; } break; case d: case D: if (dirX ! -1) { dirX 1; dirY 0; } break; case q: case Q: gameOver true; break; } } #else // Linux非阻塞讀取 struct termios oldt, newt; tcgetattr(STDIN_FILENO, oldt); newt oldt; newt.c_lflag ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, newt); int oldf fcntl(STDIN_FILENO, F_GETFL, 0); fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK); char c getchar(); tcsetattr(STDIN_FILENO, TCSANOW, oldt); fcntl(STDIN_FILENO, F_SETFL, oldf); switch (c) { case w: case W: if (dirY ! 1) { dirX 0; dirY -1; } break; case s: case S: if (dirY ! -1) { dirX 0; dirY 1; } break; case a: case A: if (dirX ! 1) { dirX -1; dirY 0; } break; case d: case D: if (dirX ! -1) { dirX 1; dirY 0; } break; case q: case Q: gameOver true; break; } #endif } void update() { // 移動(dòng)蛇身 for (int i snakeLength - 1; i 0; i--) { snake[i] snake[i - 1]; } snake[0].x dirX; snake[0].y dirY; // 撞墻檢測(cè) if (snake[0].x 0 || snake[0].x MAP_WIDTH || snake[0].y 0 || snake[0].y MAP_HEIGHT) { gameOver true; return; } // 撞自己檢測(cè) for (int i 1; i snakeLength; i) { if (snake[0].x snake[i].x snake[0].y snake[i].y) { gameOver true; return; } } // 吃食物 if (snake[0].x food.x snake[0].y food.y) { if (snakeLength MAX_SNAKE_LEN) snakeLength; score; // 重新生成食物 bool valid false; while (!valid) { food.x rand() % MAP_WIDTH; food.y rand() % MAP_HEIGHT; valid true; for (int i 0; i snakeLength; i) { if (snake[i].x food.x snake[i].y food.y) { valid false; break; } } } } } int main() { initGame(); while (!gameOver) { draw(); handleInput(); update(); SLEEP(150); } cout \nGame Over! Final Score: score \n; return 0; }6.2 編譯和運(yùn)行Windows下用MinGW或者Visual Studio直接編譯g snake.cpp -o snake.exe snake.exeLinux下g snake.cpp -o snake ./snake注意Linux下需要鏈接termios但它是標(biāo)準(zhǔn)庫(kù)的一部分通常不用額外加-l參數(shù)。如果編譯報(bào)錯(cuò)找不到usleep加上#include unistd.h即可。6.3 實(shí)測(cè)中容易遇到的問題問題一畫面閃爍嚴(yán)重。這是system(cls)的通病。解決辦法是用ANSI轉(zhuǎn)義序列\(zhòng)033[H把光標(biāo)移回左上角然后逐行覆蓋。但Windows老版本控制臺(tái)默認(rèn)不支持ANSI需要先調(diào)用SetConsoleMode開啟虛擬終端處理。入門階段忍一忍或者用雙緩沖先拼好整個(gè)畫面字符串再一次性輸出。問題二蛇移動(dòng)速度不均勻。因?yàn)镾leep只是大致延時(shí)實(shí)際幀間隔會(huì)有波動(dòng)。如果追求精確可以用chrono庫(kù)計(jì)算實(shí)際經(jīng)過的時(shí)間做固定時(shí)間步長(zhǎng)更新。但對(duì)貪吃蛇來說沒必要Sleep夠用。問題三Linux下按鍵讀取有問題。上面的Linux代碼每次調(diào)用handleInput都會(huì)修改終端屬性效率很低。更好的做法是在main開始時(shí)設(shè)置一次結(jié)束時(shí)恢復(fù)。我這里為了代碼緊湊才這么寫你實(shí)際項(xiàng)目里應(yīng)該優(yōu)化。問題四食物生成死循環(huán)。如果蛇長(zhǎng)得幾乎填滿地圖while(!valid)可能轉(zhuǎn)很久。解決辦法是維護(hù)一個(gè)空格列表或者當(dāng)蛇長(zhǎng)超過地圖一半時(shí)直接判定勝利。7. 從能跑到好用幾個(gè)值得做的優(yōu)化方向7.1 動(dòng)態(tài)難度越吃越快固定150毫秒的幀間隔玩久了會(huì)膩。一個(gè)簡(jiǎn)單的改進(jìn)是讓延時(shí)隨分?jǐn)?shù)遞減int delay 150 - score * 3; if (delay 50) delay 50; // 下限50毫秒 SLEEP(delay);這樣每吃一個(gè)食物蛇就快一點(diǎn)難度自然上升。下限設(shè)50毫秒是因?yàn)樵倏烊搜酆褪种妇透簧狭恕?.2 分?jǐn)?shù)持久化把最高分存到文件每次游戲結(jié)束把最高分寫到一個(gè)文本文件里下次啟動(dòng)讀出來顯示。這是最簡(jiǎn)單的持久化練習(xí)用fstream幾行就能搞定int loadHighScore() { ifstream fin(highscore.txt); int hs 0; if (fin) fin hs; return hs; } void saveHighScore(int hs) { ofstream fout(highscore.txt); fout hs; }這個(gè)功能雖小但能讓你第一次體會(huì)數(shù)據(jù)在程序關(guān)閉后還能保留的感覺是邁向更復(fù)雜項(xiàng)目的必經(jīng)一步。7.3 用類重構(gòu)把游戲封裝成一個(gè)對(duì)象上面的代碼全是全局變量和自由函數(shù)規(guī)模小的時(shí)候沒問題但一旦要擴(kuò)展比如加暫停、加菜單、加多種模式全局變量就會(huì)變成災(zāi)難。這時(shí)候應(yīng)該用類把游戲狀態(tài)封裝起來class SnakeGame { private: Point snake[MAX_SNAKE_LEN]; int snakeLength; Point food; int dirX, dirY; int score; bool gameOver; public: void init(); void run(); void draw(); void handleInput(); void update(); };重構(gòu)之后main函數(shù)就變成三行創(chuàng)建對(duì)象、初始化、運(yùn)行。這就是面向?qū)ο缶幊痰膬r(jià)值——把復(fù)雜度關(guān)在類里面外面看到的接口干干凈凈。我強(qiáng)烈建議你在跑通數(shù)組版本之后親手做一次這個(gè)重構(gòu)收獲會(huì)非常大。7.4 用鏈表替代數(shù)組進(jìn)階練習(xí)等你對(duì)類版本也熟練了可以嘗試把蛇身從數(shù)組換成鏈表。每個(gè)節(jié)點(diǎn)存坐標(biāo)和指向下一節(jié)的指針蛇頭插入新節(jié)點(diǎn)蛇尾刪除節(jié)點(diǎn)。這樣蛇的長(zhǎng)度就不受MAX_SNAKE_LEN限制了。但要注意內(nèi)存管理刪除節(jié)點(diǎn)時(shí)記得delete否則會(huì)泄漏。這個(gè)練習(xí)的意義不在于鏈表本身而在于讓你體會(huì)同一個(gè)問題用不同數(shù)據(jù)結(jié)構(gòu)解決的思維差異。做完之后你對(duì)數(shù)據(jù)結(jié)構(gòu)的理解會(huì)上一個(gè)臺(tái)階。8. 我在教別人寫貪吃蛇時(shí)總結(jié)的幾條經(jīng)驗(yàn)帶過幾個(gè)朋友入門之后我發(fā)現(xiàn)大家踩的坑高度集中這里統(tǒng)一說一下。第一不要一上來就追求圖形界面。很多人覺得控制臺(tái)太丑非要用EasyX或者SDL。結(jié)果光配置環(huán)境就花了兩天游戲邏輯一行沒寫熱情先耗光了??刂婆_(tái)版本雖然樸素但它讓你專注在邏輯上這才是入門階段最該練的。等你控制臺(tái)版本寫得滾瓜爛熟換圖形庫(kù)只是換個(gè)渲染函數(shù)的事。第二先把偽代碼寫出來再敲鍵盤。我見過太多人打開IDE就開始寫寫到一半發(fā)現(xiàn)邏輯不對(duì)刪了重來。正確做法是先在紙上或者注釋里把游戲循環(huán)、移動(dòng)邏輯、碰撞檢測(cè)的步驟寫清楚確認(rèn)沒問題了再翻譯成代碼。這個(gè)習(xí)慣能幫你省下大量調(diào)試時(shí)間。第三善用調(diào)試輸出。蛇的坐標(biāo)、方向、長(zhǎng)度這些關(guān)鍵變量在開發(fā)階段可以每幀打印出來看。別嫌亂等你確認(rèn)邏輯正確了再刪掉。我調(diào)試移動(dòng)邏輯的時(shí)候就是靠打印每一節(jié)的坐標(biāo)才發(fā)現(xiàn)遍歷順序?qū)懛戳?。第四邊界條件一定要測(cè)。蛇貼著墻走會(huì)怎樣蛇長(zhǎng)度是1的時(shí)候撞自己檢測(cè)會(huì)不會(huì)越界食物生成在蛇頭正前方會(huì)怎樣這些邊界情況你不主動(dòng)測(cè)它們就會(huì)在某個(gè)時(shí)刻突然冒出來讓你措手不及。養(yǎng)成寫完一個(gè)功能就想想邊界的習(xí)慣受益終身。第五代碼風(fēng)格從第一天就注意。變量命名要有意義snakeLength而不是n函數(shù)職責(zé)要單一draw就只管畫別在里面改狀態(tài)常量用const而不是魔法數(shù)字。這些習(xí)慣在項(xiàng)目小的時(shí)候看不出差別但項(xiàng)目一大就是天壤之別。最后說一句貪吃蛇這個(gè)項(xiàng)目真正的價(jià)值不在于游戲本身而在于它逼著你把C的數(shù)組、循環(huán)、函數(shù)、結(jié)構(gòu)體、輸入輸出這些基礎(chǔ)知識(shí)串起來用一遍。你寫完這個(gè)項(xiàng)目再回頭看那些語法書會(huì)發(fā)現(xiàn)以前覺得抽象的概念突然都具體了。這就是項(xiàng)目驅(qū)動(dòng)學(xué)習(xí)的威力。寫完控制臺(tái)版本之后你可以試著加個(gè)開始菜單、加個(gè)暫停功能、加個(gè)排行榜每一個(gè)小擴(kuò)展都是一次真實(shí)的工程練習(xí)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
四川BBB搡BBB搡多人乱亂| 色操b| 丁香啪啪| 久久久久人妻精选| 一区视频网站| 色综合天天| 2020夜夜操天天爽| 五月婷婷九九热| 在线中文字幕视频| 婷婷成人小说综合| 欧美久久网| 深爱五月激情五月| 99热中文字幕久久| 色婷婷成人| 色五月情| 人人摸人人干人人做| 99视频在线啪| 色九月婷婷| 色五月综合激情| 久久9热| 色欲色香综合网| 色婷婷六月综合| 香蕉色色网| 97操碰视频| 亚洲精品操一操、噜一噜、摸一摸、爽 | 热99精品视频观看| xxxx五月天色色| 色玖玖综合网| 丁香九月婷婷色| 4438成人电影| 人人色人人弄人人操| 狠狠色狠狠操| 99热精品网| 99在线视频喷水| 五月天大香蕉| 99在线观看视频| 色播丁香| 精品九九网| 久久久久久人妻| 六月色丁香中文字幕| 五月天婷婷綜合院| 国产精品成人网址| 97干在线视频| www.maotanji.com| 热99AV网站| 99热这里是精品| 免费视频1区| 在线网黄| 色综合网综合| 久热只有这里有精品| 影音先锋AV资源男人站| 99九九精品| 五月丁香婷婷六月| 五月天色导航| 思思色播| 六月丁香色色色| 久草热久草在线视频| 成人在线99| 怡红院院在线导航网 | 热婷婷av| 日日做A爰片久久毛片A片英语 | 色五月激情五月丁香五月婷婷啪啪综合| 伦乱人妻| 中文字幕丰满孑伦无码专区| 99亚州综合精品成人网| 激情五月丁香婷婷| 亭亭五月天黑人2014| 999婷婷综合| 六月色丁香婷婷| 日日夜夜婷婷| 欧美色色色色色色色| 99热777| 五月婷婷丁香啪啪| 人人九色| 日韩美女在线视频19| 99精品国产乱码久久久人妻| 99这里都是精品| 色婷婷丁香五月| 97色伦另类图片小说视频| 久99久在线| 伊人成综合五月婷婷| 亚洲精品又粗又大又爽A片| 五月丁香欧美综合| 人人摸人人| 久久视频九九视频| 丁香婷五月天| 思思热久在线观看视频| 五月天国产成人| 99人人操人人操人人精| 亚洲爱婷婷| 婷婷五月性感| aV直接看| 天海翼中文字幕高| 少妇AB又爽又紧无码网站 | 色婷婷狠狠18禁| 91超级碰在线视频| 激情綜合網址| 久久久27操| 91精品国产综合久久密臀| 九九热视频精品2| 九九色之九九色之88| 大香蕉久久伊人网| 婷婷情色五月| 超pen个人视频97| 色色色色综合网| 亚洲在线操| 五月婷婷av| 99人人操人人摸| 久久99网站| 中文字幕在线免费观看视频| 婷婷丁香五月激情密臀av| 日日插日日干| 激情综合色婷婷六月天| www.五月.com| 综合图片色色| 色色婷婷丁香五月天| 五月天精品视频| 丁香五月六月欧美| 婷婷丁香五月综合激情小说| 丁香成人色情五月天| 丁香六月视频免费观看| 天天视频亚洲| 亚州色色色| 999热成人在线综合网| 九九热在线视频,| 五月天a婷婷伊人| 99ER热精品视频| wwwss在线观看| 99思思| 大香蕉精品视频| 丁香五月影视| 亚洲欧洲另类| 婷婷五月天视频| 五月天com| 成人五月丁香社区| 99热这里只有精品4| 五月丁香成人网| 51国精产品自偷自偷综合| 79精品视频在线观看,| 日日狠狠久久偷偷四色综合免费| 夜夜夜夜夜骑撸| 日本 @ va 免费| 丁香六月五月婷婷| 色5月丁香婷婷| 一本色道久久综合狠狠躁小说| 五月天激情啪啪| 欧州色色| 天天开心婷婷丁香五月| 久婷婷五月激情| 综合婷婷六月| 久久 视频这里只有精总| 婷婷五月天在婷| 九一99| 婷婷免费视频| 在线婷婷| 丁香五月婷婷网| 久99久视频| 婷婷五月天av| 亚洲人操亚洲人| 岛囯综合激情网| 91九色PORNY中文啦| 亚洲av无码影院| 超碰在线综合| 热久久思思热思思| 丁香五月五婷| 日本一级特黄大片AAAAA级| 婷婷五月AV| 婷婷久久五月天| 天天日日夜夜| 成人无码精品1区2区3区免费看| WWW.久久.COM| 欧美啪啪五月天| 五月天婷婷网站888| 欧美99热| 婷婷丁香五月欧美人| 深爱激情五月婷婷| 久久一热| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 久久精品婷婷| 色播五月天天| 亚洲综合五月| 开心五月天激情网| 91九色无码内射| 狠狠狠狠狠狠色| 日日天天天| 丁香五月停停av| 99精品无码网站| 婷婷免费视频| 人人摸人人干| 日韩成人电影Av| 内射综合网| www色婷婷久久综合久色 | 五月成人网站| 色五月婷婷影视| 欧美性二区| 日本va欧美va欧美| 热99在线| 亚洲啪啪精品| 六月婷婷视频| 午夜婷婷久久| 欧美性生交XXXXX无码小说| 99青青草99| 超碰9| 五月婷婷色丁香| 成人五月天视频| 午夜丁香婷婷| 99碰在线视频| 欧美激情五月天在线观看| www夜夜操com| 另类天堂| 狠狠色噜噜狠狠| 婷婷六月激情啪啪| 91黄址| 岛国在线观看91| 亚洲无码yw| 国产激情视频在线观看| 天天橾夜夜爽| 欧美色综合天天久久综合精品| 亚洲婷婷激情综合激情999精品| 开心亚洲久久开心| 欧美色婷婷| 日本操B片| 久久这有这里精品| 五月天激情小说| 日韩小视频在线99| yazhouzonghesese| 99热这里只有精品5| 婷婷五月天丁香久久| 青青热久久综合| 色五月五月天色婷婷色五月| 久9热视频在线| 只有精品在线观看| 无码人妻电影| 亚洲秘 无码一区二区三区妃光/1| 激情丰满熟妇五月| 天天射天天射一道本日本社区| 色色激情五月| 毛v一区二区视频| 色青青视频| 九九这里都是精品| PORNY九色9l自拍视频成人| 色色色.COM| 99免费视频| 成人亚洲精品| 久久久久久久久99精品| 人妖色AV色综合| 伊人丁香婷婷东京| 无码少妇高潮喷水A片免费| 另类A片| 五月欧美丁香在线观看| 夜色爱爱亚洲| 亚洲夜夜操| 亚洲中文字幕在线观看| 色七色九九| 日本精品99| 91丨九色|PRNY熟妇| 久久激情五月网| 欧美顶级少妇做爰HD| 天天综合情| 亚洲六月色婷婷| 99久免费视频| 99亚州综合精品成人网| 色久一| 深爱五月婷| 1024亚洲无码| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 最新色色五月天| 99啪在线| 九九热这里| 久婷婷久草| 99热九九在线| 六月婷婷综合网2| 天天色天天爱天天舔| 99热这里精品| 国产色色在线| 九九色逼| 99热网站在线观看| 成人做爰高潮A片免费视频| 久久视这里只有精品| 五月丁香综合| 亚洲色色色色色色色色色| 热久久66| 婷五月天在线草| 蜜乳A√| 丁香五月性| 久久黄A片| 级情九色| 人人澡天天色天天做| 99热这里只有精品首页| 欧美五月丁香啪啪响视频| 久热免费| 六月综和久久| 91打屁股免费看| 中文字幕簧片| www.99色在线| 激情综合激情五月一起草| 一本婷婷丁香久久| 精品乱码久久久久| 超碰在线观看9| 午夜成人综合| 狠狠综合| 99精品偷自拍| 天天干天天射色综合| 天天色凹凸| 色色网五月激情| 色都都狠狠色都都色综合色| 久热免费视频| 激情av| 天天干天天插| 色 五月俺去也| 五月婷婷色色爱| 狠狠色噜噜狠狠| 99热精品网| 色欲影香| 天天舔天天插天天爱| 99色综合| 99热无码| 人人人操| 五月丁香啪| 激情五月五月五月婷婷| 丁香97综合| 激情九九六月激情免费视频| 91狠狠色丁香婷婷综合久久| 亚洲精品V天堂中文字幕| site:publishdd.com| 五月丁香婷草| 99热九九这里只有精品| 1024亚洲无码| 狠狠色噜噜狠狠狠狠综合| 夜夜爱伊人| 婷婷五月天精品| 久久综合网免费视频| 江苏少妇性BBB搡BBB爽爽爽| 99热这里只有精品青草| 九九热这里只有精品7| 丰满老熟妇BBBBB搡BBB| 天天久综合| 久久99精品久久久久久噜噜| 99热超碰| 天天色天天| 色欲久久综合| 九九爱激情| 婷婷五月天狠狠色| 亚洲第一色色色| 91狼友视频网页更新| 天天爱天天狠天天透| 狠狠综合| www.9色色色| 久久视频婷婷视频| 黄页大全十八禁| 丁香五月最新网址| 99热网站| 丁香六月激情综合| 99在线视频免费| 九月色婷婷综合亚洲| 激情啪啪五月| 婷婷成人丁香色情基地30| 五月丁香久久色| www.天天日| av人人操| 五月婷婷色色| www.99操.com| 大香蕉综合| 婷婷五月天香蕉| 久久婷婷网站| 大香蕉丁香五月| 丁香五月视频在线观看| 视频久久9| 婷婷丁香六月| 五月婷婷在线视频观看| 五丁香激情综合| 激情五月份婷婷| 国产FREESEXVIDEOS性中国| 色色网站免费| 99 色色吧| 五月婷婷精品| 欧美性生交XXXXX无码小说| 久久精品这里只有精品免费首页| 视频免费精品免费精品免费精品免费精品免费精品免费精品免费99 | 这里只有精品99视频| 亚州婷婷五月激情综合| 久久精品国产一区二区三区四区 | 激情AV| 欧美在线ee日韩| www.超碰在线| 九热视频| 天天综合干| 亚洲小电影在线观看黄999| 日本不卡一区二区三区| 久久久WWW| 99re在线这里只有精品视频首页| 婷婷偷拍网| 在线一起草av| 无码少妇高潮喷水A片免费| 激情綜合網址| 狠狠狠夜夜夜| 激情小说五月天中文字幕| 日韩av在线免费观看| 亚洲综合色婷| 丁香婷婷久久 | 99视频| 就爱干 在线| 99日在线视频| 9 1在线视频| 亚洲网站观看视频| 色婷婷导航| 婷婷五月花| 天天爽综合| 久久五月婷婷电影| 久热99热| 色爱综合五月| 9热在线| 婷婷91| 亚洲婷婷91丁香| 国产亚洲精久久久久| 丁香五月视频在线观看| 五月丁婷香| 99毛片| 婷婷WWW久久| 1024操逼| 欧美搡BBBBB摔BBBBB| 婷婷色在线观看| 婷婷五月草| 五月天激情无码高清| 亚洲综合视频天天精品| 丁香激情网| 4399伦理午夜| 狠干综合| 中文字幕久久婷九女同| 国产亚洲AV人片在线| 精品一二三区久久AAA片| 在线播放中文字幕| 97在线视频人妻九色| 99爱视频在线观看这里只有精品| 久久久久人妻中文| 婷婷色情小说| 五月天五月婷五月激情网| 同性gv国产精品一区二区| 操一区| 亚洲无线视频| 91婷婷色| 激情五婷网| 五月天综合久久丁香91| 91疯狂操操操操| 丁香婷婷久久综合在线| 婷婷丁香五月基地| 五月婷丁香久久综合| 热久综合| 国产av网| 玖玖九九9999在线观看视频精品| 好叼操在线观看| 久久久婷婷五月天| 99热10在线高清播放| 亚洲精品久久久久久久久久飞鱼| 在线观看免费人成视频无码| 亚洲视频一区| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 九九亚洲| 五月天六月婷婷电影| 男人综合网| 五月熟妇婷婷久久| 婷婷色播综合五月| 色大综合| 五月丁香六月激情啪| 激情色视频| 人人草人人爱手机视频看看| 丁香 婷婷 亚洲 熟女| 亭亭五月天成人| 有哪些A片网站| 四月婷婷丁香| 99看片| 丁香六月久久| 99热综合色图| 久草婷婷| 免费视频无码| 99丁香婷婷综合网| 丁香五月成人自拍| 婷婷狠狠18禁久久| 色五月激情视频在线综合| 99热99ai| www.久久66| 淫水导航| 五月天综合视频网| 五月丁香操婷逼| 九九碰九九爱97超碰| 久久伊人五月天| 99久久久久| 人妻内射一区二区在线视频| 日韩AC在线免费观看| 99综合入口| 91色碰| 中文精品在| 99re这里只有精品99| www.99热国产| 亚洲婷婷激情五月天| 久久怕怕视频| www.99色| 午夜精品久久久久久久爽| 在线五月婷| 亚洲无码黄色| 丁香六月婷婷综情欧美| 日本成人噜噜噜噜噜| 激情五月四色| 玖玖爱伊人| 国产精品激情五月天色婷婷| 五月丁香六月婷婷亚洲综合| 97碰久久| 国产精产国品一二三在观看| 天天色五月婷婷91久久久久久久| 9月色婷婷| 五月丁香日本一抹本| 色欲丁香久久| 看片视频在线免费日产在线看| 在线观看的av| 男女啪啪做爰高潮无遮挡| 大香蕉久久久久久久久| 91美女被操| 丁香五月第九色| 开心色五月天久久久久久久| 色综合丁香| 免费无码毛片一区二区A片| 婷婷WWW久久| 影音先锋一区| 天天拍夜夜爽| 99亚洲视频| 久久98| 99热在线播放精品| 五月天综合在线| 婷婷玉月丁香五月在线视频| www,超碰| 中文中文在线| 日韩精品一区二区亚洲AV观看| 久久色五月天| 色99网站| 色婷婷电影网| 日hao1区| 丁香婷婷激情五月色| 五月丁香六月婷婷在线观看| 看片视频在线免费日产在线看| 大香蕉AV电影在线| 久9视频| 国色天香伊人狠狠色| 人人97碰| 久久五月婷综合| 色碰碰| 丁香五月天欧美在线| 婷婷五月色色| 久草婷婷在线| www色色com| 日本熟女内射| a在线观看| 狼人久草| www九九免费视频| www.99久| 狠狠狠夜夜夜| 国产肥白大熟妇BBBB视频| 色色婷婷色色| 另类小说五月天综合网| 国产精品电影| 欧美123区免| 婷婷色五月偷拍| www.99热| 九九丁香社区欧美激情| 婷婷久久综合久| 激情综合色播| 国产成人精品一区二三区熟女在线| 丁香五月激情综合婷综| 婷婷五月色网| 99热精品在线| 久久免费操| 99热这里只有精品 搜| 一级性爱视频| 99碰视频| 女力报到正好爱上你| 996er热| 99偷拍视频在线日本| 丁香五月婷婷88在线| 91大神操美女| 99情色五月天| VA国产在线综合网站| 超碰色综合| 99九九99九九九视频精品| 夜夜爽天天| 日本激情91| 九月色婷婷综合亚洲| 亚州精品色情在线观看| 激情婷婷色色| 狠狠久久婷婷| 亚洲激情综合免费| 精品香蕉99久久久久网站| 99久在线精品99re8热| 思思热视频在线观看| 天久综合91综合首页| 天天做天天爱高潮片| 五月婷婷婷丁香播| www.com在线操视频免费观看| 亚洲精品操一操、噜一噜、摸一摸、爽 | 久草丁香婷婷五月天婷| 亚洲va欧美va国产综合久久久| 久久亚洲婷婷| 怡红院 久久| 99A级片| 六月丁香婷婷综合影院| 婷激情五月| 被男人添B超爽视频| 成人短视频在线| 九九无码| 亚洲成Av人片乱码色第1集| 日本AAAAAAAAAAAAAA片| 中文字幕有多少字| 婷婷五月天无码熟女| 色色色色色色网| 啪啪 综合网| 久久久久这里只有精品| 伊人丁香五月婷婷潮吹| 五月丁香做爱视频| 好吊兆人妻| 激情狠狠丁香月| 五月婷婷综合网| 只有精品视频在线观看| 夜夜操天天干| 五月天激情四射| 丁香色六月婷婷| 久婷久婷| 色色色婷| 91丨九色丨丰满人妖| 丁香五月av| 久七香蕉| 噜噜噜久久| 蜜乳人妻一区二区三区| 涩五月婷婷| 五月丿香啪啪| 丁香综合婷婷五月天| 色五月综合97| 久久人妻精品| 久久综合影院| AV在线大香蕉| 丁香花色色网| 99婷婷| 天天干,天天舔| AV人人操| 婷婷丁香色五月天久久88| 色五月丁香五月| 五月激情丁香六月狠狠干| 婷婷成人视频| 久久这有这里精品| 国产精品色情AAAAA片软件| 日本成人噜噜噜噜噜| 激情玖玖sh| 深爱激情av| 婷婷综合在线网| 激情小说视频图片| 婷婷丁香社区| 丁香五月另类色婷婷麻豆| 91精品婷婷国产综合久久| 99在线观看| 丁香亭亭久久| 黑人巨粗进入警花疼哭A片| 婷婷天天综合| 996黄色片| 天天艹夜夜艹| AV在线免费播放| 丁香婷婷五月| 天天草天天爱| 天堂二区| 色色热| 久久9精品| 热九九精品| 亚洲综合五月天综合| 亚洲欧美综合7777色亭亭| WWW,婷婷,COM| 色欲影香| 996er热| 激情丁香五月激情婷婷| 大香久久综合网| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 99福利视频导航| AVDV久久| 婷婷综合在线| 亚洲九N| 丁香激情综合| 六月色播| 99精品偷自拍| 五月丁香操亭亭网| 99精品在线观看视频| 欧美性丁香色色五月天干干| 丁香5月啪啪| 欧美碰碰碰| 五月丁香 啪啪| 激情美女五月天| 91呦呦呦| 综合久久影院| 色五月aV| 97婷婷丁香五月天激情图片| 色婷婷丁香五月天| 天天干天天干天天干天天干天天干天天| 国产欧美大香蕉一区| 夜夜大香蕉婷婷丁香| 开心五月天私房婷婷| 久久44| 色综合久久综合中文综合网| 婷婷丁香第一页| 97婷婷久久丁香| 五月天大香蕉| 天天插天天| 国产亚洲网站在线| 偷偷与邻居做爰完整视频| 无码任你操| 六月丁香婷| 五月天婷婷Av| 色色综合网站| 丁香五月婷婷天| www.五月天色色.com| 被强行糟蹋的女人A片| 五月婷婷五月丁香| 丁香六月婷婷缴情欧美| 九九色video| 99操99| 色六月视频| 天天搡日日搡aaaaⅩ| 一本色道久久88加勒比| 久久久精品AV| 婷婷激情丁五月| 色碰碰| 5月丁香美女影院| 久久精品婷婷| 亚洲综合婷婷六月丁香五月| 日本99久久| 色色色丁香| 99热这里只有精品在线观看| 亚洲综合色色| 日本天天综合| 大香线蕉伊人| 久综合九综合99| www.婷婷| 色色色无码| 99热国产在| 丁乡久久| 五月丁香亭亭激情操逼网| 久久激情视频| 久机视频这只有精品| 99精品这里只有免费视频| 色五月婷婷激情基地| 另类少妇人与禽zOZZ0性伦| www.五月天婷婷| 日韩小视频在线99| 色性综合| 成人免费在线电影| 丰滿爆乳一区二区三区| 日日夜夜天天| 日本欧美国产| 婷婷中文字暮| 深爱网深爱综合网| 操久久网| 七月激情六月婷婷综合在线播放| 青草视频在线播放| 级情九色| 九九热在线精品| Jh7Uf088VHafNm| 人人草成人视频| WWW,五月| 中文字幕久久婷九女同| 国产欧美日韩综合精品一区二区 | 丁香五月欧美午夜视频| 97五月天婷婷| 五月丁香视频在线观看| 色婷视频| 激情五月天的婷婷| 另类图片五月天激情| 亚洲欧洲中文日韩久久AV乱码| 亚洲综合成人网| 狠狠的日| 综合九九| aaa日韩| 色婷婷激情小说网| www,五月天com| 国产日韩av片| 丁香五月激情欧美| 丁香五月伊人| AA片在线观看视频在线播放| 狠狠干综合| 九色婷婷| 日韩色久| 婷婷在线视频| 99免费在线| 99免费视频在线观看爱| 天天摸夜夜爽天天做| 婷婷久久婷婷色五月| 五月丁香婷婷综合| 婷婷久久丁香五月| 欧美WW在线网| 天天干一干| 亚洲综合激情五月久久| 国产综合网在线| 婷婷五月天激情综合网| 天天日夜夜操五月| 亚洲射激情| 5月丁香婷婷| 天堂婷婷五月在线| 99热乎| 精品思思久久| 欧美色婷婷| 97人妻碰碰中文无码久热丝袜| 色五月婷婷操逼| 97热九九| 铁牛TV人妻| 日本久久人| 97碰碰视频| 日本天堂免费99| 影音先锋天天日| 91丨九色丨老农村| 色婷婷激情五月天| 97色色综合| 久久色五月天| 一本色道久久88加勒比—| 久操97| 丁香六月婷| 香焦网五月天| 成年人夜夜喷水| 久久综合五月天| 日韩九区| 日本三级大片| 欧美五月丁香在线| 国产日韩欧美性生活| 五月婷婷色综图片| 丁香花五月天| 五月天激情婷婷小说| 色综合综合网| 亚洲六月色| 丁香婷婷五月天在线视频| AVDV久久| 99在线观看视频| 日本综合色图| 久久精品99| 丰满女老板BD高清A片| 中国女人内射6XXXXX| 九九婷| 天天日P天天射P| 婷婷丁香www视频日本韩国| 婷婷五月天综合AV| 五月久久婷婷| 99视频超级精品| 99热这里只有精品21| 日本成人噜噜噜噜噜| 国精产品一区二区三区| 五月天婷婷在线播放| 亚洲人人操| 久久激情五月| 天天拍天天操| 综合狠久久| 亚洲欧美国产A片免费观看| 亚洲另类av| 大香蕉综合在线| 色五月激情问网站| 五月丁香狠狠地噜噜噜噜| 视频色色色色色色| 色女人久久| 色色射| 大地资源色婷婷视频在线| 欧美日本不卡黄色片| 丁香六月激情毛片| 亚洲成人免费在线| 丁香五月婷婷成人色区| 无码 色| 久婷久婷| 色五月网址| 五月丁香色停停啪啪啪| 亚洲精品成人片在线播| 久久综合爱| 成人AV在线网站| 亚州色色色| 啊V视频在线观看| 国产高潮A片羞羞视频涩涩| 五月天婷婷激情六月久久| 91九色大屁股| 五月在线婷色| 国产色五月| 日本婷久久| 五月天激情四射| 婷婷九月久久| 99re热99| 丁香六月天婷婷色| 欧美婷婷五月天| 天天骑天天操| 夜色热久| 另类激情五月| 日本特黄aaaaa| 99热这里有精品| 第五色婷婷| 99欧美精品99日本精品| 九九re精品视频在线观看| 这里只有精品日韩精品| 五月丁香六月婷婷无码| 六月色色| 岛国AAAV| 婷婷五月天激情小说| 99re思思热这里| 大香蕉欧美在线| 国产亚洲精品久久久久久豆腐| 香蕉五月婷婷| 欧美久热| 热久视频| 色五月天电影| 99久久五月婷婷| 亚洲sesesese| 综合五月天完整| 91欧美| 热99.com婷婷| 99re66热这里只有精品| www.成人婷婷综合| 天天干天天日天天操| 色色色色色日韩午夜激情 | 伊人婷婷大香蕉在线| 婷婷射图五月天| 99热这里只有精品2016| 久久婷.com| 蜜桃婷婷丁香综合久久开心亚洲| 九九色欲网| 99久久综合精品五月天| 欧美精品999| 丁香九月激情在线视频| 伊人网欧美在线男人天堂五月丁香| 激情开心五月天婷婷基地丁香社区| www.伊人天堂偷偷婷婷| 99热8| 国产精品天天狠天天看| 激情综合网五月丁香| 日韩综合大黄| 天天骑天天操| 免费啪啪啪网站| 五月婷婷香蕉| 超碰人人艹| 色婷婷影视99| 91操色| 色久女| 免费色婷婷| 色色亚洲无码| 欧美在线操| 国产亚洲成人综合| 国产阿姨日皮艹逼内射视频| 97婷婷丁香| 婷婷五月综合中文字幕| 亚洲五月天第一综合干| 色99色| 久9热在线免费观看| 激情涩涩网| 爆乳熟妇一区二区三区爆乳| 日本天堂网站99| 五月天无码视屏播放| 成人在线不卡| 六月婷婷最新网址| 26UUU精品一区二区Com| 五月丁香啪啪网| 99.N在线视频| 激情婷婷综合五月少妇| 天天综合精品| 亚洲精品国产成人AV在线| 久久精品性爱| 五月综合激情啪啪啪啪啪| 综合欧美五月婷婷| 午夜激情婷婷| 国产色视频网站2| 五月激情网络| 久久在线视频免费观看| 九九碰九九爱97| 丁香五月综合激情性爱| 九九久久久综合| 婷婷五月天人妻| 4399成人黄A片| 99在线69| 五月丁香亭亭操逼| 色色色色区| 五月深爱激情网| 超碰av在| 婷婷五月天日逼| 色色色99| 大香蕉av在线| 人人97碰| 欧美性爱一区| 天天做天天爱| 91干在线视频| 人人草人人视| 五月天丁香啪啪网| 26uuu亚洲色| 嫩草AV久久伊人妇女超级A| 99热 这里只有精品 国产 日韩| 五月丁香福利| 丁香五月婷婷激情四射| 久久天天| 国产在线视频1234| 丁香婷婷色| 国产免费一区二区三州老师F1……| 五月丁香婷婷激情在线| 五月香婷婷| 蜜臀av无码久久久久久久久| 九九精品热| 天天色播| 五月大香蕉| 丁香五月天网站| 婷久久| 日本美女上人| 丁香五月区| xxxx久| 久久9视频欧美| 激情综合九月| www.99婷婷| av在线免费播放| 日韩啪啪网| 色综合丁香| se99视频| 久久久久妻| 色婷婷小说网| 久久网站免费亚洲| 欧美久热| 久久亚洲精品成人无码网站导航| 激情色播| 99小精品| 色五月激情五月| 五六月丁香激情视频| 九九成人电影婷婷| 久久人妻高清中文| 婷婷五月天久| 五月丁香中文| www.日本91| 网色99| 婷婷啪啪| 国产精品电影| 色五月天天| 欧美综合激情| 天天天天天久久久久久| 色五月开心久久网| 五月婷婷开心网| 91色综合网| 99热97| 久久综合55| 79精品视频| 天天综合网~91| 成人婷99最新| 久久久激情| 婷婷五月天成人网| 丁香婷婷六月天| 啪啪日本欧美| 婷婷五月天激情电影小说| 日熟女| 久热伊人| 在线,国产,色,热视频| 91919191919久久成人视频| 99热这里只有在线| 丁香九月激情久久| 大香蕉婷婷丁香视频在线| 日本精品在线噜噜噜| 91操人| 综合图区激情| 五月丁香趴趴| 在线中文av| 思思热99er在线视频| 狠狠干五月| 日本五月天激情| www.黄色片-久久成人国产精品在线播放-999AV| 九九99在线免费在线观看视频| WWW.五月天9999| 色婷婷综合久久| 色久丁香五| 丁香色婷婷| 天天射网站| 五月婷婷中文| 亚洲区视频| 成人做爰A片免费看视频 | 狠狠狠狠狠狠狠狠草| 激情五月婷婷色综合| 能看的av| 99久久精彩视频。| 综合福利网| 色色国产| 99这里有精品久久97| 男人的天堂婷婷色五月| 激情五月天综合网| 五月婷婷新网站| 69热91天堂| 婷婷五月色综合| eeuus五月婷| 就爱日五月天| 久久资源网五月婷| 六月色色综合| 国产精品岛国片在线观看免费| 9久精品视频| 五月天婷婷伊人| 婷婷激情五月视频| 狠狠色婷婷777| 激情婷婷网| 九九操操| 色五月综合激情网| 久久久久网站| 久久五月丁香六月婷| 狠爱婷色| 婷婷久久大香蕉| 99色亚洲| 五月花综合| 婷婷性爱五月天丁香网| 综合色色网| www狠狠| 青青草tp| 久久精彩视频18| 综合色色网| 蜜桃五月天色| 日韩啪啪视频| 色欲AVV| 99色婷婷视频| 精品无码99| 开心五月激情网| 中文AⅤ大全| 成人丁香五月天| 五月天精品视频| 欧美日本综合网| 激情骚五月| 天天插天天插| 五月丁香综合中文| 我爱婷婷五月天综合88| 日本三级中国三级99| 婷婷丁香九色| 久99热| 五月婷婷在线综合| 五月天婷综合网站| 亚洲色图81p| 中文字幕免费高清电视剧| 九九热99免费视频| 伊人狠狠干| 综合天天综合| 欧美激情久| 丰满老熟妇BBBBB搡BBB| 五月激情婷婷综合| 99亚洲色| 久久亚洲A| 综合网啪| 激情图片亚洲| 夜夜爽天天爽| 五月婷婷视频| 影音先锋 婷婷| 婷婷色婷婷亚洲成人| 日本少妇AA一级特黄大片| 国产成人精品一区二区三区视频| 五月天综合激情网| 五月丁香花激情综合网| 婷婷五月天成人五月天| 99亚洲精美视频在线观看| 久99婷婷色综合| 色五月婷婷五月天| 色九月婷婷丁香| 99热99re6国产在线播放| 激情久久四色| 欧美精产国品一二三区| 精品视频网| 国产精品久久久久9999小说| 丁香六月婷婷| 丁香五月六月婷婷综合| 思思久日精品视频| 色色色视频| AV在线资源| 丁香五月综合首页| 伊人99久久| 午夜69成人做爰视频| 91精品久久久久久| 久久538| 五月婷婷在线观看| 成人小说 五月天 婷婷| 狠狠色婷婷7777久| 欧美天天搞| 九九Y精品热播| 亚洲三A| 99热99色| 婷婷五月av| 99婷婷国产最新视频| 深爱激情婷| 激情小说之五月| 天天爽天天弄| 性爱AV天堂| 婷婷五月天综合网| 无码yw| 成人网站高清无码| 四色五月婷婷| 天天揷综合网| 另类少妇人与禽zOZZ0性伦| 激情婷婷五月| 97碰碰人人| 一区二区乱码视频| 激情五月丁香亭亭 | 免费看片操逼| 4399在线观看免费高清毛片| 人人人操 超碰| 99热这里只有精| 操99| 五月丁香六月激情在线| 婷婷在线精品| 五月婷网| 99福利导航| 中文字幕丰满人妻无码专区| 婷婷的99视频网站| 成人精品在线观看| 成人五月天丁香| 免费AV在线| 天天干一干| 九九成人| 五月激情六月丁香| 亚洲另类视频| 天天日本夜夜谢| 九九热99热| 终合激情网| 六月婷婷在线| 色播激情五月天| 狠狠xx| 开心婷婷五月天激情网| 常久最新免费的色吊丝| 五月花婷婷丁香| 99热色在线精品| 五月天成人在线播放丁香| 伊人五月天婷婷| 天天色综合网吨吧| 色五婷婷| 五月天激情亚洲| 婷婷五月天激情文学| www五月天com| 久久538| 人妻久久久| 精品女人九九九| 综合色五月天| 综合色色网| 天天玩夜夜操| 中文字幕成人| 做爰丰满少妇1313| 亚洲国产精品VA在线看黑人| 国产伦亲子伦亲子视频观看| 色婷婷在线电影| 天堂呦 呦百度搜索-百度搜索| 大鸡巴伊人网| 开心久久网婷婷| 婷婷丁香综合| 毛片新网地| 久热大香蕉| 9九热视频| 色五月激情五月丁香五月婷婷啪啪综合 | 综合亚洲六月婷婷在线| 亚洲五月丁香综合网| 五月天播播综合| 九热视频这里只有精品| 丁香五月欧美激情| 天天干天天日天天操| 日韩在线99| 99ri视频| 99婷婷| 天天久综合网永久入口18| 色婷婷狠狠18yy| 伊人综合婷婷| 成人亚洲精品| 丁香五月天欧洲在线| 狠狠狠人妻| 五月婷婷二月丁香| www,com,五月色色| 99熟女| 性爱久久| 色天使久久综合| 亚洲人妻电影| 色综合色色| 米奇激情婷婷| 99热6色| 久久多色| 五月激情小说|