日韩精品一区二区三区在线视频放-无码中文字幕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)作的樂趣。“躺平發(fā)育”這個(gè)詞最近在游戲圈里挺火它描述的是一種避開激烈競爭、專注于自身成長和資源積累的玩法策略。我把這個(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簡單直接沒有現(xiàn)代游戲引擎那層層疊疊的抽象讓你寫的每一行代碼都直接與屏幕上的像素、鍵盤的按鍵打交道。這種“所見即所得”的掌控感對(duì)于理解游戲底層運(yùn)行機(jī)制至關(guān)重要。所以這個(gè)項(xiàng)目不是要教你用Dev-C開發(fā)一個(gè)商業(yè)級(jí)的游戲而是帶你用這個(gè)“老伙計(jì)”快速搭建一個(gè)可玩的游戲原型體驗(yàn)從零到一的完整過程。我們會(huì)做一個(gè)類似“塔防”或“生存建造”概念的簡易版“躺平發(fā)育”玩家控制一個(gè)角色在場景中收集資源、建造防御設(shè)施抵御周期性來襲的“怪物”。整個(gè)過程我們將聚焦于游戲循環(huán)、圖形繪制、鍵盤交互、簡單碰撞檢測這些核心概念。2. 環(huán)境準(zhǔn)備與“踩坑”指南讓小熊貓Dev-C跑起來雖然Dev-C以簡單著稱但在今天的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è)簡單的測試程序來驗(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è)更簡單的、基于“死循環(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ì)殘留造成拖影??刂茙蔰elay_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ì)于我們的簡易游戲可以設(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)。先用最簡單的變量比如全局變量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)檢測我們通常在主循環(huán)里用_kbhit處理。 // 這里先留空邏輯更新稍后補(bǔ)充。 } void renderGame() { cleardevice(); // 關(guān)鍵清屏 // 1. 繪制背景例如一個(gè)簡單的網(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; // 右 } // 簡單邊界檢查 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ì)一種最簡單的形式地圖上隨機(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) { // 簡單矩形碰撞檢測 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)簡單計(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è)簡單的圓形代表金幣 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)與簡單AI沒有敵人的“發(fā)育”是孤獨(dú)的。我們來創(chuàng)建一些沿著固定路徑進(jì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è)一條簡單的進(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; } // 簡單碰撞檢測怪物與墻這里僅作示例實(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)) { // 簡單處理讓怪物稍微彈開或停止這里簡化僅停止 // 更復(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è)簡單的血條 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)在紅色的怪物會(huì)沿著預(yù)設(shè)的黃色路徑點(diǎn)你可以在renderGame里畫出來向終點(diǎn)移動(dòng)撞擊終點(diǎn)會(huì)扣減玩家血量它們還會(huì)嘗試?yán)@過你建造的墻雖然現(xià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è)簡單的游戲狀態(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)渲染不同場景 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ì)象管理、碰撞檢測、狀態(tài)機(jī)等關(guān)鍵概念。這個(gè)過程本身就是一種高效的“躺平發(fā)育”——避開復(fù)雜引擎的沉重直擊游戲創(chuàng)作樂趣的核心。你可以在此基礎(chǔ)上繼續(xù)擴(kuò)展給塔添加攻擊子彈、設(shè)計(jì)不同的怪物波次、加入更多建筑類型和科技樹、甚至實(shí)現(xiàn)一個(gè)簡單的存檔系統(tǒng)。最重要的是你擁有了一個(gè)完全由自己代碼驅(qū)動(dòng)的、可任意修改的游戲世界這份成就感是使用現(xiàn)成引擎拖拽組件難以比擬的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
中出20p| 亚洲蜜桃V妇女| 国产 三级自拍| 第45页一区二区| 韩日欧亚a级| 黄页网站免费高清在线观看| 麻豆国产原创AV色哟哟| 蜜臀久久久99久久久久 | 久久男人精品| 久草资源在线视频官方总站日韩丝袜美腿| 亚洲综合色图欧美| 国产毛片在线| 性高潮久久久久久久久久久| 日韩综合成人免费视频| 91国产精品在线看| 大粗鳼巴久久久久| 狠狠五月天| 蜜臀久久99'精品久久久| 欧美日本中字另类在线| 成人A片男人的天堂| 男人天堂毛片| 婷婷五月天社区| 美女9118禁| 日本在线视频导航| 日韩美女高潮喷水视频| 99色色网| 亚洲色宗合| 色色五月婷婷| 九九九九精品| 1二区9| 强奸乱伦AV网址| 丁香五月色情| 欧美色图亚洲激情| 一区久久久二区| 97超碰超碰| 久热无码| 中文乱码字字幕在线第5页| 男人的天堂在线有码| 大香蕉欧美| 我爱大香蕉| 久久久555| 日本97久久久精品| 中文字幕黄色片| 欧美黑人熟妇精品91| 色色亚洲| 四虎国产精品永久在线囯在线| 99热aaa| 中文字幕91页| 国产久久久| 青青草原人妻| 亚洲中文字幕在现观看| 91久久堂| 国产AV高清AV无码| 日韩97在线| 丁香五月影院| 欧美性爱第一页久久| 欧美页片| 91呆哥人妻| 精品人妻一区二区三区日产| 久久超碰97中文字幕| 波多野结衣之双飞调教在线播放 | 操逼内射干逼白丝91| 国产精品黑人一区二区三区| 97视频620| 亚洲国产麻豆一区二区三区| 自拍六区| 成人A片男人的天堂| 国产精品无码在线| 久夜操| 男人天堂站| av绯色| 国产精品在线一区二区| 无码视频一区二区| 99操视频| 国产日韩欧美中文在线播放| 综合亚洲网| 1024香蕉视频| 亚洲综合另类小说色区亚洲成av人片在www| 二三四区精品| 玖玖97综合| 韩日性爱av| 91亚洲网站| 91性高| 五月天社区| 无码人妻精品一区二区三区99不卡| 欧美九一精品久久久熟妇| 久久久久久久久久久久久9999| 私人尤物在线精品不卡| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 999熟女精品| 丝袜 亚洲 偷拍| 91亚洲色人| 日韩猛交| 大香蕉日韩| 伊人久久大香蕉线AV五月天| 色色婷婷丁香| 俞拍久久国应视频| 最新精品久久蜜桃 | av网站国产主播在线| 欧美色爱综合| 久久精品国产久精国产| 密臀在线免费观看| 操狠狠| 最新中文字幕在线亚洲| 国产精品无码成人精品| 伦理第一页| 北条麻妃性愛视频| 男人的天堂2019AV| 国产操逼逼网| 亚洲成?V人片在线观看福利| 一区二区三区黄色片a| 97亚洲欧美| 精品人妻一区二区三区四区| 职场同事知名国产国产精品久久欧美日韩| 大香蕉色网| 素人播放一区| 中文字幕 码 自拍 视频 区| 成人性爱电影网| 国产精品视频麻豆入口| 热思思免费视频| 丁香九月激情啪| 日韩啪啪啪啪啪| 91九久| 伊人九九| 韩国一级做A片免费的| 人人妻人人色| 国产精品无码久久久久2025| 日本亚洲熟女视频| 爱逼综合| 欧美国产精品久久九九| 久久综合中文国产| 国产精品视频一区二区三区八戒| 日韩有码专区| 久久最新免费视频23| 日本精品一区二区中文字幕| 精品中文字幕一区二区| 久久久久久久久国产| 97超碰中文字幕| 99成人| 久久,精品一二三| 亚洲成人av色网| 亚洲综合网图| 日本久久久久久久久久| 97爱爱| 免费观看国产小粉嫩喷水精品午| 亚洲精品久久久久久久蜜桃臀| 亚洲天堂热| 加勒比大香蕉视频在线| 老女人老91妇女老热女| 97在线观看免费视频| 中文精品一区二去| 丁香六月激情| 日本精品九九九| 色色九区| 精品在线观看视频在线| 97综合在线观看| 91国产美女丝袜足交精品视频| 欧美成人国产精品| 天堂性色| 国产 热久久久久国产精品| 探花精品视频| 天天弄欧美| 超碰是碰在线观看| 日本中文字幕不卡视频| 久久久夜夜嗨免费视频| 精品97精品97| 操久久久久| 美女黄网| 中文字幕日本久久| 99久久综合| 97啪啪| 国产亚洲欧洲在线观看| 色视频蜜乳| 国产女上位好爽在线| 97在线日韩中文字幕| 亚洲国产精品9999在线观看| 久久亚洲色图中文字幕| 中文字幕 国产区| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 亚洲校园激情| 97人肏| 国产女大学生AV| 亚洲精品男人的天堂| 992大香蕉| 五月丁香婷婷色| 正宗无毛一线天嫩逼| 岛国大片在线观看网站入口| 大乔未久88一区| 无遮挡一级毛片视频免费的| 99热精品国产| 国产一区二区av综合| 久久一本大香蕉| 亚洲成a人片在线观看中文!!!| 日韩美女,国产传媒,视频一区| 黄视频免费| 99自拍B亚洲| 亚洲一区日韩精品中文字幕 | 黄片免费看黄片免费看| 日本欧美不卡| 999综合色| 国产成人自拍视频在线| 国产农村妇女毛片精品久久| 粉嫩av在线一区二区| 精品欧美日韩在线观看| 丁香五月婷婷基地| 成人免费毛片| 欧美韩日精品99综合| 欧美亚洲20p| 五月丁香激情综合网| 青青草中文字幕| 麻豆一区在线| 蜜臀AV成人精品蜜臀AV久久| 密桃99999| 久久久无码av精| 欧美影院一区二区三区| 日本欧美不卡| 欧美综合色,www| 久湿久久| 精品一区二区久久| 劲爆欧美人妖三区91| 欧美精品另类人妖xxxx| 国产99久久99热这里只有精品15 | 日韩在线97| 人人扣人人操| 国产精品自产拍在线观看社区| 妇女性内射冈站HDWWWCOM| 美女天天干| 日日黄色三级网站| 91丝袜在线观看视频在线观看| 日韩黄色一区二区三区| 久久久久久电影| 久久精品国产精品一区| 舔舔啊| 色网1| 日本美女性生活久久久久久久| 久久AV无码网址| 国产精品内射婷婷一级二| 91AV国产精品| 91操操操操| 97精品熟女少妇一区| 日韩AV无码中文一区二区| 免费人成?大片在线播放| 大香蕉专区| 少妇高潮对白在线观看| 怡红院亚洲怡春院av| 久久伊人青青草| 97操碰| 色婷婷导航| 亚洲综合色网| 四虎884a| 国产麻豆91欧美一区二区久久婷婷国产精品| 国产乱不卡| 日韩精品电影| 欧美性爱超碰97| 人妻娇喘 激情视频| 亚州日韩97| 亚洲综合夜色| 一本大道久| 高潮9999外国| 操一操摸一摸| 欧美性爱日韩性爱| 午夜电影在线观看无码专区| 久久久久久人妻一区精品色欧美| 国产日韩欧美亚洲精品95| 波多野42部无码喷潮在线观看| 人人模人人看| 99性爱在线观看| 欧美激情另类一区二区| 偷窥自拍亚洲天堂网爆| 黄色一区三区| 亚洲中文国际强奸字幕 | 国内毛片欧美香蕉精品| 中文字幕在线日亚洲9| 亚洲综合另类| 97精品97| 日韩无码人妻| 伊人AAA| 自拍二页| 精品91| 国产操偷| 大香蕉AV丝袜| 久久久久深夜无码| 97资源视频| 99综合网| 久草成人影片| 天天色天天干天天爱| 俺去也婷婷| 欧美日韩国产人人| 高清国产精品福利网站| 亚洲五月婷| 97超碰色屌| 亚洲色婷婷久久91| 国产乱弄免费在线视频。 | 免费成人自拍视频在线| 亚洲欧美成人在线| 免费超碰97久久| 成人精品久久久午夜福利| 丁香五月社区| 91女色| 午夜男女爽爽爽在线视频| 欧美一二三区四五区| 欧美色青| 激情综合久久| 亚洲久久久久| 久久久蜜桃一区二区三区| 欧美啪啪天堂| 亚洲性爱无码乱伦av| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 二三四区精品| 日韩av一级黄片| 韩日精品福利视频一区不卡在线免| PMv在线观看| 肥臀熟女福利视频一区二区| 激情小说激情视频| 97爱免费插| 91高清无码下载| 欧美桃色网| 婷婷综合激情| 人人人摸人人| 97欧美综合网| 欧美亚洲国产日本在线,久久精品国产| 无码聚合| 国产成人精品必看 | 日本熟妇熟色97一本在线观看| 日日夜夜精品视频| 久操视频免费观看| 情色日播放AV| 亚洲高清无码在线桃色| 2017天天操| 中文字幕乱碼在线| 久久久久免费看少妇A片特黄| 午夜精品久久久99热蜜桃的功能特点| 夜色五月天| 艹精品| 欧美亚州综合网图片| 综合干干干av久久久综合网| 女同性恋久久| 亚洲天堂一区二区久久| 男人的天堂三级| 妺妺跟我一起洗澡没忍住| 久久黄片国产一区二区| 九九九九热| 欧美综合网站999| 91影视亚洲| 亚洲综合九| 欧美72网页| 116美女午夜| 久久久久久AⅤ无码免费肉站 | 香蕉色网| 亚洲欧洲色情高清| 天天天天做夜夜夜夜做| 大香蕉伊人在线成人AV在线观看| 人妻精品综合中文字幕在线| 超碰97资源大奶| 亚洲,欧美,春色,另类| 久久社区一区二区三区| 国产亚洲精品激情| 精品国产一区二区三区四区在线看 | 好舒服视频| 97超碰资源网| 色呦色呦色精品| 97超碰色中文字幕| 老熟乱一区二区三区四区| 天天操熟妇| 天天操福利视频综合网站| 正宗无毛一线天嫩逼| 超碰视97中文| 91N综合网| 欧美色图20P| 97精品视频在线播放| 亚洲www91| 97国产色图| 蜜臀久久精品久久久久视频| 国产一区二区在线看| 高清肉丝中文无码| 亚洲少妇自拍中文字幕懂色| 国产精品网站免费| 超碰日韩人妻| 国产亚洲 中文欧美久久| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 日韩人妻中文视频| 国产成人精品日本亚洲语言| 久久99久久99久久99人受| 精品超碰中文在线| 超碰97色色| 校园春色综合色| 试看60秒| 97在线免费看视频| 人妻干天天| 欧洲一级性爱视频在线观看| 久草成人福利导航| 乱日视频| 蜜臀av网址| 久久精品电影在线| 久久性生大片免费观看性| 亚洲欧洲中文日韩女优乱码| 国产女人成人精品视频| 美腿色图| 欧洲性人爱视频| 校园春色家庭伦理欧美激情| 男人的午夜天堂| 91色人妻| 色婷五月| 亚洲成人色情五月天丁香花| 欧美色97| 国产亚洲精品农村妇女 | 国产又大又粗又长视频在线| 久久东京热成人| 国产AAAAAABBBBB| 久久婷婷综合国际产色怕| 色色九区| 日韩人妻制服丝袜av| 九九伊人网| 美腿丝袜高跟网免费视频免费视频| 96精品一区| 人人操人人爽人人操人人| 久久香蕉综合一本到3atv| 99热免费| 夜夜嗨一区二区三区直播内容| 蜜桃视频成a人v在线| 精品无码久久久| 神马久久久久久久久| 欧美人人曰人人操人人射射| 国产精品宅男免费| 麻豆60秒| 日本大香蕉综合网| 久久无码电影| 国产AV天美| 亚州,欧美在线| 欧美日韩不卡a片| 花野真衣| 三四中文字幕| 18禁美女裸体无遮挡啪啪| 人人妻人人操人人乐| 97免费视频在线观看视频| 亚洲精品国语在线播放| 成人资源中文字幕在线观看天天| 人妻 欧美亚洲| 天天草夜夜草高潮片| 97视频观看| 四虎影视精品| 99视频内射三四| 国产精品色约约| 日韩精品资源专区二区| 日日干夜夜操视频h| 日韩啪啪视频| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 亚洲91网。| 2019天天干| 3571色综合一区二区二区| 精品人妻一区二区蜜桃视频| 亚洲成人福利电影免费| 香蕉色网| 婷婷伊人网| 欧美桃色网| 国产精品蜜乳AV| 综合一区二区影视| 十八禁的黄污污免费网站| 美女毛片999| 国产成人精品必看| 欧美国产视频| 太久视频| 亚洲清纯唯美| 成人网站 免费观看| Aa东京男人的天堂| 色欲蜜臀AV| 青青草玖玖爱| 性影在线视频| 欧美性少妇| 国产精品久久久久av| 蜜臀网址在线| 能看的av| 青春草莓视频在线观看网址| 色一射色一射| 亚洲乱色熟女一区| 色阁阁AV综合网| 国产高清成人mv在线观看| 加勒比综合a∨| 久久欧美性爱视频| 人妻天堂网| 翘臀vidoes| 欧州一区二区三区四区| 久超超碰| 国产精品久久久鸭无码的功能| 伊色久人大在线| 亚洲性爱高潮影院| 沈阳熟女高潮对白视频| 日本一天色道久久久精品视频| 老熟女乱子伦中文字幕一区二区| 亚洲欧美综合网站| 五月婷婷六月色| 日韩啊V| 精久久久91| 亚洲av综合色区无码一| 91狠狠综合久久| 久久夜嗨| 天堂中文日本在线观看| 国产日韩美女小穴视频网站不卡| 97精品国产97久久久久久| 九九九精品成人免费视频小说| 伊人精品视频| 91色婷婷综合久久中文字幕二区| 男人在线天堂| 在线情色电影 91大| 超碰91在线| 日逼97| 欧美A片中文字幕| 国产欧洲精品亚洲午夜拍精品| 欧美日韩999| 国产综合日韩伦理| 亚洲91射| 亚洲欧美另类少妇精品| 天堂8在线新版官网| 91精品国产91久久福利| 欧美线天码中字| 久久久久久亚洲精品中文字幕人妻| 色久桃花影院在线观看| 亚洲se91| 麻豆色约约| 亚洲欧美另类少妇精品| 久久丁香五月天| 伊人丁香五月婷婷| 97极品无码| 狠色婷婷久久一区二区三区_| 能看的av| 久操凹凸视频| 玖玖爱在线视频免费观看| 玖色av| 欧美日韩少妇色情| 精品精品精品| 久久一区二区三区入口| 100啪啪视频大全| 欧美日韩色| 久久宗合亚洲| 激激五月| 夜色五月天| 久久精品店| 日婷婷| 酒色综合网| 五月婷婷青青草娱乐伊人| 日韩在线人妻网站| 夜夜爽77777| 色五月激情综合网| 女人午夜视频777| 成人无码在线超碰网| 超碰在线一区二区| 欧成人精品一区二区三区| 熟女高潮合集-永久久久-成人AV | 亚洲熟妇无码一区二区三区| 红杏大香蕉| 337p大胆噜噜噜噜噜91Av| 日本视频一区二区三区| 在线岛国新天堂8| 亚洲无码精品AV久久久| 国产精品久久久久久久久久久久| 久久熟女嫩草成人片免费| 亚洲美女 晚间男人天堂| 人妻久热在线| 久久久精品国产亚洲伊人| 丝袜 亚洲 偷拍| 狠狠五月天| 日韩成人大片一区二区| 色一色综合网| 成人午夜小视频手机在线看| 操逼无码一区| 亚洲天堂7777| 欧美成人性爱视频免费观看 | 91黑丝在线播放| 亚洲精品视频在线播放| 亚洲欧洲网站免费观看| 强奸乱伦动态污图免费| 999国产精品999| 日韩精品在线观看网站| 小日子操bb在线看| 每日更新AV| 熟女字幕| 亚洲成人久久美女| 精品亚洲国产成人AV制服丝袜| 亚洲精品影视老司机| 国产区性爱在线视频秋霞豆| 久久久久久国产精品免费网站| 曰韩操B| 强奸抽插av| 国产日韩区| 嗯嗯啊啊视频一区二区三区| 嗯嗯啊啊视频一区二区三区| 久久超碰大香蕉| 天堂资源站| 啊啊啊啊好大好硬啊啊啊啊啊| 好爽免费视频,| 97超色| 亚洲欧美内射| 国产传媒av天美传媒在线| 亚洲男人天堂网| 亚洲在线网站| 中文字幕丝袜国产第一页不卡| 999亚洲国产视频| 三级片网站在线播放| 婷婷综合在线| 91女人的网站| 青青草成人视频在线观看二区| 欧美激色| 天天欧美| 综合av社区| 亚州AV无码国产精品| 国产一级片| 嗯啊不要啊啊在线观看视频| 白丝少妇一区二区| 男人天堂网手机版婷婷| www亚洲欧美| 综合伊人激情| 国产一级黄色片在线观看| 婷色五月天| 91国产大片| 欧美另类自拍 | 天天操夜夜操| 在线观看A啊啊啊| 色香综合天天影视综合 | 亚洲欧美另类小说| 亚洲三区视频| 欧美亚洲色图另类国产| 亚洲国产精品久久久男人的天堂| 2024黄色视频| 夜夜躁狠狠躁日日躁av| 免费操逼91| 亚洲第一免费视频| 日日天天久久啊啊aaa| 97久久超碰日韩精品| 综合97久久| 青草伊人网| 国产精品亚洲免费| 日本三级R| 国产精品99精品视频网站| 91精品91久久久久77777俄罗斯老妇姓x| 丁香九月 婷婷| 99亚亚热| 女色综合| 人妻精品4K4K4K4K4| 张柏芝国产一区在线观看| 操逼视频亚洲| 亚洲无码视频免费在线观看网址!| 国产精品亚洲无码| 激情啪啪拍91| 好屌色综合| 777超碰| 国产精品久久久久亚洲av| 久久午夜伦| 国产91丝袜在线播放蜜月| 无码精品久久久久久亚洲| 操逼网站地址| 欧美精品三区| 国产97在线 | 亚洲| 久久激情综合| 伦理日韩国产久久| 91一区二区三区蜜桃| 九月丁香| 97操综合| 333kkkk·亚洲com久久| 91欧美成人色站| 久久久久女教师免费一区| 成人aⅴ一区二区三区| 精品一区96| 91亚洲综合在线| 多乙久久久久久| 亚洲激情天堂网| a片在线播放| 91 手机在线播放 绯色| 久热热| 亚洲天堂99| 无卡一区=区| 中文字幕国产| 国产精品网站免费| 乱抡国产91| 91人妻视频在线| 亚洲毛片基地专区| 久久久久久性爱片| 青青色在线观看| 五月婷婷六月激情| 高清无码91| 国产 日韩 另类 视频一区爱| 亚洲综合图片在线| 久久五月天婷婷丁香中文字幕| 日少妇亚洲版| 国产无码三级视频在线观看| 国产农村妇女精品一二区| 黑人娇小av在线播放| 日韩草久视频| 夜夜骑夜夜操| 亚洲国产一区二区三区在线| 翔田千里av一区二区三区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 欧美激情激情xxxx欧美专区| 欧美视频在线第3页| 玖玖久久久| 五月天激情小说| 精品亚洲天堂| 99亚洲精品| 探花视频免费观看国产专区| 九久9热| 在线观看亚洲成人精品| 亚洲自拍欧美国产首页网曝| 成人小说视频在线精品欧美| 中文字幕78| 乱欲一区二区| 日本欧美不卡| 搡老女人老妇女老妇老熟女怎么读| 农村女一级毛卡片| 中文字幕日韩精品一区二区三区| 亚洲国产av中文字幕久久| 区二区亚洲婷| 日韩亚洲Av人人夜夜澡人人爽| 91国精产品| 日本熟女中文| 亚洲欧美黄| 中文字日本乱码| 日本狂喷奶水在线播放212| 蜜桃丰满熟妇av无码区不卡| 国产一级αv免费看片| 中文字幕精品亚洲熟女| 日韩欧美女优电影| 欧美gv在线观看| 后入式999| 无码9区| 日韩在线欧美精品一区二区| 中文字幕人乱码中文字的预防方法| 秋霞久久亚洲精品成人| 日韩三级av片| 久草精品国产蜜臀 | 久久一二三四五六七八九区区| 操逼片国产| 综合 亚洲 欧美| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 黄在线| 日日躁夜夜躁狠狠躁超爽| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠 | 91精品无码久久久久久久| 国产白丝在线| 8050午夜少妇无码| 婷婷干黄色| 91在线国产后入风骚翘臀美女素人| 人妻啊啊人妻啊| 美女视频尤物网在线看| 97中文字幕一区| 国产精品久久发布| 人摸人人操人| 国产一区二区三区高清视频| 日本加勒比无码专区一二三| 欧美制服另类丝袜| 美女写真| 日语五十路和六十路亚洲国产精品| 偷拍色图| 国产性刺激| 亚洲美女自拍偷拍视频| 国产精品免费久久久久久久久久| 老鸭窝日丰县女人| 日本精品人妻少妇一区二区| 午夜电影在线观看无码专区| 欧美色图片| 密臀成人视频久久久| 亚洲AV无码久久精品蜜桃小说| 婷婷六月色| 中文字幕免费看大片| 黄色香蕉视频网站一区| 78精品在线| 神马九九九| 少妇第一页| 五月婷婷hd| 久久25| 亚洲,欧美,春色,另类| www.91色| 国产乱人伦AVA麻豆软件.| 日韩中文字幕国产| 欧美色偷偷| 日韩综合97p| 色噜噜狠狠色综无码久久| 日韩啪啪啪视频| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 亚洲人成网www| www黄片免费看com| 国产精品国产自产高清AV| www国产无码| 国产97/欧美| 99re在线视频| 天堂伊人久久| 欧美色997| 人夜夜精品网站香蕉嫩草| 超碰人人干| 综合久久久久久久综合网| 小说区 图片区色 综合区| 欧美碰碰综合色| 久久九九热| 99久在线精品99re8热视频在线| 97视频在线观看高清资源| 这里有精品| 92福利社视频| 96超碰网| 精品成人久久久人人亚洲| 久久是精品| 另类老少妇| 日本国产二线女色| 中文无线日韩一区| 91欧美丝袜| 操逼精品视频| 欧美色图成人网一区二区| 人夜夜精品网站香蕉嫩草| 一区二区激情国产熟女| 国产精品三级视频网站| 插欧洲美女欧美精品| 亚洲成人av电影在线| 在线a v| 日日摸夜夜夜夜爽| 性影在线视频| 艹少妇网站| 无码 有码 国产18p| 中国国国产一级特黄毛片| 全免费a敌肛交毛片免费| α√在线| 五月天婷婷综合网| 日韩三级一区| 亚洲情色婷婷五月天| 色性荡荡荡荡视频| 久久免费看高潮毛片韩国| 1956日韩精品| 国产熟女精品区| 人妻五十路在线| 久久中文字幕女同性恋一区| 91痴汉| 老熟女91视频| 亚洲本色精品一区二区久久| 最新无码国产| 伊人一区二区在线播放| 国产精品免费日韩| 丁香五月天啪啪| 午夜精品99久久久久传媒| 国产av青草| 成人在线午夜视频一区| 女人18精品一区二区三区| …中文字幕亚洲乱,97人妻无码费视…| 97综合激情| 91搡老女人老妇女老熟女歌词翻译| 中文久久| 中国大陆国产高清AⅤ毛片| 留下AⅤ黄色片| 欧亚性爱啪啪| 不卡超碰护士AV在线免费播放| 天美一二三在线观看Av| 亚州欧美综合| 欧美日韩资源| 国产av强奸美女| 99亚洲精品| 青青草白白色| 亚洲高潮影院| 国产精品人妻一区二区| 囯戸精品高潮呻吟旡码| 欧美性爱一级操| 插入综合网| 久久精品成人一区二区三区蜜臀| 亚洲高清色综合| 国产高清视频无码在线| 国产福利影视| 91国产丝袜足交精品视频| 97欧美日韩中文| 久久久精品网| 激情小说成人日本无码一| 亚洲日韩一区电影| 吉川爱美亚洲二区在线 | 国内偷拍精品一区二区| 欧美成人性爱视频大全| 热天堂一区二区| 久久精品日韩专区免费观看| 日本一区二区不卡| 在线强奷到舒服的无码视频| 蜜臀人妻少妇久久在线观看| 欧美综合在线第一页| 日韩熟女无码| 日本人妻A片成人免费看片| 大香蕉综合| 人妻精品一区二区| 国产成人免费观看在线视频| 91精品电影18| 超碰久草| 亚欧毛片基地国产毛片基地| 亚洲男人的天堂亚洲| 天堂综合| 亚洲激情视频| 波多野结衣先锋影音| 97国产色综合| 天美麻豆黄色录像| 国产亚洲日韩欧| 亚洲最大91网| 清纯唯美第一页| 免费的很黄很污的全部视频| 久极品在线观看| Aa东京男人的天堂| 人妻色偷色噜| 婷婷久草一区二区三区| 欧美,亚洲,日韩,v,天堂,手机在线观看| 色色色日本| 欧美日韩人人精品| 欧美色网络| 精品国产久热在线观看| 综合91网| 人人操人人插人人摸人人干| 男人下部插入女人下部| 2017天天操| 亚洲啪啪性视频| 99久久综合| 国产狂喷潮在线精品| 久久超碰网| 国产尹人在线视频免费| 熟妇一区,二区,三区。| 亚洲一曲日韩精品| AV丝袜少妇| 明星性猛交ⅹxxx乱大交| 狠狠色婷婷777| 一卡二卡三卡| 亚洲蜜桃V妇女| 日本中文字幕熟妇| 国产兽交视频在线播放| 欧美熟妇视频| 婷婷五月天激情四射| 久久婷婷五月综合| 先锋女优在线观看视频| 狠狠狠狠狠| 久热这里只有精品9| 久久久国产成人一区二区三区在线| 亚州熟妇精品| 99精品视频在线观看免费| 精品乱码久久久久| 精品九九国产无码| 国产性感骚丝袜在线| 国产又色又粗又黄又爽| yazhousetuoumei| 日韩欧洲操屄视频| 97精品久久久久久久| 亚洲无码超碰免费| 久久精品老司| 久久一区二区高清免费| 九九热精彩视频| 手机看av网站在线看| 中文字幕第95页| av资源在线播放天堂| 久久精品视| 欧美 精品国产制服第一页 | 高清无码 国产精品| 中文字幕诱惑制服人妻丝袜美丝袜美| 3D污黄视频在线观看| 青青草久久在线| 中字乱伦AV| 久久久蜜桃臀无码视频| 亚洲男人的天堂V| 久久免费99精品久久久久久| 金典av| 爱我干综合| 亚洲图片欧美| 91色综| 久久综合国产精品国产| 精久久久| 嗯啊不要啊在线| 日韩成人性日韩成人性爱视频在线免费观看| 欧美国产有色电影| 亚洲二区精品在线观看| 亚洲黄色电影| 18一区二区三区| 91久久精品中文字幕| 91白嫩| 男人的天堂2018.| 老熟女搡BBBB搡BBBB视频| 亚洲超碰综合网| 五月丁香综合激情| 欧美黄色手机在线观看| WWW美腿丝袜香蕉中文| 99热99色| 91国产操逼视频| 中文字幕第23区| 极品丝袜无码| 91人妻精华帖| 色97欧美| 色眯眯射| 亚洲精品无码久久AV| 久9九综合在线| 久久綜合很很很| 一区二区三区机械有限公司| 呦呦影院| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 国产 日韩 欧美 人妻 熟女 中文| 色色毛片| 9999久久久久| 毛片视频白嫩| 日韩激情啪啪| 欧美v日韩v亚洲v最新在线| 亚洲日韩乱码中文无码蜜桃臀网站| 久久午夜伦| jk白丝没脱就开始啪啪| 欧美国产婷婷久久| 欧美传媒一区| 久悠悠av| 人人做人人妻人人夜视频| 欧美第一页| 欧美性高潮| 91黑丝美女| caorenqi shipin| 日本一区二区亚洲综合| 青青青在线高清视频在线一二三四区| 欧美精品双插| 26uuu国产| 国产精品久久久久无码AV会牛| 欧美影院一区二区三区| 青青草华人在线欧美在线| 熟妇艹鸡八| 91天天日| 爱我干综合| 狠狠操夜夜| 91伊人久| 激情小说亚洲| 天操天操夜操夜月操月年年操操| 久久av色| 久久久久密| 337p大胆噜噜噜噜噜91Av| 不卡av在线中文字幕| 少妇厨房愉情理伦片bd在线观看| 中文字幕视频二区| 欧美天堂亚洲电影院一区在线播放| 午夜激情床戏激情| 丁香六月综合激情| 性爱av网站| 亚洲 日韩 丝袜 熟女 变态| 五十路六十路七十路熟婆| 丰满人妻一区二区三区| 91 亚欧| 亚洲资源网| 在线免费试看60秒| 日韩情色AV| 一个人在线看的黄色电影网站| 另类综合另类| 69人妻精品一区二区绯色| 综合欧美日韩在线观看| 亚洲图片欧洲图片aⅴ| AV和黑人在线播放| 日韩精品资源专区二区| 天天影视综合色| 国产精品对白自产拍| 精品一区二区三区蜜桃臀www| 最近2018中文字幕在线高清第一页| 热99这里有精品综合久久 | 人妻夜夜爽天天爽麻豆三区网站| 精品久久一区二区三区四区五区| 日韩性爱小视频在线观看| 操逼操逼视频操逼| 久久久无码av精| 国产免a费看黄片在线| 日本一区二区三区午夜观看| 三级色影综合网| 酒色综合网| 啊啊啊啊啊好多水| 亚洲精品91| 污色区网站| 思思久热在线精品66| 一级毛片电影免费看| 欧美一级AAAAAAA| 91被操| 亚洲无码成人精品| 丁香六月激情| 亚洲一级性爱视频免费看| 欧 美 自 拍 偷 拍| 99久久久久久亚洲精品不卡| 色欲三区| 免费一级a毛片久久久久久鸭绿欲 国产精品亚洲天堂网址 | 天综合网| 91殴美大片| 欧美日韩精品久久| 亚洲麻豆18发?| 一本色道久久综合亚洲二区三区| 亚洲蜜臀精品视频久久| 久草新在线| 久久大黄片| 亚洲欧美色图小说| 日本精品无码三级网站| 午夜福利视频在线一区| 亚洲精品视频在线播放| 亚洲图片 91| 97欧美精品综合| 性生活无遮挡纯毛片在线看| 97操综合| 舔足天天操天天射| 久久精品国产Aⅴ| 乱伦图一区| 精品国产精品一区二区| 91熟女熟妇视频网站 | 91久久国产综合精品| 久久精品高清无码一区| 久久中文字幕女同性恋一区| 蜜桃臀av一区二区| 水多多映视AV| 欧美一级AAAAAAA| 日本Xx性爱| 色婷婷99| 久久久久网站-538在线视频-欧美永久乱码 | 黄色电影观看久久9| 麻豆啪啪啪视频| 亚洲精品久久久久久久久豆丁网| 9 7超碰在线免费观看| 中国熟女91| 97在线免费看视频| 久久久久久99999国产精品| 亚洲视频小说| 蜜臀99久久国产| 无码高清国产AV| 天天爽爽爽爽| 欧亚揄拍偷拍精品视频 | 在线啊啊啊| 密乳无码| 婷婷久久五月| 婷婷伊人一区| 91激情网| 男人天堂最新手机版在线青青草| 久超碰这里只有精品| 亚洲中文丝袜美腿诱惑字幕| 精品传媒在线一区| 久久国产AⅤ| 精品99999| 人人操肉肉| 精品久久99| 啊啊啊啊啊操我视频| 极品后入免费视频| 婷婷丁香人妻| 色欲久久久久综合网| 大香网站| 亚洲精品一区二区三区新线路| 日本不卡二三区| 99rre在线精品99re8| 日本操逼视频不卡直接放| 人妻aa| 青青草精玖玖69精品| 久久亚洲日韩熟女精品| 亚洲网站一区二区在线| 亚洲乱码尤物193YW| 亚洲一二三精品久久网| 亚洲欧美日韩电影网站一区| 欧美78P| 粉嫩不卡一区二区性爱| 74成人在线| 一级做受视频免费是看美女| 色婷婷九月天天综合| 女人天堂AV五区在线| 天天操熟妇| 狠狠中文字幕| 97色欧州| 3PAV乱伦视频| 97人人草| 男人的天堂VA| 国产美女高潮叫床视频| 欧美综合网1| 嫩呦国产一区二区三区AV| 丝袜性亚洲| 激情小说日韩无码| 成人熟女视频一区二区三区| 欧美96在线|欧| 五月天激情小说|