色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

控制臺(tái)貪吃蛇從能跑到能玩:環(huán)形數(shù)組、狀態(tài)機(jī)與定點(diǎn)重繪實(shí)戰(zhàn)

控制臺(tái)貪吃蛇從能跑到能玩:環(huán)形數(shù)組、狀態(tài)機(jī)與定點(diǎn)重繪實(shí)戰(zhàn) 上一篇文章我們把控制臺(tái)貪吃蛇最基礎(chǔ)的版本跑通了蛇能動(dòng)、食物能刷、撞墻能結(jié)束。但那個(gè)版本距離“一個(gè)能玩的游戲”還差得遠(yuǎn)。如果你真把它拿給朋友試玩多半會(huì)被吐槽三件事按鍵卡頓、畫(huà)面閃爍、蛇稍微一長(zhǎng)就找不著頭在哪。這篇就接著上一篇往下寫(xiě)目標(biāo)很實(shí)在把控制臺(tái)貪吃蛇從“能跑”升級(jí)到“能玩”順便把代碼結(jié)構(gòu)理順讓后面再加功能不會(huì)越改越亂。文中代碼我用C/C混合風(fēng)格寫(xiě)Windows控制臺(tái)環(huán)境可以直接用拿到Linux下把conio.h相關(guān)部分換成termios也能跑通。1. 從第一版到第二版這次改造的核心思路1.1 第一版留下的三個(gè)坑第一版貪吃蛇的代碼結(jié)構(gòu)估計(jì)寫(xiě)過(guò)的人都差不多一個(gè)while(true)主循環(huán)循環(huán)里讀鍵盤(pán)、更新蛇頭坐標(biāo)、用system(cls)清屏再重新畫(huà)整個(gè)地圖。優(yōu)點(diǎn)是邏輯直白兩三屏代碼就能把“蛇會(huì)動(dòng)、能吃食物、會(huì)撞墻”講完作為第一篇的收尾綽綽有余。但如果你照著那個(gè)版本繼續(xù)加功能很快會(huì)碰到三堵墻。第一堵墻是畫(huà)面閃爍。system(cls)每次調(diào)用都會(huì)把整個(gè)控制臺(tái)緩沖區(qū)清掉然后你再重新輸出幾十上百個(gè)字符。操作一多光標(biāo)來(lái)回跳動(dòng)屏幕上就像按了頻閃燈一樣。蛇短的時(shí)候還好蛇身長(zhǎng)到二三十節(jié)每一幀要重繪太多字符閃爍感會(huì)明顯到讓人不想玩。第二堵墻是速度控制不準(zhǔn)。第一版最常用Sleep(interval)控制每一幀的間隔但這個(gè)寫(xiě)法有個(gè)隱藏問(wèn)題Sleep只保證“至少等這么多毫秒”它不計(jì)入游戲邏輯本身的耗時(shí)。你移動(dòng)蛇、繪制畫(huà)面、讀取按鍵都要花時(shí)間把這些時(shí)間加上去實(shí)際每幀間隔會(huì)比設(shè)定的interval長(zhǎng)而且長(zhǎng)短不穩(wěn)定。結(jié)果就是蛇的速度忽快忽慢吃食物加速的邏輯也沒(méi)法做準(zhǔn)。第三堵墻是數(shù)據(jù)結(jié)構(gòu)太脆弱。很多人習(xí)慣用std::vector存蛇身每次移動(dòng)先insert新頭再pop_back刪尾巴。功能上沒(méi)問(wèn)題但所有邏輯全堆在主循環(huán)里代碼長(zhǎng)了之后哪里動(dòng)了蛇身、哪里改了狀態(tài)根本理不清。第二篇我不想急著上多復(fù)雜的算法先把這些問(wèn)題解決掉后面寫(xiě)計(jì)分、菜單、難度才會(huì)輕松。1.2 第二版的目標(biāo)與功能清單這次改造我給自己列了五條硬性目標(biāo)蛇身用固定數(shù)組加環(huán)形隊(duì)列思想來(lái)維護(hù)徹底擺脫頻繁的內(nèi)存操作放棄system(cls)改成光標(biāo)定位加定點(diǎn)重繪消滅閃爍引入固定時(shí)間戳計(jì)時(shí)替代Sleep讓速度控制可預(yù)期加入菜單、暫停、結(jié)束、再來(lái)一局用狀態(tài)機(jī)管理游戲流程增加計(jì)分和難度遞進(jìn)讓游戲有“越玩越難”的反饋感。這五條做完這個(gè)項(xiàng)目就不再是“教學(xué)Demo”了它更像一個(gè)可以拿來(lái)消遣、可以繼續(xù)擴(kuò)展的小成品。下面我按模塊拆開(kāi)講每段都會(huì)給出關(guān)鍵代碼和踩坑說(shuō)明。2. 蛇身數(shù)據(jù)結(jié)構(gòu)環(huán)形數(shù)組與隊(duì)列思想2.1 為什么蛇的移動(dòng)本質(zhì)上是個(gè)隊(duì)列貪吃蛇每走一步做的事情可以拆成兩步看先算出新蛇頭要去的位置如果新位置不是食物就把尾巴那一節(jié)刪掉。這正好符合隊(duì)列“頭進(jìn)尾出”的模型。用std::deque當(dāng)然能做但控制臺(tái)項(xiàng)目里我更推薦用定長(zhǎng)數(shù)組加head/tail兩個(gè)下標(biāo)來(lái)模擬理由有兩個(gè)第一你不需要引入STL容器純C環(huán)境也能跑方便理解底層原理第二環(huán)形數(shù)組的訪問(wèn)是O(1)的畫(huà)蛇身也只需要從尾巴遍歷到頭部代碼非常直觀。先定義一下蛇的結(jié)構(gòu)體const int MAX_BODY 500; // 地圖最多能容納的蛇身節(jié)數(shù) struct Snake { int x[MAX_BODY]; int y[MAX_BODY]; int head; // 蛇頭所在數(shù)組下標(biāo) int tail; // 蛇尾所在數(shù)組下標(biāo) int len; // 當(dāng)前蛇身長(zhǎng)度 };初始化時(shí)我們讓蛇頭朝右從(startX, startY)開(kāi)始往左擺兩節(jié)身體。這里有個(gè)容易繞暈的細(xì)節(jié)環(huán)形數(shù)組的“頭”和“尾”不是固定在0號(hào)下標(biāo)而是靠head和tail兩個(gè)游標(biāo)動(dòng)態(tài)移動(dòng)。void initSnake(Snake s, int startX, int startY) { // 蛇身三節(jié)從右往左排 s.x[0] startX 2; s.y[0] startY; // 最后一節(jié)尾巴 s.x[1] startX 1; s.y[1] startY; s.x[2] startX; s.y[2] startY; // 蛇頭 s.tail 0; s.head 2; s.len 3; }2.2 入隊(duì)與出隊(duì)新頭進(jìn)尾巴出移動(dòng)時(shí)新蛇頭應(yīng)該寫(xiě)到緊挨著當(dāng)前head的下一個(gè)位置也就是(head 1) % MAX_BODY。取模的意思是數(shù)組下標(biāo)到末尾時(shí)就回繞到開(kāi)頭形成一個(gè)環(huán)。這里還要區(qū)分兩種情況吃到食物時(shí)蛇身要增長(zhǎng)尾巴不動(dòng)沒(méi)吃到食物時(shí)尾巴跟著前進(jìn)一格保持長(zhǎng)度不變。void moveSnake(Snake s, int newX, int newY, bool grow) { int newHead (s.head 1) % MAX_BODY; s.x[newHead] newX; s.y[newHead] newY; s.head newHead; if (!grow) { // 沒(méi)吃東西尾巴往前挪一格 s.tail (s.tail 1) % MAX_BODY; } else { s.len; } }這段代碼是整條游戲的“發(fā)動(dòng)機(jī)”邏輯很簡(jiǎn)單但寫(xiě)的時(shí)候必須注意順序。我之前犯過(guò)把tail更新放在head更新之前的錯(cuò)結(jié)果新頭寫(xiě)入還沒(méi)完成尾巴先動(dòng)了下一次畫(huà)蛇身時(shí)坐標(biāo)就對(duì)不上畫(huà)面直接亂掉。2.3 畫(huà)蛇身從尾巴遍歷到頭部繪制蛇身時(shí)從tail開(kāi)始依次訪問(wèn)(tail 1) % MAX_BODY、(tail 2) % MAX_BODY……直到遍歷完len個(gè)節(jié)點(diǎn)。每次取模都保證下標(biāo)不會(huì)越界。void drawSnake(const Snake s) { int idx s.tail; for (int i 0; i s.len; i) { gotoxy(s.x[idx], s.y[idx]); SetConsoleTextAttribute(handle, 10); // 綠色 std::cout ■; idx (idx 1) % MAX_BODY; } }注意用■這類全角字符時(shí)一個(gè)字符占兩個(gè)字節(jié)控制臺(tái)光標(biāo)定位必須落在正確坐標(biāo)上否則畫(huà)出來(lái)的蛇身會(huì)出現(xiàn)錯(cuò)位。建議把地圖邊界和蛇身都按“字符數(shù)”來(lái)算坐標(biāo)不要和字節(jié)數(shù)混淆。2.4 判斷蛇頭是否撞到自己自碰檢測(cè)是貪吃蛇最容易寫(xiě)錯(cuò)的地方。直覺(jué)做法是遍歷整條蛇身看新頭坐標(biāo)是否和某一節(jié)重疊。但有一個(gè)特殊情況如果新頭正好落在尾巴即將移開(kāi)的位置那不算撞到自己因?yàn)檫@一節(jié)馬上要被出隊(duì)了。所以正確的遍歷范圍是“除了尾巴以外的所有節(jié)點(diǎn)”或者換個(gè)思路先判斷沒(méi)吃到食物時(shí)尾巴會(huì)先移走再檢查新頭是否與剩余身體重疊。bool hitSelf(const Snake s, int nx, int ny, bool grow) { int count grow ? s.len : s.len - 1; int idx s.tail; for (int i 0; i count; i) { if (s.x[idx] nx s.y[idx] ny) { return true; } idx (idx 1) % MAX_BODY; } return false; }這個(gè)“是否排除尾巴”的細(xì)節(jié)很多人在第一次寫(xiě)時(shí)都會(huì)漏。如果你發(fā)現(xiàn)蛇總是莫名其妙死在“明明尾巴要離開(kāi)的位置”多半就是這里的問(wèn)題。3. 輸入控制與渲染優(yōu)化手感提升的關(guān)鍵3.1 方向鍵的讀取兩個(gè)字節(jié)的坑Windows控制臺(tái)下方向鍵不是普通字符按下后會(huì)返回兩個(gè)字節(jié)第一個(gè)字節(jié)是224或0第二個(gè)才是真正表示方向的掃描碼。只用_getch()讀一次會(huì)拿到224直接判斷方向必然失敗。我見(jiàn)過(guò)不少人卡在這個(gè)問(wèn)題上一兩個(gè)小時(shí)其實(shí)處理起來(lái)很簡(jiǎn)單int readDirection() { if (!_kbhit()) return -1; int key _getch(); if (key 224 || key 0) { key _getch(); // 再讀一次拿到真實(shí)按鍵 } switch (key) { case 72: return DIR_UP; case 80: return DIR_DOWN; case 75: return DIR_LEFT; case 77: return DIR_RIGHT; default: return -1; } }如果你在Linux下做移植方向鍵序列是\x1B[A這樣的轉(zhuǎn)義序列也是三個(gè)字節(jié)原理相通。3.2 防反轉(zhuǎn)用異或判斷正反方向貪吃蛇最經(jīng)典的限制不能直接掉頭。當(dāng)前正在向右走的時(shí)候玩家按左鍵應(yīng)該被忽略。如果不用任何技巧你得寫(xiě)四個(gè)if判斷然后又臭又長(zhǎng)。這里有個(gè)很聰明的位運(yùn)算方法。給方向編號(hào)enum Direction { DIR_UP 0, // 上 DIR_DOWN 1, // 下 DIR_LEFT 2, // 左 DIR_RIGHT 3 // 右 };巧合的是0 ^ 1 11 ^ 1 02 ^ 1 33 ^ 1 2。也就是說(shuō)上下相對(duì)、左右相對(duì)恰好可以用dir ^ 1表示“反方向”。判斷時(shí)可以這么寫(xiě)int newDir readDirection(); if (newDir ! -1 newDir ! (curDir ^ 1)) { curDir newDir; }這個(gè)寫(xiě)法不管當(dāng)前方向是哪個(gè)只要新方向是當(dāng)前方向的反向就一定等于curDir ^ 1直接忽略即可。代碼整潔邏輯也不容易出錯(cuò)。3.3 擺脫system(cls)光標(biāo)定位與定點(diǎn)重繪第二版最重要的一步是把整屏重繪改成局點(diǎn)更新。既然蛇每次移動(dòng)只影響三個(gè)位置新蛇頭、舊蛇尾、可能變化的新食物那理論上每幀只需要在這些位置上做擦除和重畫(huà)。Windows下定位光標(biāo)用SetConsoleCursorPositionvoid gotoxy(int x, int y) { COORD pos; pos.X x; pos.Y y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }再配合一個(gè)隱藏光標(biāo)函數(shù)視覺(jué)效果會(huì)干凈很多void hideCursor() { CONSOLE_CURSOR_INFO cci; GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), cci); cci.bVisible FALSE; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), cci); }有了這兩個(gè)函數(shù)移動(dòng)蛇的時(shí)候就可以精準(zhǔn)操作// 每次update之后 // 1. 畫(huà)新蛇頭 gotoxy(newX, newY); SetConsoleTextAttribute(handle, 10); std::cout ■; // 2. 如果沒(méi)吃到食物擦掉舊尾巴 if (!ate) { gotoxy(oldTailX, oldTailY); std::cout ; // 兩個(gè)空格相當(dāng)于擦除 } // 3. 如果吃到食物畫(huà)新食物位置變了 if (ate) { drawFood(); }這種方法下畫(huà)面不再全書(shū)刷新閃爍幾乎消失蛇長(zhǎng)到50節(jié)也不會(huì)有視覺(jué)卡頓。3.4 固定時(shí)間戳讓速度控制真正可控用Sleep(interval)控制幀率的最大問(wèn)題是它只負(fù)責(zé)“睡”不負(fù)責(zé)“校準(zhǔn)”。假設(shè)每幀游戲邏輯要跑5毫秒你設(shè)置Sleep(100)實(shí)際每幀間隔就是105毫秒誤差會(huì)累積蛇會(huì)越走越快或者忽快忽慢。解決辦法是記錄上一次更新的時(shí)間戳每次循環(huán)檢查當(dāng)前時(shí)間是否已經(jīng)超過(guò)固定間隔DWORD lastTick GetTickCount(); int interval 150; // 毫秒 while (running) { DWORD now GetTickCount(); if (now - lastTick interval) { updateGame(); lastTick now; } render(); // 每幀都渲染保證按鍵響應(yīng)及時(shí) }注意render()不能放在if塊里。因?yàn)榘存I響應(yīng)需要在空閑時(shí)間也能被處理如果把渲染也卡進(jìn)定時(shí)邏輯按一下方向鍵可能要等一個(gè)間隔周期才有反應(yīng)手感非常差。暫停功能實(shí)現(xiàn)時(shí)記得做一件事恢復(fù)暫停的瞬間把lastTick重新賦值為GetTickCount()。否則暫停期間流逝的時(shí)間會(huì)被算進(jìn)去一恢復(fù)游戲蛇就往前猛跳一大步。4. 游戲狀態(tài)機(jī)與完整項(xiàng)目骨架4.1 為什么要把游戲狀態(tài)拆開(kāi)第一版把所有邏輯寫(xiě)在一個(gè)循環(huán)里菜單、暫停、結(jié)束全都塞進(jìn)去會(huì)讓代碼變成一團(tuán)亂麻。更好的做法是抽象出一個(gè)“狀態(tài)機(jī)”讓程序知道自己當(dāng)前在哪個(gè)界面并根據(jù)狀態(tài)決定該執(zhí)行哪些邏輯。定義狀態(tài)enum GameState { STATE_MENU 0, // 主菜單 STATE_RUN, // 游戲中 STATE_PAUSE, // 暫停 STATE_OVER // 游戲結(jié)束 };主循環(huán)變成這樣int main() { initGame(); while (true) { switch (state) { case STATE_MENU: handleMenu(); break; case STATE_RUN: handleRun(); break; case STATE_PAUSE: handlePause(); break; case STATE_OVER: handleOver(); break; } } return 0; }每次只處理當(dāng)前狀態(tài)下的按鍵和繪制邏輯邊界非常清晰。菜單里按空格進(jìn)入游戲游戲中按空格暫停暫停中按空格恢復(fù)結(jié)束后按R重新開(kāi)始。狀態(tài)切換通過(guò)簡(jiǎn)單的賦值實(shí)現(xiàn)。4.2 菜單、暫停、結(jié)束三個(gè)輔助界面菜單界面可以畫(huà)一個(gè)簡(jiǎn)單的標(biāo)題和選項(xiàng)void drawMenu() { gotoxy(MAP_WIDTH / 2 - 5, MAP_HEIGHT / 2 - 2); std::cout 貪吃蛇 v2.0; gotoxy(MAP_WIDTH / 2 - 8, MAP_HEIGHT / 2); std::cout 1. 簡(jiǎn)單 2. 普通 3. 困難; gotoxy(MAP_WIDTH / 2 - 6, MAP_HEIGHT / 2 1); std::cout 空格鍵開(kāi)始; }這里順便把難度選擇做了按下1、2、3分別把interval設(shè)為200、150、100對(duì)應(yīng)慢、中、快三檔。菜單事件處理放在handleMenu()里讀取按鍵并修改全局狀態(tài)。暫停界面不用動(dòng)地圖只需要在畫(huà)面中央顯示“暫停中”幾個(gè)字然后等待空格鍵。注意暫停時(shí)必須保留當(dāng)前的地圖畫(huà)面不能清除否則玩家恢復(fù)后看不到蛇在哪里。結(jié)束界面可以顯示最終得分并提示按R重新開(kāi)始。這里有兩個(gè)細(xì)節(jié)一個(gè)是重新開(kāi)始前要重新初始化所有全局變量另一個(gè)是必須把lastTick也重置否則新游戲第一幀會(huì)立刻觸發(fā)一次更新。4.3 計(jì)分與難度遞進(jìn)計(jì)分規(guī)則很簡(jiǎn)單每吃一個(gè)食物加10分。在右側(cè)畫(huà)一個(gè)記分板用剛才的gotoxy精確繪制。這里有個(gè)容易忽略的地方記分板區(qū)域和游戲地圖區(qū)域最好分開(kāi)管理比如地圖占左邊60列記分板占右邊20列避免坐標(biāo)重疊。難度遞進(jìn)我用“分?jǐn)?shù)每增加50分移動(dòng)間隔減少10毫秒”的規(guī)則同時(shí)設(shè)置一個(gè)下限防止蛇快得完全沒(méi)法操作if (score 0 score % 50 0 interval 60) { interval - 10; }實(shí)際體驗(yàn)下來(lái)60毫秒是普通玩家能接受的極限再快就需要用到“預(yù)測(cè)下一個(gè)按鍵”的技巧了。5. 實(shí)操過(guò)程搭一個(gè)能玩的控制臺(tái)版本5.1 關(guān)鍵變量和初始化流程為了保證所有函數(shù)都能訪問(wèn)到需要的數(shù)據(jù)我建議用全局變量組織核心數(shù)據(jù)數(shù)量不多可控Snake snake; int foodX, foodY; int score; int curDir; int interval; GameState state; DWORD lastTick; HANDLE handle;初始化時(shí)依次做獲取控制臺(tái)句柄、隱藏光標(biāo)、初始化蛇的位置、隨機(jī)生成第一個(gè)食物、設(shè)置初始狀態(tài)為菜單。隨機(jī)函數(shù)記得用srand((unsigned)time(NULL))給種子否則每次運(yùn)行食物位置都一樣。5.2 游戲循環(huán)的update實(shí)現(xiàn)handleRun()是核心函數(shù)里面做三件事讀方向、判斷是否該更新、更新畫(huà)面。void handleRun() { int newDir readDirection(); if (newDir ! -1 newDir ! (curDir ^ 1)) { curDir newDir; } DWORD now GetTickCount(); if (now - lastTick (DWORD)interval) { return; // 時(shí)間沒(méi)到只處理按鍵 } lastTick now; // 計(jì)算新頭位置 int dx[4] {0, 0, -1, 1}; int dy[4] {-1, 1, 0, 0}; int nx snake.x[snake.head] dx[curDir]; int ny snake.y[snake.head] dy[curDir]; // 撞墻檢測(cè) if (nx 0 || nx MAP_WIDTH || ny 0 || ny MAP_HEIGHT) { state STATE_OVER; drawOver(); return; } bool eat (nx foodX ny foodY); // 自碰檢測(cè) if (hitSelf(snake, nx, ny, eat)) { state STATE_OVER; drawOver(); return; } // 記錄舊尾巴坐標(biāo)用于擦除 int oldTailX snake.x[snake.tail]; int oldTailY snake.y[snake.tail]; // 移動(dòng)蛇身 moveSnake(snake, nx, ny, eat); // 繪制新蛇頭 gotoxy(nx, ny); SetConsoleTextAttribute(handle, 10); std::cout ■; if (eat) { score 10; updateScoreBoard(); // 食物被吃了重新生成 spawnFood(); drawFood(); // 難度遞進(jìn) if (score % 50 0 interval 60) { interval - 10; } } else { // 沒(méi)吃到食物擦除尾巴 gotoxy(oldTailX, oldTailY); std::cout ; } }這段代碼基本就是第二版的核心了順序上有個(gè)關(guān)鍵點(diǎn)必須先判斷碰撞再執(zhí)行移動(dòng)。如果把移動(dòng)放在檢測(cè)之前蛇頭已經(jīng)撞墻了你還要再倒回去處理邏輯會(huì)變得很別扭。5.3 食物生成的安全策略最簡(jiǎn)單的食物生成方式是循環(huán)隨機(jī)do { foodX rand() % MAP_WIDTH; foodY rand() % MAP_HEIGHT; } while (isBody(foodX, foodY));這在小地圖、蛇身短的時(shí)候沒(méi)問(wèn)題但當(dāng)蛇身占滿大半地圖時(shí)隨機(jī)位置很可能反復(fù)落在蛇身上碰撞檢測(cè)次數(shù)急劇上升極端情況下程序會(huì)卡到看起來(lái)像死循環(huán)。更穩(wěn)妥的寫(xiě)法是先把所有空地收集起來(lái)再?gòu)目盏乩镫S機(jī)挑一個(gè)。這里給個(gè)實(shí)現(xiàn)void spawnFood() { int freeCells 0; for (int y 0; y MAP_HEIGHT; y) { for (int x 0; x MAP_WIDTH; x) { if (!isBody(x, y)) freeCells; } } if (freeCells 0) { // 地圖被占滿游戲勝利 state STATE_OVER; return; } int target rand() % freeCells; for (int y 0; y MAP_HEIGHT; y) { for (int x 0; x MAP_WIDTH; x) { if (!isBody(x, y)) { if (target 0) { foodX x; foodY y; return; } target--; } } } }這個(gè)函數(shù)的時(shí)間復(fù)雜度是O(地圖大小)即使蛇身很長(zhǎng)也穩(wěn)定。游戲快通關(guān)時(shí)這個(gè)函數(shù)能保證食物一定生成在可到達(dá)的位置。5.4 完整的繪制函數(shù)組織把繪制代碼統(tǒng)一封裝能有效避免零散輸出。我通常按層次組織四個(gè)繪制函數(shù)drawBorder()只畫(huà)一次放在初始化階段之后不清除drawSnake()更新蛇時(shí)調(diào)用畫(huà)整個(gè)蛇身適合初始化以及重置后重繪drawFood()畫(huà)當(dāng)前位置的食物drawUI()在右側(cè)畫(huà)分?jǐn)?shù)、難度、操作提示。初始化時(shí)調(diào)用一次全部繪制之后每幀只做局部更新這樣代碼清晰也不會(huì)因?yàn)橥?huà)某個(gè)元素導(dǎo)致畫(huà)面殘缺。6. 常見(jiàn)問(wèn)題與調(diào)試心得6.1 蛇頭畫(huà)出來(lái)了但身體斷節(jié)或者重疊這個(gè)問(wèn)題十有八九出在環(huán)形數(shù)組的取模和head/tail更新順序上。記住一個(gè)口訣先寫(xiě)新頭到(head1)%MAX_BODY再移動(dòng)head游標(biāo)最后才根據(jù)是否吃到食物去動(dòng)tail。如果先動(dòng)了tail或者h(yuǎn)ead下一次繪制時(shí)遍歷的起點(diǎn)就會(huì)錯(cuò)亂。排查時(shí)可以打印head、tail和len三個(gè)值蛇動(dòng)幾幀后再對(duì)比數(shù)組里每個(gè)坐標(biāo)很快就能定位是哪個(gè)環(huán)節(jié)出了問(wèn)題。6.2 方向鍵沒(méi)反應(yīng)或者按一次走兩步方向鍵沒(méi)反應(yīng)優(yōu)先檢查有沒(méi)有處理224/0這個(gè)前導(dǎo)字節(jié)。只讀一次_getch()拿到的根本不是一個(gè)有效方向鍵。按一次走兩步多半是按鍵的“重復(fù)觸發(fā)”。如果你在循環(huán)里每次都調(diào)用readDirection()鍵盤(pán)按住時(shí)系統(tǒng)會(huì)連續(xù)產(chǎn)生重復(fù)按鍵事件。解決方法是維護(hù)一個(gè)“本幀是否已處理過(guò)方向”的標(biāo)志每幀只允許修改一次方向或者干脆用“方向緩沖”只在方向鍵第一次生效。6.3 速度忽快忽慢前面提過(guò)別用Sleep做速度控制要用時(shí)間戳判斷。如果你已經(jīng)用了時(shí)間戳還是忽快忽慢注意檢查render()里有沒(méi)有執(zhí)行耗時(shí)大的操作比如每次渲染都遍歷整個(gè)地圖或者調(diào)用SetConsoleTextAttribute太多。優(yōu)化思路是把顏色設(shè)置也緩存下來(lái)只在變化時(shí)才調(diào)用。6.4 蛇吃到自己的身體竟然沒(méi)死最可能的原因是自碰檢測(cè)時(shí)忘了考慮“尾巴即將移走”的情況。當(dāng)蛇沒(méi)有吃到食物時(shí)新的蛇頭可以合法地移動(dòng)到當(dāng)前尾巴的位置因?yàn)槟且粠舶蜁?huì)立刻移開(kāi)。如果檢測(cè)函數(shù)把尾巴計(jì)入身體游戲會(huì)在本該活著的時(shí)候判死。反過(guò)來(lái)如果吃到食物時(shí)尾巴不移走你確實(shí)應(yīng)該判死。所以檢測(cè)函數(shù)的第三個(gè)參數(shù)grow必須精確傳達(dá)“這一幀蛇是否增長(zhǎng)”的狀態(tài)兩個(gè)分支處理方式不同。6.5 我給新手的排查技巧單步調(diào)試模式調(diào)試游戲邏輯比調(diào)試普通程序難點(diǎn)在于畫(huà)面一直在變。我的做法是加一個(gè)隱藏的“單步模式”按P鍵進(jìn)入暫停按N鍵手動(dòng)執(zhí)行一次update然后打印出蛇頭坐標(biāo)、方向、長(zhǎng)度和下一幀新頭位置。if (key n state STATE_PAUSE) { updateGame(); drawGame(); }這個(gè)功能在排查“為什么這里撞了”“為什么那里沒(méi)撞”時(shí)極其有效你可以一幀一幀地觀察蛇的狀態(tài)變化。等所有邏輯都調(diào)通了再把這個(gè)調(diào)試分支注釋掉。在我看來(lái)控制臺(tái)貪吃蛇這個(gè)項(xiàng)目寫(xiě)到這里已經(jīng)不是“能不能跑”的問(wèn)題而是“好不好玩”的問(wèn)題。環(huán)形數(shù)組把蛇身管理變得穩(wěn)定定點(diǎn)重繪消滅了閃爍固定時(shí)間戳讓加速減速都變得可控狀態(tài)機(jī)又給了你擴(kuò)展菜單和暫停的底氣。這一套思維不止適用于貪吃蛇你隨便拿一個(gè)控制臺(tái)小游戲套上“狀態(tài)機(jī)定時(shí)更新局部重繪”這個(gè)框架手感都會(huì)比瞎寫(xiě)一氣的版本強(qiáng)很多。后面如果再想加?xùn)|西最高分存檔、蛇的AI自動(dòng)尋路、雙人模式都只是在這個(gè)骨架上面繼續(xù)長(zhǎng)肌肉了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产精品丝袜在线| 国产一区麻豆免费观看| 国产无码精品无码| 国产外初女出血视频| 亚洲色图激情小说| 九九黄色视频在线观看| 欧美伊人久久综合网| 久久久久96| 91偷拍欧美亚洲| 夜夜操狠狠操| 另类小色呦| 中国AAAAAA黄色片| 亚洲情欲| 操国产逼| 日本孕妇一区二区视频操逼免费看 | 污污汅18禁网站在线永久免费观看| 99热精品在线观看| 四虎免费视频| 欧美夜色| 国产视频第2页| 亚爽爽爽爽爽爽爽爽| 久7色| 欧美熟爽综合| 91九色丨国产丨爆乳| 丁香六月天| 人、人、摸,人、人、草| 日韩中文字幕精品一区在线| 天天看夜夜看日日干| 性欧美91| 极品肉射| 日本成人在线不卡一区二区三区 | 成人八戒网站| 99热这里只有精品地址| 午夜男人一级A片7777| 人人摸人人摸人人干| 日韩中文字幕人妻视频| 国产 亚洲 丝袜 制服| 色综合av男人天堂| 久久综合激情| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 中文字幕97色| 久操免费观看| 婷婷超| 国产精品高潮久久久无码| 一区二区三区国产在线播放 | 久热色情精品| 激情图片亚洲色图| 精品久久大胆人体| 欧美劲爆第一页| 91网站18禁| 超碰97人妻在线| 张柏芝国产一区在线观看| 久久男人的天堂| 精品无码久久久久久久杏吧| 情趣丝袜无码操逼视频| 国产高清MV操逼视频| 在线国产探花| 精品制服美女中文一区二区三区| 96麻豆精品一区二区三区| 国内一区二区免费| 视频黄色国产一级| 日韩精品99999| 99热综合在线| 天天激清| 亚洲福利中文字幕在线| 极品丝袜无码| 久久精品高清无码一区| A级在线视频| 亚欧毛片基地国产毛片基地| 啪啪啪大香蕉| 天天综合网亚洲综合网| 亚洲av青草久久一区二区| 久久精品午夜国产亚洲AV无码| 久久久亚洲高清不打码| 高凊专区人人操| 亚州九九九精品视频| 国产精品久久久亚洲第一牛牛_在线观看| 欧州一区二区三区四区| 欧美大香蕉97| 久操国产在线| 成人5码视频| 91色女| 欧美黑人168页欧美黑人167| 操逼逼一区视频| 婷婷激情五月综合| 任你干在线视频| 2023天天操夜夜操| 99超碰色| 久久午夜神马| 黄色性爱网网| 日本黄色裸日本黄色裸体 | 青娱乐久久艹| 伊人青青草久久| 蜜臀久久99精品久久久久久-DVD| 久久三| 高凊专区人人操| 午夜传煤十二区精品| 久久东京伊人一本到鬼色| 99热超碰| 欧美日韩中文字幕不卡| 欧美日韩 强奸乱伦| 婷婷激情一区二区三区俺也去| 国产sv美女内射| 成人免费福利在线观看| 超碰免费欧美7| 亚洲欧洲自拍图片专区满春格| 激情网五月天| 日本一级特级毛片视频| 久久97资源 网| 国产一级内射高清视频| 99国内精品| 中国少妇啪啪视频| 殴美性色a级欧美| 伊人国产AV| 人人干人人搞人人摸| 久久爽爽精品| 一级片在线观看高清无码| 97 视频在线| 久久精品国产亚洲AV清纯| 久久国产精品91| 久草午夜| 欧美少妇性乱| 国产激情综合| 91综合中文字幕| 麻豆蜜桃视频在线观看| 国产真乱mangent| 91色图片| 免费看日产一区二区三区| q2午夜理论片夜色av| 乱色视频中文字幕| 人人操人人肉久久精品| 伊人青青一区成人视频在线观看区| 超碰九7免费| 极品丝袜无码| 中文字幕一区二区日韩网| 欧美日韩亚洲高清不卡一区二区三区| 亚洲春色一区二区三区| 九九九九九九成人| 婷婷五月天影院| 天天拍夜夜| 九九夜精品九九在线| 成人七区| 色五月AV| 久久久99999久网站| 草草影院日本第一页| 午夜毛片高清免费不卡| 开心五月婷婷| 久久av成人无码免费| 免费男人的天堂| 国产免费一区二区在线A片视频| 91综合网在线| 欧美少妇色综合| 人人考人人摸人人干| 精品九九九九九九| 成熟熟女国产精品一区二区| 精品久久久亚洲AV成人网站| 嫩草影院在线观看精品| 亚洲欧美色图| 五月天欧美色图| 亚洲图片 91| 亚洲第一精品在线视频| 国产一区二区二区按摩精品啪视频| 韩国三级三级BD在线| 熟女人妻一区二区三区| 亚洲人成网站7777| 欧美伦乱| 精品9999| 久久久久9| 嗯啊不要在线观看嗯啊| 国产综合网站在线播放 | 国产色综合亚洲色综合吹潮| 成人三级片一区二区三区视频| 成年男人的天堂| 免费观看的黄色的网站| 日本成熟少妇A∨网站| 性欧美999| 国产AV天美传媒一区二区三区 | 久久久久久AⅤ无码免费肉站| 91天天综合日韩欧美| 亚洲情色在线| 精品人妻一区二区免费蜜桃| 亚洲超碰在线| 亚洲欧美国产日本一区二区三区| 91人妻Pr| 天天做日日爱夜夜爽| 中文操逼字幕| 老熟女网站| 凌辱美少妇久久aV| 97在线免费视频观看| 国产人妻精品一区二区三区秋霞 | 91精品国产91久久福利| 一二三区精品视频| 日逼97| 蜜桃视频一区二区三区| 狠狠躁天天躁日日躁| 校园春色之综合网| 91丝袜美女国产| 99视频精品| 日韩人妻 中文字幕| 亚洲第一页第二页激情| 国产内射爽爽大片| 亚洲五码一区二区三区| 久久肏大逼| 国产女人与拘做受视频免费| 美女写真| 1024人妻熟女一区二区三区| 国产99久久99热这里只有精品15 | 97人妻碰碰中文无码久热丝袜| 国精精品无码一二三区水多多| 精品人妻一区二区三区四区石在线| 伊人网高清| 久久只有精品| 亚洲高清无毛一区二区| 色欲无码人妻日韩欧美精品| 成人5码视频| 大香网站| 精品免费1| 内射日韩大臀美女| 欧美偷偷网| 欧美色图自拍| 99re超碰| 黄色av一区二区在线| 久久精视频美日韩在线视频| 亚洲一区日韩| 日日骚 av| 久久久精品久久| 九九九九一区| 欧洲特黄毛片免费看欧洲毛片| 亚洲无码 国产无码| 天天视频网站黄| 最新岛国大片| 亚洲天堂久久| 北条麻妃性愛视频| 大粗鳼巴久久久久| 久久国产逼| 久久九九视频九九视频| 五月天丁香网| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 少妇人妻在线| 91在线欧美| 国产一区自拍欧美日韩| 欧美综合骚| 黄总AV色图| 国内精品久9| 综合网天天| 免费一级a毛片久久久久久鸭绿欲 国产精品亚洲天堂网址 | 超碰99在线| 特级大荫道BBwBBwBBW| 欧美精品久久| 亚洲欧洲激情卡通另类文学四射小说网站 | 久久78| 伊人久久大香线蕉无码| 婷婷色一区| 日韩八十路老熟女| 欧洲特黄毛片免费看欧洲毛片| 全免费a敌肛交毛片免费| 亚洲高潮少妇| 97超碰国产亚洲精品| 中文字幕熟女人妻丝袜| 在线v中文字幕一区二区三区| 国产自产91区13区| 青青草大香蕉视频| 伊人久久88国产女| 91美女片在线| 去干网最新版| 9久精品视频在线观看| 人妻一区二区三区熟女| 99久久久无码国产精品性男| 美日韩在线不卡人妻| 亚洲欧美天堂| 最新欧洲欧美日本激情网站| 四虎精品一区| 成人七区| 精品久久艹| 中日韩一区二区三区欧美| 日韩性爱高清免费视频| 中文字幕在线2| 色黄污美女啪啪啪免费网站| 亚洲综合在线高清| 2017av无码免费无线播| 亚洲精品97在线| 男人天堂2030| 大香蕉宗合网在线| 国产精品视频在线观看| 99热精品在线| 女生久久网| 国产后入精品| 私人尤物在线精品不卡| 中文字幕91综合| 国产女人视频三四五区| 中文字幕乱码人妻一区二区三区,99精品| 一区二区三区一亚洲中文字幕、综合区灬| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 97资源制服丝袜| 97这里有精品| 嗯啊不要在线观看嗯啊| 97亚洲精品| 久久理论字幕视频| 9久在线视频只有精品| 97九色人妻| A级在线视频| 999久久久久久久精| 97亚洲精品| 天天干2019| 超碰日韩人妻| 人妻少妇三级| 激情四射五月天| 亚洲欧美校园| 蜜臀人妻少妇久久在线观看| 乱伦图av| 亚洲素人综合| 九九无码久久精品视频| 精品一区二区综合熟妇| 欧亚日本情色| 香蕉在线一区二区三区| 在线中文字幕| 青青草综合在线| 久久久com| 亚洲码在线中文在线观看| 精品无码人妻一区二区免费蜜桃| www网站黄| 国产sv美女内射| 人人澡综合涩| 制服乱伦| 人人干黄色| 欧美与日韩97| 爱爱动态120秒| 370p日韩欧美亚洲精品| 蜜臀网址在线| 黄网站黄视频网站进入口| 日本激情免费大片| 青青在线视频日韩欧美| 色综合20p| 99热这里是精品| 一级毛片久久久久久久女人18| 欧美熟女逼久久久久久| 粉嫩国产精品久久久| 亚洲五码一区二区三区| 久久久久97| 九九九草| 二级久久网| 激情五月婷| 四虎国产精品永久地址入口| 大香蕉综合网| 素人伊尹大香蕉免费下载视频| 中文字幕在线观看丝袜| 在线精品福利免费播放| 成 人 A V免费视频在线观看| 俺去啦自拍| 色婷婷蜜臀av| 日本三级久| 久久久久亚洲Aⅴ无码| 中文字幕丰满人妻日本| 人妻熟妇一区二区三区| jiujiujiujingpin| 国产性刺激| 久久久久久久久久久久久久久性生活视频 | 激情五月天中文字幕色| 夜夜高潮夜夜爽夜夜爱爱一区| 操一区| 夜夜夜久久| 天天综合色| 天天干天天狼在线视频| 亚洲AV无码AV吞精久久久久| 成全动漫视频观看免费下载| 青草成人免费视频一COm| 91美女国产在线| 妇女视频网站| 午夜天堂网| 久久久精品国产亚洲伊人| 国产亚洲综合欧美一区| 熟女色综合久久| 久久五月天婷婷丁香中文字幕| 放黄片放3级黄片没穿衣服| 91欧美网| 日韩啪啪视频| 美女网站91| 久久99国产精品| 欧美熟妇精品黑人巨大91| 99精品无码| 欧美在线第五页| 91伊人久久在线| 亚洲天堂资源| 国产后入式在线观看| 蜜臀久久99'精品久久久| 粉嫩久久久久| 男人的天堂1024| 蜜臀久久99精品久久久久久成人小说 | 欧美小说区视频区| 丰满人妻一区二区三区免费| 狠狠操狠狠操操| 在线αⅴ| 岛园激情| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 亚洲经典啪啪| 五月天婷婷色| 欧美极品女人的天堂| 亚洲天堂另类美腿| 中国小夫妻勾搭露脸淫荡对白| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 中文字暮97| 亚洲国产一级中文综合久久天堂在线免费观看 | 美欧老女人97| 舔人妻中文免费视频| 国产97色在线 | 亚洲| 97欧美日韩| a男人的天堂久久一级A毛片| 欧美少妇性爱网站| 五月婷婷五月天| 欧美有码亚洲中文字幕一区二区三区四区| 欧美性综合| 台湾佬大香蕉| 岛国毛片在线观看免费| 婷婷久久五月| 插老姨肥穴| 欧洲色综合| 99久久99久久免费精品蜜臀| 亚洲 自拍偷拍 欧美| 亚洲成人网站在线观看| 91欧美成人色站| 日韩成人小视频| 精品人成视频在线观看| 国产无码一二三区| 国产精品网站免费| 一本色道熟妇| av绯色| 裸体美女国产免费久久久网站| 91撸色网 玖玖网 欧美| 欧美—性—交—色| 在线观看成人性爱免费小视频| 日韩av乱伦| 91中文精品日韩欧美在线| 巨乳特殊服务按摩| 岛国片国产成人亚洲播放| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 日本特黄f c2| 亚洲国产福利视频| 精品成人亚洲午夜电影| 91大胆欧美| 日本二区不卡| 蜜乳AV一区| 婷婷伊人一区| 亚洲风情在线观看| 丁香五月激情综合国产| 国产偷人妻精品一区二区在线| 亚洲天天操| 国模精品娜娜一二三区| 欧美综合网1| 久久久精品91八戒| 丝袜综合色图| 日产操逼| 91在线免费观看处女| 亚洲三级。日韩三级| 久草免费在线一区二区| 福利一级版子| 久久国产性爱| 亚洲鸥美色图| 天天看天天在线精品| 麻豆婷婷成人一二三| 九九热九九| 性爱动态120秒| 清纯唯美综合| 六月丁丁香| 青青草一区二区高清无码视频| 国产精品成人蜜臀AV在线| 人妻天天爽| 天天操天天干一区二区 | 花花AV导航| 婷婷亚洲天堂| 91熟女丨老女人| 久久怡红院| 99re这里只有| 欧美另类色图片| 久久97超碰| 国产怡红院| 91精品无码久久久久久久| 午夜福利久久久噜久噜久久综合| 国产毛片片精品天天看视频| 欧美性爱一内片一区二区三区| 2020久久免费视频| 欧美精品 - 91爱爱| 成人小说视频在线精品欧美| 鸥美极品| 色丁香五月婷婷| 水多多映视AV| 欧美成人国产精品| 久久97| 懂色aV一区二区天美传媒| 久久久噜噜噜久久久| 日韩有码 一区二区三区| 大香蕉色网| 一级久久久久久久久久久| 96精品久久久| 超碰公开久久网| 无码高清少妇久久| 中日韩久久久免费看| 黑丝少妇在线观看| 成人a级高清视频在线观看| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 国产偷拍网站| 国产av色网| 91久久久久免| 中字幕人妻一区二区三区| 亚洲性感丝袜诱惑在线观看| 婷婷综合五月天| 日韩精品在线放| 日本五区不卡| 午夜欧美J进J出白浆流出久久久| 国产AV久久久蜜爱影集| 精品一级毛片在线观看| 无卡一区=区| 夜夜夜久久| 国产精品久久久久综合| 国语av狠狠色丁香婷婷综合激情| 久操影视| 97爱亚洲综合色| 99久久久久| 日逼逼免费看| 精品九九九| 乱色老一区二区三区的观看方式| 日本一二区免费| 日本污ww视频网站| AV污污污污| 高清国产无码av| 欧美高清16| 色哟哟av网址| 中日韩久久人妻一区二区| 操操啪| 午夜福利精品| 九九热久久99精品re| 1区2区3区视频| 蜜桃传媒视频第一区入口在线看| 磁力99AV| 欧洲Au麻豆| 精品少妇后入一区二区三区四区人妻巨乳| 爱av免费| 中文字幕成人理论在线| 久久透逼视频| 人人妻碰人人免费| 东京热男人的天堂| 97视频免费播放| 欧美另类天堂| 日本在线999| 死我十八禁| 天综合网欧美| 青草园大香蕉| 色香91| 日本最新1区2区3区| 91真人天天在线| 久久久中文版| 热久日综合| 日本精品性生活久久久| 骚熟女吞| 大香蕉伊然在亚洲91| 国产精品一区二区后入| 日韩中文字幕宗合在线| 午夜AV污污污| 欧美日韩系列| 欧美日韩色| 热热色91| 2023天天操夜夜操| 亚洲高清无毛一区二区| 91精品久久久| 3D污黄视频在线观看| 视频黄色国产一级| 国产CHASE男男GAYGA 毛多色婷婷| 婷婷五月天激情网| 大香蕉520| 吻戏激情性巴克| 殴美,日韩国产伦精品| 高凊专区人人操| 婷婷色香| 日韩国产九九精品一区二区三区毛片| 婷婷五月天色网| 97天天| 日本黄色精品专区网站| 日本东京热加勒比久久| 无码伊人久久大杳蕉中文无码| 成人av免费观看| 婷婷色一区| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 国产AV毛片| 五月婷婷啪啪| 97色色色综合网站| 韩国嫰模上门援交视频| 国产97色在线| 日本性爰一道本| 亚洲成a人片在线观看中文!!!| 国产成人一级av88| 九九九久久久久| 色噜噜国产在线| 五月天久久婷婷亚洲| 天堂在线一区二区| 久久老熟女| 免费人成毛片乱码| 约操熟妇| 日本熟妇一区二区三区| 精品人妻一区二区乱码一区二区| 久久久久久久久久久精| 欧美97| 日欧亚洲二三区大片不卡| 国产67194| 躁躁日曰躁2020| 黄色交缠性感爆操91国产精品免费一区二区三区 | 九九草| 可以在线观看的黄色网址| 五月丁香婷婷色| 啊啊啊啊操死我了| 国产精品福利视频| 久久肏大逼| 久久超碰、| 极品少妇久久久| 久久av一级av少妇av高潮| 婷婷月色| 人人妻人人色一区二区三区| 日韩偷拍一区二区三区| 婷婷五月天成人| 黄久在线| 国产日韩欧美中文在线播放| 殴美,日韩国产伦精品| 超碰碰小说97| 日韩在线一区高清在线| 青青草九九九九九| 亚洲天天自拍| 岛国黄色大片网站| 98精品国产乱码久久久久久| 操碰97| 99性爱| 青青草色AV| 蜜乳AV一区二区三区四| 老女人碰碰在线碰碰视频| 另类图片欧美激情综合| 天美国产三级传媒| 黑人综合网| 屌色在线97视频| 91精品丝袜久久久久久| 啪啪啪大香蕉| 一区二区视频在看| 99热精品在线| 天天综合中文字幕 91| 337p大胆噜噜噜噜噜91Av| 夜夜嗨一区| 欧洲熟妇xxXx欧美老妇裸体| 亚欧操逼片在线观看| 欧美劲爆视频一区二区| 九九热午夜欧亚国产视频| 国产三级日产三级韩国三级| 亚洲国产亚洲天堂| 国产91久久九九免费精品无码| 日本免费一区二区不卡| 人人操人人摸人| 黑人综合色| 国产成人久久久精品免费AV| 日天天九九天堂666| 久9热| 97Ai亚洲| 久久久久久久 九九九九九九九| 亚洲97| caopeng97人妻| 国产在线强奸视频| 天天干1区2区在线| 这里有精品| 成人精品在线免费视频| 五十路熟女工口 | 久久成人国产| 91青青| 国产日本熟女顶级一区二区三区视频 | 国产精品久久久久久无码红治院| 久久精品99| 99精彩视频| 精品无码一区二区三区| 欧美青青草视频| 26uuu国产| 家庭乱伦国产精品| 97爱啪| 亚洲麻豆精品二区三区| 国产精品爱欲| 亚洲精品蜜桃久久久| 久久精品亚洲婷婷| 五十路三级片| 亚洲欧美另类小说| 97爱b| 五月综合色| 一级特黄aaa大片在线观看成人一级片在线观看| 久久九精品| 农村妇女一级二级三级视频| 偷拍亚洲熟女视频播放| 国产午夜精品一区二区三区牛牛| 亚洲人成色9999精品久久| 精品视频免费在线一区| 天天爱天天操| 91AV天美在线视频| 乱日视频| 日本在线不卡一二区| 韩美日操逼| 国产精品伦理| 欧美亚洲成人在线一区二区三区| 九九热精品视频在线观看| 日韩三A大片在线观看| 亚洲色图欧美色18直播在线| 美女毛片999| 国产天美欧美| 乱伦熟女区| 日韩熟女乱伦中出| 欧美91在线| 黄页网站成人免费| 熟女网站最新| 91+欧美| 熟妇熟女视频一区二区三区| 夜色AV无码手机在线影院| 88xx成人精品视频| 我要色综合网| 亚洲图片欧美偷拍| 亚洲精品乱码久久久久久蜜桃麻豆| 91天美传媒精品| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 91在线/欧洲| 亚洲一区二区三区麻豆传媒| 91久久久久免| 色噜噜狠狠色综合日日| 爱av免费| 天天操天天舔| 亚洲高清无码AAA久久久精品| 7777奇米影视久久| 日韩免费福利在线观看| 日韩成年人性爱视频| 欧美中文综合| 色图综合| 91欧美综合| 久操免费观看| 91天天综合日韩欧美| 亚洲综合在线91| 日韩在线观看AV| 天天干夜夜| 天天操熟妇| 91美女高潮| 久久99干一本高清| 亚洲欧美校园| 亚洲天堂资源在线| 好属操| 超碰78| 富女玩鸭子一级毛片| 日韩欧美亚洲自拍偷拍| 国产精品国产亚洲区艳妇糸列| 国产女大学生AV| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 亚春色色| 青草成人免费视频一COm| 天堂综合网| 国产免费一区2区3区| 伊人热综合| A级毛片在线看免费| 欧美日韩亚洲一区二区在线观看| 日本操大逼| 2020国产精品| 欧美1727免费观看视频| 国产精品久久久蜜臀| 青青欧洲黑| 日韩日韩日韩-国产乱码精品一区二区| 精品丰满熟妇人妻一区| 亚洲熟女av中文字幕| 黄色成人网久久久久久| 激情网色| 九九热视频在线观看| 日韩女优中文字幕| 91在线/欧洲| 国产区在线| 国产欧美在线观看免费观看| 艹精品| 性爱视频久久| 麻豆影音天美视频| 白嫩妹子国产骚| 97香蕉网| 特级丰满少妇一级AAAA爱毛片| 色激情五月天| 伊人一区二区三区| 午夜噜噜噜| 亚洲电影中字一区二区| 在线可观看的黄色网址| 91久久久久久久久久久| 操逼短片| 青娱乐淫乱1314| 亚洲色图亚洲无码强奸乱伦| 香一区二区三区| 亚洲综合另类色图| 天天干天天舔| 九九综合久久| 久草草一二三四区久久| 超碰美女97| 中日韩久久久| 国内黄色精品| 日骚逼视频| 亚洲日韩美国人妻| 亚洲男人天堂2012| 日韩精品 欧美激情| 久久男人精品| 91亚·色| 97超碰精品图片| 国产专区第一页| 伊人97色天使| 2017天天插| 艹比视频国产精品| 欧美久久久15P| 久久久久久九九九| 免费一级视频特黄色大片| 成人精品一区二区三区| 综合久久少妇中文字幕| 色色五月婷| 青青草一区二区三区四| 久久精品 六十路 熟女 欧美| 99无码视频| 骚妻少妇精品性色无码四色A V| 久久国产逼| 欧美三级一级| 亚洲风情在线观看| 久久九色| 欧美在线第五页| 国产欧美精选自拍一区| 久久熟妇五十路一区| 91亚洲网| 亚州色交| 女人综合网| A V少妇特黄三级| 欧美激情 亚洲色图| 国产又大又硬又长又粗| 91女优在线观看| 中日亚韩免费视频| 一本久久精品中文字| 91亚洲色人| 97色色,97综合| 五月天久久综合网| 国产午夜视频| 日韩在线性爱免费视频| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 欧美少妇第一页| 天天视频黄| 欧美色66| 欧美αv.com| 91欧美综合在线| 国产精品探花在线| 成人精品久久| 伊人AAA| 七月丁香婷婷| 午夜性| 成人a大片在线观看| 亚洲天天影视色综合| 综合操逼| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 一区二区激情国产熟女 | 开心五月深爱五月| 久久久久久九九九九| 久久久9品一区二区三区| 欧美成年人性爱视频免费观看| 中文字日本乱码| 欧美经典一区二区三区| 综合色久欲| 欧美夜夜狠| 亚洲精品一区二区精华| 国产熟女二区| 日本中文字幕在线视频| 中文字幕乱码在线| 天堂在线一区二区| 亚洲精品国产精品乱码不99| 亚洲久9| 青青青青草av在线观看| 久久夜黄色无码A级大片| 欧美色图亚洲色,麻豆| 婷婷五月成人| 操逼无码操逼| 超碰这里有精品| 美女诱惑爱爱| 日本操大逼| 欧美78P| 国产中文福利| 99热9| 成人无码在线视频网站| 精品丰满熟妇人妻一区| 九九九九88| 探花一区在线| a片在线播放| 精品丰满熟妇人妻一区| 手机不卡视频不卡在线一二三区| 色哟哟511老熟女| 午夜爽爽爽| 97在线资源| 九九久久久久久爱| 综合自拍| 国产美女裸体秘 永久无遮挡| 久久大香蕉97| 亚州中文字幕超碰97| 日本大片日本一区二区免费高清| 国产美女销魂在线观看不卡| 日本欧美不卡| 午夜AV污污污| 熟女中出视频| AV天天在线观看| 成人三级片无码| 天天躁日日躁成人字幕aⅴ| 亚洲综合色图欧美| 裸体1区| 亚洲AV乱码专区国产噜噜亚洲| 国产精品一区二区 尿失禁| av网站免费线看| 欧美天天综合网版| 久久精品国产97欧美精品亚洲| 青娱乐大香蕉| 大香蕉伊人网WWWn0n| 丁香五月天啪啪| 91爆操视频| 嫩草在线视频| 亚洲婷婷丁香在线| 欧美91变态| 天天色综合影视网| 伊人嫩草| 色香综合天天影视综合| 精品乱码久久久久| 少妇500双飞99| 啊啊啊用力在线观看| 操久久久久久| 色色色综合网| 日韩久久激情精品| 国产强上视频在线观看| 日韩国产欧美伦理在线| www.久久制服糖| 中文字幕日韩专区精品系列| 粉嫩av在线| 国产精品精品系列在线观看| 超清中文乱码字幕| 国产精品天堂| 91亚洲欧洲| 国产传媒一区二区三区| 999999精品| 青草精品视频-日本久久久久网站| 91白嫩| 好爽视频在线观看| 一区二区影视| 91骚熟女| 乱抡国产91| 久久伊人亚洲AV无码网站| 男女做爰猛烈动高潮A片免费应用| 岛国爱情动作片在国产AV无码专区亚洲AV漫画| 亚洲欧美黄| 国产白丝精品在线观看| 精品综合久久久久久五月天| 草草电影院| 日本人妻中文字幕精品| 天天做日日做| 亚洲国产麻豆一区二区三区| 亚洲 欧美都市激情| 国产精品久久久啊| 中文乱码字字幕在线第5页| 日韩免费a级毛片无码a∨| 午夜成人爽爽爽爽A片李冰冰| 亚洲成人精品在线一区| 国产日韩欧美中文在线播放| 欧美日韩激情无码专区| 3p国产欧美99热| 亚洲精品男人的天堂| 国产suv精品一区二区四区999| 自拍丝袜美腿人妻| 国产精品丝袜久久亚洲不卡| 青青久久久| 亚洲熟女综合一区二区| 91一区二区三区蜜桃| 亚洲国产成人福利在线观看| 免费啪啪啪网站18岁| 亚洲丝袜色| 东北女人| 色路综合| 成人一道本免费视频| 天天视频综合在线观看视频| 丁香五月影院| 中文字幕97色| 97精品全部| 国产精品麻豆成人av| 乱伦日本色图AⅤ| 91n美女视频| 中文字幕一区二区三四五区日日骚| 婷婷九月丁香| 大二网站亚洲| 超碰成人国产| 综合网亚| 超碰色图| 亚洲精品人妻在线| 日本 欧美 亚中文字幕| 成人五月天色网| 91狠狠综合久久| 午夜亚洲国产理论秋霞| 日本熟妇一区二区三区| 九九国产热| 亚洲精品97| 日日碰狠狠添天天爽超| 伊人色综合超碰| 强乱老妇中文字幕| 国产一区在线观看无码AV| 九九综合| 美女丝袜激情小说| 91久久久亚洲| 亚洲色久| 国产热av| 日日操免费视频| 国产av尤物| 欧美天天在线| 亚洲密乳AV| 96AV精品| 九久久九九久视频| AV无码久久久精品| 美欧老女人97| 青春草莓视频在线观看网址| 香蕉久久国产AV一区二区| 91AV天美在线视频| 四虎午夜影院| 国产视频三区四区| 高清视频一区| 强奸xx国产| 2019亚洲男人天堂| 久久五十路熟女人妻| 亚洲一区二区三区麻豆传媒| 亚洲精品少妇| 色色99| 性欧美999| 性做久久久久久免费观看软件| 蜜桃一区二区三区| 亚洲国产精品99久久久| juliaann精品熟女一区| 91丝袜在线播放| 99在线免费视频| 亚洲欧美骚| 色噜噜狠狠色综无码久久合欧美| 9.1小视频| 午夜福利成人免费视频| 欧美综合自拍亚洲综合图| 欧美日韩精品一区二区三区高清| 美国久久一二三四| 性色av大全| 美女AV一区二区| 久久精品日韩| 天天日美女的B| 人妻系列无码专区中文有码| 亚洲一区亚洲天堂| 无码黑人精品一区二区三区三| 九九九九九九九九九九九九九九九女| 中文字幕日韩电影人妻| 欧美伦乱爱| 操高情无码| 日本天堂在线播放| 欧美成人性爱视频大全| 欧美色干| 国产青一二三| 国产一区免费午夜视频| 青娱乐手机日韩在线视频| 国产精品久久久久久久毛片1| 蜜乳av一区二区三区四区不卡| 亚欧成人中文字幕一区| 激情文学小说一区二区 | 亚洲日韩肥臀视频在线观看| 精品国产一区探花在线观看| 97色97好| 亚洲精品亚洲人成在线麻豆| 亚洲欧美综合图片| 蜜臀久久99精品久久综合| 黄片视频观看| 亚洲男人的天堂网| 国产一区二区啪啪视频| 久久区| 黄呦呦在线| 第一高清av中文字幕| 久热一区二区| 另类 综合 日韩 欧美 亚洲| 久久免费精品视频免一| 高清无码人妻久久久一区二区三区aⅴ| 偷拍欧美激情| 多毛小伙内射老太婆| 91白虎| 五十路熟女工口 | 99re只有精品| 深夜激情无码| 午夜精品久久一区二区| 制服诱惑亚洲一区二区三区在线观看| 亚欧性爱在线无码| 成人国产视频在线观看| 日韩八十路老熟女| 国产少妇肉丝在线观看| 亚洲欧洲日韩天堂av| 精人妻一区二区三区| 爱啪精品一区| 五月丁香网站| 美女极品一区二区三区| 屁股久久久久久| 久久色AV线| 亚洲男人的天堂一区二区| 日韩精品在线观看网站| 亚洲影院无码在线| 婷婷10月天青娱乐| 日韩精品99久久久久久中文字幕 | 超碰超碰超碰超碰的大鸡吧操黑丝袜| 色哟哟-国产专区| 激情综合久久| 精品欧美А∨无码黑人大荫蒂 | 国产在线观看91精品一区| 69精品少妇一区二区三区蜜桃| 高潮的A片激情扒开一区| 青青青在线高清视频在线一二三四区| 黄色不卡视频| 中文字幕黑人大片| 欧美性爱视频免费一区一A| 18禁看网站一区| 中国和日本人色哪个不下载能放| 亚洲自拍一区夜夜操| 蜜桃成人1区2区3区| 立川理惠加勒比无码| 一本精品日本在线视频精品| 亚洲精品97| 日韩人妻无码不卡网站| 国产九九九九九九| 天美传媒在线一区| 97欧美精品综合| 9久超碰| 成人av免费观看| 唐山老熟妇露脸啪啪叫| 黑人美精品 A片| 99久久久无码国产精品性啊聊| a啊啊啊啊啊啊啊啊一区二区| 欧美高潮| 青娱乐手机日韩在线视频| 吉川爱美98堂在线| 日韩97超碰中文字幕| 天天操夜夜操| 啪啪啪大香蕉| 日韩性爱高清免费视频| 日韩精品亚洲专区在线影视| 一区操逼日比视频| AV和黑人在线播放| 超碰无码加勒比| 秋霞免费无码视频日韩A片| w w w.久久精品| 性色亚洲| 蜜臀99久久| 九九九九热| 女人天堂av在线播放| 亚洲天天综合| 成人五月天丁香激情综合| 农村女一级毛卡片| 一起草三级AV电影在线观看| 亚洲国产成人精品女人久久久| 亚州一区二区| 麻豆三极片| 亚洲 小说 欧美 激情 另类| 欧美中文字幕日韩在线| 性饥渴少妇av无码毛片| 日韩熟女乱伦中出| 国产精品干干干| 播播亚洲小说亚洲| 777奇米影视777四色| 亚洲欧美激情在线视频| 久久九九综合| 97中文天堂| 色情亚洲日本成人| 久操影视| 久久香蕉国产线看观看亚洲女人 |