99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜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
返回資訊列表
亚洲日韩26uuu| 久久精品99久久久久久久久| 五月天第四色开心色播| 99久久九九视频| 欧美日本国产| 九九99精品视频| 激情综合九月| 国产精品久久久久久妇女6080| 激情综合网激情五月网| 国产AV不卡福利| 久9久9热久热| 1995年关宝慧版蜘蛛女| 亚洲午夜视频| 9 大屁股在线视频精品| 99热九九热| 丁香五月色综合色播五月| 亚洲精品一区中文字幕乱码| 成人视频一区| 五月婷婷婷自由综合| 伊人综合色干| 99视频在线观看地址| 午夜色婷婷| 99热久久这里只有精品2010| 色视频2025| 91中文狠狠综合| www.henhengan| 99日本黄站| 99热免费| 在线视频另类| 色婷婷丁香五月| 亚洲一个色| 久久99免费视频网站| 九九综合| 婷丁香五月天| 成年人看Va免费视频| 97碰| 婷婷综合五月天| 极品少妇XXXX精品少妇偷拍| 午夜成人片400| 久久婷婷成人综合色怡春院| 99热免费观看| 婷婷五月丁香综合激情| 国产综合婷婷| 亚洲人妻Av| 成人网丁香五月| 日本三级中国三级99| 欧美日本99| 99久久超级| 五月丁香啪| 97色啪| 亚洲热久久| 99这里只有精品国产| 99久在线精品99re5热视频| 午夜色婷婷| 丁香五月成人| 久久九九爽| 99在线热| 色99在线| 亚洲妇女熟BBW| 影视av久久久噜噜噜噜噜三级| 99热这里只有精品3| 无码一区二区日韩| 黄页大全十八禁| 丁香五月狠狠综合欧美| 五月婷婷六月少妇激情| 婷婷五月天开心激情网| 影音先锋91资源站| 91九色在线视频| 丁香婷婷色色| 久久曰曰| 欧美性生交XXXXX无码小说| 性爱综合网| 99无码精品| 狠狠操狠狠| 夜精品无码A片一区二区蜜桃| 欧美三9久九观看| a性生活久久无| 四川女人毛多水多A片| 五月天婷婷视频| 日日噜噜夜夜狠狠久久丁香六月| 五月亭亭狠狠| 大香线蕉伊人| 少妇性BBB搡BBB爽爽爽视頻| 国产色视频网站2| 国产人人操| 久久精品系列| 亚洲看av的网站| 天天精品视频在线观看视频| 99精吕视频在线观看了| 91操碰| 五月天婷婷影院| 99原创自拍视频在线观看| 欧在线一区| 99五月婷| 秋霞簧片| 自拍偷窥99热| 久久性都花花世界成人免费视频| 九九五月天| 伊九九三级区| 亚洲综合视频一下| 久9久9热久热| 一级七香蕉| www.久9| 亚洲精品国产成人AV在线| 91打屁股视频网站| 99精品在线| 99热综合| 人人搡人人| 五月婷色色| 最近中文字幕2019视频1| 综合久久五月| 美欧日韩国产成人在战| 丁香花婷婷五月天| 婷婷久久综合久| 五月色丁香成人| 丁香婷婷五月激情综合| 91日综合欧美| 日本色啪| 五月婷丁香花| 久久亚洲天堂| 日韩三级视频一区二区| 美女激情综合| 午夜青草资源| 99啪啪视频| 天天综合网~91| 六月婷婷成人| 99精品小视频| 日韩成人精品中文字幕电影| 五月婷五月婷伊人伊人五月婷| 丁香五月天天高清在线| 99热久| 夜夜嗨一区二区三区直播内容| 色婷婷瘦婷婷日韩| 丁香五月a| 日本丁香五月| 色综合丁香| 夜夜撸天天日| 五月激情站| 五月天婷婷激情四射综合| 天天激情5月天亚洲| 日本激情五月| 777精品久无码人妻蜜桃| 免费碰碰视频久| 无码九九| 极品人妻VideOssS人妻| 五月天激情图片网| 色色AV色色色东莞| 91/九色黑人| 99在线精品视频免费| 五月激情婷婷播播开心| 中文字幕视频色婷婷| 99人人操| 亚洲在线操| 婷婷六月天| 99久久思思| 五月色影院| 亚洲无aV在线中文字幕 | 丁香婷婷久久老熟女综合网| 极品少妇XXXX精品少妇偷拍| 欧美精品久久久久久视频观看| 开心五月深爱婷婷| 五月精品99综合| 日韩成人AV在线| 天天操夜夜操| 五月婷婷99热| 日本天天操| 成年视频免费观看| 国产精品美女| 天天网曰日曰夜夜综合永久免费| 99热8| 中文字幕在线视频播放| 能看的av网站| 欧美三级欧美一级| 5Www色5夜| 欧美狠狠草| www.日本91| 九九九九中文字幕| 婷婷五月激情图片| 国产99久久久| 国产日比| 婷婷丁香久久| 婷婷五月丁香久久| 热的五码久久精品| 国产伦亲子伦亲子视频观看| 久久婷婷五月天激情唯美| 婷婷综合九色伊人| 五月天天天色| 五月婷在线影院| www久久艹| 免费观看亚洲AV片| 性做久久久久久久免费看| a v色婷婷| 91久久久久久久久久18| 色五月六月| 怕怕視頻| 丁香色五月直播| 凹凸探花电影| 婷婷五月激情黄色| 色偷偷综合| 欧美天堂久久| 色综合婷婷| 在线播放中文字幕| 色婷婷呢狠禁久禁| 91久久九久久九久久九久久九久久| 九九美女视频| 思思热视频在线| 色五月婷婷开心| 五月婷婷视频| 日韩啪| 69精品无码一区二区三区| 色狠狠婷婷| 99男人的天堂| 日日天天干| 91免费在线视频6| 婷婷五月激情黄色| 欧美内射AA| 亚洲精品电影| 色五月,com| AV 3P| 五月婷婷狠狠久久| 五月婷婷激情网| 五月婷婷丁香av| www.无码com| 色色色色色色色色网站| 五月婷婷六月丁香激情| 欧日美女Va| 老师高潮流白浆喷水的A片| 99热这里只有精品99| 97碰免费视频在线| 亚洲99一级无嗎特制在线| www.99热在线观看| 99热成人在线观看| 久久久jd| 国产激情久久久| 五月天激情无码高清| www.9操| 丁香六月婷婷| 婷婷五月色丁香在线看| 97亚洲色 torrent magnet| 超碰色碰碰| 亚洲中文字幕av| 欧美日本一区二区三区| 狠狠看狠狠| 少妇人妻丰满做爰XXX| 天天日天天做天天操| 碰超99| 69天堂99| 日本一級黃色一級片| 久久九九@| 九九热视频免费| 337p大胆噜噜噜噜噜91Av| 超碰2021| 99re热视频这里只精品| 久久九九色| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 99久热在线精品99re6热| 国产在线黄色| 天天综合网在线| 情五月亚洲婷婷| 狠狠久久婷五月综合色| 99热综合| 久久久网站| 激情五月婷| 五月色影院| 五月丁香色五月| 人人操AV| 91偷拍视频| 日本色色影院| 黄色五月婷| 亚洲中字AV电影在线网站| 婷婷五月天久久| 日本九婷婷| 区区欧美你爱| 深爱1激情网| 婷婷五六日| 俺来也综合网精品一区| 丁香午月AV中文字幕| 五月丁香琪琪| 开心五月激情网| 五月天激情四射网站| 国产三级在线播放| 婷五月天| 婷婷久久影院| 成人版视频在线观看| 五月天大香蕉AV| 色五月噜噜| 欧美va在线| 久热亚洲| 另类专区在线观看| 99精彩视频| 亚洲综合99| 伊人久久大香线蕉av一区| 亚洲99在线| 五月婷婷深深爱爱| 五月丁香六月色婷婷综合五月天| 激情文学久久| 五月天婷综合网站| 天天拍久久| 婷婷激情中文综合| 色婷婷激情小说网| 天天色综合综合| www.日韩艹| 色播五月丁香婷婷| 婷婷五月天亚洲综合| 丁香五月六月久久综合 | 中文久久久人妻| 免费日韩99| 深爱开心激情网| 开心久久爱五月天| 日日日日操| 五月丁花六月丁香综合| 9999三级片| 欧美在线干| 亚洲成人婷婷| 97干97色| 欧美 日韩 人妻 高清 中文| 婷婷免费视频| 激情婷婷色色| 思思热在线精品视频网站| 开心婷婷五月激情网小说| 成人天天爽| 丁香五月久久综合| 六月婷婷八月丁香| 伊人天天色| 天天操天天日天天爽| 天天天天色天天天天天干| 色综合久久88色综合天天99| 开心婷婷丁香五月| 99热这里只有精品9| AA片在线观看视频在线播放| 97在线日本| 操操国产| 色性五月天| 婷婷五月天情色| 五月丁香色| 日韩人妻AV在线| 成人在线观看一区| 2025中文在线视频字幕免费观看| 99国产视频网| 日日日日日| 五月丁香婷婷色啪| 九九性视频| 色婷五月丁香久亚洲| 婷婷五月天电影区小说区| 婷婷五月天亚洲综合| 亚洲六月婷婷| 丁香五月WWW| 色五月激情综合网| 人人播| 91日本在线观看| 欧美性爱五月天| 婷婷六月色开| 久久182| 无码四色色色| 一月婷婷色色| 婷婷五月另类网站| 婷婷五月天成人动漫 | 思思 热 99| 国产成人av在线| 午夜天天精品视频| 思思热久久阴99| 激情五月丁香六月婷婷| 97色碰| 婷婷五月欧美AA片免费| 婷婷成人丁香色情基地30 | 久热99| 伊人成综合五月婷婷| 亚洲激情丁香五月天色| 五月婷精品| 久777| 少妇丁香婷婷 | 亚洲视频另类| 亚洲五月婷天天操| 成人丁香五月天| 99热一本| 婷婷丁香五月天中文字幕| 九九色婷婷| 激情网色五月| 丁香九月婷婷色| 97色色视频| 久久9999| 亚洲日日操| 日韩人妻AV在线| 亚洲国产精品成人免费一区久久久在线观看AAAA | 99精品视频网| 另类专区在线观看| 亚洲综合九九| 国产精品99久久久久久猫咪| 五月叮香啪| 狠狠干最新地址| 久久一热免费视频| 99热啪啪| 欧美大奶熟女噜噜噜噜| 婷婷五月丁香五月| 激情视频网址| 五月丁香六月成人| 色婷| AV操逼网| 五月丁香好婷婷A片网| 久久久久思思热| 亚洲精品无码99热| 五月婷婷久久网| 激情小说五月天| 色综合色综合网| 五月丁香婷婷色色| 色性综合| 五月婷婷无码| 玖玖资源网站最新站| 丰满人妻一区二区三区| 激情五月婷婷伊人| 九月丁香很很色| 亚洲 小说 欧美 激情 另类| 色婷婷六月| 另类激情五月| 色情婷婷久久五月天| 欧美性爱5月天天天看| 极品人妻VIDEOSSS人妻| 五月丁香色狠狠干大屄| 激情影院69| 久久这里只| 日韩成人影片在线观看| 激情五月丁香亭亭| 日本色图综合| 婷婷金品综合视频| 色五月开心五月激情五月| 99精品在线| 五月婷婷久久激情| 9精品国产在热久久| 99热这里只有精品22| 久久人视频| 色五月综合资源推荐| av成人在线播放| 天天综合 99久久婷婷| 国产在线黄色| 色色色综合网| jiqingliuyuetian| 大香蕉久久久| 欧洲第一无人区观看| 亚洲天堂热| 丁香五月伊人| 婷婷亚洲在线| 97热精品| 精品无码久久久久久久久| 九九久久综合网站| 97视频.干com| 成人国产欧美大片一区| 色五月天综合网| 97色热| 日韩成人综合网| 婷婷色五月久久| 色综合播放| 五月天丁香综合| 都市激情久久| 亚洲国产黄色电影| 婷婷中文字幕| 五月婷婷说| 91网站黄| 国产免费AV在线| 久久视频在线视频| 夜夜夜夜夜骑撸| 探花搜索结果 - 黄上黄| 超碰人人干| 狠狠干在线视频| 日韩 mm 不卡| 国产精品色| 国产在线另类五月婷婷| 人妻精品在线| 婷婷字幕在线| 天天做天天爱| 丁香婷婷基地| 日日操夜夜爽天天天| 91AV婷婷| 免费试看小视频 99| 丁香六月激情毛片| 国产精品色情AAAAA片软件| 色综合色综合色综合色综合| 五月开心六月婷婷在线播放网站| 98永久精品| 欧美激情综合色综合啪啪五月| 超碰1999| 午夜性爱影视一区77| 婷婷 伊人 久久| 色偷偷AV亚洲男人的天堂| 五月婷婷五月丁香| 午夜精品777| 91天堂网综合| 五月天另类小说| 伍月婷丁香花全集| 久热这里只有精品在线观看 | 丰满人妻妇伦又伦精品国产| 99色热视频| 五月综合六月婷婷| 五月青青草综合| 香蕉操亚洲| 97在线日韩| 一点色成人网| 亚洲综合99| 五月丁香影视| 亚洲激情精品| 中文字幕 久久9999| 久久性视频| 色五月婷婷影视| 99国产精品白浆在线观看免费 | 五月天丁香欧美激情| 丰满人妻妇伦又伦精品国产 | 欧美激情性做爰免费视频| 97色永久免费视频| 五月丁香影视| 色五月色五天免费视频| 色噜噜狠狠狠综合曰曰曰| 亚洲人成网亚洲欧洲无码久久| www.婷婷,com| 探花搜索结果 - 黄上黄| WWW.亚洲无码| 亚洲欧洲美女在线观| 国产亚洲精品AAAAAAA片| 任你艹| 婷婷五月天AV在线| 久久婷婷五月天| 激情综合色婷婷六月天| Www.激情| 久久人妻乱| 啄木鸟丝袜美女福利视频| 甈你aaaaa| 婷婷爱综合| 天天综合久久| 午夜婷婷五月天| 婷婷五月天激情在线| 丁香色情五月天| 狠狠操综合| 欧美婷婷丁香五月社区| 91要啪| 色婷婷五月天偷拍| 深夜A片| 婷婷丁香人妻久久在线观看| 狠狠操天天日| 五月色天五月色| 97涩涩丁香五月天| 婷婷色Av| 色婷婷六月天在线| 婷婷五月六月丁香| 色综合久久88色综合天天99| 六月婷婷色综合| 日本久久99| 激情久久久久久| 久久三级视频| 亚洲综合另类| 97日韩无套内| AV大片在线观看| 中文在线视频久9| 色婷亚洲| 欧美日综合| 国产激情久久久| 亚洲免费99| 国产激情综合五月久久| 丁香五月天激情| 亚洲精品久久久无码| 丁香九月婷婷色| 色欲AV导航| 开心五月网| 国产免费AV在线| 色99网| 可以免费观看的AV| 丁香婷婷综合影院| 99精品在线观看视频| 91操碰| 色五月天成人在线| 五月开心久久| 狠狠狠狠狠干| 中文AV网站| 六月婷色| 五月天婷婷自拍图片在线观看| 久久人人人人妻| 婷婷六月综合激情| 色久综合| 美女被肏网站在线看| 另类精品视频在线观看| 天天粽合合合合| 99九九精品| 99久久综合网| 激情婷婷五月丁香啪啪啪| 亚洲AV永久无码影院黑人| 色综合久久88色综合天天99| 狠狠999| 久久金品黃色| 天天爽天天| 在线成人av播放| 五月天另类小说亚洲| 久久精品66| 五月天精品| 狠狠五月天婷婷| 色五月视频,小说| 综合五月天| 五月天婷婷色| 五月婷婷亚洲色图| 开心四月婷婷在线色播播| 99热亚洲精品| 日本99久久| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 丁香五月激情网| 99小精品| 日本高清久| 国精产品一区一区三区免费视频 | 26UUU精品一区二区| 天天肏天天舔AV| 丁香色婷婷| 蜜桃五月天| 亚洲男女激情| 久9热| 丁香性爱在线视频| 99精品无码视频| 六月婷婷开心| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 亭亭色网| 久久er99| 91精品久久久久久久久久| 特黄三级片| 另类激情五月天| 日本久久精品| av在线观看免费| 五月丁香色| 9精品久久999| 五月天婷婷青青草| 久久久久妻| 精品色色| 成人精品网站在线观看| 五月丁香久久激情网| 亚洲人妻av| 热久69| 一区二区三区四区无码| 噜噜在线| 六月丁香视频网站| 激情五月天综合| 91精品久久久久久久久久久久| 色欲资源网| 桃色五月天| 大香蕉九九| 激情综合网五月丁香| 99久久五月天| 五月天综合视频| 婷婷五月天桃花网| 91oumei| 五月丁香六月停停| 国产真实乱了老女人视频| 色色操| 精品在线网站| 亚洲啪啪啪啪| 久久9精品| 九九99九九99| 五月天亭亭俺也| 啪啪九九色| 九九免费在线视频| 婷婷99视频在线| 五月激情开心婷婷| 熟妇人妻中文字幕无码老熟妇| 都市激情久久| 影音先锋女人AA鲁色资源| 婷婷成人丁香色情基地30 | 欧在线一区| 5月婷婷性视频| 成人国产欧美大片一区| 色综合色综合色综合高潮| www.激情五月| 欧美激情丁香五月天久久婷婷一区| 狠狠色狠狠操| 丁香六月婷婷久久综合八月| 五月丁香六月婷| 色之综合网| 538任你爽视频不一样的| 97碰人人操| 婷婷色色欧美| 超碰不卡在线| 99激情网| 久久思思热| 激情五月婷婷网在线观看| 亚洲精品久久久久久久久久吃药| 狠狠五月丁香色婷| 久久综合66| 五月天综合激情网| 激情五月天啪啪| av在线观看免费| 久久激情视频| 中文毛片无遮挡高潮免费| 思思re视频在线| 91女人18毛片水多国产| 色欲午夜无码久久久久久张津瑜| 狠狠色婷婷777| www.天天干| 五月婷婷六月基地| 欧美在线视频免费播放| 色婷婷狠狠| 亚洲人人干| ...婷婷五月综合不卡,国产在线手机| 97人人操| 五月丁香少妇A| 欧在线一区| 中文无码婷婷| 五月丁香六月婷婷a v| 99天堂网最新| 日韩1区2区| 亚洲色a| 激情av在线| 99这里| 草做免费在线观看| 久热人妻| 激情五月婷婷综合秋霞| 中文字幕在线播放视频| 精品夜夜澡人妻无码AV| 丁香五月天堂| 婷婷丁香社区网| 亚洲av另类在线观看| 丁香婷婷91在线观看视频| 亚洲激情免费久久| 99热热热国产超碰| 久久色情| 天天在线XXX| 色七色九九| 国产亚洲av片| 777精品久无码人妻蜜桃| 综合久久五月天| 99久热在线精品| 久久精99| www.色婷婷| 国产色网站| 久久 这里只有精品1| 久久总和99| 久久久精品婷婷五月天| 色婷婷在线视频| 色婷婷的五月天| 狠狠另类视频| 五月婷婷久久网| 日本精品人妻无码77777| 五月激情综合深爱| 99热精品在线| 午夜日韩久久久网站| 欧美性生交A片免费看| 久久天堂网| 淫荡工a| 久久久久久久五月婷婷六月丁香综合,开心激情综合网 | 婷婷五月天首页激情| 亚洲成人免费在线| 狼人婷婷久久| 婷婷五月天开心网| 开心五月丁香婷婷| 精品久久人妻热| www.精品99| 超碰成人在线免费观看| 色欧美色色色| 操一区| 丁香五月久久| 一区二区乱码视频| 欧洲亚洲精品| 色五狠狠| 亚洲 无码 中文字幕 中出| 天天久久66xxx| 伊人9在线| 99资源人人| 亚洲成人av中文| 超碰人妻公开在线| 色一情一乱一伦一区二区三区| 久热大香蕉| 久久综合婷婷五月| 五月天丁香| 丁香五月五月婷婷| 婷婷噜噜| 五月丁香婷婷成人综合网| 狠狠干狠狠干狠狠干狠狠干| 欧美噜噜免费观看| 黄色99视频| 少妇激情基地| 97自拍视频在线| 黄网免费看| 翔田千里 50岁 无码| Www99热| 久9热视频| 色婷婷激情五月天| 日韩淑女人妻luan伦激情精品一区二| 免费观看日韩成人av| 色约约视频一区二区三区四区五区 | 视频久久9| 亚洲爱婷婷| www.91在线看| 五月久久网| 欧美色九| 91色在线/日韩| 婷婷综合五月| aaa丁香五月天| 六月丁香五月激情亚洲AV| 天天日,天天射,天天插| 婷婷爱综合| wwccc久久久| 99久久成人| WWW.99热| 日本五月天一页| 色婷婷小说网| 97狠狠色| 六月丁香啪啪啪| 日本狠狠干| 激情操逼婷婷| bukadeavzaixian| 丁香六月婷婷久久高清| 久久五月视频| 婷婷五月天Av| 日日爽天天| 婷婷狠狠操| 色99在线视频| 99热在线观看| 九九久久久综合| 激情99| 五月天婷婷黄色视频| 亚洲欧洲自拍图片专区五月天| 俺去也在线www色官网| 97色婷婷在线观看| 久草大| 色色五月婷| 嫩草AV久久伊人妇女超级A| www.久久| 99久久久精品| 亚洲黄色精品| 日韩一66精品| 青青草婷婷综合五月| 五月久久亚洲| 色五月丁香婷婷久草| 97色碰| 国产亚洲精品久久久久苍井松| 五月婷婷久久爱| 亚洲五月天婷婷| 手机看片日日做夜夜| 五月婷婷六月丁香激情| www.久久| 91人久| 9超碰在线| 天天干夜夜操A片| 深爱激情六月| 色色激情网| 少妇伦子伦精品无吗| 东京热人妻一区二区三区在线| 9热视频在线观看| WwW天天干| 五月天婷婷激情| 五月婷婷六月激情| 久久9RE热视频精品98| 九九精品在线视频观看| 骚货艹网站视频| 99啪啪视频| 五月丁香久久激情综合| 婷婷五月丁香av网站| 久色欧美| 亚洲无码成人性爰网| 亚洲天天| 色综合天天| 懂色av蜜臀av粉嫩av永陈冠希| 激情深爱婷婷网| 99精品在线观看视频| 婷婷九月| 五月丁香色婷婷色| 狠狠草综合网| 六月丁香五月婷婷| 激情 婷婷| 丁香五月亚洲综合| 五月婷综合| 天天久久九九| 天天弄天天爽| 久久狠狠干| 丁香五月婷婷基地| 国产免费一区二区三区三州老师F1F1.CC | 超碰人人色| 99综合色| 亚洲三A| 五月丁香伊人网| 亚洲av综合在线| 亚洲五月天,激情视频| 九九99视频| 丁香香蕉射射射| 九九色热| 日韩超碰在线| 天堂久久大香蕉| www.sezonghe| 天天干,夜夜爽| 丁香综合网| 99热这里都是精品| 丁香五月婷婷老师网站| 九九热思思热| 久久人人看| 亚洲午夜av| 99狠狠色| 国产午夜精品一区二区| 天天草比天天爽| 精品99*| 五月亭亭激情综合| 激情网五月天| 综合五月天亚洲婷婷| 99热9| 五月婷在线影院| 中文久久婷婷| 热久69| 性色五月天| 91在线观看www| 五月婷网站| 91麻豆国产三级精品福利在线观看| 精品色色| 亚洲色爽| 免费看欧美成人A片无码| 婷婷在线播放av| 超碰人人操人人干| 91视频精品99| 大香蕉九操| 激情伊人| 99九色视频在线观看| 97在线/亚洲| 99久久久久久www| 五月天停停日日| 婷婷色婷婷| 操日本三片99| 91免费看片| 五月婷婷中文字幕| 亚洲精品电影| 久久只有精| 99久热在线精品| 国产精品人妻欲求不满| 美女网黄| 日日日日操| WW婷婷五月天com| 美英法精品无码免费视频| 亚洲六月综合激情久久下卡| 久久久久久综合五月婷婷| 婷婷五月五月丁香| 国产午夜精品久久久观看| 色婷婷四虎| 五月婷婷丁香五月| 91成人电影| 激情丁香婷婷| 成人va在线观看视频| 国产毛片精品一区二区色欲黄A片| 日韩抽插操逼| 六月婷婷综合网2| 色深爱五月| 欧洲S级在线观看| 91久久久久久久久久久| 久婷婷五月激情| 成人在线二区| 停停五月丁香| 99色干| 丁香五月性| 久久久久久综合五月婷婷| 激情五月婷婷她| 伊人碰碰碰| 欧美日韩大黄| 丁香99| 99激情网| 五月婷无码| 手机在线视频观看9| 婷婷五月天激情综合| 99热这里只有免费| 免费成人中文字幕| 一起草Av| 婷婷五月天激情综合婷婷五月天激情综合 | 激情五月天婷婷色色色色色色色色色色色| 婷婷的色色五月天| 那里有AV网址| 1024成人免费看| 99福利导航| 涩涩涩,com| 婷婷丁香久久网| 七七九色| 婷婷丁香五月天色区| 色色五月天com| 大香蕉五月天| 另类五月激情| 这里只有精品免费在线视频| 色综合综合综合| 婷久久| 五月综合在线婷婷图片| 丁香视频| 无码日本精品XXXXXXXXX| 婷婷五月激情丁香| 婷婷五月天天天日日夜夜| 丁香婷婷五月激情四射网| 一区二区成人电影| 国产精品成av人在线视午夜片| 伊人喵咪a V| 五月天丁香成人社| 婷婷六月插屄激情| 午夜婷婷久久 | 丁香激情久久| avh片在线观看| 九九热最新视频| 激情五月婷婷六月丁香| 五月丁香婷婷综合在线| 99在线小视频| 天堂成人A片永久免费网站 | 97干欧美| 丁香五月婷婷手机| a色色色色色| 国产在线中文字幕| 殴美97色| 亚洲天堂热| jiZZdr| 国产成人AV人人爽人人澡Va| 91jiuseshunv| 亚洲日韩一页精品发布| 五月婷婷大香蕉| 日本在线观看91| 国产美女无遮挡裸体毛片A片| 久re热视频| 五月天婷a| VA日本视频| 成人中文字幕在线| 日韩av在线播放综合网| 99热精品在线观看| 九热视频| 99热这里是精品| 五月婷婷伊人久久| 六月五月丁香五月欧美| www.久久爱.com| 99精彩视频在线观看| 嫩BBB搡BBBB榛BBBB| 四色99久久| 激情图片久久| 色婷婷综合视频| 亚洲色欲AAAAAA| 五月天婷婷自拍图片在线观看| 久久资源网五月婷| 精品九九网| 九九伦子片| 青草视频在线播放| 色欲久久久久久综合网综合网| 99er视频在线| 激情WWW| 激情精品久久| 99re99在线看| 色婷婷免费视频| 2015WWW永久免费观看播放| 久久9情免费| 亚洲愉拍99热成人精品| 国产av天堂| 五月天综合| 久草热在线视频| 色99网| 五月色综合| 亚洲综合五月天婷婷丁香| 日本美女五月天| 五月天精品| 五月婷婷婷丁香播| 殴美综合激情五月天免费视频| 99精在线| 丁香月六月| 日韩在线五月天婷婷| 狠狠操狠狠干综合| 天天日天天干天天插天天射| 五月婷在线视频免费播放| 成年人99热| 99热这里只有的精品视 | 日韩操人| 激情小说视频图片| 五月丁香综合在线| 99热亚洲| 91丨九色丨国产打屁股| 色99视频| 国产做A爰片毛片A片美国| 婷婷综合| 这里精品| 色五月天婷婷| 女人被男人吃奶到高潮| 夜夜久久综合网| 丁香六月激情| 小视频久久久aaa| 啪啪综合网| 98国产精品综合一区二区三区| 日本视频久久| 日日夜夜亚洲一区| 91xxxx九色| 91久久九久久九久久九久久九久久| 日韩精品一品二区三区的使用体验| 日本一毛片| 六月婷婷综合| 五月花综合网| www,婷婷五月天777me,com| 久久久久久丁香五月| 色婷婷成人| 九热精品| 久操热线| 中文字幕无线久必| 久久五月丁香综合| 久久九九re热| 五月天激情图片| 99丁香五月婷| 只有久久精品免费| 一本色道久久综合狠狠躁小说| 99热国产精品| 亚洲精品字幕在线观看| 欧洲综合一区| 9精品视频在线| 99热最新精品| 开心激情站婷婷五月天| 色色色免费视频| www.色五月| 国产精品第一国产精品| 婷婷五月丁香激情图片 | 亚洲激情综合| 激情婷婷五月黑人| 亚洲欧美国产高清vA在线播放| 色综合九九色综合88| 色五月婷婷在线| 五月激情久久| 丁香五月婷婷黑人妻黄色电影院| 五月色无码| 五月六月伦理| 99精色| www.色欲丁香婷婷| 婷婷黄色| 天天日天天做天天操| 97五月久久丁香婷婷| 五月天啪啪| 51XX嘿嘿午夜无码| 激情五月图| 26uuu精品国产| 天干夜夜操| 亚洲AV成人精品网站在线播放| 情色婷婷五月天| 激情亚洲婷婷六月| 最新av在线观看| A短视频免费在线观看| 97黑人精品区| 无码激情精品色婷婷久久久久| 偷拍91九色| AV中文网| 九九综合九九| 人人爱人人添| www.激情五月| 婷婷色中文字幕| 91919191919久久成人视频| 五月婷婷偷拍| 欧美激情2025| 精品久久人妻| 婷婷爱五月| 亚洲激情视频网| 超碰99热| 久久综合香蕉国产国产蜜臀AV| 婷婷国产综合| 五月婷婷成人| 大香蕉五月婷婷丁香| 欧美天天草人人草| 五月丁香六月婷婷网| 嫩BBB搡BBBB榛BBBB| www,久久久| 久久怕怕视频| 九九在线热九九在线热99热| 色综合久久天天综合网| 九九热99热| 色www久视频| 综合激情伊人影视在线| 九九成人视频| 久热精品免费视频4| 国产VA播放| 亚洲啪啪视频| 男人天堂 久久| www.六月丁香看AV| 国产99久久久国产精品免费看| 亚洲在线综合| 色久丁香五| 婷婷六月偷拍| 26uuu亚洲欧美另类| 深爱激情综合| 婷婷伊人久久| 免费97碰碰| 色99视| 五月丁香在线综合| 十二区无码| 日B日潘金莲BB| 蜘蛛女免费观看完整版高清电影 | 婷婷成人视频| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 秋霞av吧| 久久视屏这里只有久久| 久久天堂网| 人人操操| 激情婷婷啪啪| 秋霞九九无码| 久久久精久人妻| 欧美大片免费播放器| 婷婷五月天播| 久久久久久久8| 精品人妻午夜一区二区三区四区| 色婷婷88| 深爱五月日韩| 91无码一起草| 婷婷激情五月天亚洲综合| 99久热| 色噜噜狠狠色综合伊人| 久久久噜噜噜久久人妻| 亚洲人妻av| 五月叮香啪| www.久久爱| 九九视频这里只有精品| 五月天色色色| 天天天天天日| AV在线免费播放| 特黄三级片| 久久最新色| 五月天伊人网| 五月丁香欧美在线| 91avse| 免费观看全黄做爰的视频| 日韩1区2区| 五月天婷婷色在线视频免费观看| 超碰av在| 色丁香婷婷| 小视频一区 | 黄色精品五月婷婷| 99精品国产乱码久久久人妻| 天天精品视频免费观看| sesesesezonghe| 成人在线免费网址| 亚洲色99| 久久五月天激情| 欧美五月丁香啪啪响视频| 久9热插入| 丁香五月伊人| 久久精热| 欧美丁香六月在线观看视频| www.久9| 国产做A爰片毛片A片美国| 婷婷五月花| 亚州视频九九99| 91精品无码| 婷婷丁香五月社区亚洲| 99热超碰| 五月综合婷婷五月| 5月婷婷6月丁香aV| 五月丁香六月激情综合| 亚洲AV影片在线观看| 99综合| 久久99网| 爱草视频在线观看| 久久五月激情综合| 成人国产网| 激情综合五月| 9久久婷婷国产综合精品性色| 五月天欧美激情| 激情综合五月| 5五月综合网亚洲| 亚洲亚洲人成综合网络| 国产99久久久| 日韩无码色色| 国产精品-91JQ就要激情网91JQ6.91JQ27.CASA:16888 | 伊人在线视频| 日韩按摩二区| 丁香六月啪啪| 成人短视频在线免费观看| 91久久精品国产91性色TV| 亚洲色综合| 激情图片五月天| 五月开心啪啪| 婷婷免费精品视频| 丁香五月最新地址| www.com在线操视频免费观看| 五月天啪啪| 亚洲AV网站| 久久久久久人妻| 色五月视频,小说| www.日日日.com| 丁香五月激情综合| 性天堂久久| 婷婷丁香91| 天堂va久久久噜噜噜久久Va|