久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

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

C++貪吃蛇游戲編程入門(mén):從零實(shí)現(xiàn)控制臺(tái)版 1. 為什么貪吃蛇是C入門(mén)游戲編程的最佳練手項(xiàng)目很多人學(xué)完C的基礎(chǔ)語(yǔ)法之后都會(huì)卡在一個(gè)尷尬的階段語(yǔ)法書(shū)翻完了循環(huán)、數(shù)組、函數(shù)、類(lèi)都認(rèn)識(shí)但讓自己從零寫(xiě)一個(gè)能跑起來(lái)的東西腦子里一片空白。這個(gè)階段最需要的不是繼續(xù)啃更厚的書(shū)而是找一個(gè)規(guī)模適中、邏輯閉環(huán)、能立刻看到畫(huà)面反饋的小項(xiàng)目來(lái)練手。貪吃蛇就是這樣一個(gè)幾乎完美的選擇。我見(jiàn)過(guò)太多初學(xué)者一上來(lái)就想做五子棋、俄羅斯方塊甚至RPG小游戲結(jié)果卡在圖形界面或者復(fù)雜的碰撞邏輯上三天就放棄了。貪吃蛇的好處在于它的核心邏輯用一維數(shù)組或者二維數(shù)組就能描述清楚不需要任何圖形庫(kù)也能在控制臺(tái)里跑起來(lái)而且它的游戲循環(huán)、狀態(tài)更新、輸入處理這套骨架和后面做任何游戲都是相通的。你把這一個(gè)項(xiàng)目吃透等于把游戲編程最基礎(chǔ)的思維方式建立起來(lái)了。這篇文章我會(huì)帶你從零開(kāi)始用C寫(xiě)一個(gè)能在控制臺(tái)運(yùn)行的貪吃蛇。不依賴(lài)任何第三方圖形庫(kù)純標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)Windows和Linux都能編譯。我會(huì)把每一步的設(shè)計(jì)理由講清楚包括為什么用數(shù)組而不是鏈表、為什么用Sleep控制幀率、蛇身移動(dòng)的坐標(biāo)更新為什么要從尾到頭遍歷。這些細(xì)節(jié)才是真正決定你能不能獨(dú)立寫(xiě)出第二個(gè)、第三個(gè)游戲的關(guān)鍵。適合誰(shuí)看學(xué)過(guò)C基礎(chǔ)語(yǔ)法變量、循環(huán)、數(shù)組、函數(shù)、結(jié)構(gòu)體或類(lèi)但沒(méi)做過(guò)完整項(xiàng)目的朋友。如果你連for循環(huán)和數(shù)組下標(biāo)都還不熟建議先把這些補(bǔ)上再回來(lái)。整篇內(nèi)容我會(huì)盡量用大白話(huà)解釋代碼給全注釋給足你照著敲一遍就能跑。2. 動(dòng)手之前先把游戲循環(huán)這件事想明白2.1 游戲本質(zhì)上就是一個(gè)死循環(huán)初學(xué)者最容易忽略的一個(gè)概念是游戲程序的核心結(jié)構(gòu)就是一個(gè)不停轉(zhuǎn)的循環(huán)。你看到的每一幀畫(huà)面、每一次蛇的移動(dòng)、每一個(gè)按鍵的響應(yīng)都是這個(gè)循環(huán)轉(zhuǎn)一圈的結(jié)果。這個(gè)循環(huán)通常叫游戲主循環(huán)Game Loop它的基本節(jié)奏是這樣的處理玩家輸入有沒(méi)有按鍵更新游戲狀態(tài)蛇往哪走、吃到食物沒(méi)有、撞墻沒(méi)有渲染畫(huà)面把當(dāng)前狀態(tài)畫(huà)到屏幕上等待一小段時(shí)間控制游戲速度回到第1步貪吃蛇也不例外。你只要把這個(gè)循環(huán)搭起來(lái)剩下的就是往每個(gè)環(huán)節(jié)里填邏輯。很多人寫(xiě)游戲?qū)懖幌氯ゾ褪且驗(yàn)槟X子里沒(méi)有這個(gè)循環(huán)的框架東寫(xiě)一塊西寫(xiě)一塊最后邏輯全亂。2.2 控制臺(tái)游戲?yàn)槭裁催€需要渲染有人會(huì)問(wèn)控制臺(tái)不就是cout輸出文字嗎哪來(lái)的渲染其實(shí)控制臺(tái)游戲一樣需要渲染只不過(guò)渲染的方式是清屏重畫(huà)。每一幀我們都把整個(gè)游戲畫(huà)面重新打印一遍然后清掉上一幀的內(nèi)容視覺(jué)上就形成了動(dòng)畫(huà)效果。在Windows下可以用system(cls)清屏Linux下用system(clear)。但system調(diào)用開(kāi)銷(xiāo)比較大畫(huà)面會(huì)閃。更優(yōu)雅的做法是用ANSI轉(zhuǎn)義序列把光標(biāo)移回左上角然后覆蓋重畫(huà)這樣幾乎不閃。不過(guò)為了代碼的跨平臺(tái)和簡(jiǎn)單入門(mén)階段用system(cls)完全夠用等你熟練了再優(yōu)化。2.3 幀率控制為什么不能讓它全速跑如果你不加任何延時(shí)游戲循環(huán)會(huì)以CPU能跑的最快速度瘋狂轉(zhuǎn)圈蛇會(huì)瞬間飛出去撞墻玩家根本來(lái)不及反應(yīng)。所以必須有一個(gè)節(jié)拍器來(lái)控制游戲速度。最簡(jiǎn)單的方式是調(diào)用Sleep函數(shù)Windows下是Sleep(毫秒)Linux下是usleep(微秒)。這里有個(gè)經(jīng)驗(yàn)值貪吃蛇的每幀間隔設(shè)在100到200毫秒之間比較舒服。太快了反應(yīng)不過(guò)來(lái)太慢了蛇像蝸牛。我一般用150毫秒起步隨著分?jǐn)?shù)增加逐漸減小間隔來(lái)提升難度這就是所謂的動(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ě)一次以后所有項(xiàng)目都能復(fù)用。注意Linux的usleep參數(shù)是微秒所以要乘1000。3. 數(shù)據(jù)結(jié)構(gòu)選型蛇身到底該用什么存3.1 數(shù)組方案和鏈表方案的取舍蛇身本質(zhì)上是一串有序的坐標(biāo)點(diǎn)。存這串坐標(biāo)最直覺(jué)的兩種選擇是數(shù)組和鏈表。很多教程一上來(lái)就用鏈表理由是蛇頭插入、蛇尾刪除鏈表是O(1)。這話(huà)理論上沒(méi)錯(cuò)但對(duì)初學(xué)者來(lái)說(shuō)鏈表方案有幾個(gè)坑需要手寫(xiě)節(jié)點(diǎn)結(jié)構(gòu)體和指針操作容易出內(nèi)存泄漏調(diào)試的時(shí)候沒(méi)法直接print整個(gè)蛇身得遍歷代碼量翻倍邏輯復(fù)雜度上升而數(shù)組方案呢蛇的最大長(zhǎng)度是有限的受地圖大小限制我們完全可以用一個(gè)固定大小的數(shù)組來(lái)存蛇身坐標(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)形緩沖。我的建議是入門(mén)階段用數(shù)組等你能熟練寫(xiě)出數(shù)組版本之后再自己改寫(xiě)成鏈表版本作為進(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)目里最容易寫(xiě)錯(cuò)的一個(gè)點(diǎn)我必須重點(diǎn)講。蛇移動(dòng)的時(shí)候你不能簡(jiǎn)單地讓每一節(jié)都往前挪一格因?yàn)槟菢訒?huì)互相覆蓋。正確的做法是從尾巴開(kāi)始每一節(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è)問(wèn)題因?yàn)槊恳还?jié)讀取的前一節(jié)都還沒(méi)被修改。這個(gè)細(xì)節(jié)我在第一次寫(xiě)的時(shí)候踩過(guò)坑蛇會(huì)莫名其妙變成一坨排查了半天才反應(yīng)過(guò)來(lái)是遍歷順序的問(wèn)題。你如果自己寫(xiě)一定要記住這個(gè)順序。4. 地圖、食物與碰撞檢測(cè)的完整實(shí)現(xiàn)4.1 地圖邊界怎么畫(huà)控制臺(tái)地圖最簡(jiǎn)單的畫(huà)法是用字符拼一個(gè)矩形框。比如20列寬、15行高四周用#圍起來(lái)中間是空格。每次渲染的時(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)位置畫(huà)蛇、食物或空格 } 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è)要處理三種情況缺一不可碰撞類(lèi)型判斷條件處理方式撞墻蛇頭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é)開(kāi)始檢查 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é)丟掉通過(guò)坐標(biāo)覆蓋實(shí)現(xiàn)吃到食物時(shí)就不丟這樣蛇自然就長(zhǎng)了一節(jié)。具體實(shí)現(xiàn)上可以在移動(dòng)邏輯里加一個(gè)判斷如果這一幀吃到了食物就跳過(guò)尾巴的更新同時(shí)snakeLength。但要注意數(shù)組越界snakeLength不能超過(guò)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)槲覀儧](méi)有更新它。視覺(jué)上看起來(lái)就是蛇尾長(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)潔我建議入門(mé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è)判斷看起來(lái)簡(jiǎn)單但如果你忘了寫(xiě)玩家一按反向鍵就死體驗(yàn)極差。我見(jiàn)過(guò)不少新手版本都有這個(gè)問(wèn)題。5.3 輸入緩沖和按鍵丟失控制臺(tái)輸入還有個(gè)坑如果你用cin input它是阻塞的游戲循環(huán)會(huì)卡在等待輸入上蛇就不動(dòng)了。所以必須用非阻塞的方式檢測(cè)按鍵。Windows下_kbhit()配合_getch()是標(biāo)準(zhǔn)做法。Linux下需要自己封裝稍微麻煩一點(diǎn)。另一個(gè)問(wèn)題是按鍵緩沖。如果玩家快速按了好幾個(gè)方向鍵這些按鍵會(huì)排隊(duì)游戲會(huì)依次處理可能導(dǎo)致蛇走出奇怪的路徑。解決辦法是每幀只處理一個(gè)按鍵或者干脆清空緩沖區(qū)只取最后一個(gè)。入門(mén)階段每幀處理一個(gè)就夠了。6. 把代碼組裝起來(lái)完整可運(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è)中容易遇到的問(wèn)題問(wèn)題一畫(huà)面閃爍嚴(yán)重。這是system(cls)的通病。解決辦法是用ANSI轉(zhuǎn)義序列\(zhòng)033[H把光標(biāo)移回左上角然后逐行覆蓋。但Windows老版本控制臺(tái)默認(rèn)不支持ANSI需要先調(diào)用SetConsoleMode開(kāi)啟虛擬終端處理。入門(mén)階段忍一忍或者用雙緩沖先拼好整個(gè)畫(huà)面字符串再一次性輸出。問(wèn)題二蛇移動(dòng)速度不均勻。因?yàn)镾leep只是大致延時(shí)實(shí)際幀間隔會(huì)有波動(dòng)。如果追求精確可以用chrono庫(kù)計(jì)算實(shí)際經(jīng)過(guò)的時(shí)間做固定時(shí)間步長(zhǎng)更新。但對(duì)貪吃蛇來(lái)說(shuō)沒(méi)必要Sleep夠用。問(wèn)題三Linux下按鍵讀取有問(wèn)題。上面的Linux代碼每次調(diào)用handleInput都會(huì)修改終端屬性效率很低。更好的做法是在main開(kāi)始時(shí)設(shè)置一次結(jié)束時(shí)恢復(fù)。我這里為了代碼緊湊才這么寫(xiě)你實(shí)際項(xiàng)目里應(yīng)該優(yōu)化。問(wèn)題四食物生成死循環(huán)。如果蛇長(zhǎng)得幾乎填滿(mǎn)地圖while(!valid)可能轉(zhuǎn)很久。解決辦法是維護(hù)一個(gè)空格列表或者當(dāng)蛇長(zhǎng)超過(guò)地圖一半時(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é)束把最高分寫(xiě)到一個(gè)文本文件里下次啟動(dòng)讀出來(lái)顯示。這是最簡(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)閉后還能保留的感覺(jué)是邁向更復(fù)雜項(xiàng)目的必經(jīng)一步。7.3 用類(lèi)重構(gòu)把游戲封裝成一個(gè)對(duì)象上面的代碼全是全局變量和自由函數(shù)規(guī)模小的時(shí)候沒(méi)問(wèn)題但一旦要擴(kuò)展比如加暫停、加菜單、加多種模式全局變量就會(huì)變成災(zāi)難。這時(shí)候應(yīng)該用類(lèi)把游戲狀態(tài)封裝起來(lá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)在類(lèi)里面外面看到的接口干干凈凈。我強(qiáng)烈建議你在跑通數(shù)組版本之后親手做一次這個(gè)重構(gòu)收獲會(huì)非常大。7.4 用鏈表替代數(shù)組進(jìn)階練習(xí)等你對(duì)類(lèi)版本也熟練了可以嘗試把蛇身從數(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è)問(wèn)題用不同數(shù)據(jù)結(jié)構(gòu)解決的思維差異。做完之后你對(duì)數(shù)據(jù)結(jié)構(gòu)的理解會(huì)上一個(gè)臺(tái)階。8. 我在教別人寫(xiě)貪吃蛇時(shí)總結(jié)的幾條經(jīng)驗(yàn)帶過(guò)幾個(gè)朋友入門(mén)之后我發(fā)現(xiàn)大家踩的坑高度集中這里統(tǒng)一說(shuō)一下。第一不要一上來(lái)就追求圖形界面。很多人覺(jué)得控制臺(tái)太丑非要用EasyX或者SDL。結(jié)果光配置環(huán)境就花了兩天游戲邏輯一行沒(méi)寫(xiě)熱情先耗光了??刂婆_(tái)版本雖然樸素但它讓你專(zhuān)注在邏輯上這才是入門(mén)階段最該練的。等你控制臺(tái)版本寫(xiě)得滾瓜爛熟換圖形庫(kù)只是換個(gè)渲染函數(shù)的事。第二先把偽代碼寫(xiě)出來(lái)再敲鍵盤(pán)。我見(jiàn)過(guò)太多人打開(kāi)IDE就開(kāi)始寫(xiě)寫(xiě)到一半發(fā)現(xiàn)邏輯不對(duì)刪了重來(lái)。正確做法是先在紙上或者注釋里把游戲循環(huán)、移動(dòng)邏輯、碰撞檢測(cè)的步驟寫(xiě)清楚確認(rèn)沒(méi)問(wèn)題了再翻譯成代碼。這個(gè)習(xí)慣能幫你省下大量調(diào)試時(shí)間。第三善用調(diào)試輸出。蛇的坐標(biāo)、方向、長(zhǎng)度這些關(guān)鍵變量在開(kāi)發(fā)階段可以每幀打印出來(lái)看。別嫌亂等你確認(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í)刻突然冒出來(lái)讓你措手不及。養(yǎng)成寫(xiě)完一個(gè)功能就想想邊界的習(xí)慣受益終身。第五代碼風(fēng)格從第一天就注意。變量命名要有意義snakeLength而不是n函數(shù)職責(zé)要單一draw就只管畫(huà)別在里面改狀態(tài)常量用const而不是魔法數(shù)字。這些習(xí)慣在項(xiàng)目小的時(shí)候看不出差別但項(xiàng)目一大就是天壤之別。最后說(shuō)一句貪吃蛇這個(gè)項(xiàng)目真正的價(jià)值不在于游戲本身而在于它逼著你把C的數(shù)組、循環(huán)、函數(shù)、結(jié)構(gòu)體、輸入輸出這些基礎(chǔ)知識(shí)串起來(lái)用一遍。你寫(xiě)完這個(gè)項(xiàng)目再回頭看那些語(yǔ)法書(shū)會(huì)發(fā)現(xiàn)以前覺(jué)得抽象的概念突然都具體了。這就是項(xiàng)目驅(qū)動(dòng)學(xué)習(xí)的威力。寫(xiě)完控制臺(tái)版本之后你可以試著加個(gè)開(kāi)始菜單、加個(gè)暫停功能、加個(gè)排行榜每一個(gè)小擴(kuò)展都是一次真實(shí)的工程練習(xí)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
风流老熟女一区二区三区l| 天堂亚洲精品久久老牛| 久久久久久亚洲中文| 午夜久久久| 韩国轻伦国内自拍一区| 国产动漫操逼视频| 啪一啪免费视频| 一二三区操逼国产91| 久久久久久久久国产| 久久手机视直播| 精品国产久热在线观看| 国产极品精品美女视频| 无码操逼视频一下| 97超碰人人操人人操| 国产嫩草精品A88AV| 亚洲综合骚逼| 影音综合网| 男人兔费天堂| 一区二区偷拍拍视频| 国产精品午夜高潮呻吟久久av| 国产亚洲色婷婷久久99精品91 - 百度| 亚洲黄色网址| 欧美色日本| 亚洲欧美色综合| 成人综合色网| 夜夜爽爽爽| 亚洲五月婷婷| 婷婷亚洲天堂| 日韩丝袜人妻AV| 床上啊啊啊一区二区三区| 91站街按摩店老熟女熟女| 日韩 欧美 另类 人妻| 久久久久久人妻一区精品色欧美| 亚洲小电影免费涩涩成人在线高清 | 久操网在线| 日韩美脚一区二区网站| 99久久com免费视频′| 丁香五月电影| 日韩精品一二三四| 精品久一区免费| 欧美三级免费伊人| 蜜桃一区二区三区| 国产精品3| 后入式999| 丰满人妻一区二区三区蜜桃视频| 一区二区三| 大香蕉中文在线| 色爱天堂| 午夜男女爽爽大片免费观看| 国产亚洲精品美女久久久m| 在线观看日韩av不卡| 国产无套粉嫩白浆在| 91精品国产麻豆国产自产在| 99热久| 91亚洲黑人| 青娱乐 成人娱乐在线| 丝袜视频一区二区在线播放国产中文| 亚洲色情在线影视| 91爱啪| 成人小说另类在线| 国产精品69人妻无码久久久| 国产成人久久久精品免费AV| 少妇 综合| 国产九区| 欧美日韩中文字幕人妻| 久久草草亚洲蜜桃臀| 亚洲国产欧美另类自拍| 欧美亚洲丝袜人妻制服99| 大香蕉在线视频15| 91黑人狂躁丰满熟妇| www.亚洲成人一区| 久热91| 麻豆人妻少妇在线免费观看| 91亚洲丝袜熟女| 少妇久久久| 再深点灬舒服灬太大了添视频| 爱射综合| 操淫穴亚洲五月丁香| 国产精选视频| 国产极品精品美女视频| 五月丁香啪啪啪| 久久久久国产| 91欧洲国产成人久久精品网站| 中文字幕91页| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 亚洲999综合| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 久久啊哟| 色97国产69香蕉| 麻豆久久一区二区三区| 免费看日产一区二区三区| 天天操女人| 日本 情色 1区2区3区| 好色综合| 五月丁香| 96精品久久久| 亚洲最大无码中文字幕网站| 黄资源| 搡老女人老熟女91老熟女综合网| 十八禁的黄污污免费网站| 亚洲精品丝袜-不卡成人免费……| 性爱欧美五月| 亚洲成人日韩小说| 最新av在线| 欧美日韩啪啪电影| 成人开心网在线视频| 欧美日韩另类在线播放| 日欧毛片久久| 国产麻豆福利av在线播放| 97色论| 精品人妻一区二区三区四区石在线 | 熟妇的味道HD中文字幕| 欧美最婬乱婬爆婬性视频| 老熟女综合网| 五月色网| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 欧洲熟妇xxXx欧美老妇裸体| 亚洲污污网站| 亚洲天堂AV在线播放| 人人污日韩一区二区| 天天综合网在线91| 欧美老熟另类| 色色色日本| 亚洲淫乱骚妇AV| 思思热在线视频免费| 禁止观看美女黄| 91综合色噜噜| 青青草啪啪网| 一区二区三区机械有限公司| 亚洲一区日韩精品中文字幕 | 色逼综合| 国产第二页| 亚洲欧洲综合成人av一区| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 亚州欧美在线| 啊啊啊不要啊啊受不了了视频在线| 日本不卡一区二区| 亚洲成人精品久久久| 国产精品爱欲| 日韩无码服务区| 亚洲操操| 色色色色日本| 久久精品久| 色眯眯射| 久久久精品日本一道| 少妇久久久| 色超碰综合| 在线观看中文av字幕| 国产精品久久久亚洲第一牛牛_在线观看 | 日本熟女不卡视频| 九九九九免费视频| 青娱乐 成人娱乐在线| 国产辣妈在线视频福利| 欧亚日韩综合精品国产| 91neishe| 久久亚洲AV成人精品无码| 我要色综合网站| 日本一二三高清| 99久久久er直播网址| 久久久精品,3| 白丝少妇一区二区| www99热| 欧美一级黄色免费专区| 91精品国| 青青操视频在线| 嗯嗯啊在线视频| 国产精品熟女九色九色蜜臀| 日韩小电影| 视频二区熟女人妻| 桃色六月天| 噜噜噜无码AV一级一级久久影院| 国产精品露脸在线观看| 久久专区| 91 偷| 免费亚洲国产精品久久一区| 98福利在线视频| 欧美日韩超碰在线| 九九色图| 91精品国产高清久久久久久,亚洲成人 | 色大师网站www永久网站视频| 天天日天天搞天天干| 97综合激情| 亚洲综合性网址| 中文字幕 一区二区 亚洲无码| 粉嫩粉嫩一区性色AV片| 亚洲欧洲av影音| 欧美色九九| 青青青草伊人精品| 亚洲男人天堂2013| 久久是精品| 天天看片麻豆| 狠狠躁天天躁日日躁| 青青草原狼av| 亚洲另类综合欧美| 91jk色拍| 91天天综合网,天天综合网| 96精品在线| 乱日视频| 日韩三级在线观看mp4| 欧美熟爽综合| 91爽啪| 99在线精品视频| 中文字幕日本久久| av在线资源| 色一色综合网| 大香蕉五月天| 人妻精品综合中文字幕在线 | 欧美人妻一区二区| 久久人| 97美日韩视频| 欧美色999| 91色图| 国产强奸乱伦欧美| 日本东京热久久久电影| 国产精品久久久久中文字幕| 免费一级欧美片片线观看| 日韩,欧美,中文在线| 特级毛片特黄久久免费看| 欧美少妇人妻| 欧美性暴力猛交XXXX | 91精品国产91久久福利| 成人精品久久久午夜福利| а√天堂资源官网在线资源| 综合影视国产无码| 性色一线| 欧美一区二区成人一卡| 91在线一起| 人妻一区二区三区熟女| 日本性爱不卡视频| 尹人大香蕉视频在线| 亚洲天堂东京热| 少妇人妻精品| 蜜桃午夜视频一区二区| 亚洲 暴爽 AV人人爽日日碰| 日本日皮视频逼| 午夜大香蕉| 亚洲AV乱码专区国产噜噜亚洲| 欧美亚洲20p| 动漫av中文| 久久久性少妇| 欧美一二三级精品在线| 蜜乳AV色欲AVAV无码| 丁香五月影院| 青操影院| 一二三区操逼国产91| 尤物黄色在线观看网站| 亚洲最大91网| 91黑丝操| www.亚洲成人一区| 日本91白丝| 91性| 国产性久久久| 一区中文字幕二区日韩| 97视频播放| 中国一级操逼视频| 久久精品国产精品亚洲艾通辽熟妇 | 日韩 欧美 另类 人妻| 五月丁香啪啪网| 91精品国久久久久久无码| 日韩av电影网站| 久草午夜| 综合色啪| 久久后入制服| 岛国大片在线观看网站入口| 97亚洲国产影视| 蜜桃臀一区二区三区久久| 中文一区二区三区影院| 五月丁香六月| 97超碰欧美中文字幕| 波多野42部无码喷潮在线观看| 五月丁香激情综合网| 亚洲一区二区 麻豆传媒| 91性色| 成人黑料社久久| 久草精品一区| 欧美性爱免费短视频| 国产一区二区三区中文字幕| 大逼色网站| 性色av网站| 10000部十八禁看电影| 免费一二区| 五月综合久久| 中文字幕第2页| 97最新在线播放视频| 亚洲欧美在线综合| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 天天日天天色| JuliaAnnXXX888| 丰满人妻大屁一区二区| 亚州五月| 熟女人妻一区二区三区| 夜夜爽夜夜摸夜夜操免费视频| 性暴力欧美猛交在线直播| 96AV久久久| 亚洲欧美天堂| 麻豆性爱视频在线播放| 另类小说综合网| 东京成人一区| 欧美黄片欧美黄片xxx| 91AV天美在线视频| 综合久久婷婷| 天天综合中文字幕 91| 婷婷五月天色| 天天看夜夜看日日干| 综合网~91综合网| 四虎影视永久在线免费| 欧美肥臀在线| 欧美日韩丝袜| 国产精品毛片?v一区二区三区| 亚91亚洲网| 在线观看成人性爱免费小视频| 青草香蕉网| 97人人操人人摸人人爱| 亚洲男人天堂网站| 免费农村成人少妇人妻Aa一区二区视频 | 综合97久久| 中国乱伦一区二区| 手机在线大香蕉| 99啪| 日本理论在线| 天天视频网站黄| 亚洲日韩欧美一区二区| 好吊妞转入那个网| 操操逼视频| 欧美亚洲清纯| 这里是精品| 自拍视频一区在线观看| 国产精品伦理| 91爱看| 国产激情综合五月久久| 亚洲国产欧美一区二区潘金莲| 老女人老91妇女老热女| 五月天婷婷影院| 人人爱人人乐人人操| 中文字幕一区二区三四五区日日骚| 国产综合操逼高清| 国产h片在线观看视频| 97国产精品在线观看| 人人操天天爽| 久久色人体 | 中国黄色特级精品一区二区三区片| 岛国成人av在线播放网址| 欧美亚洲激情| 91欧美网| 99热婷婷一区二区三| 性性久久| 婷婷色香| 日本色婷婷| 亚洲国产奇米影视久久| 国产女同在线观看视频| 美女高潮国产高清| 国产精品夜夜夜| 久久神马影院| 又大又黄国产| 天天干天天做| 久久 久久国内精品亚洲| 久久人人爽爽人人爽人人片αV| 亚洲日本大香蕉1| 五月丁香啪| 久久久精品无码亚免费| 亚洲激情综合另类男同| 蜜臀久久99精品久久久电影| 男人的天堂com| 九九免费影片| 超碰在线1234区| 久操操| 国产欧美伊人| 亚洲综合另类| 综合色播| 久操精品网| AV不卡在线| 久久久久久电影| 欧美十八禁视频| 人妻AV在线| 欧美三级中文字幕hd| 家庭乱伦国产| 少妇一区二区三区高速| 国产欧美日本亚洲精品| 久久久久亚洲三级电影| 18禁无码永久免费无限制| 九九九九热| 亚洲一级黄色毛片| 免费αV在线视频| a片 xxxx受爽视频| 老司机福利青青草| 国产精品直播在线观看直播| 国产91亚洲精品一区二区三区| 亚洲男人电影天堂| 一区AV| 国产中文字幕在线点播| 日本性爱网址| 欧美图片偷拍| 国产熟妇一区二区| 新视频sss国产| 91 亚洲情侣偷拍 久久| 久肏视频字幕| 91色拍| 亚洲影院无码在线| 欧美另类综合久久| 欧美精品日韩一区二区| 一牛影视久久久一区二区三区| 天操天操夜操夜月操月年年操 | 国产熟妇 码视频户外直播 | 91xingse| 九九热在线精品视频| 亚洲精品不卡一二三区| 风间由美日韩欧美久久| 天堂无码| 另类一区| 久久久999网站| 久久九精品| www.成人无码| 五十路六十路七十路熟婆| 殴美在线AⅤ| 日本天天操| 国产精品亚洲四五区在线观看| 97国产伦理| 变态综合色| 东京热视频网| 五月丁香婷婷色| 中文字幕55555| 国产女主播视频在线观看| 神马久久午夜| 亚洲精品日日夜夜52| 国产欧美伊人| 韩日自拍| 国产精品成人久久一区二区三区| 激情五月天网| 2017天天透天天通天天擦| 国产精品一区二区三区四区五区| AA特级绝黄| 亚洲欧美九九九| 久久精品无码不卡| 2017人人操,人人摸| 国内毛片无码一级毛片| 精品九九九九九九九九九| 97国产精品一区二区传媒公司| 久久久久久久久久久免费精品| 婷婷久久综合久| 97国产天堂岛| 蜜臀久久99精品久久久电影| 极品极品色影院| 97超碰久| 国模无码人体一区二区三| www久久久| 国产免费一区| 色综合av男人天堂| 最新9久久久9免费视频| 亚洲精品乱码线路中文字幕 | 天天天肏屄肏屄肏屄欧美欧美| 大香蕉久| 午夜后入| 亚洲三区视频| 黑人与人妻| 中国操逼无码| 青青色综合| 毛片一区二区| 久久理论字幕视频| 免费国产视频| 热久久91婷婷| 久久综合九色综合欧洲98| 丝袜美腿诱惑亚洲欧美视频在线观看 | 加勒比人妻综合| 为用户提供免费看黄网址在线观看| 成人精品电影| 久久在线观看免费视频| 无码人妻丰满熟妇奶水区毛片| 夫妻天天操岛国视频| 色婷婷五月综合| 99久久免费看精品国产一区| 色综合色综合网| 日韩天天综合| 校园春色综合| 国产午夜精品在线观看| 啊嗯好大视频在线观看| 国产无码精品成人| 天天摸夜夜操视频| 在线性黄高清免费视频| 欧美韩日精品99综合| 91啪啪视频| 久这精品中文在线观看视频| 国产天天骚| 永久免费av无码网站国产app | а√天堂资源官网在线资源| 中文字幕AV片| 免费在线观看AV无码网站| 亚洲精品乱码久久久久久蜜桃麻豆| 91精品国产高清久久久久久,亚洲成人| 国产三级中文字幕粉嫩| 色蜜AV| 成人av在线播放| 少妇精品久久久| 国内精品伊人久久久久影院会| 天天欧美| 激情综合av| 亚洲aV无码成人在线观看| 久久久久白虎| 日日夜夜噜| 日韩另类| 国产美女自拍AV| 超碰在线1234区| 亚洲欧美精品一区天堂久久| 999精品国产高清一区二区| 久久精品91| 男人的天堂2010| 国产精品熟女九色九色蜜臀| 美女啊啊啊啊啊啊| 午夜精品久久久久| 亚洲麻豆精品二区三区| 久久毛卡| 黄色视频高清无码网站| 亚洲双插| 91少妇通奸网站| 亚洲AV无码天美传媒一区| 亚洲最大成人a毛毛片| 欧美熟妇色| 欧美激情久| 96AV精品| 97人妻碰碰中文无码久热丝袜| 无码人妻精品一区二区三区99不卡 | 日韩色| 智利AV在线网| 97 视频在线| 六月天婷婷| 国产欧美一级在线观看| 久久久久亚洲Av无码专区老牛影视| AV色图| 青青草视频在线观看一区二区| 久久九九网| 超碰国产精品久| 好吊色综合| 日本高清一本二本免费不卡| ai欧美亚洲小说| 少妇99成人麻豆| 五月丁香婷婷啪啪| 日韩去日本高清在| 99久久婷婷丁香| 大香蕉免费3| 国产精品久久久久久久久久久久| 美女t无毒不卡不卡| 久久夜精品一区二区三区| 热天堂一区二区| 欧美日不卡| 久碰视频| 天天拍天天操| 六月丁香五月婷婷| 99天堂网| 日韩中文欧美| 日韩精品一二三四| 熟女日韩| 欧美黄色图片| 久久e6只有精品| 国产夜夜艹| 精品人妻二区三区| 亚洲国产剧情少妇激情| 久久嫩草国产成人一区| 综合网欧| 精品无码人妻一区二区免费蜜桃| 亚洲欧美一区二区不卡视频播放| 丰满精品人妻少妇久久字幕| 校园春色亚洲无码| 久久久久久裸体| 亚洲91射| 亚洲毛片久久| 丁香九月婷婷| 思思视频免费看网站| 国产精品一区二区亚洲人成毛片| 男人的天堂午夜av| 色色福利| 色婷婷久久| 麻豆视频test| 男人久久精品| 九九久精品| 啊啊啊啊啊啊在线| 亚洲成人黄色在线观看| 九月激情婷婷| 亚洲精品无码少妇久久| 天天爽天天| 国产性刺激| 亚洲日韩久久精品一区| 日本欧美不卡| 岛国激情视频在线观看| 久久一区二区三区入口| 国产精品麻豆成人AV艾秋| av大香蕉网站| 国产精品久久久久久久久久二区三区| 操一对老熟妇爽上天视频| 亚洲精品久久久久久久蜜桃臀| 搡老熟女免费视频| 欧美三级中文字幕hd| 亚洲一区二区麻豆影院| 国产白丝在线| 日本精品一区二区不卡| 国产av强奸美女| 丁香五月色情| 校园春色中文字幕AV| 1024精品在线| 国产91乱伦| 伊人成人中文字幕久久网| 啊啊啊不要好爽日韩无码一区| 国产美女91| 翔田千里AⅤHD无码| 337p大胆噜噜噜噜噜91Av| oumeisetupian| 久久熟女嫩草成人片免费| 日韩综合无码一区久久92| 韩国午夜理伦三级好看| 国产精品小视频一区二区三区| 伊人视频| 密乳AV免费观看| 女人的久久久| 97在线公开视频| 亚洲av综合色区图片亚洲| 天天干少妇| 超碰97导航| 综合伊人激情| 鲁鲁色综合网| 91欧| 色久桃花影院在线观看| sss视频华人在线| 男人的天堂VA| 破苞ⅩXXX性无码动漫无码| AV老汉| 999综合网| 99热综合| 中文字幕一区二区无码成人| 蜜乳AV一区二区三区四| 91激情网| 国产人妖的免费的视频| 久久综合中文国产| 日本操逼无码| 久久9 9 9精品| 美女久久久| 激情婷婷丁香| 午夜精品久久久久久久第一页按摩| 人妻乱仑一区二区三区| 97免费视频在线观看视频| 天天躁日日躁AAAAXXXX国产 | 欧美色999| 欧美精品成人亚洲| 91网站18| 亚洲aw毛茸茸在线| AⅤ片水多多| 久草精品国产蜜臀 | 天堂亚洲精品久久老牛| 日韩国产在线观看av| 久久人爽| 成人免费福利在线观看| 91欧美巨乳| 强奸乱伦av电影| 国产AB视频| 极品白嫩美女白浆成人福利在线看| 久热大香蕉网站| 92午夜免费福利视频| 久久久96精品| 婷婷亚洲综合| 人人操人人93| 欧美性爱一区| 亚洲黄色a级片| 国产怡红院在线| 婷婷六月色| 欧美v日韩v亚洲v最新在线| 亚洲图片欧美制度| 国产AV精久久| 91N综合网| 999狠狠综合| 日本性交操一区二区不卡系列| 裸体1区| 欧美很很操视频| 外站AV在线| 加勒比日本在线| 亚洲欧洲日韩国产自在线| 东京热,男人的天堂| 嗯嗯嗯啊啊啊在线免费观看| 大学生口爆吞精| 婷婷探花久久精品一区| 97精彩视频网站| 宅男影院久久久,99| 亚洲熟女偷拍在线观看| 欧美精品三级黄片| 猛猛干| 翔田千里Av在线| 久久久久久久久国产| 色99视频| 国产在线视频二区| 免费视频观看60秒| 久久超碰免费的| 尤物一级在线免费观看| 久久久久久九九九九| 丰满精品人妻少妇久久字幕| 日韩无码成人电影| 家庭乱伦国产精品| 国产在线激情| 青青草日本中文字幕| 五月丁香色色网| 精品无码久久久久久国产浪潮| 新怡红院| 精品久久九| 久久久久骚| 久久婷婷综合国际产色怕| 天天草天天日| 青女偷拍网| 男人网站婷婷| 亚洲美女精品| 1024人妻| 97任你吞精| 亚欧毛片基地国产毛片基地| 91亚洲人| 97色欧洲| 亚洲清纯唯美| 嗯嗯啊好大| 欧亚乱色熟一区二区三四区| 大香蕉丝袜一级片| 国产精品欧美日韩久久| 摸奶性爱视频网站在线免费播放| 91精品人妻一区二区三区蜜臀| 精彩久久中文| 天天综合网1| 国产原创精品| 好吊妞转入那个网| 熟女突然公开看18禁影片 | 曰韩精品九九无码| 亚洲国产一区二区三区四区国产| 这里只有精品视频在线观看麻豆| yw尤物av无码点击进入麻豆| 欧美色图91| 超碰 欧美| 久久成人精品| 五月天欧美色图| 国产在线精品电影观看| 亚洲少妇色图自慰直播| 妇女视频网站| 亚洲欧美日韩有码| 欧美激情 日韩精品| 亚洲色图 欧美热图 清纯唯美 另类自拍| 欧美性爱五月天| 丁香五月影院| 天天操综合网| 日韩精品区二区三区不卡| 丁香五月婷婷基地| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | gogogo免费高清看中国国语| 精品丝袜无码一区二区三APP| 日韩极品无码B| 国产综合在线视频网站| 亚洲性爱免费电影| 国产精品欧美日韩久久| 午夜偷拍久久熟女| 熟女人妇一区二区三区| 欧美综合区| 人人爱操| 日韩伦理久 久久 清纯| 91九色丨国产丨爆乳| 天美一二三在线观看Av| 日韩欧美偷拍美女视频| 日本不卡一区二区三区| 密臀成人视频久久久| 亚洲色婷婷综合久久久久中文| 欧美se综合| 黑人猛交| 福利社区午夜一区二区| 天堂中文资源在线bt| 亚洲啪啪性视频| 一区二区偷拍拍视频| 欧美一区二区三区大综合| 精品97久久综合| 97欧美色综合| 91制服丝袜中文字幕| 国产肏逼网站| 日韩人妻中文视频| 狠狠狠狠狠| 国产精品久久久777| 另类老少妇| 欧美天天性| 免费看国产曰批40分钟怎么下载| 99热最新| 极品粉嫩少妇视频| 人妻熟妇一区二区三区| 激情婷婷综合久久| 26uuu国产免费观看| 蜜桃色色网站视频三区| 不卡一区视频| 久草加勒比一区在线| 成人麻豆av电影网站| www.99热| 国产诱惑| 乱伦熟妇一区二区| 九九色影院| 亚洲色图欧美另类在线| 午夜在线播放| 天天做日日做天天欢。| 久久一区无码| 99re这里只有精品2| 亚洲精品尤物yw在线影院| 激情综合网五月婷婷| 国产精品久久久777| 欧美美女视频| 日本护士高潮| 美骚妇av高清在线| 人人操人人肉久久精品| 亚洲一欧洲中文字幕在线 | 懂色中文一区二区三区| 人妻嗯啊啊在线播放| 偷拍片久久| 国产精品第一区第一页| h在线看免费版在线看| 天天爱综合网| 蜜乳av一区二区| 精品免费一区二区三区在线亚洲人成| 精品丰满熟妇人妻一区| 色色色色日本| 美女淫穴| 百度百度日本操逼| 黄污污污污| 大茄子熟女AV导航| 天天色综亚洲91污| 夜夜爽爽夜夜精品视频| 欧美18 在线观看| www鬼畜国产男人的天堂| 91精品导航| 国产大学生高潮在线播放| 东方亚洲在线操逼天堂| 丁香六月激情| 青青欧洲黑| 亚洲AV无码翔田千里网站| 亚洲图片欧美制度| 久久国产在线一区二区| 欧洲免费一区二| 日韩电影在线观看网址| 97精品国产97久久久久久免费| 大香蕉中文网| 91狠狠综合久久| 97色操| 大香蕉手机视频| 欧美中日韩XXXX| 99综合视频一体| 黄色工厂这里只有精品| 免费观看欧美日韩操逼视频| 人妻激情视频| 国产超碰在线| 超碰美国| 天天透伊人| 久久在线观看免费视频| 伊人国产av| 免费自拍三级综合| 亚州男人的天堂| 亚洲欧美日韩精品久| 九色 蝌蚪 熟女自| 久久XX| 97国产精品| 亚州色站 日韩电影| 精品毛片av一区二区| 欧美一区二区成人一卡| 91爆操视频| 国产农村妇女毛片精品久久| 亚洲精品一区中文字幕乱码| 视频一区二区免费在线| 亚洲中文电影| 黄片www.| 激情文学88| 中文字幕精品乱码| 亚洲av乱伦色图网站| 草草草视频| 欧美色图片91| 一级特级aaaa毛片免费观看 | 国产三级在线现体验区| 亚洲熟女一区| www.激情| 国产精品久久天天干| 日韩二区三四区五区六区在线看| 五月丁香婷婷综合| 亚洲欧洲中文日韩女优乱码| 久久人妻一区二区三区高清 | 2019天天干| 麻豆 亚洲 97| 五月婷婷久久综合| 亚洲 欧美 日韩 国产一区二区| 嫩草影院永久在线制服丝袜| 色玖玖| 国产日韩欧美操逼视频| 国产又粗又长视频| 人人妻人人色| 天天综合网~69| 久久直播国产| 狠狠爱大香蕉| 久久视频少妇美女| 神马精品视频| 国产浮力影院第1页| 欧美综合天天| 一区二区播放| 97中文字幕色| 七久久久| 午夜欧美女人操逼| 国内精品久久人妻性色av| 日本精品一区二区不卡| 97在线青| 日韩一区二区熟女| 亚洲AV免费在线| 亚洲最大成人a毛毛片| 中文字幕在线观| 久久久91福利姬| 操B久久| 亚洲欲色9532548967一区| 色综合久久88色综合久久天天| 国产成人欧美精品在线| 欧美图片校园春色| 天天综合网~91综合网| 精久久久91| 亚洲国产一区二区三区在线 | 久久香蕉国产线看观看亚洲女人 | 天天综合网站| 92人人操人人| 免费精品人妻一区二区三| 无码不卡亚洲成?人片| sewuyueav| 四虎884| 熟妇一区,二区,三区。| 人妻内射一区二区在线视频| 五月天伊人| 亚洲情色一区综合| 精彩视频日韩| 久操99| 超碰超碰95| 青青草中文-久久青草精品一区二区三 | 国产精品999zyz| 一级岛国大片| 18禁无码永久免费无限制| 日本一区二区亚洲综合| 亚洲国产成人精品女人久久久| 日韩大香蕉AV影片| 天天操妹子| 综合五月天| 欧美激情精品久久久久久| 亚洲在线观看| 丝袜视频网国产90| 91痴汉| 综合亚洲网| 欧美激情 亚洲色图| 91高清欧美| 午夜一区| 中文久久| 五十路六十路七十路熟婆| 欧美亚洲素人制服精品| 欧美偷拍区| 操逼国产免费| 多乙久久久久久| 国产又爽又黄| 久久女人一区二区三区| 天天摸天天插天天日| 亚洲情色一区三区| 99只有精品| 黑人干亚洲| 91色亚洲| 中文字幕天堂在线| 久操网址| 九九综合色| 91在线美女| 亚洲人妖网| 熟女熟妇一区二区三区视频| 超碰诱惑| 少妇高潮流水av免费| 国产精品呦一区二区三区| 国产欧美亚洲精品a第2页| 国内外色色色色色成人视频| 一区二区久久天天干狠狠| 欧美色日本| 伊人宅男大香蕉| 一级一性爱免费视频| 草草影院最新网址| 婷婷色婷婷| 亚洲一区二区三区麻豆传媒| 欧美丝袜美女电影一二三四区| 狠狠爱夜夜| 在线无码视频| 色九月婷婷| 国产丰满熟夫69mpp| 在线播放中文字幕| 国产精品高潮久久久无码| 双插性欧美一二三区| 99热在线播放| 久久久久久91香蕉国产| 欧美啪啪天堂| 免费看片黄| 精品国产精品一区二区| 干b在线性社区| 大香蕉手机在线| 亚洲 小说 欧美 激情 另类| 久久 国产精品 一区| 亚洲官网在线| 超碰久超碰久| 欧美精品日韩久久久九| 曰韩精品九九无码| 亚洲九九爱| 日本人妻最新在线中| 国产 日韩 另类 视频一区爱| 亚洲、日韩、综合、另类| 久久久免费高清中文视频| 久久透逼视频| 日本超碰在线国产一区| 亚洲s色图| 嫩草美女久久| 久久久999日本大片| 97久久精品不卡| 国产精品免费1区2区视频| 丁香色色网| 物业黑人 AV一区| www.亚洲成人一区| 国产一区二区三区中文字幕| 人人操人人精品影片| 超碰国产精品久| 91色噜噜狠狠| 欧美性第一页| 99热久| 亚洲精品97p| 欧美少妇性爱网站| www.99热在线只有精品| 国产午夜在线观看| 丁香五月综合| 精品无av| 看一级黄色视频| 夜夜嗨老熟女AV一区二区三区| 亚洲伊人a线观看视频| 中文字幕乱碼在线| 少妇被c 黄 免费观看| 麻豆天美电影一区二区| 天天久久| 日韩久久三区| 深夜视频| 亚洲精品视频二区| 亚洲无码日韩电影| 五月天综合在线| 青青草这里只有精品| 亚洲av无码成人精品国产| 亚欧操逼片在线观看 | 日本曲间由美性生活片| 国产精品视频在线观看| 五月激情天| 好吊色综合| 人人爽天天爽| 97超碰碰| 操香逼| 91在线超高颜值国产| 素颜老阿姨乱情色| 色乱二区| 欧美韩日精品99综合| 久青草影院| 97啪啪| 97久久免费| 久久九九视频九九视频| 无码操逼天堂| 色婷网| 中文字幕欧美丝袜07资源| 2025亚洲男人天堂| 亚洲成人免费中文字幕| 99最新日韩偷拍视频| 五月婷婷色色| 亚洲成人激情小说视频| 亚洲综合99999| 国产综合永久精品日韩鬼片| 亚洲欧美天| 啊啊啊好爽快点啊啊啊嗯嗯| 高清有码一区二区| 久日91在线| 成人av动漫在线观看| 91色插| 91人妻视频| 大香蕉免费乱伦视频| 人妻精品一区二区| 久久av网| 国产男女无套视频免费观看| 亚洲日韩美女丝袜美腿人妻视频| 欧美大香蕉97| 无码免费精品高清| 亚洲男人天堂AV| 中国黑人三级片网站上区| 成人免费在线网站| 欧美综合天天| 超碰69| caopeng97| 五月天丁香婷婷综合网站| 亚洲熟女综合一区二区| 久久久不卡区一区二区三区久久久| 性爱1区| 日韩免费三级黄片电影| 骚鸭AV| 日韩99神马视频片| 五月婷婷久久综合| 人妻一区二区三区视频| 久热精品在线| 国产25页| 日本精品一区三区| 操B在线观看| av亚欧| 中韩中文字幕在线观看| 91高跟美女在线播放| www.婷婷五月天| 国产女人极品高潮毛片| 色激情综合网站| 亚州,欧美在线| 麻豆 亚洲 97| 精品91摸| 啪啪啪综合网| 亚洲第2页| 国产亚洲深夜激情| 97亚洲在线| 亚洲欧美天| 亚洲熟女一区| 婷婷激情一区二区三区俺也去| www.夜夜操| 色噜噜人妻丝袜a∨先锋影| 亚洲黄色视频在线观看视频| 啊啊啊无码| 四虎精品永久在线观看| 日韩精品大香蕉伊人在线| 97青青操视频| 色色99| 色婷网| www.人人cao| 久久久久久国产手机AV| 性暴力欧美猛交在线直播| 国产操逼网站亚洲一级黄色| 超碰97综合| 91青青| 欧美综合中文| 青青久久久| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 国产av强奸美女| 欧美在线永久天堂| a'v在线资源| 无码国产精品96久久久久孕妇| 三四中文字幕| 亚洲熟女人妻中文字幕一区二区| 国内外激情在线| 欧美色爱综合| 久久久一二三四区| nuu12国产麻豆精品| 一区超碰一区| 夜夜骑日日| 亚洲一区中文字幕| 一二三区视频在线观看| 伊人性在线视频| 欧美激情 一区| 亚洲人妻日日日| 91丝袜| 亚洲高清视频在线免费观看| 精品人妻一二三| 操逼无码操逼| 在线播放一级无码视频| 国模不卡| 黄片在线免费在线观看| 综合色色婷婷| 综合网欧美在线| 美女露胸露奶头| 大香伊人在线一区| av线电影| 91色伦| 搡老女人老91二区| 超碰午夜| 777AV电影| www色日本|