99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

Dev-C++與EGE圖形庫:零基礎(chǔ)實(shí)現(xiàn)“躺平發(fā)育”游戲原型

Dev-C++與EGE圖形庫:零基礎(chǔ)實(shí)現(xiàn)“躺平發(fā)育”游戲原型 1. 項(xiàng)目緣起為什么是Dev-C與“躺平發(fā)育”如果你是一位對(duì)游戲開發(fā)感興趣但又覺得Unity、Unreal這些引擎門檻太高或者C#、C的現(xiàn)代開發(fā)環(huán)境配置起來太麻煩的初學(xué)者那么你很可能和我?guī)啄昵暗臓顟B(tài)一樣。那時(shí)候我想做點(diǎn)小游戲但光是搭建一個(gè)能跑起來的開發(fā)環(huán)境就勸退了好幾次。直到我重新?lián)炱鹆藢W(xué)生時(shí)代用的Dev-C配合上一些“躺平”式的開發(fā)思路才發(fā)現(xiàn)原來用最“古老”的工具也能快速體驗(yàn)到游戲創(chuàng)作的樂趣?!疤善桨l(fā)育”這個(gè)詞最近在游戲圈里挺火它描述的是一種避開激烈競(jìng)爭(zhēng)、專注于自身成長和資源積累的玩法策略。我把這個(gè)概念挪用到了游戲開發(fā)學(xué)習(xí)上。對(duì)于新手來說一上來就追求酷炫的3D效果、復(fù)雜的網(wǎng)絡(luò)同步無異于在“新手村”就挑戰(zhàn)終極Boss挫敗感極強(qiáng)。真正的“躺平發(fā)育”應(yīng)該是選擇一個(gè)極其輕量、幾乎零配置的開發(fā)環(huán)境從最核心、最有趣的部分比如游戲邏輯直接入手快速獲得正向反饋在不斷的“小勝利”中積累經(jīng)驗(yàn)和信心。Dev-C 5.11一個(gè)十幾年前就停止官方更新的IDE恰恰是“躺平發(fā)育”的絕佳選擇。它體積小安裝包幾十MB、綠色免安裝解壓即用、內(nèi)置了MinGW編譯器你不需要單獨(dú)配置任何環(huán)境變量。更重要的是它支持純Win32 API和古老的圖形庫如EGE、EasyX這些庫的API簡(jiǎn)單直接沒有現(xiàn)代游戲引擎那層層疊疊的抽象讓你寫的每一行代碼都直接與屏幕上的像素、鍵盤的按鍵打交道。這種“所見即所得”的掌控感對(duì)于理解游戲底層運(yùn)行機(jī)制至關(guān)重要。所以這個(gè)項(xiàng)目不是要教你用Dev-C開發(fā)一個(gè)商業(yè)級(jí)的游戲而是帶你用這個(gè)“老伙計(jì)”快速搭建一個(gè)可玩的游戲原型體驗(yàn)從零到一的完整過程。我們會(huì)做一個(gè)類似“塔防”或“生存建造”概念的簡(jiǎn)易版“躺平發(fā)育”玩家控制一個(gè)角色在場(chǎng)景中收集資源、建造防御設(shè)施抵御周期性來襲的“怪物”。整個(gè)過程我們將聚焦于游戲循環(huán)、圖形繪制、鍵盤交互、簡(jiǎn)單碰撞檢測(cè)這些核心概念。2. 環(huán)境準(zhǔn)備與“踩坑”指南讓小熊貓Dev-C跑起來雖然Dev-C以簡(jiǎn)單著稱但在今天的Windows系統(tǒng)上直接使用還是會(huì)遇到一些“時(shí)代差異”導(dǎo)致的小問題。網(wǎng)上搜索“小熊貓dev-c安裝”的熱度恰恰說明了大家在這第一步就遇到了麻煩。別擔(dān)心跟著下面的步驟我們可以完美解決。2.1 獲取與安裝選對(duì)版本是關(guān)鍵首先絕對(duì)不要從一些莫名其妙的下載站獲取Dev-C。里面捆綁的垃圾軟件會(huì)讓你苦不堪言。推薦以下兩個(gè)可靠來源Embarcadero Dev-C這是原Dev-C項(xiàng)目停止后由Embarcadero公司維護(hù)更新的分支。它修復(fù)了原版在Windows 10/11上的很多兼容性問題是當(dāng)前的首選。你可以去Embarcadero的官網(wǎng)或SourceForge頁面下載。Orwell Dev-C這是在原版停止更新后另一個(gè)比較活躍的維護(hù)版本也修復(fù)了大量Bug。我個(gè)人的選擇是Embarcadero Dev-C。下載下來通常是一個(gè)exe安裝包安裝過程無腦下一步即可。安裝路徑建議不要有中文和空格比如D:\Dev-Cpp這樣可以避免一些潛在的、古老編譯器可能遇到的路徑解析問題。安裝完成后打開Dev-C你可能會(huì)看到一個(gè)略顯復(fù)古的界面。先別急著寫代碼我們需要進(jìn)行一項(xiàng)關(guān)鍵配置設(shè)置編譯器參數(shù)以支持C11標(biāo)準(zhǔn)。因?yàn)榧词刮覀儗懙氖荂風(fēng)格代碼一些現(xiàn)代C的便利特性比如nullptr在C11下也是可用的而且這能避免一些奇怪的編譯警告。操作步驟點(diǎn)擊菜單欄的Tools-Compiler Options。在彈出的窗口中在Settings標(biāo)簽頁下點(diǎn)擊Code Generation。在Language standard (-std)下拉框中選擇ISO C11。勾選底部的Add the following commands when calling the compiler并在下面的文本框中輸入-static-libgcc -static-libstdc。這兩個(gè)參數(shù)的意思是靜態(tài)鏈接C運(yùn)行庫這樣編譯出來的exe文件可以獨(dú)立在沒有安裝相應(yīng)運(yùn)行庫的電腦上運(yùn)行非常適合分享你的“游戲作品”。點(diǎn)擊OK保存。注意很多教程會(huì)推薦使用-stdc11但在Dev-C的圖形化界面里直接選擇ISO C11即可效果是一樣的。手動(dòng)添加-static參數(shù)是制作獨(dú)立可執(zhí)行程序的必備步驟否則你的游戲在別人的電腦上可能會(huì)提示缺少libgcc_s_seh-1.dll之類的錯(cuò)誤。2.2 圖形庫的選擇與配置EGE vs. EasyXDev-C本身只支持控制臺(tái)程序。我們要做圖形游戲必須借助第三方圖形庫。主流的兩個(gè)選擇是EGE (Easy Graphics Engine)和EasyX。它們都是為C/C初學(xué)者設(shè)計(jì)的圖形庫API極其相似都深受早期Turbo C圖形庫的影響。EGE開源免費(fèi)更新相對(duì)活躍一些功能也更豐富一點(diǎn)支持透明通道、圖像旋轉(zhuǎn)等。EasyX閉源但免費(fèi)用于學(xué)習(xí)文檔和社區(qū)資源可能更豐富一些在部分細(xì)節(jié)實(shí)現(xiàn)上略有不同。對(duì)于我們的“躺平發(fā)育”游戲兩者都能完美勝任。我選擇EGE來演示因?yàn)樗_源且我個(gè)人更熟悉。下面是如何在Dev-C中配置EGE下載EGE搜索“EGE圖形庫”進(jìn)入其GitHub倉庫或官方頁面下載開發(fā)包。通常是一個(gè)壓縮包里面包含include頭文件夾和lib庫文件夾。放置文件將下載的壓縮包解壓。找到include文件夾下的所有.h文件以及l(fā)ib文件夾下對(duì)應(yīng)你編譯器位數(shù)Dev-C自帶的MinGW通常是32位的.a文件。將它們復(fù)制到Dev-C的安裝目錄下。頭文件.h復(fù)制到Dev-Cpp安裝目錄\MinGW64\x86_64-w64-mingw32\include具體路徑可能略有不同但原則是找到include文件夾。庫文件.a復(fù)制到Dev-Cpp安裝目錄\MinGW64\x86_64-w64-mingw32\lib。更“躺平”的做法很多EGE的發(fā)布包會(huì)直接提供一個(gè)ege文件夾你只需要把這個(gè)文件夾整個(gè)丟到Dev-C安裝目錄的include文件夾下即可。庫文件libgraphics.a同樣放到lib文件夾。項(xiàng)目鏈接設(shè)置新建一個(gè)項(xiàng)目File-New-Project選擇Empty Project給項(xiàng)目起名比如LyingFlatDev。然后你需要告訴編譯器鏈接EGE的庫。在項(xiàng)目管理器中右鍵你的項(xiàng)目名選擇Project Options。切換到Parameters標(biāo)簽頁。在Linker框里點(diǎn)擊Add Library or Object按鈕。導(dǎo)航到你剛才放置庫文件的目錄lib選擇libgraphics.aEGE庫文件和libgdi32.aWindows GDI庫通常也需要鏈接。添加進(jìn)去。同時(shí)在Linker框下的文本輸入?yún)^(qū)域確保有-lgraphics -lgdi32 -limm32 -lmsimg32 -lole32 -loleaut32 -lwinmm -luuid這一串參數(shù)。這是鏈接EGE所需的所有Windows系統(tǒng)庫。你可以直接復(fù)制粘貼進(jìn)去。完成以上步驟環(huán)境就配置好了。你可以創(chuàng)建一個(gè)新的源文件File-New-Source File寫一個(gè)簡(jiǎn)單的測(cè)試程序來驗(yàn)證。#include graphics.h // EGE的頭文件 int main() { initgraph(640, 480); // 初始化一個(gè)640x480的圖形窗口 setcolor(EGERGB(255, 0, 0)); // 設(shè)置繪圖顏色為紅色 circle(320, 240, 100); // 在窗口中心畫一個(gè)半徑為100的圓 getch(); // 等待按鍵 closegraph(); // 關(guān)閉圖形窗口 return 0; }按F11編譯運(yùn)行。如果彈出一個(gè)畫著紅圈的窗口恭喜你你的“游戲開發(fā)環(huán)境”已經(jīng)就緒這一步的順利通過意味著你已經(jīng)解決了90%初學(xué)者在“dev-c輸代碼”前遇到的障礙。3. 游戲框架搭建理解核心循環(huán)與基本結(jié)構(gòu)在開始堆砌具體的“躺平發(fā)育”游戲邏輯之前我們必須先建立起一個(gè)穩(wěn)固的游戲程序框架。這個(gè)框架是所有圖形化游戲的心臟理解了它你就掌握了游戲是如何“動(dòng)”起來的。3.1 消息循環(huán)與游戲主循環(huán)Windows圖形程序是基于消息驅(qū)動(dòng)的。但EGE/EasyX這類庫為我們封裝了底層消息泵提供了一個(gè)更簡(jiǎn)單的、基于“死循環(huán)”的游戲主循環(huán)模型。這是游戲開發(fā)中最核心的概念之一。一個(gè)典型的EGE游戲主循環(huán)結(jié)構(gòu)如下#include graphics.h #include conio.h // 用于_kbhit和_getch int main() { initgraph(800, 600); // 初始化窗口 // 游戲初始化加載圖片、設(shè)置初始變量等 // ... // 游戲主循環(huán) while (true) { // 1. 處理輸入鍵盤、鼠標(biāo) if (_kbhit()) { // 檢查是否有按鍵 char key _getch(); // 根據(jù)按鍵更新游戲狀態(tài)例如移動(dòng)角色 // ... } // 2. 更新游戲邏輯 // 例如更新怪物位置、檢查碰撞、計(jì)算資源增長 // ... // 3. 渲染圖形 cleardevice(); // 清空屏幕相當(dāng)于每一幀都重畫 // 繪制背景、角色、怪物、UI等 // ... // 4. 控制幀率非常重要 delay_fps(60); // 嘗試將幀率穩(wěn)定在60幀/秒 } closegraph(); return 0; }讓我們拆解這個(gè)循環(huán)處理輸入在循環(huán)開始處我們檢查用戶的輸入。_kbhit()和_getch()是控制臺(tái)函數(shù)但在EGE窗口下同樣有效用于獲取鍵盤輸入。這是實(shí)現(xiàn)角色移動(dòng)、建造等交互的基礎(chǔ)。更新邏輯這是游戲的“大腦”。所有游戲?qū)ο蟮臓顟B(tài)都在這里根據(jù)輸入和規(guī)則進(jìn)行計(jì)算。比如根據(jù)按鍵移動(dòng)玩家坐標(biāo)讓怪物沿著路徑點(diǎn)移動(dòng)判斷子彈是否擊中目標(biāo)。渲染圖形這是游戲的“畫筆”。根據(jù)更新后的游戲狀態(tài)將一切視覺元素畫到屏幕上。切記要先cleardevice()清屏否則上一幀的畫面會(huì)殘留造成拖影。控制幀率delay_fps(60)是EGE提供的非常方便的函數(shù)它會(huì)自動(dòng)計(jì)算并延遲使循環(huán)大約每秒運(yùn)行60次。穩(wěn)定的幀率意味著游戲速度不會(huì)受電腦性能影響而忽快忽慢。沒有它你的循環(huán)會(huì)以CPU所能達(dá)到的最快速度運(yùn)行游戲會(huì)快得無法控制且CPU占用率100%。3.2 為“躺平發(fā)育”設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)有了循環(huán)框架我們需要數(shù)據(jù)來描述游戲世界。對(duì)于我們的簡(jiǎn)易游戲可以設(shè)計(jì)如下結(jié)構(gòu)// 定義一些常量 const int SCREEN_WIDTH 800; const int SCREEN_HEIGHT 600; const int GRID_SIZE 40; // 假設(shè)我們用一個(gè)網(wǎng)格來管理地圖每格40像素 // 玩家結(jié)構(gòu)體 struct Player { int x, y; // 像素坐標(biāo) int gridX, gridY; // 網(wǎng)格坐標(biāo)方便計(jì)算 int health; int gold; // 游戲內(nèi)資源比如“金幣” // 可以添加更多屬性如攻擊力、背包等 }; // 建筑類型枚舉 enum BuildingType { NONE, WALL, TOWER, RESOURCE_GENERATOR }; // 建筑結(jié)構(gòu)體 struct Building { BuildingType type; int gridX, gridY; int level; int buildProgress; // 建造進(jìn)度用于表現(xiàn)建造過程 // 塔會(huì)有攻擊力、射程等屬性 }; // 怪物結(jié)構(gòu)體 struct Monster { int x, y; int health; int speed; int pathIndex; // 當(dāng)前所在路徑點(diǎn)的索引 // 路徑點(diǎn)數(shù)組假設(shè)有一條預(yù)設(shè)的進(jìn)攻路徑 };實(shí)操心得在項(xiàng)目初期不要過度設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)。先用最簡(jiǎn)單的變量比如全局變量playerX, playerY把核心玩法跑通。當(dāng)發(fā)現(xiàn)代碼變得混亂時(shí)再逐步抽象成結(jié)構(gòu)體或類。對(duì)于“躺平發(fā)育”這種小型項(xiàng)目使用全局變量和結(jié)構(gòu)體數(shù)組是完全可以接受的這符合“躺平”快速迭代的精神。3.3 實(shí)現(xiàn)基礎(chǔ)繪制與輸入現(xiàn)在讓我們把框架、數(shù)據(jù)和繪制結(jié)合起來實(shí)現(xiàn)一個(gè)可移動(dòng)的“玩家”方塊。#include graphics.h #include conio.h Player player; bool isRunning true; void initGame() { player.x SCREEN_WIDTH / 2; player.y SCREEN_HEIGHT / 2; player.health 100; player.gold 50; } void updateGame() { // 輸入處理可以放在這里也可以放在主循環(huán)里。為了模塊化我們放在這。 // 但注意EGE沒有提供完美的實(shí)時(shí)鍵盤狀態(tài)檢測(cè)我們通常在主循環(huán)里用_kbhit處理。 // 這里先留空邏輯更新稍后補(bǔ)充。 } void renderGame() { cleardevice(); // 關(guān)鍵清屏 // 1. 繪制背景例如一個(gè)簡(jiǎn)單的網(wǎng)格 setcolor(EGERGB(100, 100, 100)); // 灰色網(wǎng)格線 for (int i 0; i SCREEN_WIDTH / GRID_SIZE; i) { line(i * GRID_SIZE, 0, i * GRID_SIZE, SCREEN_HEIGHT); } for (int j 0; j SCREEN_HEIGHT / GRID_SIZE; j) { line(0, j * GRID_SIZE, SCREEN_WIDTH, j * GRID_SIZE); } // 2. 繪制玩家一個(gè)填充方塊 setfillcolor(EGERGB(0, 255, 0)); // 綠色填充 setcolor(EGERGB(0, 200, 0)); // 深綠色邊框 fillrectangle(player.x - 15, player.y - 15, player.x 15, player.y 15); // 3. 繪制UI金幣和血量 setcolor(WHITE); char info[64]; sprintf(info, Gold: %d HP: %d, player.gold, player.health); outtextxy(10, 10, info); } int main() { initgraph(SCREEN_WIDTH, SCREEN_HEIGHT); initGame(); while (isRunning) { // 處理輸入 - 使用方向鍵移動(dòng)玩家 if (_kbhit()) { char key _getch(); // _getch()對(duì)于方向鍵會(huì)返回兩個(gè)值第一個(gè)是0或224 if (key 0 || key 224) { key _getch(); // 獲取第二個(gè)值這才是方向鍵的掃描碼 switch (key) { case 72: player.y - GRID_SIZE; break; // 上 case 80: player.y GRID_SIZE; break; // 下 case 75: player.x - GRID_SIZE; break; // 左 case 77: player.x GRID_SIZE; break; // 右 } // 簡(jiǎn)單邊界檢查 if (player.x 15) player.x 15; if (player.x SCREEN_WIDTH - 15) player.x SCREEN_WIDTH - 15; if (player.y 15) player.y 15; if (player.y SCREEN_HEIGHT - 15) player.y SCREEN_HEIGHT - 15; } else if (key 27) { // ESC鍵退出 isRunning false; } } updateGame(); // 目前是空的后續(xù)補(bǔ)充游戲邏輯 renderGame(); // 繪制 delay_fps(60); } closegraph(); return 0; }編譯運(yùn)行這個(gè)程序你應(yīng)該能看到一個(gè)帶網(wǎng)格的背景一個(gè)可以用方向鍵控制的綠色方塊以及左上角顯示的金幣和血量。至此一個(gè)最基礎(chǔ)的游戲引擎框架和可視化交互就完成了。這已經(jīng)是一個(gè)“可玩”的雛形雖然它現(xiàn)在還什么都沒做但所有擴(kuò)展都將基于這個(gè)穩(wěn)固的循環(huán)。4. 核心玩法實(shí)現(xiàn)建造、資源與怪物現(xiàn)在我們有了一個(gè)可以移動(dòng)的“主角”。接下來我們要為這個(gè)世界注入靈魂資源系統(tǒng)、建造系統(tǒng)和敵人系統(tǒng)。這才是“躺平發(fā)育”游戲性的核心。4.1 資源生成與收集邏輯資源是驅(qū)動(dòng)游戲進(jìn)程的血液。我們?cè)O(shè)計(jì)一種最簡(jiǎn)單的形式地圖上隨機(jī)生成資源點(diǎn)比如金幣玩家靠近即可自動(dòng)收集。首先我們需要一個(gè)資源點(diǎn)的結(jié)構(gòu)體和數(shù)組來管理它們struct ResourceNode { int x, y; bool isActive; int value; // 這個(gè)資源點(diǎn)提供的金幣數(shù) }; const int MAX_RESOURCES 20; ResourceNode resources[MAX_RESOURCES]; void initResources() { for (int i 0; i MAX_RESOURCES; i) { resources[i].isActive false; // 初始全部無效 } } void spawnResource() { // 隨機(jī)在地圖上生成一個(gè)資源點(diǎn) for (int i 0; i MAX_RESOURCES; i) { if (!resources[i].isActive) { resources[i].x rand() % (SCREEN_WIDTH - 30) 15; resources[i].y rand() % (SCREEN_HEIGHT - 30) 15; resources[i].isActive true; resources[i].value 10 rand() % 20; // 10-29金幣 break; // 一次只生成一個(gè) } } } void updateResources() { // 檢查玩家與所有資源點(diǎn)的碰撞收集 for (int i 0; i MAX_RESOURCES; i) { if (resources[i].isActive) { // 簡(jiǎn)單矩形碰撞檢測(cè) int dx player.x - resources[i].x; int dy player.y - resources[i].y; int distanceSquared dx * dx dy * dy; // 假設(shè)玩家和資源點(diǎn)都是半徑為15的圓 if (distanceSquared (15 15) * (15 15)) { player.gold resources[i].value; resources[i].isActive false; // 收集后消失 } } } // 每隔一段時(shí)間生成一個(gè)新資源點(diǎn)簡(jiǎn)單計(jì)時(shí)器實(shí)現(xiàn) static int spawnTimer 0; spawnTimer; if (spawnTimer 180) { // 假設(shè)60幀每秒即3秒生成一個(gè) spawnResource(); spawnTimer 0; } } void renderResources() { setfillcolor(EGERGB(255, 255, 0)); // 黃色金幣 for (int i 0; i MAX_RESOURCES; i) { if (resources[i].isActive) { // 畫一個(gè)簡(jiǎn)單的圓形代表金幣 fillellipse(resources[i].x, resources[i].y, 10, 10); } } }在initGame中調(diào)用initResources()和spawnResource()初始生成幾個(gè)。在updateGame函數(shù)中調(diào)用updateResources()在renderGame函數(shù)中調(diào)用renderResources()在繪制玩家之后UI之前?,F(xiàn)在你的綠色方塊靠近黃色圓點(diǎn)時(shí)金幣數(shù)就會(huì)增加4.2 建造系統(tǒng)從選擇到放置建造是“躺平發(fā)育”的核心策略。我們需要實(shí)現(xiàn)一個(gè)建造模式按下某個(gè)鍵比如‘B’進(jìn)入建造模式選擇建筑類型墻、塔然后在網(wǎng)格上預(yù)覽并放置。Building buildings[100]; // 假設(shè)地圖上最多100個(gè)建筑 int buildingCount 0; bool isBuildingMode false; BuildingType selectedBuildingType WALL; int previewGridX -1, previewGridY -1; // 預(yù)覽建筑的網(wǎng)格坐標(biāo) void handleBuildingInput() { if (_kbhit()) { char key _getch(); if (key b || key B) { isBuildingMode !isBuildingMode; // 切換建造模式 if (!isBuildingMode) { // 退出建造模式時(shí)清除預(yù)覽 previewGridX previewGridY -1; } } if (isBuildingMode) { // 在建造模式下用數(shù)字鍵選擇建筑類型 if (key 1) selectedBuildingType WALL; else if (key 2) selectedBuildingType TOWER; // 鼠標(biāo)交互EGE獲取鼠標(biāo)狀態(tài) mouse_msg msg {0}; while (mousemsg()) { msg getmouse(); } if (msg.is_move() || msg.is_down()) { // 將鼠標(biāo)坐標(biāo)轉(zhuǎn)換為網(wǎng)格坐標(biāo) previewGridX msg.x / GRID_SIZE; previewGridY msg.y / GRID_SIZE; // 鼠標(biāo)左鍵按下放置建筑 if (msg.is_left() msg.is_down()) { // 檢查該網(wǎng)格是否已被占用 bool canPlace true; for (int i 0; i buildingCount; i) { if (buildings[i].gridX previewGridX buildings[i].gridY previewGridY) { canPlace false; break; } } // 檢查金幣是否足夠假設(shè)墻50金塔150金 int cost (selectedBuildingType WALL) ? 50 : 150; if (canPlace player.gold cost) { buildings[buildingCount].type selectedBuildingType; buildings[buildingCount].gridX previewGridX; buildings[buildingCount].gridY previewGridY; buildings[buildingCount].level 1; buildings[buildingCount].buildProgress 0; buildingCount; player.gold - cost; } } } } } } void updateBuildings() { for (int i 0; i buildingCount; i) { // 更新建筑建造進(jìn)度 if (buildings[i].buildProgress 100) { buildings[i].buildProgress 2; // 每幀增加2% if (buildings[i].buildProgress 100) buildings[i].buildProgress 100; } // 可以在這里添加塔的攻擊邏輯如果建筑是塔且已建成 if (buildings[i].type TOWER buildings[i].buildProgress 100) { // ... 遍歷怪物數(shù)組尋找目標(biāo)發(fā)射子彈等 } } } void renderBuildingsAndPreview() { // 繪制已放置的建筑 for (int i 0; i buildingCount; i) { int pixelX buildings[i].gridX * GRID_SIZE GRID_SIZE / 2; int pixelY buildings[i].gridY * GRID_SIZE GRID_SIZE / 2; color_t buildingColor; switch (buildings[i].type) { case WALL: buildingColor EGERGB(139, 69, 19); break; // 棕色 case TOWER: buildingColor EGERGB(70, 130, 180); break; // 鋼藍(lán)色 default: buildingColor WHITE; } setfillcolor(buildingColor); // 如果還在建造用半透明色或根據(jù)進(jìn)度繪制 if (buildings[i].buildProgress 100) { setfillcolor(EGERGB(100, 100, 100)); // 灰色表示在建 // 可以畫一個(gè)進(jìn)度條 int progressWidth (GRID_SIZE - 4) * buildings[i].buildProgress / 100; bar(pixelX - GRID_SIZE/2 2, pixelY - GRID_SIZE/2 2, pixelX - GRID_SIZE/2 2 progressWidth, pixelY GRID_SIZE/2 - 2); } fillrect(pixelX - GRID_SIZE/2 2, pixelY - GRID_SIZE/2 2, pixelX GRID_SIZE/2 - 2, pixelY GRID_SIZE/2 - 2); } // 繪制建造模式下的預(yù)覽 if (isBuildingMode previewGridX 0 previewGridY 0) { int previewPixelX previewGridX * GRID_SIZE GRID_SIZE / 2; int previewPixelY previewGridY * GRID_SIZE GRID_SIZE / 2; setlinewidth(2); color_t previewColor (selectedBuildingType WALL) ? EGERGB(160, 82, 45) : EGERGB(100, 149, 237); setcolor(previewColor); // 畫一個(gè)半透明的矩形作為預(yù)覽 setfillcolor(EGERGB(previewColor.red, previewColor.green, previewColor.blue, 128)); // ARGB顏色128是半透明 fillrect(previewPixelX - GRID_SIZE/2 2, previewPixelY - GRID_SIZE/2 2, previewPixelX GRID_SIZE/2 - 2, previewPixelY GRID_SIZE/2 - 2); setlinewidth(1); } }將handleBuildingInput整合到主循環(huán)的輸入處理部分放在_kbhit判斷里注意處理按鍵沖突。在updateGame中調(diào)用updateBuildings在renderGame中調(diào)用renderBuildingsAndPreview在繪制資源點(diǎn)之后UI之前?,F(xiàn)在你按下B鍵就可以用鼠標(biāo)預(yù)覽并放置墻和塔了4.3 怪物系統(tǒng)路徑點(diǎn)與簡(jiǎn)單AI沒有敵人的“發(fā)育”是孤獨(dú)的。我們來創(chuàng)建一些沿著固定路徑進(jìn)攻的簡(jiǎn)單怪物。struct Monster { float x, y; // 使用浮點(diǎn)數(shù)讓移動(dòng)更平滑 int health; float speed; int pathIndex; bool isActive; }; const int MAX_MONSTERS 50; Monster monsters[MAX_MONSTERS]; // 假設(shè)一條簡(jiǎn)單的進(jìn)攻路徑一系列屏幕坐標(biāo)點(diǎn) POINT monsterPath[] { {50, 50}, {400, 50}, {400, 400}, {700, 400}, {700, 200} }; const int PATH_POINT_COUNT sizeof(monsterPath) / sizeof(monsterPath[0]); void spawnMonster() { for (int i 0; i MAX_MONSTERS; i) { if (!monsters[i].isActive) { monsters[i].x (float)monsterPath[0].x; monsters[i].y (float)monsterPath[0].y; monsters[i].health 30; monsters[i].speed 0.5f (rand() % 10) / 20.0f; // 0.5 ~ 1.0 的速度 monsters[i].pathIndex 1; // 目標(biāo)點(diǎn)是路徑上的下一個(gè)點(diǎn) monsters[i].isActive true; break; } } } void updateMonsters() { for (int i 0; i MAX_MONSTERS; i) { if (!monsters[i].isActive) continue; // 獲取當(dāng)前目標(biāo)路徑點(diǎn) int targetIdx monsters[i].pathIndex; float targetX (float)monsterPath[targetIdx].x; float targetY (float)monsterPath[targetIdx].y; // 計(jì)算朝向目標(biāo)的向量 float dx targetX - monsters[i].x; float dy targetY - monsters[i].y; float distance sqrt(dx * dx dy * dy); // 如果已經(jīng)非常接近目標(biāo)點(diǎn)則切換到下一個(gè)點(diǎn) if (distance monsters[i].speed) { monsters[i].pathIndex; // 如果走完了所有路徑點(diǎn)怪物到達(dá)終點(diǎn)對(duì)玩家造成傷害 if (monsters[i].pathIndex PATH_POINT_COUNT) { player.health - 5; // 扣血 monsters[i].isActive false; // 怪物消失 continue; } // 更新目標(biāo)點(diǎn) targetIdx monsters[i].pathIndex; targetX (float)monsterPath[targetIdx].x; targetY (float)monsterPath[targetIdx].y; dx targetX - monsters[i].x; dy targetY - monsters[i].y; distance sqrt(dx * dx dy * dy); } // 向目標(biāo)點(diǎn)移動(dòng) if (distance 0) { monsters[i].x (dx / distance) * monsters[i].speed; monsters[i].y (dy / distance) * monsters[i].speed; } // 簡(jiǎn)單碰撞檢測(cè)怪物與墻這里僅作示例實(shí)際需要更精細(xì)的網(wǎng)格碰撞 for (int j 0; j buildingCount; j) { if (buildings[j].type WALL buildings[j].buildProgress 100) { int buildingCenterX buildings[j].gridX * GRID_SIZE GRID_SIZE / 2; int buildingCenterY buildings[j].gridY * GRID_SIZE GRID_SIZE / 2; float mdx monsters[i].x - buildingCenterX; float mdy monsters[i].y - buildingCenterY; if (mdx * mdx mdy * mdy (GRID_SIZE/2 10) * (GRID_SIZE/2 10)) { // 簡(jiǎn)單處理讓怪物稍微彈開或停止這里簡(jiǎn)化僅停止 // 更復(fù)雜的可以尋路繞開 monsters[i].x - (dx / distance) * monsters[i].speed; monsters[i].y - (dy / distance) * monsters[i].speed; } } } } // 怪物生成計(jì)時(shí)器 static int monsterSpawnTimer 0; monsterSpawnTimer; if (monsterSpawnTimer 300) { // 5秒生成一個(gè) spawnMonster(); monsterSpawnTimer 0; } } void renderMonsters() { setfillcolor(EGERGB(255, 0, 0)); // 紅色怪物 for (int i 0; i MAX_MONSTERS; i) { if (monsters[i].isActive) { fillellipse((int)monsters[i].x, (int)monsters[i].y, 12, 12); // 可以畫一個(gè)簡(jiǎn)單的血條 setfillcolor(GREEN); int healthBarWidth 20 * monsters[i].health / 30; bar((int)monsters[i].x - 10, (int)monsters[i].y - 20, (int)monsters[i].x - 10 healthBarWidth, (int)monsters[i].y - 15); setfillcolor(EGERGB(255, 0, 0)); } } }同樣在initGame中初始化怪物數(shù)組在updateGame中調(diào)用updateMonsters在renderGame中調(diào)用renderMonsters順序建議在建筑之后UI之前?,F(xiàn)在紅色的怪物會(huì)沿著預(yù)設(shè)的黃色路徑點(diǎn)你可以在renderGame里畫出來向終點(diǎn)移動(dòng)撞擊終點(diǎn)會(huì)扣減玩家血量它們還會(huì)嘗試?yán)@過你建造的墻雖然現(xiàn)在的碰撞處理很簡(jiǎn)陋。5. 打磨與優(yōu)化讓游戲更像樣現(xiàn)在我們的游戲已經(jīng)有了核心玩法循環(huán)移動(dòng)、收集、建造、防御。但它還很粗糙。下面進(jìn)行一些關(guān)鍵的打磨讓體驗(yàn)更完整。5.1 游戲狀態(tài)管理與勝負(fù)判定一個(gè)完整的游戲需要有開始、運(yùn)行、結(jié)束的狀態(tài)。我們添加一個(gè)簡(jiǎn)單的游戲狀態(tài)機(jī)。enum GameState { MENU, PLAYING, GAME_OVER }; GameState currentState MENU; void renderMenu() { cleardevice(); setcolor(YELLOW); setfont(48, 0, 黑體); outtextxy(SCREEN_WIDTH/2 - textwidth(躺平發(fā)育)/2, 100, 躺平發(fā)育); setfont(24, 0, 宋體); outtextxy(SCREEN_WIDTH/2 - textwidth(按 Enter 鍵開始游戲)/2, 300, 按 Enter 鍵開始游戲); outtextxy(SCREEN_WIDTH/2 - textwidth(按 ESC 鍵退出)/2, 350, 按 ESC 鍵退出); } void updateGameLogic() { // 原來的updateGame改名為這個(gè) if (currentState ! PLAYING) return; updateResources(); updateBuildings(); updateMonsters(); // 勝負(fù)判定 if (player.health 0) { currentState GAME_OVER; } // 可以添加勝利條件例如堅(jiān)守一定波數(shù) } void renderGameScene() { // 原來的renderGame改名為這個(gè) cleardevice(); // 繪制網(wǎng)格背景、資源、建筑、怪物、玩家、UI... // ... (將所有之前的render函數(shù)調(diào)用整合到這里) renderResources(); renderBuildingsAndPreview(); renderMonsters(); // 繪制玩家 setfillcolor(EGERGB(0, 255, 0)); fillrectangle(player.x - 15, player.y - 15, player.x 15, player.y 15); // 繪制UI setcolor(WHITE); char info[128]; sprintf(info, Gold: %d HP: %d State: %s, player.gold, player.health, isBuildingMode ? BUILDING (1:Wall 2:Tower) : NORMAL (B:Toggle Build)); outtextxy(10, 10, info); } void renderGameOver() { cleardevice(); setcolor(RED); setfont(48, 0, 黑體); outtextxy(SCREEN_WIDTH/2 - textwidth(游戲結(jié)束)/2, 200, 游戲結(jié)束); setfont(24, 0, 宋體); char scoreMsg[64]; sprintf(scoreMsg, 最終金幣: %d, player.gold); outtextxy(SCREEN_WIDTH/2 - textwidth(scoreMsg)/2, 300, scoreMsg); outtextxy(SCREEN_WIDTH/2 - textwidth(按 R 鍵重新開始)/2, 350, 按 R 鍵重新開始); } // 主循環(huán)需要重構(gòu)成這樣 while (isRunning) { // 輸入處理需要根據(jù)狀態(tài)分發(fā) if (_kbhit()) { char key _getch(); if (currentState MENU) { if (key 13) { // Enter initGame(); // 重置游戲數(shù)據(jù) currentState PLAYING; } else if (key 27) { isRunning false; } } else if (currentState PLAYING) { // ... 原有的游戲內(nèi)輸入處理移動(dòng)、建造等 if (key 27) currentState MENU; // 游戲中按ESC回菜單 } else if (currentState GAME_OVER) { if (key r || key R) { initGame(); currentState PLAYING; } else if (key 27) { currentState MENU; } } } // 更新與渲染 if (currentState PLAYING) { updateGameLogic(); } // 根據(jù)狀態(tài)渲染不同場(chǎng)景 switch (currentState) { case MENU: renderMenu(); break; case PLAYING: renderGameScene(); break; case GAME_OVER: renderGameOver(); break; } delay_fps(60); }5.2 性能優(yōu)化與代碼組織隨著游戲?qū)ο笤龆嗄銜?huì)發(fā)現(xiàn)幀率下降。優(yōu)化是必須的。避免在循環(huán)中頻繁創(chuàng)建/銷毀對(duì)象我們使用的固定大小的數(shù)組resources[MAX_RESOURCES]就是一種對(duì)象池的雛形這比頻繁new/delete或malloc/free高效得多。減少不必要的繪制目前我們每一幀都清屏并重畫所有元素cleardevice。對(duì)于這種像素不多的小游戲完全夠用。但如果元素非常多可以考慮臟矩形渲染只更新變化的部分。不過在Dev-C和EGE環(huán)境下cleardevice的開銷通??梢越邮?。代碼模塊化將不同功能的代碼分到不同的.cpp和.h文件中。例如創(chuàng)建game.h聲明全局變量和函數(shù)player.cpp、building.cpp、monster.cpp、resource.cpp分別實(shí)現(xiàn)各自的對(duì)象邏輯main.cpp只負(fù)責(zé)主循環(huán)和狀態(tài)調(diào)度。這會(huì)讓代碼更易讀、易維護(hù)。在Dev-C中你只需要在項(xiàng)目中添加這些源文件即可。5.3 音效與圖像進(jìn)階EGE支持播放wav格式音效和加載bmp,jpg,png等格式圖片。音效使用mciSendString函數(shù)需要#include windows.h和#pragma comment(lib, winmm.lib)可以播放背景音樂和音效。圖像使用PIMAGE類型和newimage(),getimage(),putimage()等函數(shù)可以加載并顯示圖片讓你的游戲畫面更精美。例如替換掉用fillrectangle畫的玩家改用一張精靈圖PIMAGE imgPlayer newimage(); getimage(imgPlayer, player.bmp); // 假設(shè)有一張60x60的玩家圖片 // 在渲染玩家時(shí) putimage(player.x - 30, player.y - 30, imgPlayer);踩坑提示圖片路徑問題。確保圖片文件放在你的項(xiàng)目.dev文件所在的目錄或者使用絕對(duì)路徑。加載失敗時(shí)getimage不會(huì)報(bào)錯(cuò)但會(huì)顯示一片黑色。另外復(fù)雜的圖像操作如圖像旋轉(zhuǎn)、縮放在EGE中性能開銷較大在小游戲中需謹(jǐn)慎使用。至此一個(gè)功能相對(duì)完整的“躺平發(fā)育”游戲原型就完成了。從零開始我們只用了一個(gè)輕量級(jí)的Dev-C和EGE圖形庫就實(shí)現(xiàn)了游戲的核心循環(huán)、圖形渲染、鍵盤鼠標(biāo)輸入、對(duì)象管理、碰撞檢測(cè)、狀態(tài)機(jī)等關(guān)鍵概念。這個(gè)過程本身就是一種高效的“躺平發(fā)育”——避開復(fù)雜引擎的沉重直擊游戲創(chuàng)作樂趣的核心。你可以在此基礎(chǔ)上繼續(xù)擴(kuò)展給塔添加攻擊子彈、設(shè)計(jì)不同的怪物波次、加入更多建筑類型和科技樹、甚至實(shí)現(xiàn)一個(gè)簡(jiǎn)單的存檔系統(tǒng)。最重要的是你擁有了一個(gè)完全由自己代碼驅(qū)動(dòng)的、可任意修改的游戲世界這份成就感是使用現(xiàn)成引擎拖拽組件難以比擬的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99在线精品免费视频| 九月激情婷婷丁香| 五月天综合| 99热最新网址| 激情綜合網址| 国产精品久久久久久久久久免费| 婷婷五月天大香蕉在线视频观看| 99网| 99免费| 丁香六月天之亚州热女 | 亚洲免费婷婷| 丁香六月婷婷开心| 1024操逼视频| 青青草五月天| 丁香六月情| 涩综合在线| 99热只有精品在线| 二区成人视频| 日本一区二区三区精品视频| 香蕉97碰碰碰欧美| 国产做爰视频免费播放| 国精产品一区一区三区免费视频| 天天操夜夜操| 97操操| 91碰超| 婷婷五月美女直播| 丁香六月婷婷综合在线| 热久久国产视频| 色婷婷色五月另类综合| 久色视频首页| 色婷婷五月天综合网| 97久久超碰| 天天摸天天透天天舔| 五月开心六月婷婷在线播放网站| 狠狠艹狠狠艹| 色另类五月天| 9久热这里只有精品| 丁香无五月网| 人人看人人要| 亚洲精品国产精品乱码视99| 丁香五月天婷婷中文字幕| 激情www.98com| 九九九九九无码| 丁香五月婷婷亚洲人| 精典久久| 婷婷五月蜜桃成人桃色丁香| 夜夜爽日日躁| 天天插AV丝袜中| 五月天婷婷视频30| 欧美日韩成人在线网站| 激情综合网,五月| 99啪啪| 4399在线日本A片| 超碰爱爱爱| 在线成人视频免费| 夜夜躁狠狠 | xxxx五月激情| 五月婷婷自拍视频| 色五月婷婷综合在线| 亚洲碰碰碰| 少妇搡BBBB搡BBB搡毛茸茸 | 色五月婷婷亚洲| 激情丁香五月天| 色婷婷五月在线| a网站免费观看| 丁香六月五月天| 六月婷婷五月丁香| www.玖玖婷婷在线| 看黄的网站18禁| 一区操| 秋霞九九无码| 激情四射网| 一逼色综合| 99re6热在线精品视频播放速度| 丁香五月婷婷久久综合激情网 | 五月婷婷激情五月| 国内久久婷婷| 激情q青青草在线婷婷| 美臀自射自家人妻| 国产精品电影网| 色婷婷久久综合中文久久一本| 综合激情视频| 人操人人| 色香五月天| 精品草原久久视频| 婷婷五月在线观看| 五月丁香在线观看| 婷婷九九色| 《久久综合九色综合97婷婷| 无码毛片992367| 色爱终和网| 橾逼网| 91狠狠综合久久久| 99日在线观看视频| 五月丁香六月香综合激情| 激情综合网五月| 婷婷色婷婷| 人妻丰满精品一区二区A片| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 日韩乱玛久久| 婷婷色综合| 色综啪啪| 婷婷丁香www视频日本韩国| 婷婷丁香九月| 天天婷婷综合亚洲亚洲| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 亚洲99综合| 久热最新视频| 中文字幕日产A片在线看| 色婷婷狠狠久久综合五月| 婷婷人人操| 深爱激情网婷婷| 丁香激情五月| 日本在线观看91| 小视频在线亚洲| 天天插天天爱| YW无码| site:wpjngj.com| 激情5月婷婷| 爱婷婷久久视频| 97在线精品视频| 字幕网AV中文字幕| ji'qing'luan'ren'lun| 婷婷五月激情中文字幕| 色综合网址| 人人爱国产| 极品少妇XXXX精品少妇偷拍| 婷婷综合网在线| 情色婷婷五月天| 婷婷五月天亚洲综合网| 国产裸舞表演WWWW| 97成人在线视频| 九九sese| 98国产精品综合一区二区三区| 91视频五月丁香| 五月丁香六月花| 91婷婷| 99热这里只有精品1025| 丝袜大香蕉| 婷婷综合一二三| 欧美日韩国产一区二区| 丁香五月成人| 久九色| 夜色综合网| 色婷婷无吗| 激情婷婷五月天日本系列| 99riav 亚洲| 五月天快乐开心激情网| 丰满人妻妇伦又伦精品国产| 可以直接看的AV网站| 欧美性爱五月天| 97av在线视频| 精品国产AV色一区二区深夜久久 | 99久久高清视频| 五月丁香亭亭天天舔| 国产AV一区二区三区日韩| 天天 青草 制服丝袜 在线| 色欲av伊人久久大香线蕉影院| 色婷婷操逼| 婷婷五月中文字幕| 99热这里只有精品66| 久久性视频| 日韩黄黄| 五月丁香婷婷婷婷综合网| 天天综合精品| 婷婷五月成人系列| 人妻综合网| 26UUU欧美| 九九99在线观看视频| 丁香婷婷啪啪| 色偷偷色婷婷| 69热在线| 免费在线观看av网站| 亚洲色婷婷五月| 91精品综合久久久久久五月天| 婷婷性爱五月天| 99热国产婷婷| 五月婷婷自拍视频| www,超碰| 色逼综合网| 99网| 色亚洲婷婷| 5月丁香美女影院| 色五月丁香五月天| 五月天五月色婷婷综合| 99视频在线看| 亚洲乱码日产精品BD| 热久久精品视频网站| 亚洲AV电影av| 中文字幕无码人妻少妇免费视频| 开心激情五月天网| 五月丁香婷婷激情在线| 五月丁香精品| 亚洲天堂玖玖| 99自拍视频| 久久婷婷一级片| 成人网站av免费网站推荐| 五月丁香婷婷婷婷综合网| 日比视频91| 久久婷婷五月丁香网| 色之综合网| 男人大jjc女人免费视频| 丁香五月另类小说| 5月丁香综合网| www.久久久久久| 99只有精品| 婷婷情色激情| 337p午夜影院| 开心深爱五月天| 天天日色情| 99资源在线视频| 伊人六月无码视频| 五月丁香美女| 五月婷在线观看| 99人人爽| 国产五月视频| 国产人妻人伦精品一区二区| 婷婷伊人五月天| 丁香六月| 日韩天堂久久| 五月丁香色停停啪啪啪| 天天色粽合合合合合合合| 婷婷天天婷婷天天澡| 久久五月天合网| 久久久99日本大片| 亚州激情九月| 碰超在线九色| 色婷婷亚洲在线观看| 天天插天天射| 五月婷婷色| 九九99免费视频| 婷婷.com| 婷婷五月婷| 丁香成人综合| 色欲丁香久久| 婷婷精品在线| 丁香婷婷五月综合影院| 五月婷婷久久网| 亚洲激情综合色站| 久久精品爱爱| 日日日日做夜夜夜夜无码| 色五月首页| 五月婷视频在线| 五月天综合激情网| 九九在线精点品| 操射国产日本| 成人va视频| 婷婷开心五月| 91九色视频在线观看| 亚城区在线| 毛片新网地| 婷婷一本和五月丁香| 久久草人妻| 婷婷四色五月| 综合五月丁香久久| 婷婷丁香激情五月| 五月激情偷拍| 97干视频在线| 久久狠狠干| 99热99色| 最近中文字幕大全免费版在线 | 色婷婷成人| 五月婷婷综合激情| 婷婷香蕉精品| 六月婷婷最新网址| 超碰人人射| 99在线热| 桔色成人官方网站| 99热激情| 强伦轩人妻一区二区电影| 婷婷丁香六月天| www.婷婷五月天| 成人无码髙潮喷水A片| 久久99国产综合精品免费| 免费看欧美成人A片无码| 大香蕉婷婷| 六月合五月婷| 日本久热| 婷婷五月在线影院| 色色五月天婷婷丁香| 国产午夜精品一区二区| 熟女激情网| 丁香综合伊人AV| 日韩精品无码99| 夜夜骑天天操| 婷婷导航| 尔尔AV一区| 亚洲妇女熟BBW| 亚洲色图五月丁香五月婷婷| 婷婷五月天久久久| 五月丁香AV在线| 色情五月婷婷| 天天操夜夜操| 久久婷狠狠色| 这里只有精品免费观看网占| 99久热| 国产精品久久久久久久久久| 在线观看996精品| 色婷婷WWW| 久热只有这里精品| 激情99| 精品日本视频444| 亚洲天堂啪啪| 99热这里有精力| 亚洲无码另类| 色九网| 大地资源色婷婷视频在线 | 色婷婷五月天亚洲| 无码色| 九九黄色网| 五月婷婷亚洲综合在线 | 欧美三日本三级少妇三99| 欧美天天爽| 新精品99| 艳妇野外情欲放荡HD| 97资源碰碰在线| 五月丁香五月激情综合色综合| 丁香五月成人| 色婷婷无吗| 激情综合播播| 9久久精品| Av在线资源| 精品一区二区三区四区五区六区介绍| 亲子乱AV一区二区三区下载| 激情性爱网站| 激情99在线视频| 日韩成人精品中文字幕| 综合亚洲六月婷婷在线| 97精品自拍| 亚洲天堂玖玖| 99热在线观看这里只有精品| 国产黄色在线| 天天模,夜夜模夜夜爽| 日韩久久视频| 97碰| 国产免费AV在线| 成人免费超碰| 五月婷婷五月天亚洲无码| 99热在线播放| 99re99热| 97在线视频观看| av在线资源| 99啪99| 色444综合网| 丁香五月天BBw| 99爱精品| 日日操,天天操| 婷婷六月丁综合| 麻豆AV一区二区三区| 狠狠综合久久综合| 伊人婷婷色激情丁香| 婷婷成人视频| 国产永久一二一起草| 五月丁香婷婷综合久久| 日本久久精品| 五月丁香色综合| 久久五月天大美女| 亚洲人妻av伦理| 国产日批视频免费播放| 色色色综合网| 天天操夜夜爽| 日本在线观看91| 五月开心深深爱激情综合| 嫩草AV久久伊人妇女超级A| AV激情五月| 色婷婷久久综合中文久久一本| 91色综合| 国产日韩欧美| 五月天久久网站| 日韩久久欧亚| 国产操碰| 亚洲激情电影五月天色婷婷丁香一起草| 天天色视频| 精品婷婷五| 99激情视频| 五月综合777| 色欲一区二区三区精品A片| 婷婷五月天亚洲天堂| 五月天电影网| 综合网五月| 日韩操逼大片| 女人高潮内射99精品| 色亚洲中文| av网址在线播放| 色综合综合网| 激情综合网址| 亚洲日韩成人三级av| 亚洲色 视频| 色五月婷婷天堂| 97人妻碰碰碰久久香蕉| 婷婷五月天777| 五月婷婷av在线| 深爱激情丁香| 欧美日本综合网| 在线看的免费网站| 丁香五月先锋| 精品综合久久久久久五月天| 午夜九九九九九九九九九九九九九| 国产超碰在线| 思思热精品在线观看| 日本九九视频| 伊人网色婷婷五月天| www五月| 120分钟婬片免费看| 少妇2做爰HD韩国电影| 亚洲99精品欧美一区| 国产成人高清| 四色五月婷婷| 禁欲电影完整版在线播放| 色综合射婷婷| 爱爱色五月天| 猫咪伊人久久| 在线播放成人| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 亚洲天堂啪啪| 亚洲精品午夜国产va久久成人| 色吧综合网| 日本婷婷色| 97干在线| 五月婷婷九九热| 这里只有精品99视频| 日本在线wwww| 性色九九| 亚洲欧美在线观看| 91五月天| 婷婷少妇激情| 《蜘蛛女》梁铮1995| 青草性爱视频| 色婷五月| 色婷婷六月天| 老妇操B| 操逼五月婷婷| 99视频只有精品| 色欲午夜无码久久久久久张津瑜| www.丁香五月| 天天干肏夜夜| 亚洲AAA| 狠狠搞五月天| 东京热伊人| 日本三级片片| 欧美69色| 九九激情| 九月大香蕉| 五月天开心色色网| 亚洲欧洲另类图片| 无码 av电影| 五月天婷婷色色| 久久亚洲婷婷| 99热18| 婷婷五月色色| 日韩人妻无码精品| 五月婷婷狠狠干| 久草热在线视频| 色播五月丁香| 久久偷拍综合五月天| 午夜电影网VA内射| 婷婷5月九九| 五月丁香婷婷中文网| 天天摸天天舔天天爽| 天天操天天日天天爱| 97碰| 美女亚洲五月丁香| 天天日天天摸天天| 五月婷婷六月激情网| 五月熟妇婷婷久久| 欧美性丁香色色五月天| 操熟女成人网| 天天干天干| 亚洲五月花| 思思久久精品| 大香蕉久久久久| 婷婷五月天奸女| 99热在线观看精品| 成人丁香五月| 超碰日韩成人| 久久大香免费| 五月色婷| 六月丁香婷啪射| 婷婷中文字幕版| 久久96热| 99视频在线观看网址| 五月天婷婷7米| 日本九九网| 大香蕉久久久| 99热官网| 一区操| 色综合久久中文| 成人在线网址| 我爱宗和色| 日韩精品无码99| 久久激情五月婷婷| 狠狠色噜噜狠狠狠狠综合| 五月婷在线| 婷婷五月天VI| 啪啪激情综合| 99精品在线下载| 婷婷情爱五月天6| 超碰在线视屏| 色吧婷婷五月亚洲| 九九re精品视频在线观看| 婷婷五月天AV| 丁香五月婷婷色播艳门照| 婷婷网五月天| 精品无码久久久久久久久 | 中文AV网站| 久久久WWW| 亚洲乱码日产精品BD在线观看| 婷婷99狠| 噜噜噜噜婷婷五月天| 日逼免费视频| 色婷婷丁香五月| 天天色,天天操,天天射| 六月丁香五月婷婷| 日本乱子人伦在线视频| www.综合久久.com| 久久成人天| 99干日本| 色婷婷91激情小说| 六月五月丁香五月欧美| 色五月偷偷| 久久这里有精品视频在线免费观看| 日本色五月婷婷| 五月综合久久| 色婷婷A| 丁香五月人妻熟女| 五月丁香五月婷婷| 中文字幕综合| 五月天天爽| 天天色播| 97人人操人人爽| 天天干com| 99热精品在线| 欧美六月| 激情婷婷五月天| 4399啪啪视频| 热99精品视频观看| 九九九九这里只有精品| 色五月婷婷影院| 激情色情五月天| 九九热精品| A级毛片高清免费不卡播放谢谢谢谢| 色婷婷丁香五月观看| 五月丁香久人妻中文| 亚洲超碰青涩| 五月婷婷伊人久久| 久久小说网| 丁香六月婷月91婷月| 激情五月天网站| 五月婷婷久久爱| 亚洲综合网激情小说| 美日韩成人| 99色在线观看视频| 99网99热| 9热久久| 思思久热| 色婷婷AV久久| 日日爽日日| 99热香港| 99re这里只有精品视频了| 青青久在线视频免费观看| 日日骑夜夜撸| 无码色| 99色色热热| 五月天激情四射| 九九99九九99偷拍视频免费看| 狼人婷婷综合| 另类视频综合| 亚洲综合九九| 婷婷六月网| 国产精品a无线| 亚洲性爱干干| 日韩国产在线精品| 玖玖资源站蜜臀| 九月色婷婷综合亚洲| 99这里只有精品99| 丁香五月777| 超碰在线91| 色色激情网| 丁香五月综合| 八戒青柠影视剧在线观看| 综合激情五月丁香9999久久精| 婷婷激情社区| 五月丁香拍拍激情综合| 天堂美国久久| 欧美色五月| 日日噜噜夜夜狠狠久久丁香六月| 26UUU欧美| 激情美女五月天| 国产看真人毛片爱做A片| 天天添天天摸天天天天做| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 欧亚成人A片一区二区| 日日鲁鲁夜夜爽爽| 天天久久婷婷| 97人人操人人爽| 国产亚洲精品人人| 婷婷五月精品| 亚洲综合成人网| 丁香六月婷婷综合激情欧美| 激情五月天婷婷播播久久综合91| 五月婷激情| 亚洲高清在线| 雪千夏麻豆| 激情av在线| 婷婷基地成人五月天| 久热精品免费视频4| www.狠狠操| 亚洲色9| 色天使久久综合| 99热主页日本| 青青草婷婷综合五月| www.99免费视频| 中文AV网| 天天插综合网| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 激情综合色婷婷啪啪六月天| 亚洲成人免费电影| 丁香五月六月| 夜夜做天天爽| 91热爆在线| 9热成人在线视频| 五月婷中文字幕| 99性爱无码| 久久东京热婷婷五月| 日本不卡高字幕在线2019| 欧美色性色好| 天天天摸夜夜夜玩| 国产99美少妇| 日本视频99| 99ri网站在线观看| 激情综合色| 超碰99热精品| 五月天婷婷丁香社区| 五月色婷婷在线观看| www.91AV.COM| 深夜婷婷 丁香| 亚洲色另类| 日本天天操| 99福利视频| 国产成人网址| 九色七七| 丁香五月天天| 婷婷中文综合网| 97福利视频| 久久精品婷婷| 婷婷色五月开心五月| 激情婷婷丁香色五月| 97色色-99久久| 五月丁香婷婷色色色| 久久天堂女人| 九九爱精品网站| 粉嫩AV久久一区二区三区| 五月丁香激情综合网| 色五月中文网| 天天爽免费视频| 天天操天天日天天爽| 97色色色视屏| 五月丁了香蕉综合| 五月丁香久久精品在线观看| 超碰免费人妻| 大香蕉网站,大香蕉综合| 色五月中文字幕| AV在线免费观看不卡| 91男女视频在线观看| 亚洲人人操| 色五月欧美| 色色色色网站| 综合网色| 五月丁香在线| 国产真实乱了老女人视频| 久/久精品99看9| 99久热| 120分钟婬片免费看| 婷婷激情综合| 99在线精品免费视频| 极品人妻VIDEOSSS人妻| 国产国产乱老熟女视频网站97| 超碰国产在线| 国精产品一区一区三区免费视频| 色伊人91在线视频| 婷婷情色五月| 97人妻碰碰碰久久| 日本不卡中文字幕| 色五月成人婷婷| 五月丁香拍拍激情综合| 色色日韩无码| 欧美黄色AA片哗啦啦啦| 九色无码| 亚洲色热| 不卡的AV网站| 性爱五月婷| 久久WW| 婷婷综合网站| 色婷婷综合五月| 五月丁香婷婷潮喷中文字幕| 天天色天天| 色婷婷色99国产综合精品| 国产毛片精品一区二区色欲黄A片| 午夜丁香婷婷| 久久婷婷五月综合网| ww超碰在线| www,色婷婷| 亚洲精品va| 99性感视频| 久草热在线视频| 99爱爱| 少妇真实被内射视频三四区| 丁香五月很很肏| 国产ava| 亚洲丁香五月天在线视频| 国精产品一区二区三区| 六月丁香婷婷综合狠狠爱夜夜爱| 午夜色婷婷| 五月天久久小说| 色婷婷五月色| 天天操夜夜肏| 欧美人人操| 人妻熟女一区二区AV| 亚洲爱婷婷| 丁香婷婷综合精品六月初| 激情五月少妇| 中文字幕 中文字幕明步| 伊人九热| 亚洲精品乱码久久久久久按摩观| 日韩欧美一级大黄网站| 婷婷中文字幕| 色色综合院| 免费色色色| 色色色热| 日B日潘金莲BB| 91色婷婷综合久久中文字幕二区| AV在线二十六页| 熟女色专区| 另类激情首页| 亚洲偷| www.99色| 国产精品久久久海的味道| AA丁香综合激情| 98色花堂98t.R| 五月婷婷色吧!| 99精品视频免费观看| 亚洲AV永久无码影院黑人| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 六月丁香婷婷综合狠狠爱夜夜爱| 美女主播野战视步页| 影音先锋色婷婷| 五月婷婷之综合激情在线| 婷婷色色综合激情| 婷婷五月激情综合| 九九色之九九色之88| 婷婷六月天亚州| 激情五月天婷婷| 天天久综合网永久入口17v| 色综合综合网| 综合色、色综合| 99热热热99精品婷婷| 色99网| 婷婷五月影院| 99碰碰碰| 人人操人人爱丁香五月| 色五月激情五月| 激情五月综合视频| 久久久精品人妻| 色久女| 婷婷六月综合基地| 久久 中文 日本| 婷婷丁香综合| 色五月色开心开心五月| 丁香五月色五月婷婷宗合| 99热精品在线| 精品视频99看在线视频| 99日韩| 青青夜夜狠狠夜夜狠狠| 丁香五月色| www.激情.com.| 天天日,天天插| 99热99在线| 婷婷色导航| 色婷婷狠狠| 综合激情站| www,五月天com| 婷婷亚洲综合| 99超在线| 狠狠色噜噜狠| 五月草影视| 超碰妻人人| 久久九九免费视频| 丁香五月色五月| 高清不卡一区| 婷婷丁香五月亚洲欧美| 五月婷婷性爱| 这里只有精品视频看看| 天天爱天天狠天天透| 丁香五月天婷婷91| 久久激情五月婷婷| 婷婷丁香社区网| 国外亚洲成AV人片在线观看| 激情丰满熟妇五月| 97干资源在线观看| 色五月大| 天天干,天天舔| 最近中文字幕2019视频1| 综合热无码| 伊人激情网| 99干视频| 视色网在线播放| 婷婷五月天国产性感美女演员久久久久| 涩婷婷五月天| 超碰9| 丁香九月婷婷| 亚洲五月色| 婷婷月综合| 99色综合| 99热这里只有精品86| 丁香激情四射| 最近免费中文字幕大全高清大全1| 男女久久婷婷五月天| 婷婷成人在线| 色999亚洲人成色| 五月丁香综合啪啪対白| 色婷婷综合在线| 婷婷五月丁香香蕉| 另类小说五月天激情| 五月天AV大香蕉| 日日夜夜干| 国产三级秋霞| 丁香五月天天哦| 99艹精品在线观看| 丁香婷婷深情五月亚洲| 激情网婷婷婷| www.超碰| 爱狠射| 久久久中文| 欧洲亚洲精品| 五丁香激情综合| 超碰97免费在线| 精品一二三区久久AAA片| 五月婷婷真爱激情网| 色在线免费观看| 五月婷婷深爱六月| 婷婷综合成人五月天| 91丨九色|PRNY熟妇| 粉嫩AV久久一区二区三区| 成年人丁香五月| 激情五月综合六月丁香婷婷狠狠干| 色yeye欧美| 五月丁香激情综合| 91日视频| 久久机热这里只有精品| 久久久妻人人人| 亚洲五月天色色| 无码少妇高潮喷水A片免费| 婷婷五月电影| 五月丁香亚洲婷婷| 色五月亚洲五月天| 91超级碰| 成人色图情色成人网 www.5b5b5bcom 五月天| 九九色热| 操91| 欧美99视频| 五月天激情www| 午夜不卡成人一区二区| 国产精品久久99| 色婷婷中文在线| 婷婷五月a| 97人碰人操| 啪啪啪大香蕉| 九九色综合| 伊人玖玖精品| 99这里热| 五月欧美丁香在线观看| 色噜噜婷婷| 亚洲 在线 性爱 | 五月天最新网| 婷婷五月图片小说网| 五月丁香综合伦理片| 18av天堂| 婷婷五月激情四月综合| 久草天堂| 五月婷网| 97操在线视频| av在线观看免费| 99干视频| 久热 91| 精品成人在线观看| 精品99在线| 日韩在线99| 欧美大香蕉视频| 97人人做| 色综合色| 久久色五月天| 99久久国产成人精品| 五月丁香网av| 五月丁香久久久日婷婷久久婷婷日| 噜综合| 精品国产va久久久久久久| 777久久精品| 色婷婷五月天天天做| 婷婷丁香五月天在线视频| 欧美日韩大黄| 久久五月天黄色五月天色网址| 丁香色啪综合| 色人妻五月| 第四色婷婷丁香五月| 夜夜躁爽日日| 国产 亚洲 在线| 久久怕怕视频| 乱精品一区字幕二区| 婷婷五月综合性爱| 五月丁香六月婷婷综合| 五月天婷婷社区久久综合| AV在线观看网站| 婷婷五月天美女| 久久婷婷操| 五月丁香婷婷六月| 色婷婷欧美| 五月天婷婷色| 五月天啪啪网| 99热99精品| 婷婷五月丁香五月丁香| 日撸夜撸日操| 婷婷色综合av| 九九在线精点品| 男人先锋久久| 激情五月综合久久| 如何安全看伊人婷婷| 思思色综合网站| 婷婷六月综合激情| 狠狠爱综合网| 狠狠色综合五月人人| 婷婷五月激情五月丁香五月| 久热成人| 天天操夜夜肏| 色婷婷9| 八戒青柠影视剧在线观看| 日本在线观看aaa 99| 色情久久久| www.伊人天堂偷偷婷婷| 亚洲操B| 这里只有精品视频| AⅤ在线播放网| 91丨九色丨国产打屁股| 婷婷五月天论坛| 综合久久久| 强辱丰满人妻HD中文字幕| 淫荡A片| 玖玖在线资源视频| 五月婷婷激情| 免费看欧美成人A片无码| 婷婷五月色情| 亚洲开心激情网| 玖玖午夜视频| 婷婷五月天99综合网站| AV在线大香蕉| 天天干天天射色综合| 亚洲激情婷婷| 日韩情色在线观看| 丁香五月婷婷色综合基地| 丁香五月婷婷大香蕉| 国产69久久久欧美黑人A片 | 99爱视频免费看| 99热网站| 久久五月婷婷视频| 成人欧美Va| AV大香蕉| 高清成人综合| 天天檫天天爽| 中文字幕永久在线| 夜夜资源站| 女高怪谈在线观看| 日韩成人无码| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 五月婷婷开心亚州在线| 丁香五月偷拍| 免费播放片大片| 成人五月天视频播放| 欧美大肥婆大肥BBBBB| 99啪| 亚洲精品99| 欧美A片在线视频免费观看| 五月丁香在线视频观看| 91狠狠色色丁香婷婷综合久久| 六月婷综合| 日韩av手机在线观看| 日本3级片偷拍网站| 天天干夜夜谢| 不卡成人免费| 五月丁香婷婷人体| 疯狂做受XXXX高潮A片| 91狠狠综合久久久久久| 99综合一区| www.五月天色色色| 免费不卡狠操美女视频网| 艹B高清无码| 深爱激情九九五月天 | 色停停五月,在线观看| 亚洲欧洲美女在线观| 99热在线中文字幕| 国产乱妇无乱码大黄AA片| 99热r| 99热综合| 丁香五月婷婷六月婷婷| 9999久久久久| 欧美日韩成人在线| 99在线精品免费视频| 亚洲第一黄网| 91九九| 99re熱| AA丁香综合激情| 久久婷婷五月国产激情综合片| 五月天久久婷婷| 只有精品在线观看| 啪啪91| 六月亚洲| 丁香六月婷婷缴情欧美| 狠狠干 狠狠操| 91在线人| 噜一噜在线| 久久婷网| 色婷婷视频| 久久婷婷六月| 国产成人AV| 五月天黄色激情小说| 99情色五月天| 久婷五月| 久久婷婷五月天懂色| 另类激情综合| 婷婷五月天伦理| 婷婷狠狠综合网入口| 国产精品久久7777777精品无码| 婷婷五月开心六月AV| 五月天成人综合| 深爱五月天| 婷婷免费无视频| 2022久久婷婷| 超碰成人在线观看| 丁香五月天天| 日韩熟女啪啪视频| 色偷偷综合| 狠狠干婷婷| 免费观看全黄做爰的视频| 国产裸舞表演WWWW| 婷婷激情视频| 五月丁香色综合| 色婷婷激情五月天在线观看| 中文字幕婷婷在线| 国产激情视频在线观看| 久久五月丁香激情综合| 婷婷九月久久| 色情五月婷| 久久99最新| 亚洲成人AV一区在线观看| 国产9色在线/日韩| 婷婷亚洲五月丁香综合在线 | 婷婷激情四射| 玖玖精品视频| 97色色-99久久| 91热在线观看视频| 五月婷婷AV| 丁香五月av在线| 五月丁香婷婷综合网| 六月色国内综合| 亚洲一区国产传媒| 97色婷婷| 国产成人高清| 五月天成人手机在线视频| 啪啪夜久久| 国产暴力强伦轩1区二区小说| 色爱亚洲| 中文久久久人妻| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 九热久| 91蝌蚪窝视频在线| 国产激情AV| 都市激情小说婷婷| 色噜噜狠狠色综合无码久久欧美| 日韩日比视频在线| 开心激情网五月天| 天天透天天爱| 丁香久久五月天视频在线观看| www、丁香五月天| 久久六月婷婷| 99色色网| 九九热精品99| 色色色色网色色网色色| 天天久久人人| 亚州综合色| 天天色中文字幕女优AV| 夜夜干 夜夜操| 中文av网站| 高清无码中文字幕aVDV| 99热最新精品| 久久九九中文字幕| 日韩人人操| 国产欧美熟妇另类久久久| 色综合综合色| 五月丁香五月婷婷| 久热这里只有精品在线| 婷婷五月天成人动漫| 久久婷婷五月丁香网| 久热伊人在91| 伊人久久丁香五月91| 97人妻碰碰中文无码久热丝袜| 97人人搞| 99热在线播放| 免费观看欧美成人AA片爱我多深| 夜夜天天久久婷婷| 思思视频久久| 亚洲精品亚洲人成人网| 2016日日夜夜操| 中文字幕+中文在线| 九九99精品视品| 嫩草AV久久伊人妇女超级A| 久久久久久人妻| 另类天堂| 九九re精品视频在线观看| 五月天婷久精视频| 五月天影院| 99热久草| 久久激情五月网| 五月丁香亭亭天天舔| 久久综合伊人综合在线| 亚洲精品五十一区| 美女五月激情| 夜夜骑日日操| 人妻性爱av网站| 天天爽夜夜爽夜夜爽精品| 日本熟妇精品99| 欧美97色| 99热久| 99开心五月五月丁香激情| 五月丁香六月激情综合网| 五月丁香亚洲校园欧美| 99re在线视频精品,这里只有精品18,| 黄色三级日本| 色色五月天婷婷| 久久欧洲久久| 色色色99韩| 人人色AV| 天天干天天爽天天操| 五月天婷婷中文字幕在线播放| www.五月瑟| 六月丁香六月婷婷欧美| 色婷婷在线视频| 激情六月丁香| 日本91在线| 日韩青青| 人人操人人妻| 欧美激情 日韩无码 婷婷 五月天| 97超喷视频在线观看| 99热www| 99热精品99| 日韩欧美五月丁综合| 色色网站观看| 婷婷五月综合在线视频| 日日艹思思热| 97色色网| 六月丁香久久| 99色在线| 色欲AVV| 91久久免费| 色狠狠色| 六月婷五月丁香| 狠狠激情五月天| 亚洲成人中心| 开心五月激情网| 艹B高清无码| 91精品综合久久久五月天| 台湾无码A片一区二区| 久久久人妻久久久| 99热精这里只有精品| 伊人啪啪网| 亚洲超碰在线| 激情久久伊人| 99干99| 26uuu美女三级视频| 九九机热| 欧美97色| 亚洲色就是色色色| 日韩日比视频| 日韩狠狠色婷婷| 99色亚洲| 丁香五月天综合| 丁香五月天影院| 色综合综合色| 综合视频五月| 久久永久视频| 五月婷三级片| 五月婷婷深深爱| 亚洲综合干| 超碰色综合| www.超碰97| WWW.久久久久久久| 九九热视频免费观看| 日本色99| 熟妇高潮一区av| 国产一级片| 激情五月丁香六月综合AVXXXX| 可以直接看的av| 成人在线免费网址| 婷婷五月丁香五月丁香| 天天摸天天舔天天天天爽| 777精品久无码人妻蜜桃| 综合激情肏逼网| 甈你aaaaa| 五月激情小说网| 五月天婷婷久草丁香| 丁香5月综合啪啪| 五月丁香啪啪综合| 狠狠爱丁香婷| 五月婷婷伦理| 99色网站| 婷婷综合干| 26uuuavcom| 日日天天干| 国产99久9在线| 日撸夜撸日操| 伊人99热| 日韩人妻无码专区| 色五月播五月| 99riAV成人在线视频| 激情美女五月天| 九九这里是免费的视频5| 日逼影音先锋AV男人资源站| 九九热九九热精品| 日韩啪啪网| 色欲影香| 丁香五月Av| 精品热青草| www.狠狠操.con| 开心婷婷五月| 天天搡日日搡aaaaⅩ| 亚洲五月停停| 超碰人人妻| 亭亭五月激情亚洲在线| 色婷婷基地 | 色五月婷婷 成人| 亚洲激情四射| 久久人操| 丁香伊人网| 色欲婷婷五月天丁香| 天天色综网| 91干99| 色日本网| 中文字幕不卡网站| 开心五月综合激情综合五月| 荡乳尤物3HP1V5| 日本的α片xxxwww| 五月婷婷五月| 五月天另类小说亚洲| 色香欲综合| 婷婷在线视频| 人人摸人人摸| 婷婷五月色播网| 天天色天天操天天射| 丁香五月1页| 五月天色五月| 丁香香五月激情免费视频| 天天干天天爽| 噜噜噜噜噜日本视频| 国产肥白大熟妇BBBB视频| 五月青青草综合| 密着浓厚中出乚交尾GvG935| 天天射天天射一道本日本社区| 超碰九热| 国产欧洲欧洲精品久久|