免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

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
返回資訊列表
天天做天天爱天天摸| 色欲婷婷五月天丁香| 精品九九视频| 97精品综合久久| 人人摸人人操人人爱| 开心五月深爱激情| 激情纯色婷婷五月天在线不卡视频| 五月天婷婷基地| www.亭亭五月天| 色婷婷精品视频| 婷婷五月天网| 久99热| 丁香五月婷婷亚洲综合精品在线| 久久综合性| 99精品视频在线观看| 五月丁香久人妻中文| 亚洲五月婷天天操| 五月丁香六月婷婷中合网| 色婷婷狠狠18yy| 丁香五月婷久久| 亚洲五月色| 九九视频网| 东京热免费视频网站| 亚州美女| 激情五月综合| 欧美黑人巨大性生话| 免费啪啪亚州视频| 久草狼人| 色婷婷综合久久久久| 色婷五月天网站| 天天做天天爱天天日| 日本丁香久在线| 九九中文色色| 国内在线99视频| 国产乱子轮XXX农村| 久久538| 久操福利| 五月在线| 国产欧美日韩综合精品一区二区| 久久久久久久久久8888| 五月婷婷丁香五月| 亚洲精品久久久久久久久久飞鱼| 99激情视频| 超碰com| 五月天精品视频| 五月丁香婷婷综合网色欲| 五月天婷基地| 丁香五月综合在线| 天天婷婷色六月| 欧美综合婷婷网| 激情婷婷五月女| 婷婷午夜精品久久久| 91打屁股视频网站| 激情五月综合网最新| 丁香五月婷婷Av| 综合久久首页| 91九色在线| 亚洲色99| 国产又爽又猛又粗的视频A片| 粉嫩av懂色av蜜臀av熟妇| 丁香五月激情婷婷婷婷在线观看| 狠狠干夜夜干| 9久热| 爱久综合| A片试看120分钟做受视频红杏 | 99热天堂| 99精品在线观看视频| 亚洲日日操| 激情综合网五月激情| 人妻内射视频| 伊人大香蕉爱聚| 色婷婷综合久久| 9999热免费视频视频| 久久婷婷五月天丁香| 婷婷热色| 色色精品色| 三区激情四射av| 天天干夜夜欢| 日本操碰碰| 91色噜噜狠狠狠狠色综合| 99热碰碰热| 91成人品| 丁香啪啪中文字幕| 亚洲婷婷五月天在线激情综合网| 色操b| 五月激情综| 4438激情网| 狠狠色成人影片| 亚洲视频在线观看| 337p大胆噜噜噜噜噜91Av| 六月丁香婷婷综合色播| 99热手机在线精品| 中文毛片无遮挡高潮免费| 欧美性生交XXXXX无码小说| 丁香亭亭激情四射| 五月婷六月综合在线观看| 激情五月天色婷婷综合| 日日综合网| 成人综合网站| 久99视频| 爱婷婷都市激情| 亚洲成人在线播放| 丁香激情五月| 亚洲色婷婷五月| 97久久草草超级碰碰碰| Av免费网站在线| 婷婷久久五月丁香| 99无码黄色视频| 丁香成人五月天| 无码成人播放器| 五月丁香婷婷综合久久| 亚洲精品一二三| 在线色色| 久久婷婷五月天激情| 日本三级韩三级99久久| 六月婷久久| 手机AVAV天堂看网| 激情综合色| 青青草原伊人网| 五月丁香 久久久| 丁香婷婷五月六月久久| 日日噜噜久久婷婷五月天| 婷婷五月激情网| 五月天激情啪啪| 亚洲精品色| 丁香五月网| 久久五月天激情视频| 激情av在线| 91九色最新视频| 色5月婷婷色| 丁香五月婷婷激情123| 婷婷五月丁香综合激情| 婷婷色五月激情强奸四射| 夜夜撸天天日| 黄色av网站在线免费播放| 综合激情五月四射婷婷| 婷婷伊人网| 丁香五月婷婷99| 丁香五月天激情综合网| 丁香五月开心五月激情| 九九爱激情| 久9久成人精品视频| 婷婷五月天成人网| 99在线观看精品视频| 日本综合色色| 超级碰碰碰碰视频| 婷婷无码五月天| 欧美日韩欧美| 丁香五月成人论坛| 亚洲色五月| 99在线视频资源| 五月天天天色| 97超碰色| 深爱激情婷| 色五月激情五月| 婷婷色中文字幕| 丁香色五月天| 国产婷婷久久| 亚洲精品婷婷| 久久婷婷夜| 天天干-天天日| 99热色精品| 操B五月天| 五月激情小说| 色欲九区| 一起草av| 99er免费在线观看| 双性美人被调教到喷水A片| 亚洲操人| 五月婷婷丁香六月| 婷婷五月天免费| 免费无码毛片一区二区A片| 九九精品热| 天天综合网91| 99热福利| 日本精品人妻无码77777| 开心婷婷五月激情网小说| 另类A片| 综合一区二区三区| 99久久6| 日日爱678| 五月丁香亭亭| 2023天天日夜夜爽| av五月天婷婷丁香| www.9797国产| 玖玖国产视频一区| 一本大道伊人AV久久综合| 婷婷五月综合欧美在线播放| 亚洲激情四谢| 亚洲色五月| 六月天婷婷| 色婷婷色五月另类综合| 综合久久五| 天天草天天日| 99爱爱网| 五月综合激情网| 色五月天综合| 欧美成人日韩| 日本色婷婷| 色国产五月| 日本熟妇乱妇熟色A片蜜桃| 欧美黑人巨大猛烈cuckold| 热思思九九| 九九综合久久| 99 热国产在| www.超碰| 天天澡天天狠天天天做| 26UUU| 做爰丰满少妇1313| 99在线免费观看| 亚洲综合色色| 激情五月丁香五月综合| 色欲天天综合| 伊人午夜综合色啪| 丁香五月婷婷基地| 日韩一级淫乱片一区二区三区| 色欲资源网| 99久免费视频| 五月激情天| 丁香五月综合网亚洲综合欧美狠狠| 色五月激情图片| 超碰免费99| 久久五月视频| 丁香玖玖视频大全| 中文字幕日产A片在线看| 日日爱激情| 色色丁香五月天| 亚洲爆乳无码精品AAA片蜜桃| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 婷婷婷婷婷婷婷婷婷婷丁香| 色五月婷婷av| 人人人va亚洲视频在线| 丁香蜜臀黄色婷婷五月天| 99热个人在线| 夜夜干 夜夜操| 五月色精品| 中文资源在线a | 亚洲视频码| 六月丁香久久| 九九成人视频| 丁香五月六月欧美| 人妻自慰在线| 人人插9| 极品人妻VIDEOSSS人妻| 激情婷婷| 99视频激情四射| 色丁香综合影院| 97婷婷狠狠久久综合9色| 狠狠干综合| 涩婷婷五月天在线精品视频| 狠狠色精品综合| 日韩性视频| 丁香五月天日韩无码| 久久久免费精彩视频| 五月天婷婷在线播放免费| 丁香婷婷五月天校园春色| 大香蕉人人网| 无码一区二区三区四区五区91c| 亚洲啪视频| 久久开心五月婷婷| 婷婷五月天熟妇| 啪啪啪综合网| 成人视频一区| 色99在线视频| 色哟哟www| 日韩无码亚欧无码| 五月婷婷黄网站大全| 五月天成人免费视频| 九九视屏| 激情五月天婷婷丁香 | 丁香五月欧美色综合| 色婷婷狠狠久久综合五月| 99热精品在线| 91狠狠色丁香婷婷综合久久精品| 激情视频91| 五月婷婷先锋| 奇米色大香蕉| 色五月色五天色情网址| 婷婷五月天国产性感美女演员久久久久| 91天天操天天干天天射| 91干在线| 婷婷性爱网| 色综合另类| 五月天综合激情网| 五月人妻婷婷视频| 婷婷五月天视频免费在线观看| www.色婷婷。com| 欧美狠狠草| 欧美日韩一a.无| 色五月天丁香婷婷| 九九aV| 五月综合丁香婷婷| 久久久com| 久久色婷婷| 99视频35精品视频在线观看| 玖玖国产视频一区| 乱女乱妇熟女熟妇综合网站| 五月丁香六月婷婷亚洲激情综合| 亚洲色欲欧美一区二区三区| 99只有这里是精品| 色婷婷五月视频| 激情五月天伊人av| 天天操夜夜操| 六月婷婷色| 丁香婷婷六月| 最近中文字幕2019视频1| 国产做爰视频免费播放| 日本V在线观看不卡视频网站| 国产精产国品一二三在观看| 久久综合最新网址| 婷婷色中文| 日韩黄色网络| 深爱五月婷婷开心中文字幕| 婷婷五月天论坛| 色六月视频| 丁香成人视频| 婷婷91| 操碰97| 99精彩视频| 国产婷婷色综合AV蜜臀AV | 国产黄大片在线观看画质优化| 内射人妻视频国内| 在线sebiav精品视频| 停停六月 综合| 嫩草视频观看| 色五月婷婷久久爱| AAAA网站| 99热手机在线精品| AV色色天堂中文| 69久热| 五月婷婷偷拍| 激情五月婷婷啪啪| 九九热视频在线观看| 婷婷九月激情| 五月丁香综合色婷婷| 婷婷综合干| www.maotanji.com| 激情综合婷婷| 日韩在线观看亚洲| 国产一二区爆乳_1国产日韩一区二区三-成人AV| 97超碰,人人舔,人人操,人人摸 | 视频免费精品免费精品免费精品免费精品免费精品免费精品免费99 | 久久WW| 日日干日日| 大香蕉久久视频久久视频| 欧美啪啪五月天| 激情综合区| 五月亚洲激情| 丁香激情五月| 超碰人妻公开在线| 久久婷婷六月综合| 这里精品| 婷婷五月影院| 成人版视频在线观看| 五月天色官网| 9久精品| 亚洲中文字幕AV在线| 特级操b片| 五月丁香拍拍激情综合| www.91.com黄| 欧美三级大片AA在线看| 五月丁香WWW| 丁香六月综合激情| 色香蕉婷婷| 久9热在线视频| 五月天久久激情| 五月婷婷 欧美| 五月婷视频| 99在线精品免费视频| 天天肏天天肏天天肏| 四色 爱 婷婷 精品 亚洲 五月天| 亚洲激情97五月天| 超碰成人免费| 九久9精品| 能直接看的av网站| 99视频热99| 综合玖玖性爱免费视频| 激情爱爱网站超大免费| 色色97丁香婷婷五月天| 亚洲 在线 性爱| 超碰在线国产| 99热天堂| 人妻久久久| 五月停停大香蕉| 熟女色专区| 99视频网址| 久久丁香网| 99久久国产成人精品| 久久总和99| 久色大香蕉| 狠狠色狠狠色综合日日91| 操操啪| 日本色色网站| 丁香婷婷激情五月天无毒不卡蜜桃| 国自产拍偷拍精品啪啪一区二区| 91九色精品熟女内射| 99热在线播放| 六月丁香激情| 色情五月综合婷婷| 午夜丁香 婷婷| 丁香六月爱综合| 开心五月激情网| 99色色网| 人人摸人人搞| 激情综合青草| 天天操综合网| 婷婷深爱五月亚洲综合| 屁股翘好撅高迎合跪趴| 六月丁香婷婷天堂| 不卡的AV网站| 五月丁香花激情综合网| 青青久久五月天丁香婷婷| 极品 少妇 内射| 99无码视频| 色噜噜狠狠色综合伊人| 欧美槡BBBB槡BBB少妇| 色色色色热热| 一起草av| 新激情五月开心五月婷婷五月丁香五月| 丁香六月色婷婷| 超碰在线人人| 综合激情五月天| 爱超碰性| 青青草原精品久久| 色月丁| 国产在这里只有精品| 色婷婷精品视频在线播放| 婷婷情色激情| g00d人体西西| 91碰碰碰| 六月五月久久丁香| 色情婷婷久久五月天| 六月丁AV| 国产.亚洲.欧洲视频在线| 九九99九九99九九99视频网| 久9热| 色99视频| 久久五月激情| 色伊人啪| 色99在线| 久久婷婷六月综合| 久久五月激情| 国产精品国产成人国产三级| 久狠日av| 日韩久热| 一起草AV入口| 免费看成人747474九号视频在线观看| 91在线日本| 色综久久久| 欧亚成人A片一区二区| 五月婷婷六月奇米网丁香| 丁香五月激情综合久久| 日本久久人| 五月色婷婷在线观看| 日韩精品AV一区二区三区| 亚洲激情综合五月婷婷啪啪| 五月天丁香成人社| 蜜桃成语时李时珍 免费| 色婷婷先锋| 丁香激情五月少妇| 五月天久久久| 99精品一二三四视频| 色五月婷婷色| 99热精地址| 九九十99视频| 亚洲乱码日产精品BD| 亚洲色99| 亚洲视频在线观看99| 91久久久久| 久久婷婷色色| 91精品国产综合久久密臀| 国内久久久精品99| 熟妇内谢69XXXXXA片| 色色色成人网| 丁香五月天色| 婷婷色偷拍| 激情开心五月天| 99热这里只有精品22| 啪啪91| 97婷婷五月| 色五月大香蕉| 色综合色色| 丁香五月色色色色| 久久在线大香蕉| 婷婷五月天小说| 久鲁鲁色网| .comwww在线观看免费操| www.色五月| 五月天综合久久| 色综合天天网| AAA久久| 亚洲成人电影在线免费观看| 狠狠操狠狠爱| 91九九| www.99情趣网| www.思思99热| 婷婷欧美激情综合| 色婷婷88| 欧美色色日韩| 亚洲精级| 97在线99| 久久97| 久久精品4| 婷婷五月中文在线视频| 五月婷婷综合色啪首页| 天天做综合| 99久精品视频| 久久九九re热| 色吊操色妞| 国产AV一区二区三区最新精品| 99精品在线观看| 欧洲免费视频色| 色综合色香蕉网| 一起草av| 97婷婷色| 开心五月婷婷| 99热久| 婷婷内射视频在线| 五月天婷婷成人网| 综合久久99| 26uuu亚洲精品国产| 成人婷婷五月天| 天天操天天爱天天日| 日韩在线99| 丁香五月天激情四射网络不好| 五月激情天| 婷婷五月天视频| 另类图片五月天婷婷| 中文字幕av久久爽一区| 91人人操.COM| caop在线| 久色网| 97狠狠色| 欧美日韩成人在线| 久久欧洲久久| 涩综合在线 | 狠狠草在线观看| 国产 亚洲 在线| 激情亭亭五月| 91色综合网| 96精品久久久久久久久| 激情综合五月天| 亚洲黄色精品| 日本三级黄色大片| 99成人无码| 激情综合激情五月| 亚洲狠狠操| 五月婷婷网站| 另类小说色婷婷| 五月丁香五月婷婷| 9久久久久久久久久久| 色域五月婷婷丁香| 婷婷五月色天| 欧美成人AAA片一区国产精品| 99热国产| 久久久久久久久月丁| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 欧美激情五月天| 91九色国产熟女| 日本一级特黄大片AAAAA级| 97人人操| 五月激情啪啪| 国产麻豆视频| 久久99久久久| 伊人影音无码一区二区三区| 五月天婷婷在线啪啪视频| 午夜精品777| 免费播放99性爱视频| 99精品小视频| 五月激情六月宗合| 4438亚洲欧美| 久婷视频| 99亚洲天堂| 99热精在线九九久久保| 开心婷婷五月中文字幕组| 色色亚洲视频| 色色热| 日韩丁香涩| 色色综合院| 999婷婷综合| oumeisesewang| 无码人妻一区二区三区免费九色| 日本色视| 岛国av网站| 在线免费视频caop| 五月久久婷婷丁香| 五月丁香综合久久| 蜜桃人妻无码AV天堂三区| 色情五月婷婷| 4438全国最大视频成人网站在线观看| 色色九区| 久久久er热| 99热这里只有精品18| 91人操| 大战熟女丰满人妻AV| 九热视频精品| 丁香五月深爱五月婷婷| 丁香五月激情网| 任你日热视频| 97影院一级片| 婷婷97碰碰| 久久欧洲综合网| 五月丁香综合成人社区| 久久婷婷综| 淫水导航| 激情的五月婷婷蜜桃| 婷婷婷久久久| 天天开心AV色综合婷婷五月天| 激情五月天之六月婷婷| 欧美色频| 超碰九热| 综合激情网五月激情| www.婷婷五月| 九八Av| 婷婷九月亚洲| www.henhengan| 日日干日日| 久久9精品视频| 婷婷五月天亚洲精品| 丁香九月久久| 婷婷伊人綜合中文| 99热日本| 色色五月婷婷| 久热九九| 另类图片激情五月| 日本久久极品| 激情五月天网页| 99热这里只有精品首页| 99九九视频| 女力报到正好爱上你| 色色色综合网| 日日爱678| 天天色粽合合合合合合合| 色五月,com| 狠狠色丁香综合| 成人 在线 日韩| 亚洲成Av人片乱码色第1集| 99热这里只有精品96| 婷婷丁香五月综合| 91色久| 久久99综合网| 婷婷色偷拍| 色欲天天综合| 国产精女同一区二区三区久| 婷婷六月插屄激情| 成人精品视频99在线观看免费| 色婷婷88| 日韩一级网站| 色婷婷瘦婷婷日韩| 深爱开心激情| 国产婷婷久久| 操操操Av| 国产99久9在线| 九九热99热| 九九综合网| wwwwww.色| 99热最新国内| 色日本网| 丁香综合久久| 成人在线99| 停停五月色宗合| 色婷狠狠| 国产成人高清| 激情文学久久| 亚洲日韩国产黑丝黑丝AVAV一区二区三区| 久操福利| 操人无码| 五月婷色| 婷婷婷五月天最新综合你懂的| 激情第四色| 亚洲天天免费| 玖玖婷婷免费| 欧美成人色婷婷| se婷97| 五月婷婷片| 五月天婷婷色情| 猫咪伊人久久| 99re这里只有精品9| 大香蕉综合在线| 色人五月婷婷| 亚洲成人丁香花| 99re6久热只有精品6在线直播| 日韩精品无码AV| 久久视频婷婷| 五月丁香婷婷综合| www.婷婷五月天| 九六五月天婷婷| 碰人人97| 激情六月婷婷| 思思久久精品视频| 婷婷五月五月丁香| 六月婷婷五月丁香| 日日爱678| 人与禽A片啪啪| 天天搞天天色综合| 日韩超碰在线| 丁香五月成人| 亚洲精品国产精品乱码视99| 99碰超| 国产全是老熟女太爽了| www.99成人视频| 日本三久久| 色婷婷丁香五月| 丁香六月婷婷综合在线| 9久热在线视频精品| 99网| 五月天婷婷在线播放免费| 婷婷爱爱蜜臀天天操| 超碰在线看| 婷婷五月六月丁香综合| 久久人人九九| 色五月婷婷777| 五月天婷婷AV| WWW.桔色成人.COM入口| 99re青青草| 人妻久久久久久| 夜夜干 夜夜操| 天天综合情| 91在线看片| AV大香蕉| 丁香五月成人av| 99这里是99在线视频| 久久久久久久久久久jjjj| 五月伊人网| 久久96热| 丁香五月天导航| 色欲色香,www,com| 精品一二三区久久AAA片| 欧美综合激情丁香五月六月婷| 另类天堂| www,色综合| 做爰丰满少妇1313| 99福利导航| 99re这里只有精品在线观看| 婷婷五月丁香综合亚洲| 亚洲免费av观看| 嫩草AV久久伊人妇女超级A| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 久热精彩视频98| 精品久久99码| 99色精品| 99视频在线精品免费观看2| 九月丁香婷婷综合激情| 99久操| 日韩国产AV播放| 97色婷婷| 丁香六月色婷婷| 天天插综合网| SESE无码AV| WWW.桔色成人.COM入口| 99在线观看| 激情图片99| 五月天婷婷色综合| 性做爰A片免费视频A片直播| 激情综合网五月婷婷| 五月天社区婷婷丁香社区| 亚洲色无码| 深爱激情AV| 五月激情丁香五月| 婷婷色网站| 天天综合五月天| 99久久偷拍视频| 婷婷色色网站| 51精品国自产在线| 婷婷色婷婷| 色99色| 91丨九色丨国产打屁股| 成人免费在线电影| 色99色| 韩国激情五月天综合网| 99国产这里只有精品| 激情九九综合网| 亚色网站小视频| 婷香五月网在线| 天天激情5月天亚洲| 色播婷婷大香蕉| 香蕉国产2013| 中美日韩成人在线| 亚洲操逼片| 性欧美日本| 天天操婷婷| 97在线/亚洲| 香蕉婷婷色五月| 婷婷内射视频在线| 97干在线观看视频| 伊人激情综合网| 色色色99| 2015好吊操| 五月花综合网| 情婷婷五月天在线| 五月婷婷和六月| 天天橾日日橾夜夜橾17| 丁香激情婷婷网| 国产资源91在线| 五月激情偷拍| 五月天激情小说网| caop在线| 亚洲天天操| 九九无码| 亚洲无码影音| 激情五月天第四色| 欧美性爱一区| 无码色色色色色| 秋霞午夜理论| 色青五月天| 色婷五月天激情| 久久激情网| 久久综合干| 99久热| 无码AV免费精品一区二区三区| 少妇性按摩无码中文A片| 成人中文网| 奇米色大香蕉| w婷婷五月婷婷w| 天天日天天舔天天摸| 亚洲五月天天| 热99AV网站| 99热热这里只精品996小说| 综合色播| av一级棒av| 伊人久久大香线蕉AV最新午夜| 狠狠爱婷婷丁香| 永久无码色| 色婷婷香蕉丁丁网| 婷婷五月天美女21p| 九九香蕉网| 无码少妇高潮喷水A片免费| 激情六月日韩| 色九区| 激情综合网激情五月婷婷| 色综合久久综合| 九九热a| 色情一区二区播放| 丁香婷婷色九月| 五月天综合| 操婷婷久久| 五月丁香久久精品在线观看| 影音先锋人妻出差| 色碰碰| 202丰满熟女妇大| 狠狠色婷婷色| 99re熱| 美女妹子后射视频网站在线观看| 日本色色网站| 少妇高潮呻吟A片免费看软件| 91熟妇大香蕉| 99热只有精品在线播放| 五月五婷婷| 人人摸人人| 99天堂网最新| 亚洲人人96@| 激情图片五月天| 久青草影院| 操日本三片99| 欧美丁香六月激情视频| 激情婷婷五月| 99久久超级| 婷婷久草| 538在线精品| www.色五月| 激情性爱五月| 人人摸人人干人人做| 五月天综合视频| 久久久久久久五月| www.婷婷五月天啪啪| 亚州操操| 久久久日韩特色特黄AAAA| 五月天色导航婷婷资源婷婷| 久久激情网| 99原创自拍视频在线观看| 99在线精品视频| 五月天色婷婷网| 五月综合视频| 91九色视频| 99免费| 9久热精品在线视频| 色婷婷狠狠| 色色色婷婷| 97婷婷五月丁香| 国产成人VA| 亚洲激情网| 超碰99资源站| 婷婷五月天成人小说| 欧美性生交XXXXX无码小说| 日韩婷婷| 综合性爱网| 五月天大香蕉视频| 五月婷婷激情69| 99综合免费视频| 色九月婷婷综合| www.99热这里精品| 亚洲成人日韩无码精品| www.色婷婷。com| 六月丁香啪啪啪| 久热成人| 五月天激情久久| 99热资源在线| 99热这里只有精品青草| 天天操天天插天天射| 青草热视频这里只有精品| 99色在线| 五月婷婷激情四季| 人人干av| 丁香五月婷婷亚洲人| 97超碰人人操| 五月丁香成人| 五月婷婷啪啪啪| 色婷婷综合综合网| 久久Xx| 五夜丁香| 日韩99视频| 99丁香五月婷| 91婷色| 久久色天堂| 欧美色色色色色色色| 五月天婷婷基地综合网| 久久婷五月综合| 色婷婷777狠狠| 男人天堂99| 婷婷精品在线| 国产午夜一区二区三区| 91久久久久久久久18| 超碰人人干| 欧美性爱五月天| 亚洲色五月婷婷| 第四色色六月色综合| 五月激情视频| 婷婷五月丁香基| 久久婷婷丁香花综合网| 性天天中文网| 婷婷色一二三区波多野结衣| 欧美色婷婷| 九九热99免费视频| 超碰国产在线| 五月天天天操天天爽夜夜操| 亚洲经典三级| 九九色视频| 激情丁香久久| 亚洲不卡欧洲| 丁香五月亚洲激情婷婷射| 婷婷伊人| 天天日天天日天天搞| 伊人五月天久久| 亚洲激情婷婷| 99热99日…..| 欧美日韩婷婷五月天| 久草热视频在线观看| 狼人婷婷综合| 亚洲午夜AV| 五月激情基地| 国产免费av在线| 夜夜干夜夜操| 人妻久久久久久久久| www.com在线操视频免费观看| 婷婷五月天开心网| 亚洲永久免费| 人妻丰满精品一区二区A片| 婷婷六月花| AV无码免费| 久久久久久久人妻| 毛片色五月| 九九综合| 免费黄网不卡AV| 九九热免费视频| 欧美五月丁香在线| 婷婷香蕉香| 天天摸天天肏| 国产探花AV在线| 超碰无码318604| 狠狠综合网| 26uuu亚洲精品国产| 欧洲综合视频| 婷婷五月天免费99| 亚洲五月天婷婷| 亚洲 小说 欧美 激情 另类| 九九色院| 麻豆WWWCOM内射软件| 色爱综合网| 综合狠狠五月婷婷| 99久久玖玖| 国产XXXX搡XXXXX搡麻豆 | 国产一区二区三区影院| 99热色精品| 欧美激情丁香五月天久久婷婷一区| 99热每日| 97干在线| 热的无码综合视频| 操97| 激情丁香五月| 五月天桃色深爱网| 色婷婷a三区麻| 色碰干| 99在线资源视频| 婷婷五月色| 婷婷五月天综合中文| 怡红院 久久| 国产性爱色| 六月婷婷综合| 婷婷五月天天爽| 天堂婷婷丁香六月网| 欧美综合五月丁香六月婷| www.99精品日操伊人乱碰在线| 九九碰九九爱97超| 开心五月婷婷99| 亚洲午夜精品久久久久久人妖| 婷婷五月丁香五月基地| 丁香五月天电影| 婷婷五月花| 99热综合在线观看| 五月婷婷在线丁香| 日本WWW九九九| 日本无码专区| 99在线免费观看| 人人干99| 丁香五月激情鲁| 草操网| 六月婷婷激情| 97丁香视频| 九九操屄| 丰满少妇猛烈A片免费看观看| 天天干夜晚夜操| 天天擼久久擼在线| 天天人人天天爽| 日韩精品999| 99视频在线观看视频| 99热人人艹| 国产亚洲在线| 五月激情六月宗合| 91碰| 26uuu日韩| 婷婷色5月激情网| 99热日本| 婷婷五月天伊人在线| 丁香五月自拍| 99热这里都是精品| 麻豆精品| 99久久亚洲国产| 精品九九久久| 麻豆AV一区二区三区| 开心五月激情网| 久热 91| 综合网亚洲| 99爱这里只有精品免费视频| 夜夜撸日日骑| 久久机热这里只有| 99热在线中文字幕| 五月婷婷五月天天| 熟女激情网| 琪琪秋霞| 婷婷另类开心| 久这里只有精品99| 99er这里只有精品视频| 五月婷婷六月丁香免费| 丁香五月日韩| 婷婷久久亚洲| 成人噜噜网| 五月天激情影院| 九月丁香| 婷婷四月 成人 狠狠干| 九九伊人网| 开心六月丁香五月婷婷| 五月丁香色婷婷婷基地| 99热最新网址| 久久婷婷伊人| 亚洲VA欧美VA| 亭亭丁香aV| www.婷婷网| 五月色情网| eeuus五月婷| 精热在线综合网| 色宗合,宗合网| 天天干天天 亚洲| 精品色色网| 99免费视频在线观看爱| 五月激情小说网| 色 色 色综合com| 久色| 五月天精品视频| 人妻久久久久久久 | 97色操| 91热在线| 色情综合网| 久久99网| 色视频色综合91| 91干99| 五月婷婷激情综合| 99精品无码| 四色永久成人网站| 色播五月天激情| 亚洲乱码日产精品BD| 色色色com| 久久五月婷综合网| 婷婷中文字幕在线| 久9视频| www.夜夜操.con| 六月丁香深深爱| 五月婷婷中文| 久久色五月| 综合久久影院| 丁香五月影院| 人妻Av在线| 色欲久久久久久综合网综合网| 久久婷网| 激情综合网五月天天| 丁香五月23111| 日本va欧美va欧美精品88| 九九热精品| 少妇人妻偷人精品无码视频新浪| 国产精品第一国产精品| 丁香久月| 、激情六月天| 夜夜综合色| 婷婷久久丁香五月| 中文字幕欧美日韩VA免费视频| 秋霞免费视频| 99操不停| 免费九九热| 五月婷婷婷婷婷婷艺术| 成人va在线播放| 人妻AV在线| 99re久热| 天天五月香欧美| 五月丁香狠狠| 深爱五月激情| 婷婷丁香红五月91C| 久久香蕉丁香| 人妻久久久久久久久| 婷婷五月天福利| 国产精品久久久久久亚洲毛片| 99热九九九九| 五夜婷婷| 五月婷婷天| 久久国产色| 丁香熟女乱| 狠狠五月激情在线| 婷婷五月天视频| 五月丁香在线| 九一九九黄色| 色婷婷丁香五月天在线视频 | www,setingting| 97操在线视频| 极品人妻videosss人妻| 五月天堂色| 日本色99网站| 3pAV| 九九亚洲| 男人操女人高潮91视频| 五月 成人 婷婷| 亚洲激情五月婷婷日日| 成人五月丁香社区| 久久婷婷一级片| 做爱夜夜干天天操| 日本色五月| 午夜AV网| 婷婷五月综合色中文字幕| 日韩在线一级| 5月丁香综合图区| 婷婷丁香在线| 99国产精品久久久久久久久久久| 亚洲精品视频在线播放| 久碰婷婷视频| 久久这里有精品视频| 亚洲V国产V欧美V久久久久久| 五月天婷婷色色网| 色婷婷九月综合| 婷婷丁香六月| 日韩99视频| 亚洲操B| 影音先锋91网站在线观看| 久久视屏这里只有久久| 天天日夜夜爽| 久热这里| 黄网在线免费观看| 五月丁香久久| 99久久超级| 婷婷久久免费看| 色激情五月天| 九热电影av| 久热只有这里精品| 日本乱子人伦在线视频| 色婷婷五月天av在线| 婷婷五月天影院| 99久久国产综合精品五月天喷水\| 无码四色色色| 婷婷五月天丁香| 色五月婷婷操逼| 五月六月丁香激情| 色黄啪啪| 五月婷婷天| 欧美日韩成人h| 色五月天成人在线| 国产AV一区二区三区最新精品| 狠狠看狠狠| 五月丁香黄色视频| 五月丁香啪综合| 青青草tp| 九九五月天| 4399亚洲视频| 日韩欧美一道四区中文字幕| 六月丁香五月婷婷| 在线免费观看激情视频| 区区欧美你爱| 色婷插| 天天干狠狠艹| j五月香在线| 日日射天天射| 日韩中文字幕| 99热这里只有精品2024| 性爱激情五月| 99热这里只是精品| 久久性爱网| 欧美激情综合色综合| 九九九九中文字幕| www.99热视频| 久草九九| 久久久久亚洲AV成人无码电影| 天天综合五月| 亚洲性爱电影| 五月丁香大相交| 成人精品在线观看| 包操45分钟网站| 国产精品一区在线观看你懂的| 夜夜骑日日夜夜| 天天干夜夜谢| 99人人干人人| 九九综合久久| 色婷婷手机在线| 九九热精品在线| 天天噜天天爱| 亚洲一二三网| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 日本nghangse中文字幕| 婷婷六月丁| 99热日韩| 精品一二三区久久AAA片| 色情丁香五月天| 激情98色婷婷五| 99热精品在线在线| 涩五月婷婷| 丁香五月大香蕉| 婷婷五月丁香色情| 亚洲国产网站| 狠狠色丁香| 六月丁香基地| 亚洲成av人影院| 色五月丁香网| 99啪啪视频| 色色com| 亚洲五月综合色播| 色丁香五月婷婷综合久久| 99激情在线| 91啪级电影| xxxx五月天色色| 国产综合色婷婷精品久久| 6月丁香婷婷激情| 国产探花一片区| 成人av在线网址| 天天做天天爱天天爽在| 九九精品9| 人人97碰| 三十路磁力链接| 丁香五月九九| 激情伊人五月天| 26uuu欧美激情另类| 天堂A∨在线| 久久婷婷五月综合网|