日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

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

Dev-C++與EGE圖形庫:零基礎(chǔ)實現(xiàn)“躺平發(fā)育”游戲原型 1. 項目緣起為什么是Dev-C與“躺平發(fā)育”如果你是一位對游戲開發(fā)感興趣但又覺得Unity、Unreal這些引擎門檻太高或者C#、C的現(xiàn)代開發(fā)環(huán)境配置起來太麻煩的初學(xué)者那么你很可能和我?guī)啄昵暗臓顟B(tài)一樣。那時候我想做點(diǎn)小游戲但光是搭建一個能跑起來的開發(fā)環(huán)境就勸退了好幾次。直到我重新?lián)炱鹆藢W(xué)生時代用的Dev-C配合上一些“躺平”式的開發(fā)思路才發(fā)現(xiàn)原來用最“古老”的工具也能快速體驗到游戲創(chuàng)作的樂趣。“躺平發(fā)育”這個詞最近在游戲圈里挺火它描述的是一種避開激烈競爭、專注于自身成長和資源積累的玩法策略。我把這個概念挪用到了游戲開發(fā)學(xué)習(xí)上。對于新手來說一上來就追求酷炫的3D效果、復(fù)雜的網(wǎng)絡(luò)同步無異于在“新手村”就挑戰(zhàn)終極Boss挫敗感極強(qiáng)。真正的“躺平發(fā)育”應(yīng)該是選擇一個極其輕量、幾乎零配置的開發(fā)環(huán)境從最核心、最有趣的部分比如游戲邏輯直接入手快速獲得正向反饋在不斷的“小勝利”中積累經(jīng)驗和信心。Dev-C 5.11一個十幾年前就停止官方更新的IDE恰恰是“躺平發(fā)育”的絕佳選擇。它體積小安裝包幾十MB、綠色免安裝解壓即用、內(nèi)置了MinGW編譯器你不需要單獨(dú)配置任何環(huán)境變量。更重要的是它支持純Win32 API和古老的圖形庫如EGE、EasyX這些庫的API簡單直接沒有現(xiàn)代游戲引擎那層層疊疊的抽象讓你寫的每一行代碼都直接與屏幕上的像素、鍵盤的按鍵打交道。這種“所見即所得”的掌控感對于理解游戲底層運(yùn)行機(jī)制至關(guān)重要。所以這個項目不是要教你用Dev-C開發(fā)一個商業(yè)級的游戲而是帶你用這個“老伙計”快速搭建一個可玩的游戲原型體驗從零到一的完整過程。我們會做一個類似“塔防”或“生存建造”概念的簡易版“躺平發(fā)育”玩家控制一個角色在場景中收集資源、建造防御設(shè)施抵御周期性來襲的“怪物”。整個過程我們將聚焦于游戲循環(huán)、圖形繪制、鍵盤交互、簡單碰撞檢測這些核心概念。2. 環(huán)境準(zhǔn)備與“踩坑”指南讓小熊貓Dev-C跑起來雖然Dev-C以簡單著稱但在今天的Windows系統(tǒng)上直接使用還是會遇到一些“時代差異”導(dǎo)致的小問題。網(wǎng)上搜索“小熊貓dev-c安裝”的熱度恰恰說明了大家在這第一步就遇到了麻煩。別擔(dān)心跟著下面的步驟我們可以完美解決。2.1 獲取與安裝選對版本是關(guān)鍵首先絕對不要從一些莫名其妙的下載站獲取Dev-C。里面捆綁的垃圾軟件會讓你苦不堪言。推薦以下兩個可靠來源Embarcadero Dev-C這是原Dev-C項目停止后由Embarcadero公司維護(hù)更新的分支。它修復(fù)了原版在Windows 10/11上的很多兼容性問題是當(dāng)前的首選。你可以去Embarcadero的官網(wǎng)或SourceForge頁面下載。Orwell Dev-C這是在原版停止更新后另一個比較活躍的維護(hù)版本也修復(fù)了大量Bug。我個人的選擇是Embarcadero Dev-C。下載下來通常是一個exe安裝包安裝過程無腦下一步即可。安裝路徑建議不要有中文和空格比如D:\Dev-Cpp這樣可以避免一些潛在的、古老編譯器可能遇到的路徑解析問題。安裝完成后打開Dev-C你可能會看到一個略顯復(fù)古的界面。先別急著寫代碼我們需要進(jìn)行一項關(guān)鍵配置設(shè)置編譯器參數(shù)以支持C11標(biāo)準(zhǔn)。因為即使我們寫的是C風(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。這兩個參數(shù)的意思是靜態(tài)鏈接C運(yùn)行庫這樣編譯出來的exe文件可以獨(dú)立在沒有安裝相應(yīng)運(yùn)行庫的電腦上運(yùn)行非常適合分享你的“游戲作品”。點(diǎn)擊OK保存。注意很多教程會推薦使用-stdc11但在Dev-C的圖形化界面里直接選擇ISO C11即可效果是一樣的。手動添加-static參數(shù)是制作獨(dú)立可執(zhí)行程序的必備步驟否則你的游戲在別人的電腦上可能會提示缺少libgcc_s_seh-1.dll之類的錯誤。2.2 圖形庫的選擇與配置EGE vs. EasyXDev-C本身只支持控制臺程序。我們要做圖形游戲必須借助第三方圖形庫。主流的兩個選擇是EGE (Easy Graphics Engine)和EasyX。它們都是為C/C初學(xué)者設(shè)計的圖形庫API極其相似都深受早期Turbo C圖形庫的影響。EGE開源免費(fèi)更新相對活躍一些功能也更豐富一點(diǎn)支持透明通道、圖像旋轉(zhuǎn)等。EasyX閉源但免費(fèi)用于學(xué)習(xí)文檔和社區(qū)資源可能更豐富一些在部分細(xì)節(jié)實現(xiàn)上略有不同。對于我們的“躺平發(fā)育”游戲兩者都能完美勝任。我選擇EGE來演示因為它開源且我個人更熟悉。下面是如何在Dev-C中配置EGE下載EGE搜索“EGE圖形庫”進(jìn)入其GitHub倉庫或官方頁面下載開發(fā)包。通常是一個壓縮包里面包含include頭文件夾和lib庫文件夾。放置文件將下載的壓縮包解壓。找到include文件夾下的所有.h文件以及l(fā)ib文件夾下對應(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ā)布包會直接提供一個ege文件夾你只需要把這個文件夾整個丟到Dev-C安裝目錄的include文件夾下即可。庫文件libgraphics.a同樣放到lib文件夾。項目鏈接設(shè)置新建一個項目File-New-Project選擇Empty Project給項目起名比如LyingFlatDev。然后你需要告訴編譯器鏈接EGE的庫。在項目管理器中右鍵你的項目名選擇Project Options。切換到Parameters標(biāo)簽頁。在Linker框里點(diǎn)擊Add Library or Object按鈕。導(dǎo)航到你剛才放置庫文件的目錄lib選擇libgraphics.aEGE庫文件和libgdi32.aWindows GDI庫通常也需要鏈接。添加進(jìn)去。同時在Linker框下的文本輸入?yún)^(qū)域確保有-lgraphics -lgdi32 -limm32 -lmsimg32 -lole32 -loleaut32 -lwinmm -luuid這一串參數(shù)。這是鏈接EGE所需的所有Windows系統(tǒng)庫。你可以直接復(fù)制粘貼進(jìn)去。完成以上步驟環(huán)境就配置好了。你可以創(chuàng)建一個新的源文件File-New-Source File寫一個簡單的測試程序來驗證。#include graphics.h // EGE的頭文件 int main() { initgraph(640, 480); // 初始化一個640x480的圖形窗口 setcolor(EGERGB(255, 0, 0)); // 設(shè)置繪圖顏色為紅色 circle(320, 240, 100); // 在窗口中心畫一個半徑為100的圓 getch(); // 等待按鍵 closegraph(); // 關(guān)閉圖形窗口 return 0; }按F11編譯運(yùn)行。如果彈出一個畫著紅圈的窗口恭喜你你的“游戲開發(fā)環(huán)境”已經(jīng)就緒這一步的順利通過意味著你已經(jīng)解決了90%初學(xué)者在“dev-c輸代碼”前遇到的障礙。3. 游戲框架搭建理解核心循環(huán)與基本結(jié)構(gòu)在開始堆砌具體的“躺平發(fā)育”游戲邏輯之前我們必須先建立起一個穩(wěn)固的游戲程序框架。這個框架是所有圖形化游戲的心臟理解了它你就掌握了游戲是如何“動”起來的。3.1 消息循環(huán)與游戲主循環(huán)Windows圖形程序是基于消息驅(qū)動的。但EGE/EasyX這類庫為我們封裝了底層消息泵提供了一個更簡單的、基于“死循環(huán)”的游戲主循環(huán)模型。這是游戲開發(fā)中最核心的概念之一。一個典型的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)例如移動角色 // ... } // 2. 更新游戲邏輯 // 例如更新怪物位置、檢查碰撞、計算資源增長 // ... // 3. 渲染圖形 cleardevice(); // 清空屏幕相當(dāng)于每一幀都重畫 // 繪制背景、角色、怪物、UI等 // ... // 4. 控制幀率非常重要 delay_fps(60); // 嘗試將幀率穩(wěn)定在60幀/秒 } closegraph(); return 0; }讓我們拆解這個循環(huán)處理輸入在循環(huán)開始處我們檢查用戶的輸入。_kbhit()和_getch()是控制臺函數(shù)但在EGE窗口下同樣有效用于獲取鍵盤輸入。這是實現(xiàn)角色移動、建造等交互的基礎(chǔ)。更新邏輯這是游戲的“大腦”。所有游戲?qū)ο蟮臓顟B(tài)都在這里根據(jù)輸入和規(guī)則進(jìn)行計算。比如根據(jù)按鍵移動玩家坐標(biāo)讓怪物沿著路徑點(diǎn)移動判斷子彈是否擊中目標(biāo)。渲染圖形這是游戲的“畫筆”。根據(jù)更新后的游戲狀態(tài)將一切視覺元素畫到屏幕上。切記要先cleardevice()清屏否則上一幀的畫面會殘留造成拖影??刂茙蔰elay_fps(60)是EGE提供的非常方便的函數(shù)它會自動計算并延遲使循環(huán)大約每秒運(yùn)行60次。穩(wěn)定的幀率意味著游戲速度不會受電腦性能影響而忽快忽慢。沒有它你的循環(huán)會以CPU所能達(dá)到的最快速度運(yùn)行游戲會快得無法控制且CPU占用率100%。3.2 為“躺平發(fā)育”設(shè)計數(shù)據(jù)結(jié)構(gòu)有了循環(huán)框架我們需要數(shù)據(jù)來描述游戲世界。對于我們的簡易游戲可以設(shè)計如下結(jié)構(gòu)// 定義一些常量 const int SCREEN_WIDTH 800; const int SCREEN_HEIGHT 600; const int GRID_SIZE 40; // 假設(shè)我們用一個網(wǎng)格來管理地圖每格40像素 // 玩家結(jié)構(gòu)體 struct Player { int x, y; // 像素坐標(biāo) int gridX, gridY; // 網(wǎng)格坐標(biāo)方便計算 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)建造過程 // 塔會有攻擊力、射程等屬性 }; // 怪物結(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è)計數(shù)據(jù)結(jié)構(gòu)。先用最簡單的變量比如全局變量playerX, playerY把核心玩法跑通。當(dāng)發(fā)現(xiàn)代碼變得混亂時再逐步抽象成結(jié)構(gòu)體或類。對于“躺平發(fā)育”這種小型項目使用全局變量和結(jié)構(gòu)體數(shù)組是完全可以接受的這符合“躺平”快速迭代的精神。3.3 實現(xiàn)基礎(chǔ)繪制與輸入現(xiàn)在讓我們把框架、數(shù)據(jù)和繪制結(jié)合起來實現(xiàn)一個可移動的“玩家”方塊。#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沒有提供完美的實時鍵盤狀態(tài)檢測我們通常在主循環(huán)里用_kbhit處理。 // 這里先留空邏輯更新稍后補(bǔ)充。 } void renderGame() { cleardevice(); // 關(guān)鍵清屏 // 1. 繪制背景例如一個簡單的網(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. 繪制玩家一個填充方塊 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) { // 處理輸入 - 使用方向鍵移動玩家 if (_kbhit()) { char key _getch(); // _getch()對于方向鍵會返回兩個值第一個是0或224 if (key 0 || key 224) { key _getch(); // 獲取第二個值這才是方向鍵的掃描碼 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; // 右 } // 簡單邊界檢查 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)行這個程序你應(yīng)該能看到一個帶網(wǎng)格的背景一個可以用方向鍵控制的綠色方塊以及左上角顯示的金幣和血量。至此一個最基礎(chǔ)的游戲引擎框架和可視化交互就完成了。這已經(jīng)是一個“可玩”的雛形雖然它現(xiàn)在還什么都沒做但所有擴(kuò)展都將基于這個穩(wěn)固的循環(huán)。4. 核心玩法實現(xiàn)建造、資源與怪物現(xiàn)在我們有了一個可以移動的“主角”。接下來我們要為這個世界注入靈魂資源系統(tǒng)、建造系統(tǒng)和敵人系統(tǒng)。這才是“躺平發(fā)育”游戲性的核心。4.1 資源生成與收集邏輯資源是驅(qū)動游戲進(jìn)程的血液。我們設(shè)計一種最簡單的形式地圖上隨機(jī)生成資源點(diǎn)比如金幣玩家靠近即可自動收集。首先我們需要一個資源點(diǎn)的結(jié)構(gòu)體和數(shù)組來管理它們struct ResourceNode { int x, y; bool isActive; int value; // 這個資源點(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ī)在地圖上生成一個資源點(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; // 一次只生成一個 } } } void updateResources() { // 檢查玩家與所有資源點(diǎn)的碰撞收集 for (int i 0; i MAX_RESOURCES; i) { if (resources[i].isActive) { // 簡單矩形碰撞檢測 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; // 收集后消失 } } } // 每隔一段時間生成一個新資源點(diǎn)簡單計時器實現(xiàn) static int spawnTimer 0; spawnTimer; if (spawnTimer 180) { // 假設(shè)60幀每秒即3秒生成一個 spawnResource(); spawnTimer 0; } } void renderResources() { setfillcolor(EGERGB(255, 255, 0)); // 黃色金幣 for (int i 0; i MAX_RESOURCES; i) { if (resources[i].isActive) { // 畫一個簡單的圓形代表金幣 fillellipse(resources[i].x, resources[i].y, 10, 10); } } }在initGame中調(diào)用initResources()和spawnResource()初始生成幾個。在updateGame函數(shù)中調(diào)用updateResources()在renderGame函數(shù)中調(diào)用renderResources()在繪制玩家之后UI之前?,F(xiàn)在你的綠色方塊靠近黃色圓點(diǎn)時金幣數(shù)就會增加4.2 建造系統(tǒng)從選擇到放置建造是“躺平發(fā)育”的核心策略。我們需要實現(xiàn)一個建造模式按下某個鍵比如‘B’進(jìn)入建造模式選擇建筑類型墻、塔然后在網(wǎng)格上預(yù)覽并放置。Building buildings[100]; // 假設(shè)地圖上最多100個建筑 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) { // 退出建造模式時清除預(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)); // 灰色表示在建 // 可以畫一個進(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); // 畫一個半透明的矩形作為預(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)與簡單AI沒有敵人的“發(fā)育”是孤獨(dú)的。我們來創(chuàng)建一些沿著固定路徑進(jìn)攻的簡單怪物。struct Monster { float x, y; // 使用浮點(diǎn)數(shù)讓移動更平滑 int health; float speed; int pathIndex; bool isActive; }; const int MAX_MONSTERS 50; Monster monsters[MAX_MONSTERS]; // 假設(shè)一條簡單的進(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)是路徑上的下一個點(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; // 計算朝向目標(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)則切換到下一個點(diǎn) if (distance monsters[i].speed) { monsters[i].pathIndex; // 如果走完了所有路徑點(diǎn)怪物到達(dá)終點(diǎn)對玩家造成傷害 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)移動 if (distance 0) { monsters[i].x (dx / distance) * monsters[i].speed; monsters[i].y (dy / distance) * monsters[i].speed; } // 簡單碰撞檢測怪物與墻這里僅作示例實際需要更精細(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)) { // 簡單處理讓怪物稍微彈開或停止這里簡化僅停止 // 更復(fù)雜的可以尋路繞開 monsters[i].x - (dx / distance) * monsters[i].speed; monsters[i].y - (dy / distance) * monsters[i].speed; } } } } // 怪物生成計時器 static int monsterSpawnTimer 0; monsterSpawnTimer; if (monsterSpawnTimer 300) { // 5秒生成一個 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); // 可以畫一個簡單的血條 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之前。現(xiàn)在紅色的怪物會沿著預(yù)設(shè)的黃色路徑點(diǎn)你可以在renderGame里畫出來向終點(diǎn)移動撞擊終點(diǎn)會扣減玩家血量它們還會嘗試?yán)@過你建造的墻雖然現(xiàn)在的碰撞處理很簡陋。5. 打磨與優(yōu)化讓游戲更像樣現(xiàn)在我們的游戲已經(jīng)有了核心玩法循環(huán)移動、收集、建造、防御。但它還很粗糙。下面進(jìn)行一些關(guān)鍵的打磨讓體驗更完整。5.1 游戲狀態(tài)管理與勝負(fù)判定一個完整的游戲需要有開始、運(yùn)行、結(jié)束的狀態(tài)。我們添加一個簡單的游戲狀態(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改名為這個 if (currentState ! PLAYING) return; updateResources(); updateBuildings(); updateMonsters(); // 勝負(fù)判定 if (player.health 0) { currentState GAME_OVER; } // 可以添加勝利條件例如堅守一定波數(shù) } void renderGameScene() { // 原來的renderGame改名為這個 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)輸入處理移動、建造等 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)渲染不同場景 switch (currentState) { case MENU: renderMenu(); break; case PLAYING: renderGameScene(); break; case GAME_OVER: renderGameOver(); break; } delay_fps(60); }5.2 性能優(yōu)化與代碼組織隨著游戲?qū)ο笤龆嗄銜l(fā)現(xiàn)幀率下降。優(yōu)化是必須的。避免在循環(huán)中頻繁創(chuàng)建/銷毀對象我們使用的固定大小的數(shù)組resources[MAX_RESOURCES]就是一種對象池的雛形這比頻繁new/delete或malloc/free高效得多。減少不必要的繪制目前我們每一幀都清屏并重畫所有元素cleardevice。對于這種像素不多的小游戲完全夠用。但如果元素非常多可以考慮臟矩形渲染只更新變化的部分。不過在Dev-C和EGE環(huán)境下cleardevice的開銷通??梢越邮?。代碼模塊化將不同功能的代碼分到不同的.cpp和.h文件中。例如創(chuàng)建game.h聲明全局變量和函數(shù)player.cpp、building.cpp、monster.cpp、resource.cpp分別實現(xiàn)各自的對象邏輯main.cpp只負(fù)責(zé)主循環(huán)和狀態(tài)調(diào)度。這會讓代碼更易讀、易維護(hù)。在Dev-C中你只需要在項目中添加這些源文件即可。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的玩家圖片 // 在渲染玩家時 putimage(player.x - 30, player.y - 30, imgPlayer);踩坑提示圖片路徑問題。確保圖片文件放在你的項目.dev文件所在的目錄或者使用絕對路徑。加載失敗時getimage不會報錯但會顯示一片黑色。另外復(fù)雜的圖像操作如圖像旋轉(zhuǎn)、縮放在EGE中性能開銷較大在小游戲中需謹(jǐn)慎使用。至此一個功能相對完整的“躺平發(fā)育”游戲原型就完成了。從零開始我們只用了一個輕量級的Dev-C和EGE圖形庫就實現(xiàn)了游戲的核心循環(huán)、圖形渲染、鍵盤鼠標(biāo)輸入、對象管理、碰撞檢測、狀態(tài)機(jī)等關(guān)鍵概念。這個過程本身就是一種高效的“躺平發(fā)育”——避開復(fù)雜引擎的沉重直擊游戲創(chuàng)作樂趣的核心。你可以在此基礎(chǔ)上繼續(xù)擴(kuò)展給塔添加攻擊子彈、設(shè)計不同的怪物波次、加入更多建筑類型和科技樹、甚至實現(xiàn)一個簡單的存檔系統(tǒng)。最重要的是你擁有了一個完全由自己代碼驅(qū)動的、可任意修改的游戲世界這份成就感是使用現(xiàn)成引擎拖拽組件難以比擬的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
香蕉大久久久| 欧美熟妇精品黑人巨大91| 91n处女在线观看| 欧美久热| 精品福利| 中文字幕在线第二页| 自拍偷拍 日韩无码| 久久久久久久久九九久孕交| 欧美亚洲一级在线观看| 综合激情一一91| 插日本熟女视频| 精品人妻一区春色| 久久国产三区| 日本性交操一区二区不卡系列| 久久熟女人| 婷婷av在线中文字幕| 97超碰色屌| 亚洲国产尤物yw在线观看| 亚洲精品白丝| 91xingse| 5278欧美一区二区三区| 精品无码欧美三级| 日韩精品三级片长长久久| 久草午夜| 国厂麻豆77q4| 粉嫩国产精品久久粉嫩| 少妇啪啪自拍| 亚洲激情视频| 久久久久久免费电影| 国产毛片精品一区二区色欲黄A片| 中文字幕第二页| 尻女朋友一夜| 精品一区二区人妖| 日韩无码视频黄色| 亚洲日本男人天堂网| 亚州操操穴网| 亚洲视频精选| 久久伊人网视频一区二区三区| 久久久久九九九九九| 人妻日日干| 91久热| 国产一区二区a毛片| 国产又大又粗又长视频在线| 亚洲超碰97| 久久超碰免费的| 欧美日韩国产色图在线| 亚洲欧美国产精品久久久久久久| 午夜视频久久久久一区| 久久久精品,3| 依人大香蕉| 亚州综合色| 亚洲少妇激情一区二区三区| 亚洲欧洲综合成人av一区| 欧美性色欧美| 亚洲成av人片色午夜乱码| 亚洲久9| 久久91精品国产9丨久久分亭| www九九热| 欧美97爱| 蜜臀久久99精品久久久久久无删减 | 婷婷丁香五月天亚洲天堂网| 日韩成人午夜精品久久高潮| 日韩在线女优天天干| 在线a亚洲视频播放在线| 女人爽到高潮久久久| 国产无码久久高清| 欧美日韩狠狠爱| 蜜桃久久久久久久| 日韩欧美麻豆大片| 久久五月婷| 三级特黄60分钟播放| 久久伊人网视频一区二区三区| 亚洲国产激情国产av| 免费看黄片现成| 韩国一级做a久久久久| 欧美成人国产精品| 大香蕉国产中文自拍| 九九热在线视频| 久久草大香蕉| 大香蕉综合| 八戒无码国产午夜福利| 午夜男女爽爽大片免费观看| 熟女探花啪啪| 一本精品日本在线视频精品| 97综合久久| 老鸭窝在线视频播放| 男人天堂久久精品不卡| 91男人天堂网| 久久久久久久9| 91观看 国产白丝| 俞拍自拍| 99久在线精品99re8蜜桃| 一区二区三区四区五区高清无码永久视频| 欧美天堂日韩三级国产传媒| 久草男人天堂| 国产AV线| 日本不卡二区| 自拍偷拍国产欧美日韩韩| 男人天堂网址| 国产精品视频一区二区三区八戒| 激情五月综合| 亚洲欧洲色情高清| 在线五区| 97这里只有精品| 91一区二区三区蜜桃| 成人性爱av| 久久‘黄片视频| 丁香五月性| 人妻在线中出视频| 欧美情色贴图| 精品一区二区三区四区女 | 日韩无码三级影院| 国产亚洲综合欧美一区| 久久亚洲不卡一区二区三区| 色综合五月天| 九九九九九九九九九五码| 狠狠爱夜夜| 亚洲图片欧美色| 日本成人电影资源网| 粉嫩av在线一区二区| 97亚洲综合电影| 97国产|免费| 亚洲成人一区二区精品| 情色av电影| 成人青青草原伊人| 国产一区在线观看无码AV| 97在线精品| 情色五月天久久久| 久久六六| 99性视频| 欧美色图小说综合| 亚洲电影中字一区二区| 五月丁香啪| 激情婷婷丁香| 久久亚洲中文字幕视频| 97超碰巨乳| 久久妇| 欧美丰满少妇xx高潮| 久久一二三四五六七八九区区| 国产亲戚伦亲在线| 天天综合,91综合永久| 日韩在线电影| 99这里有精品| 人妻日日干| 内射日韩大臀美女| 男人的天堂三级| 精品国产www久久| 夜夜骑天天燥| 精品一级毛片在线观看| 亚洲精品一区二区三区新线路| avav青青草久久夜| 亚洲天堂热| 中文字幕欧美精品亚洲日韩蜜臀| 思思热影视| 精品无码一区二区三区| 国产精品一区二区黄片| 超碰九7| 亚洲色诱惑| 精品少妇一区二区| 偷窥自拍亚洲色图| 在线A日本| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 日本视频一区二区三区| 亚洲高清在线se| 国产毛片精品一区二区色欲黄A片| 欧美牲| 久久久精品中文字幕麻豆| 激情干在线| 久操精品| 天操天操夜操夜月月年年操操| 抽插无码高清一区| 插穴性爱视频在线观看| 东京热一区二区中文字幕| 大香蕉综合| 日本三级韩三级99久久| 操B在线观看| 久久久日本电影| 四虎影视 亚洲无码| 亚洲自拍一区夜夜操 | 国产免a费看黄片在线| 少妇无码999| 97超碰人操| 日日干夜夜操视频h| 欧美性爱视频免费一区一A| 思思视频免费看网站| 老熟乱一区二区三区四区| 日本好吊色视频| 91亚洲欧美色图| 在线女人91| 91人妻Pr| 欧美劲爆视频一区二区| 成人 日本A片无码8888| 91成人18| 久久加勒比| 伊人久久AV诱惑悠悠| 麻豆国产成人精品| 98福利在线视频| 狠狠躁天天躁日日躁97| 亚洲欧美天| 粉嫩av一区二区三区天美传媒| 嗯嗯不要 视频| 91久| 蜜桃狠狠色伊人亚洲综合| 91国产大片| 亚洲自拍欧美国产首页网曝 | 91综合色噜噜| 久久产精品一区二区三区电影| 亚洲天堂加勒比| 无码人妻系列少妇| 蜜臀99久久精品久久久久久| 大粗鳼巴久久久久| 又大又大又大又粗爽高潮观看| www.亚洲黄色| 超碰成人国产| 亚洲天堂色图| 999久久久九九九九| 色综合大香蕉| 天天操天天射天天日| 91丝袜美腿网站| 综合亚洲网| 激情五月天网站| 欧美色乱| 丁香五月综合| 91丝袜美女| 97国产精品在线观看| 天天做日日做天天欢。| 亚洲成?V人片在线观看福利| 亚洲无码电影久久久| 日本狂喷奶水在线播放212| 人人摸人人添人人操| 久久久久亚洲AV无码专区少妇| 无码不卡亚洲成?人片| 粉嫩av平台| 色天使亚洲综合在线观看| 自拍视频一区在线观看| 久久亚洲av成人无码国产| 日本欧美一区二区三区视频麻豆| 97 国产一区| 熟女AV一区| 国产精品欧美在线观看 | 久久大香蕉手机高清| 91网亚洲| 啊啊啊啊好疼| 少妇啪啪自拍| 欧美亚洲激情小说| 久草电影网| 人人么人人操| 久草五月| ...日韩成人一区二区三区字幕| 97色综合中文网| 911av网站免费观看| 国产一区二区三区中文字幕| 亚州熟妇精品| 老子午夜伦不卡影院| 大香网伊人久久综合| 97超级欧美| 久久夜夜| 极品色社| 97av在线观看| 丝袜美腿诱惑亚洲欧美视频在线观看 | 中文字幕乱碼在线| 欧美天堂在线| 又大又白奶子| 亚洲一区二区av| 无码国产精品午夜不卡( | 91狠狠综合久久久| 乱操乱伦AV| 91在线欧美| 少妇蜜汁| 色吧综合网| 国产一区二区久久| 四方色播| 性爱AV天堂| 亚洲欧洲网站免费观看| 婷婷日韩一区二区三区中文字幕在线| 亚洲影院365| 九九操久久国产免费视频| 欧美色偷拍| 久久久久久久国产a∨| 天天搞欧美| 影音先锋一区二区在线资源| 920日本午夜免费| 国模少妇一区二区三区 | 亚洲女人毛茸茸91| 噜噜噜久久亚洲精品色情| 久久手机好看网站| 禁止观看美女黄| 99热婷婷| 国产不卡精品91| 日本精品成人无码| 国产AV高清AV无码| 操逼视频亚洲| 国产黄色av大片网站| 亚洲精品国产无码高清| 欧美色宗合| 好吊色青靑草| 无遮挡又黄又刺激的视频| 久操电影网| 男人天堂东京热| 日本视频在线中文字幕| 日本一区不卡| 日韩欧美大力操| 操屄不卡视频| 久久av网| 997色在线| 亚洲熟妇AV日韩熟妇在线| 色婷婷一区二区三区久久午夜成人不| 久久亚洲一区女同性恋中文字幕 | 日本有码久久| 少妇国产不卡| 成人一级二级| 亚洲久久久| 亚洲囯产精品女人久久久| 国产浮力影院第1页| 日韩免费人妻色情网站| 91欧美另类| 久草草一二三四区久久| 99热婷婷一区二区三| 欧美日本不卡在线| 亚洲一区二区三区播放在线| 精品国产久热在线观看| 国产精品久久久久久夜夜夜| 亚洲综合大片| 在线视频97| 中国探花熟女| 大香蕉十区| 清纯唯美亚洲另类| 国产欧美岛国精品一区| 亚洲精品丝袜| 亚州欧美在线| 超碰99热| 欧美精品不卡一二三四在线91| Sekablack无码一区| 午夜福利免费福利视频| 欧美色综合图片| 在线播放免费av福利片| 五月婷婷综合在线| 免费亚洲国产精品久久一区| 国产精品无码成人精品| 91大胆欧美| 日本 情色 1区| 影音先锋国产精品| 有码专区最新中文字幕有码| 91超碰人人操| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 亭亭丁香激情| 人人摸人人入| 一个人在线看的黄色电影网站| 91模特在线观看| 欧美亚洲| www.91视频网| 色999亚洲人成色| 208天天久久九九九| 免费看一级a性色生活片久久无| 天美传媒av一区二区| 尤物黄色在线观看网站| 99精品综合久久久久五月天| 特级特黄一级毛片免费| 大香蕉青青9| 丝袜熟女一区二区三区| 亚洲综合骚逼| 无码人妻一区二区三区色欲aⅴ| 最新av网站在线观看| 成人性生活高清视频在线播放| 志村玲子视频一区二区| 91高清欧美| 久久六六| 果冻传媒A片一二三区| 精品偷拍13p欧美dodk视频| 97免费视频在线观看视频| 国产亚州高清国产拍精| 91人妻熟女| 欧美熟妇视频| 五月丁香社区婷婷日韩欧美精品影院 | 日语五十路和六十路亚洲国产精品| 日韩 人妻 精品| 被体育老师抱着c到高潮| 日日爽熟女| 狠综合网| 欧美激情片一区二区| www.久久爱| 欧美一二三级精品在线| 亚洲高清欧美总合| 久久精品男人的天堂| 怡红院怡春院| 超碰人人色| 欧美一区二区日韩三区| 精品人妻中文字幕高清| 欧美美女视频| 欧美淫乱视频| 亚洲第一男人天堂| 亚洲色图欧美色图制服诱惑| 久久人妻四季| 干B| 超碰碰激情97+久| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 国产精品原创巨作?v网站| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 日韩av影片在线观看| 亚洲av噜噜噜噜噜噜| 丁香七月婷婷| av亚欧| 亚欧洲日韩国产精品| 男人的天堂三级| 伊人嫩草| 黄页av| 久久伊人最新网址视频| 亚洲国产精品99久久久| 尤物黄色在线观看网站| 国模艳艳啪啪一区| 亚洲AV永久无码一区仙野| 夜夜爽爽爽| 嗯嗯嗯啊啊啊在线免费观看| 高潮嗯啊性感美女久久久| 91黑丝操| 97干97色| A 天堂在线观看视频| 日本三级中国三级99人妇网站| 99色综合| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 日韩超碰97| 极品综合| 91人妻爽爽人人做人人澡| 亚洲永久AV无码精品秋霞| 亚洲久久天堂| 91欧美大片| 天天视频综合在线观看视频| 性色一线| 精品二区久久| 日韩综合无码色欲vv| 全球成人中文在线| 欧美九九爱| 久久久久久久久9| 欧美日韩国产黄色片| 黄色av一区二区在线| 久热色情精品| 嗯嗯啊啊啊好爽| 精品国产Av无码久久久亚洲| 精品视频久久久久九九九九9999| av午夜玫瑰| 日韩性爱一级片| 九热视频| 九九九九亚洲| 国产又操| 黄站在线免费观看| 国产亚州高清国产拍精| 欧美激情久久久久| 天天天天天天天天天天干美女| 国产日韩精品一区二区三区| 丝袜美腿91| 另类专区在线观看| 性色高清..……| α√在线| 天天色综合图片| 天天日B夜夜干B时时操B| 久久男人| 东京热,男人的天堂| 亚洲免费精品一区| 狠狠操狠狠插| 日本一级特级毛片视频| 天天激情综合站| 男人 天堂 日 亚洲| 五月激情小说| 国产激情视频一区区三区| 人人妻人人澡人人爽久久av| 日本人妻伦在线中文字幕| 综合久久少妇中文字幕| 五月天激情小说网| 在线αⅴ| 五月婷婷丁香| 熟妇女伦乱视频| 99re视频在线播放青草| 青青草好吊| 操婢日韩| 欧美欲色| 中欧人妻丝袜中文字幕 | 宅男午夜在线视频| 高精欧美色| 欧美麻豆成人同性GⅤ在线| 色91综合网| 国产成年女黄特黄| 伊人AAA| 99re6在线视频精品免费完整版安卓版| 日韩成年人性爱视频| 五月丁香六月婷综合成人综合| 精彩久久中文| 日本视频在线观看污污污| 日日夜夜国产综合| 乱伦一二三区| 天天综合网入口~91| 日本成人免费一区二区三区| 台欧久久精品视频| 七月丁香婷婷| 欧美97日韩| 国产毛片久久久久久久| 精品网站99999| 一本精品日本在线视频精品| 搞中出视频在线观看| 五月婷婷丁香六月丁香| 9久精品视频在线观看| 日韩中文字幕精品一区在线| 青娱乐手机日韩在线视频| 18禁中文字幕| 欧美激情 亚洲色图| 亚洲激情综合| www.亚洲黄色| 福利大香蕉| 91久操| av一区二区三区不卡| 最新精品久久蜜桃 | 97亚洲性爱| 国产精品爱欲| 日本一线产区和二线产区伦理片| 日本一区二区电影网站| 天堂俺去俺来也www久久婷婷| 91青青在线视频| 精品四五区| 亚洲国产精品成人无码久久久| 嗯嗯嗯啊啊在线观看| 啊啊啊啊啊在线观看网址 | 久久婷婷五月天| av一区二区三区不卡| 四虎免费视频| 91偷拍欧美亚洲| 性爱乱伦网址| 男女猛烈无遮掩视频免费软件| 日本性一区| 九九热九九热| 亚洲熟女中文字幕在线| 欧美爱三级日韩久久| 91精品久久久久| 成人一区二区三区四区| 私色综合网| 天堂种子在线www网资源| 豆花视频操逼网址| 女人久久久| 91国产伊人大香蕉| 欧美亚洲厕所精品偷拍91| 五月激情综合网| 日韩人成网站在线播放| 日欧操屄| 欧美91精品国产自产| 黑人精品欧美一区二区蜜桃| 亚洲熟女乱综合一区二区三区| 午夜男人天堂| www.91色综合| 26uuu欧美| 亚洲综合五月天| 亚洲成人久久美女| 搡老人老9丨女老熟人| 一区二区三区美女超清| 亚洲一区二区AV| 亚洲欧美97√| 操久久久久| 午夜福利合集| 亚洲综合色图欧美| 97伦综合| 亚洲性高潮| 亚洲天天自拍| 三及片网站| 蜜臀久久久99久久久久 | 亚洲色图尤物视频 | 丰满搜索结果 -第18页- 久久高清无码 | 激情99| AA丁香综合激情| 大香蕉五月天| 天天日天天色| 91在线页| 2025亚洲男人天堂| 91久久伊人婷婷青青草| 大香蕉综合在线| 国产AV人人夜夜澡人人爽麻豆| 九一性生活免费视频| 一区二区不卡免费| 国产精品日日摸天天碰| 91精品人妻一区二区三区蜜桃| 清纯唯美亚洲综合| 久久精品福利影院| 国产区性爱在线视频秋霞豆| 影音先锋中文字幕日本好一区二区| 日逼国产| 精品一区二区3区| 欧美有码亚洲中文字幕一区二区三区四区| 粘花网06av视频| 青青草国产盗摄一二三区| 亚洲一区制服诱惑| 97视频播放| 一中国女人毛片水真多| 日韩操逼HD| 伊人五月天| 超碰97欧美在线| 国产25页| 亚洲毛片久久| www.91人妻.com| 日韩操人| 美性中文综合网| 欲香欲色综合天天伊人| 成人免费看吃奶视频网站| 午夜福利免费精品视频| 天天影视网综合少妇| 性性久久| 欧美色涩| 国产激情片在线观看| 婷婷三区| 91色欧美| 国产AV激情无码久久无码| 亚洲宅男天堂| 亚洲AV在线资源| 亚洲日韩国产精品| 97国产成人精品免费视频| 涩爱AV在线| 日曰骚久久精品| 一本精品日本在线视频精品| 日本有码影片下载| 午夜福利合集| 青娱乐国产精品| 成人久久无码www| 欧美成人精品欧美一级乱黄一区二…| 色就色综合| av在线人气| 欧美日韩欧美| 国产精品久久久久久久久AV大片| 1204av韩国| 亚洲本色精品一区二区久久| 欧美日韩91| 亚洲中文字幕一区| 欧美视频一区二区在线| 91总综合网| 精品无码久久久久久久杏吧| 五月婷婷六月丁香| 亚洲欧美综合图片| 国产又大又硬又长又粗| 欧美性生活内射| 八戒午夜福利理论片| 日韩亚洲美女一区久久| 欧美美女视频| 水澄无码AV| 91性感在线| 任你草| 亚洲欧洲日韩中文字幕一区| 亚洲激情av| 偷窥自拍亚洲| 男女一级A片大黄,一进一出| 91 亚欧| 色婷婷丁香| 人妻夜爽夜夜爽| 美女黄频a美女大全免费皮| 亚洲少妇免费视频\| 99久久e免费热视| 东北操逼| 91精品国产高清久久久久久,亚洲成人| 蜜桃一区二区三区| 日人妻视频91| 国产精品动态一区二区三区四四| 日本高清_区二区三区 | 亚洲天堂 视频你懂的| 天天干1区2区在线| 欧美黄片视频在线观看免费 | 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 亚洲欧美另类图片| 天堂av2019| 91精品人| 日韩ab网| 日韩不卡毛片Av免费高清| 免费99精品国产自在在线| 久久艹逼视频| 亚洲欧美不卡线| 99999久久久久9国产精品| 日韩激情无码影院| 久久香蕉国产线看观看亚洲女人| 日本精品第一视频在'| 男人的天堂com| 日本亚洲vr欧美不卡高清专区| 久久性爱视频免费看| 日韩av色图| 麻豆国产免费影片| 草草电影院| 欧美韩日精品资源| 久久久九九网站| 秋霞色色影院| 夜色97| 欧美性特| 中文字幕一区二区韩| 久九九九九九九九热| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 97天天爽| 亚洲国产成人精品久久久国产成人一区二区三.| 黑人粗大V S日韩女优视频| 99视频内射三四| 手机在线免费看的av| 国产精品69久久久久孕妇欧美 | 国产风韵犹存熟妇三区| 91neishe| 精品在线观看视频在线| 久久久蜜桃臀无码视频| 日本中文字幕一区| 久久国产三区| 日韩不卡在线一区二区| 97色碰| 久久久久久99999国产精品| 欧洲天天在线| 国内精品伊人久久久久影院会| 啊啊啊在线观看| 亚洲91综合| 9 7超碰在线免费观看| 无套内射性感少妇视频| 久综合国内精品自在自线| 亚洲男人天堂手机版| 超碰1997| 91伊人影视综合| 五月婷婷六月天| 一级A片女人高潮叫床| 亚洲一区在线观看欧洲| 天天综合中文字幕 91| 熟女91网| 日韩少妇在线视频| 色情亚洲日本成人| 亚洲国产精品乱码在线观看| 色婷五月| 四虎影院成年人片| 欧美国产伊人久久久久| 最新岛国大片| AV天堂国产| 伊人国产成人av网站| 欧美精品庄| 人妻激情视频| 我爱操| 男人天堂无码| 久久精品人妻一区二区三区| 久久久久久久久久久久九| 久久嫩草国产成人一区| 女色视频社区| 九九在线视频| 天天操夜夜操| 91欧美高清| 粉嫩国产精品久久粉嫩| 六六久久日韩不卡| 超碰97精品在线| 97干com| 天堂日本亚洲欧美| 干b在线性社区| 啊啊啊不要啊啊受不了了视频在线 | 丰满人妻一区二区中文| 亚欧美综合网。| 国产第二页| 操死我了啊啊啊| 日本久久久精品电影| 久久禁| 欧美日韩色| 国产精品视频在线观看| 97干在线| 国产成人拍国产亚洲精品| 以及麻豆国产入口在线观看免费| 久久受www免费人成| 国产高清精品一区二区三区毛片| 2017人人操,人人摸| 久操网线| 91日韩在线| 婷婷色一区| 91成人在线| 4虎在线视频| 九九九偷拍| 超碰成人人人爽人人爽| 国产精品成人久久一区二区三区| 国产精品亚洲一级av第二区| 国产精选三级在线观看| 亚洲人成网www| 亚洲AV资源| 中国的操老妇女| 精精品人妻一区二区三区| 小说区 图片区色 综合区| 久久黄色性爱视频| 婷婷五月天丁香花| 欧美少妇第一页| 99蜜月精品久久| 欧美狠狠| 午夜欧美女人操逼| 熟女啪啪视频| 久久精品中文字幕女同| 国产97亚洲| 美女午夜福利免费视频| 爽爽淫人网| 欧洲精品网| 久久一区二区三区四区五区| 日本 色 导航| 97天天爽| 中文字幕一品色图| 欧洲黄色网| 国产免费久久久久| 欧美国产视频| 人妻少妇精品视频一区二区三区| 岛国激情视频在线观看| 99热精品免费| 91丝袜美腿片| 亚洲中文字幕精品一区| 5月婷婷6月六月丁香| 国产精品2020| 中文字幕AV中出| 乱伦AVxx| 超碰这里只有精品| 超碰78| 97啪啪| 韩日巨乳美女免费视频在线观看| 麻豆久久一区二区三区| 国产日本久久免费精品| 天天α片| 欧美成人性爱视频在线播放| 可以看的av| 另类图片五月天| 九色精品视频导航1| 欧美美女啪啪视频| 蜜臀久久久99久久久久 | 日韩情色AV| 加勒比综合网| 色五月婷婷麻豆在| 97在线观看视频| 无码精品蜜桃一区二区三区ww| 久久久久一本一区二区青青蜜月| 精品日韩| 又大又白奶子| 三四中文字幕| 婷婷精品视频| 国产嫩草精品A88AV| 免费操逼视频下载| 国产成人精品午夜福利| 亚州一区二区成人片免费| 欧美久久婷婷| 欧美一区二区三区四区综合| 欧美性色综合网| 韩国三级一线观看久| 久久久啊啊| 日韩中文字墓| 九九十八精品| 日韩三A大片在线观看| 夜夜嗨av午夜成人| 亚洲成人精品在线一区| 国产大片精久久久久久| 男女日B国产| 97视频7| 亚洲一区二区三区播放在线| 色天堂综合| 国产亚洲精品农村妇女| 九九九九欧美| 一级黄色牲爱A级片| 天天综合站| 丁香五月婷婷啪啪| 东北女人操逼| 免费9 1久久| 高清成年美女黄网站免费大全| 九九国产| 国内毛片免费h片在线| 91综合天天| http://qxhbdz.com| 国产JDAV无码视频在线观看| 亚洲限制级| 日本日皮视频逼| 欧色网址| 日韩少妇丰满亚洲| 日日操丁香五月天| 九九九不卡| 超91综合网| 美女操逼A A| 亚洲在钱| 亚洲,欧美,春色,另类| 人人看人人插| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 色婷网| 久久成年片色大黄全免费网站| 国产精品亚洲四五区在线观看| 久草免费福利在线播放| 中文有码9| 97se综合网| 国产欧美日韩在线不卡第一页| 91丝袜美女视频| 亚洲视频一二区| 欧美在线播放aaaa| 日韩精品资源专区二区| 久久久精品一区二区| 91粉芽高清在线一区二区| 牛牛操视频逼| 漂亮人妻被强中文字幕hd| 黄色二级片网站| 中文字幕亚韩| 日本羞羞的视频在线播放| 天天在线91| 99re9这里只有精品| 中文字幕日本久久| WWW啪啪的com| 一起草在线视频| 941超碰| 欧洲射精91| 99热最新网址| 欧美日韩操逼动图| 少妇久久| 床戏久久久av一区二区麻豆| 四虎884a| 久操黄色视频| 国产福利第一视频| 嗯啊视频免费在线观看| 久久78| 欧美色91| 国产热av| 天天看片麻豆| 青青青操| 天天舔天天 | 少妇色综合| 中文字幕片| 日韩免费人妻色情网站| 亚洲各类熟们中文字幕| 欧美日日操| 色欲久久久久综合网| 色香天天| 九九五月天| 91美女国产在线| 日韩电影天堂视频一区二区| 中文字幕视频2区| 性站 | 插入逼91| 97碰| 久久精品一区二区三区四区五区| 黑人性欧美| chaopen97久久| 99re在线视频国产| 国产精品视频在线播放| 自拍视频大全亚洲专媒视频/一区二区三区| 欧美色图天堂在线| 天天干天天插| 99热在线播放| 亚洲高潮少妇| 黑丝少妇| 毛片中心9视频99| 97超级久久强资源| 99re这里只有精品中心播放 | 亚洲成人AB| 婷婷10月天青娱乐| 欧美日韩亚洲少妇寂寞影院正在播放| 青久久| 99这里只有精品| 丝袜美腿操av| 熟妇人妻丰满久久久久久久无码| 日日摸日日弄日日拍| 操一对老熟妇爽上天视频| 97操碰| 火箭成精品视频884必出精品| 丰满少妇一区二区三区免费看| 91网站18禁| 秋霞 色色| 国产精品嫩草影院午夜两性 | 老司机久久| 亚洲国产蜜臀系列在线观看| 视频在线观看青青99国产| 欲综合网| 蜜臀久久99精品久久久久| 国产无码精品久久久久久| 久久丁香久草综合网| 新久久AV| 五月香婷婷| 亚洲图片欧美日韩| 精品国产99| 激情久久日韩精品中文字幕麻豆| 超碰色大香蕉| 国产女大学生AV| 性久久| 啪啪综合网| 亚洲男人天堂网久久| 亚洲国产精品久久久男人的天堂| 操逼短片| 亚洲色宗合| 亚瑟国产精品久久无码| 男人的天堂一区三区| 日韩亚洲美州欧洲综三区一品在线| 丝袜狠狠草尤物人妻av91| av线电影| 99在线精品视频| 老外又粗又长一晚做五次| 国产精品无码在线| 人妻碰碰碰碰碰碰| 熟女精品一区二区在线观看| 婷婷激情丁香| 成人免费毛片| 欧美精品999| 97超碰逼| 欧美综合1性辶| 成人乱人伦一区二区| av九九| 成人黄页| 超碰色综合| 久久久精品成人国产| 高清不卡视频| 色老大| 免费观看国产不卡av| 99热精品在线| 激情小说亚洲视频| 91人妻人人澡人人爽人人精品| 国产乱人伦AVA麻豆软件.| 97蜜桃综合| 日韩性色| 国产亲戚伦亲在线| 亚洲综合图文| 97精品免费视频网站| 国产福利小视频高清在线观看| 高凊专区人人操| 97精品一区二区视频在线观看| 一级日本牲交大片好爽在线看| 天天插天天插| 亚洲色棕合| 久久久久久日韩| 色综合中文字幕不卡| 久肏视频字幕| 亚洲精品影视老司机| 91殴美大片| 久久人妻| 日韩另类色图| 欧美草草高清日韩视频| 黑人无码一区二区| 97色色,97综合| 99e久久国产精品| av在线人气| 欧美色狠| 天天综合精品| 久久一区二区三区四区五区| 99热在线播放| 国产一区二区在线看| 日韩精品亚洲专区在线影视| 好看的久久不射无码影视影院| 精品三级在线专区| 久久久久中出| 国产精品com| 极品五月天噜噜| 色欲av国内精品久久久久久| 色色五月天婷婷| 欧美se综合| 99热免费| 欧美亚洲中文| 超碰 另类 欧美 | 不卡av在线中文字幕| 97超碰天天爱天天爱| 岛国黄片网站| 久久鲁夜| 99精品欧美一区二区三区桃色| 激情欧美日韩女同久久| 国产精品国产自产高清AV| 欧美中文狠| 韩国午夜理伦三级好看| 久久久久久久9最新免费视频观看| 国产成人综合在线播放| 97超碰超欧美。| 激情啪啪拍91| 男人综合网| 99久久无色码| 亚洲国产ⅴ高清在线观看| 99热这里只有是精品10| 99热在线观看| 久久久久女教师免费一区| 天天干天天爽| 无遮挡男女激烈动态图| 高潮嗯啊性感美女久久久| 太久视频| 97色操| 91 国产丝袜在线放观看| 精品丝袜无码一区二区三APP| 97视频www| 特级特黄一级毛片免费| 精品久久久一本一道| 激情看片网站| 99人妻碰碰碰久久久久禁片| 老女人碰碰在线碰碰视频| 久久九九99| 久久毛卡| 亚洲成人精品在线一区| 亚州性色| 怡春院久久| 伊人在线大香蕉视频久久| 九一综合精品视品av| 97精品网站| 国产女人极品高潮毛片| 国产国产亚洲一二三久久| 久草久热| 欧美一级黄色18片免费看| 超碰九7免费| 精品96久久| 久久九九网| 大屁股人妻女教师撅着屁股| 日本最新1区2区3区| 亚洲欧美精品一区天堂久久 | 天天做天天爱天天爽| 国模无码人体一区二区三| 人人九九精| 在线天堂999| 日本三级韩三级99久久| A级片日韩欧美国产欧美视频精选观看 | 亚洲天堂自拍| 婷婷色中文字幕| 狠狠操官网| 欧在线一二区| 亚洲精品人伦一区二区| 亚洲欧洲视频小说在线观看| 牛牛aV| 影音先锋乱伦资源| 欧美 亚洲精品首页| 国产天美传媒精品| 色爽爽文学| 人妻人人操| 干日本人少妇午夜寂寞影院| 精品国产乱码久久| 国产三级中文字幕粉嫩| 亚洲自拍一区夜夜操| 色999人与兽| 色色色五月婷婷| 精品国产人成在线| 一起草三级AV电影在线观看| 日日干日日摸| 制服中出中文人人精品| 欧美色图片91| 伊人天堂在线| 天天爽天天干| 日本午夜精品理论片A级APP发布| 日本操逼视频不卡直接放| 超碰78| 亚洲自拍97| 亚洲一区二区av| 久久久久深夜无码| 97se综合| 久久久久久久久久黄色网| 欧美有码亚洲中文字幕一区二区三区四区 | 一道本东京热加勒比一区二区三区| 日韩999| 在线看免费无码AV天堂的| 欧美少妇性爱网站| 中国少妇XXXX做受| 自拍偷拍第26| 欧美精品久久96人妻无码| 麻豆影音天美视频| 色就色综合| 国产精品国产自产高清AV| 男人女人18禁片免费看网站| 97精品视频| 伊人天天久久动态图| 国产99999| 亚洲欧美不卡线| 啊啊啊好想要| 国内外内射高清视频| 蜜桃久久一区二区| 久久超碰网| 熟妇乱伦一区二区| 国产激情视频一区区三区| 亚洲男人电影天堂| 84YTCOM性无码| 日婷婷| 一级黄色视频网| 性在久久久久久| 欧美激情中文字幕另类小说| 男男H黄动漫啪啪无遮挡网站| 女人双腿搬开让男人桶| 亚洲操逼网| 又黄又爽在线观看视频| 久久啊哟| 九九热视频这里只有精品| 亚洲综合性网址| 91美女国产在线|