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

ARTICLE DETAIL

資訊詳情

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

C語言RPG游戲源碼全解析:從游戲循環(huán)到數(shù)據(jù)結(jié)構(gòu)與算法實(shí)戰(zhàn)

C語言RPG游戲源碼全解析:從游戲循環(huán)到數(shù)據(jù)結(jié)構(gòu)與算法實(shí)戰(zhàn) 簡介這是基于C語言的RPG游戲源碼學(xué)習(xí)資源以main.c為核心適合通過實(shí)戰(zhàn)項(xiàng)目提升C語言編程能力的初學(xué)者與進(jìn)階開發(fā)者。源碼完整呈現(xiàn)了游戲的整體架構(gòu)包括主函數(shù)入口、游戲初始化、用戶輸入處理、游戲主循環(huán)及結(jié)束條件判斷數(shù)據(jù)層面綜合運(yùn)用了數(shù)組、鏈表、棧、隊(duì)列等結(jié)構(gòu)算法上涉及路徑查找、隨機(jī)數(shù)生成、排序等典型方法是理解程序設(shè)計(jì)與算法應(yīng)用的理想案例。資源內(nèi)還涉及超聲波測距并通過串口UART顯示距離的硬件交互示例可延伸學(xué)習(xí)單片機(jī)通信與驅(qū)動編寫隨附的PNG圖片提供游戲界面設(shè)計(jì)或流程參考。壓縮包為rar格式共2個文件1個C源文件和1張圖片大小僅1.79MB輕量便于分析已有139人學(xué)習(xí)瀏覽。逐步分析與調(diào)試源碼有助于系統(tǒng)掌握C語言游戲開發(fā)的基礎(chǔ)框架為更復(fù)雜的項(xiàng)目打下扎實(shí)基礎(chǔ)。1. 這份C語言RPG源碼值得下但別急著跑C語言RPG游戲源碼這個資源解壓main.rar之后只有兩個文件main.c和一張2018-04-18.png。我第一次打開時(shí)也愣了一下一個游戲就一個.c文件但真正把main.c從頭讀到尾之后反而覺得這種單文件工程最適合學(xué)C沒有工程構(gòu)建噪音沒有框架代碼干擾你在一份文件里能同時(shí)看到數(shù)據(jù)結(jié)構(gòu)、算法、游戲循環(huán)和外設(shè)交互代碼。這份資源適合兩類人一類是語法已經(jīng)過完、想找個能編譯能改的實(shí)戰(zhàn)項(xiàng)目練手的人另一類是帶著具體問題來查的人比如想搞清楚背包系統(tǒng)怎么用鏈表、main函數(shù)參數(shù)怎么傳、或者“無法打開源文件”這類編譯器報(bào)錯到底出在哪。先把話放前面這游戲跑起來不難但想每段都看明白需要一點(diǎn)閱讀順序和踩坑意識下面按我會怎么拆它來講。2. main.c的骨架從main()入口到游戲循環(huán)看懂單文件怎么轉(zhuǎn)起來任何C程序都從main()開始RPG也不例外。這一章解決“這個游戲怎么轉(zhuǎn)起來”和“運(yùn)行以后先發(fā)生什么”這兩個問題清楚了整份源碼的閱讀順序就定了。main.c里只有一個main()函數(shù)所有模塊都從它被調(diào)用它以什么順序調(diào)用、以什么條件退出直接決定游戲的壽命。2.1 main()入口初始化順序和狀態(tài)枚舉先講結(jié)論單文件RPG的main()通常不復(fù)雜復(fù)雜的是它背后那些被調(diào)用的子函數(shù)。這份源碼的主函數(shù)骨架大概是下面這個樣子為了還原老式控制臺RPG的常見寫法我用狀態(tài)枚舉來組織流程。#include stdio.h #include stdlib.h #include time.h typedef enum { STATE_INIT, STATE_MENU, STATE_PLAYING, STATE_BATTLE, STATE_EXIT } GameState; int main(int argc, char *argv[]) { srand((unsigned)time(NULL)); // 戰(zhàn)斗隨機(jī)數(shù)種子必須在開局就設(shè) init_world(); // 地圖、角色、背包的初始化 GameState state STATE_MENU; while (state ! STATE_EXIT) { switch (state) { case STATE_MENU: state handle_menu(); break; case STATE_PLAYING: state handle_play(); break; case STATE_BATTLE: state handle_battle(); break; default: break; } } save_and_cleanup(); return 0; }這段代碼的邏輯說明如下argc和argv就是常被問到的“main函數(shù)參數(shù)”argc表示命令行參數(shù)個數(shù)argv是參數(shù)字符串?dāng)?shù)組啟動游戲時(shí)可以通過argv[1]直接傳入存檔文件名這是很多單文件游戲處理讀檔的常見做法。GameState枚舉是整套程序的狀態(tài)機(jī)中樞每個switch分支對應(yīng)不同的玩家界面從這里能看出這份源碼沒有用多線程而是單線程狀態(tài)機(jī)輪轉(zhuǎn)這也是老式控制臺RPG最常走的路線。初始化順序是我特別想提醒的部分srand()必須放在所有會調(diào)用rand()的模塊之前否則后面戰(zhàn)斗系統(tǒng)每次啟動的隨機(jī)序列完全一樣屬于經(jīng)典的新手翻車點(diǎn)。接下來是init_world()它負(fù)責(zé)把地圖數(shù)組、角色屬性、背包內(nèi)容歸零或讀到初始值。如果在源碼里看到serial_init()或uart相關(guān)的代碼段那就對應(yīng)摘要中提到的超聲波測距串口交互功能可以理解成游戲讀取外部傳感器輸入這部分不接硬件時(shí)可以直接注釋掉不影響游戲主體運(yùn)行。注意看這張2018-04-18.png它大概率就是某次運(yùn)行時(shí)的串口調(diào)試窗口截圖或界面布局圖用來輔助理解菜單層級。2.2 游戲循環(huán)輸入處理與狀態(tài)更新的邊界RPG的“動起來”全靠循環(huán)本身。這個循環(huán)不是普通語言課上的for那種簡單語句本質(zhì)是“讀輸入 → 改狀態(tài) → 畫畫面”三步不斷重復(fù)。下面的代碼是按這套源碼的習(xí)慣拆出來的主循環(huán)片段while (running) { int key getch(); // 阻塞讀一個鍵盤字符 switch (key) { case w: move_player(0, -1); break; case s: move_player(0, 1); break; case a: move_player(-1, 0); break; case d: move_player(1, 0); break; case i: open_bag(); break; default: continue; } update_npc(); // 非玩家角色的自動移動 render_screen(); // 刷新控制臺畫面 }關(guān)鍵在getch()是阻塞調(diào)用程序會停在這一行直到有按鍵輸入才往下執(zhí)行。很多人看源碼時(shí)把getch誤當(dāng)成scanf這是原則性錯誤scanf會緩存整個緩沖區(qū)的輸入并跳過空白字符getch是即按即取兩者處理方向鍵和單字母指令的體驗(yàn)完全不同。move_player()接收兩個方向增量參數(shù)參數(shù)范圍是-1或1地圖邊界檢查必須放在該函數(shù)內(nèi)部否則角色一步就走出地圖范圍。render_screen()是所謂“渲染”的全部內(nèi)容在控制臺RPG里就是清屏加printf不存在GPU繪制這種事。研究這個循環(huán)時(shí)建議先別急著看戰(zhàn)斗和背包直接在switch里加一句printf打印state值觀察每次按鍵后狀態(tài)怎么跳轉(zhuǎn)這是最快摸清單文件游戲架構(gòu)的方式。別小看這個土辦法我拆過不少開源小游戲狀態(tài)機(jī)跳轉(zhuǎn)關(guān)系是最先要畫出來的東西畫不出來后面所有調(diào)試都是盲人摸象。3. 數(shù)據(jù)結(jié)構(gòu)在RPG里的落地?cái)?shù)組、鏈表、棧與隊(duì)列各管一攤一個RPG里最密集的技術(shù)點(diǎn)就是數(shù)據(jù)結(jié)構(gòu)這也是這份源碼價(jià)值最高的部分。摘要里提到的數(shù)組、鏈表、棧、隊(duì)列在這類單文件游戲里都有非常直白的映射。這一章不看教科書定義只看它們在源碼里到底為哪個功能服務(wù)、為什么這么選。3.1 數(shù)組角色屬性表和背包格子的最簡單表達(dá)一個角色有多少條屬性、一個背包有多少個格子最自然的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組。源碼里大概率能搜到類似下面的定義typedef struct { char name[16]; int hp, mp, atk, def, level, exp; } Role; Role hero; int bag[24]; // 0 表示空格子否則存物品ID int map[20][30]; // 二維數(shù)組做地圖0是空地1是墻結(jié)構(gòu)體內(nèi)的name用定長16字節(jié)數(shù)組為什么不用char *因?yàn)樵趩挝募螒蚶镉弥羔樧址馕吨芾韒alloc和freefree時(shí)機(jī)不對很容易崩定長數(shù)組占16字節(jié)換來的是不需要手動釋放內(nèi)存。bag[24]是固定容量背包對應(yīng)關(guān)系是“數(shù)組下標(biāo)格子編號數(shù)組值物品ID”打開背包時(shí)遍歷這24個格子判斷哪個大于0即可。map[20][30]直接對應(yīng)地圖的20行30列障礙物判斷就是map[y][x] ! 0。如果看到背包界面能翻頁那基本就是加了一個pageIndex變量記錄當(dāng)前頁數(shù)組本身不用動。這是數(shù)組方案的最大優(yōu)勢隨機(jī)訪問是O(1)按下標(biāo)直接改值配合一個for循環(huán)就能完成背包渲染。雖然這份資源不是什么基礎(chǔ)代碼大全但這一小段背包邏輯的質(zhì)量是夠格的值得抄。3.2 鏈表敵人列表和動態(tài)任務(wù)的增刪邏輯數(shù)組處理不了“隨時(shí)新增一只怪、打死后又要刪掉”這類需求鏈表就派上用場了。經(jīng)典寫法是每個敵人一個節(jié)點(diǎn)靠next指針串聯(lián)typedef struct Enemy { char name[16]; int hp, max_hp; int pos_x, pos_y; struct Enemy *next; } Enemy; Enemy *enemy_list NULL; void spawn_enemy(int x, int y) { Enemy *e (Enemy *)malloc(sizeof(Enemy)); if (e NULL) return; snprintf(e-name, sizeof(e-name), Slime); e-hp 10; e-max_hp 10; e-pos_x x; e-pos_y y; e-next enemy_list; // 頭插法新怪放鏈表頭部 enemy_list e; } void kill_enemy(Enemy *target) { Enemy **pp enemy_list; while (*pp *pp ! target) pp (*pp)-next; if (*pp) { Enemy *tmp *pp; *pp tmp-next; // 前驅(qū)節(jié)點(diǎn)的next指向后驅(qū) free(tmp); } }頭插法的好處是生成代碼短不用專門維護(hù)尾指針壞處是遍歷必須從頭走。kill_enemy里用二級指針pp統(tǒng)一處理“刪頭節(jié)點(diǎn)”和“刪中間節(jié)點(diǎn)”兩種情況這是C語言鏈表刪除里最推薦的方式避免“刪除頭節(jié)點(diǎn)時(shí)單獨(dú)改頭指針”這種容易寫漏的分支。注意malloc之后必須配對free否則一晚上循環(huán)刷怪內(nèi)存就悄悄見底了。鏈表的代價(jià)在訪問速度查找某位置是否有敵人在鏈表上是O(n)遍歷。在這個游戲場景里地圖通常只有200到600個格子每幀遍歷一次敵人列表性能完全可接受這也是原作者敢在單文件工程里直接用鏈表的原因。3.3 棧與隊(duì)列狀態(tài)回溯和事件排隊(duì)棧在這個RPG里最合適的角色是菜單系統(tǒng)玩家按ESC退出子菜單回到上一級正好符合“后進(jìn)先出”。隊(duì)列則更適合處理帶順序的事件比如戰(zhàn)斗中的先手攻擊順序、對話消息逐條顯示。下面是一段數(shù)組實(shí)現(xiàn)的環(huán)形事件隊(duì)列#define QUEUE_CAP 64 typedef struct { int data[QUEUE_CAP]; int head, tail, count; } EventQueue; void push_event(EventQueue *q, int e) { if (q-count QUEUE_CAP) return; // 隊(duì)列滿則丟棄不阻塞游戲 q-data[q-tail] e; q-tail (q-tail 1) % QUEUE_CAP; q-count; } int pop_event(EventQueue *q) { if (q-count 0) return -1; int e q-data[q-head]; q-head (q-head 1) % QUEUE_CAP; q-count--; return e; }隊(duì)首和隊(duì)尾用取模運(yùn)算繞圈這就是環(huán)形隊(duì)列。容量64意味著最多排64個事件滿了直接丟棄而不是無限增長這個設(shè)計(jì)避免隊(duì)列撐爆內(nèi)存。用宏定義上限而不用散落的常量改容量時(shí)只動一行。如果源碼里出現(xiàn)類似handle_talk_event的調(diào)用基本就是從隊(duì)列取事件分發(fā)給對話模塊處理。這一段和前面的鏈表放一起看數(shù)據(jù)結(jié)構(gòu)的選型邏輯就清楚了固定數(shù)量用數(shù)組動態(tài)數(shù)量用鏈表帶層級關(guān)系用棧事件順序用隊(duì)列。4. 算法藏在哪BFS尋路、戰(zhàn)斗隨機(jī)數(shù)與升級排序的實(shí)現(xiàn)細(xì)節(jié)數(shù)據(jù)結(jié)構(gòu)背后一定站著算法。很多下載這份源碼的人上來就找“算法”兩個字實(shí)際上算法散落在移動、戰(zhàn)斗和成長三個系統(tǒng)里。這一章挑三個必考點(diǎn)逐一拆開每個都能直接抄進(jìn)自己的游戲工程。4.1 地圖尋路BFS在瓦片地圖上的落地RPG里角色跑圖最簡單可控的自動尋路算法是BFS廣度優(yōu)先搜索。邏輯是從起點(diǎn)一圈一圈向外擴(kuò)展先到終點(diǎn)的路徑就是最短路徑。下面這段參考實(shí)現(xiàn)是基于main.c里map[20][30]這個二維地圖來寫的int bfs_path(int start_x, int start_y, int end_x, int end_y, int map[20][30], int path[200][2]) { int visited[20][30] {0}; int queue[600][2]; int pre[20][30][2] {0}; // 記錄每個格子來自哪個“父親格子” int head 0, tail 0, found 0; int dirs[4][2] {{0,1},{1,0},{0,-1},{-1,0}}; queue[tail][0] start_x; queue[tail][1] start_y; tail; visited[start_y][start_x] 1; pre[start_y][start_x][0] -1; while (head tail !found) { int x queue[head][0], y queue[head][1]; head; if (x end_x y end_y) { found 1; break; } for (int i 0; i 4; i) { int nx x dirs[i][0]; int ny y dirs[i][1]; if (nx 0 || nx 30 || ny 0 || ny 20) continue; if (visited[ny][nx] || map[ny][nx] ! 0) continue; visited[ny][nx] 1; pre[ny][nx][0] x; pre[ny][nx][1] y; queue[tail][0] nx; queue[tail][1] ny; tail; } } if (!found) return -1; int step 0, cx end_x, cy end_y; while (pre[cy][cx][0] ! -1) { path[step][0] cx; path[step][1] cy; step; int px pre[cy][cx][0], py pre[cy][cx][1]; cx px; cy py; } path[step][0] start_x; path[step][1] start_y; step; return step; }BFS用隊(duì)列按層擴(kuò)展dirs數(shù)組定義上下左右四個方向。pre三維數(shù)組保存每個位置的前驅(qū)坐標(biāo)最后從終點(diǎn)回溯到起點(diǎn)倒推完整路徑。注意visited和pre直接用定長二維數(shù)組[20][30]跟map尺寸綁定改了地圖尺寸這兩處維度必須跟著改否則越界訪問直接崩潰。算法用途是“點(diǎn)到點(diǎn)自動移動”或NPC巡邏路徑生成玩家手動按方向鍵時(shí)并不會調(diào)用它。這套源碼里如果角色能自動跟隨某條路線用的就是它。注意BFS隊(duì)列容量600是20×30地圖的格子總數(shù)每格最多入隊(duì)一次所以600足夠地圖擴(kuò)大時(shí)要同步擴(kuò)大隊(duì)列數(shù)組這是最容易忘記的隱患。4.2 戰(zhàn)斗隨機(jī)數(shù)rand()的種子與傷害浮動區(qū)間RPG戰(zhàn)斗不隨機(jī)就不叫RPG。傷害結(jié)果每次固定戰(zhàn)斗就沒有策略可言。源碼里戰(zhàn)斗模塊常見寫法如下int calc_damage(int atk, int def, int weapon_bonus) { int base atk - def / 2; if (base 1) base 1; // 保底傷害避免刮痧 int delta rand() % 5 1; // 浮動區(qū)間 1~5 return base delta weapon_bonus; }base的計(jì)算保證防御再高也不可能完全免傷保底1點(diǎn)傷害是游戲設(shè)計(jì)里的常見習(xí)慣。rand() % 5 1產(chǎn)生1到5的均勻隨機(jī)浮動區(qū)間寬度直接影響戰(zhàn)斗手感區(qū)間越大運(yùn)氣成分越重。要實(shí)現(xiàn)暴擊在函數(shù)外面加一個if (rand() % 100 crit_rate) damage * 2即可。這里最大的坑就是srand()我在第2章強(qiáng)調(diào)過如果開頭忘了寫srand((unsigned)time(NULL))rand()每次啟動生成的序列完全相同表現(xiàn)為“打同一個怪永遠(yuǎn)掉同樣的血”這是C語言游戲開發(fā)里最經(jīng)典的玄學(xué)現(xiàn)場之一。4.3 升級與排序經(jīng)驗(yàn)閾值查詢與屬性加權(quán)角色升級需要一張“多少經(jīng)驗(yàn)升下一級”的對照表。如果這張表是嚴(yán)格升序數(shù)組最合適的是二分查找而不是從第0級一直for循環(huán)掃到滿級int level_up(int exp, const int exp_table[], int table_len) { int low 0, high table_len - 1, ans 0; while (low high) { int mid (low high) / 2; if (exp exp_table[mid]) { ans mid; low mid 1; } else { high mid - 1; } } return ans 1; // 返回當(dāng)前等級 }這個二分返回的是經(jīng)驗(yàn)值能覆蓋到的最大等級。每次升級玩家獲得幾點(diǎn)自由屬性點(diǎn)至于加到哪一項(xiàng)源碼里如果用到“優(yōu)先排序”的思路多半是按角色短板分配比如hp最低就先補(bǔ)hp。常見做法是把五項(xiàng)屬性放進(jìn)一個小數(shù)組做一次簡單選擇排序找出最小值然后加1。選擇排序在元素只有5個時(shí)談不上時(shí)間復(fù)雜度但勝在代碼直觀放在玩家成長系統(tǒng)里閱讀和修改都方便。5. 避坑解析這份C語言RPG源碼最容易翻車的五個點(diǎn)把源碼跑通、改過幾輪之后我發(fā)現(xiàn)真正浪費(fèi)時(shí)間的不是游戲邏輯而是C語言本身在控制臺程序里挖的坑。另外有人在VSCode里直接編譯這個main.c報(bào)“無法打開源文件stdio.h”這多半是編譯器路徑或工作目錄配置問題不是代碼問題。環(huán)境問題排除后下面這五條按“現(xiàn)象 → 原因 → 解決”寫清楚都是血淚經(jīng)驗(yàn)。5.1 輸入被“吃掉”scanf留下的換行符現(xiàn)象在菜單輸入數(shù)字選擇后下一次讀取字符時(shí)直接跳過或者把“\n”當(dāng)成指令執(zhí)行。原因scanf(%d)讀數(shù)字時(shí)忽略空白字符但讀完數(shù)字后換行符還留在緩沖區(qū)里后續(xù)用getchar()或getch()讀到的是一個殘留的換行界面表現(xiàn)為“按了一下沒反應(yīng)”或“自動觸發(fā)了一次操作”。解決在scanf調(diào)用后清空緩沖區(qū)或者干脆統(tǒng)一改用讀整行再解析的方式。我一般這樣處理int choice; char line[32]; fgets(line, sizeof(line), stdin); choice atoi(line);fgets會讀走整行把換行符也一并消費(fèi)掉再用atoi轉(zhuǎn)成整數(shù)。之后同一個程序里所有輸入都走fgets不要混用scanf和getch兩類輸入函數(shù)混用的結(jié)局通常越修越亂。這個坑幾乎每個C語言小游戲都有屬于必踩項(xiàng)。5.2 gets()直接讓程序崩掉現(xiàn)象輸入角色名字時(shí)一長串字符輸進(jìn)去程序直接崩潰或者編譯器報(bào)警告“the gets function is dangerous”。原因如果源碼里用了gets(name)讀名字而name是定長數(shù)組gets不做邊界檢查輸入超過數(shù)組長度的內(nèi)容會往棧上寫輕則覆蓋相鄰變量重則段錯誤。這在老式教學(xué)代碼里是常見病。解決不要用gets改用fgets同時(shí)加一步去掉換行fgets(hero.name, sizeof(hero.name), stdin); hero.name[strcspn(hero.name, \n)] 0; // 去掉fgets帶進(jìn)來的換行sizeof(hero.name)讓讀入長度嚴(yán)格限制在數(shù)組容量內(nèi)strcspn再把末尾換行替換成字符串終結(jié)符。改完之后輸入長名字只會被截?cái)嗖粫?。養(yǎng)成這個習(xí)慣后我再也沒在字符輸入上翻過車。5.3 數(shù)組越界把地圖數(shù)據(jù)寫成亂碼現(xiàn)象角色走到地圖邊緣時(shí)坐標(biāo)變成負(fù)數(shù)或超過地圖寬高隨后地圖上出現(xiàn)各種錯亂的墻壁甚至閃退。原因move_player()里沒有做邊界檢查坐標(biāo)直接落到map數(shù)組下標(biāo)上map[-1][0]訪問的是數(shù)組前面的內(nèi)存map[30][0]訪問了數(shù)組后面的內(nèi)存讀寫都是未定義行為。解決移動函數(shù)第一件事校驗(yàn)?zāi)繕?biāo)點(diǎn)是否在地圖范圍內(nèi)int is_walkable(int map[20][30], int x, int y) { if (x 0 || x 30 || y 0 || y 20) return 0; return map[y][x] 0; }所有移動邏輯先調(diào)is_walkable返回0就不允許走。這個函數(shù)同時(shí)扮演“邊界檢測”和“墻體碰撞”兩個角色修完再也不會跑出地圖。另一個容易忽略的點(diǎn)是地圖橫坐標(biāo)對應(yīng)的是列即30縱坐標(biāo)對應(yīng)的是行即20寫反了會出現(xiàn)“明明沒越界卻走著走著撞墻”的怪事。這個坑排查起來很費(fèi)眼神我在自己的工程里已經(jīng)強(qiáng)制所有地圖函數(shù)統(tǒng)一按map[y][x]簽名從根上避免。5.4 每次打出的傷害都一樣srand沒設(shè)種子現(xiàn)象角色攻擊怪物時(shí)傷害值永遠(yuǎn)不變重啟游戲之后也一樣完全感受不到隨機(jī)。原因rand()是偽隨機(jī)數(shù)發(fā)生器沒有調(diào)用srand()設(shè)置種子時(shí)系統(tǒng)使用默認(rèn)種子每次程序啟動生成的隨機(jī)數(shù)序列完全相同。這個坑在C語言里存在了幾十年歷屆初學(xué)者都在同一個位置踩進(jìn)去。解決在main()最前面加一行srand((unsigned)time(NULL))用當(dāng)前時(shí)間換一個種子隨機(jī)序列就會變化。如果你在調(diào)試戰(zhàn)斗掉血邏輯時(shí)想復(fù)現(xiàn)某個問題可以臨時(shí)改成srand(42)固定種子讓每次跑出來的隨機(jī)序列完全一致復(fù)現(xiàn)完再換回時(shí)間種子。這套“固定種子復(fù)現(xiàn)、時(shí)間種子發(fā)布”的調(diào)試習(xí)慣我在項(xiàng)目里一直這么用。5.5 全局變量太多改一個崩一片現(xiàn)象想給角色加一個新屬性改完編譯鏈接都正常一運(yùn)行卻出現(xiàn)原本正常的背包打開就閃退。原因單文件程序里全局變量滿天飛新屬性插入讓結(jié)構(gòu)體的大小或?qū)R方式變了但另一處代碼還在用舊偏移量訪問數(shù)據(jù)。全局變量的另一個問題是可讀性差你根本不知道哪個函數(shù)改了它排查時(shí)只能滿文件搜賦值語句跟大海撈針一樣。解決把游戲狀態(tài)集中到一個結(jié)構(gòu)體里而不是零散定義全局變量typedef struct { Role hero; int bag[24]; int current_map[20][30]; int state; } Game; Game game;模塊之間只傳Game *指針各函數(shù)需要什么數(shù)據(jù)自己從game里取。這樣再增加屬性時(shí)影響面被限制在struct內(nèi)部數(shù)組越界和其他模塊誤改的概率明顯下降。順著這個思路走下去自然就到第6章的模塊拆分。6. 進(jìn)階單文件拆多模塊與二進(jìn)制存檔的一小時(shí)改造把main.c讀到后面會發(fā)現(xiàn)單文件其實(shí)也有邊界游戲初始化、地圖加載、戰(zhàn)斗邏輯全堆在一起搜一個函數(shù)名要在幾千行里來回翻。我拿到這份源碼后做的第一個改造是把每個業(yè)務(wù)塊拆成獨(dú)立.c只留一個最小main.c負(fù)責(zé)流程調(diào)度。文件劃分按職責(zé)走我用的是下面的對照關(guān)系。文件負(fù)責(zé)區(qū)域main.c狀態(tài)機(jī)和主循環(huán)map.c / map.h地圖數(shù)組、碰撞檢測、BFS尋路role.c / role.h角色屬性、升級、背包battle.c / battle.h戰(zhàn)斗流程、隨機(jī)數(shù)傷害save.c / save.h存檔讀檔拆分之后跨文件調(diào)用靠頭文件聲明公開函數(shù)文件內(nèi)部工具函數(shù)加static修飾。這一步做完原來散落的Game game就變成save.c里負(fù)責(zé)持久化的數(shù)據(jù)對象其他模塊通過接口讀寫而不是直接改全局變量。跟拆分同步做的是二進(jìn)制存檔。控制臺游戲存檔最省事的方案是直接寫結(jié)構(gòu)體void save_game(Game *g, const char *filename) { FILE *fp fopen(filename, wb); if (fp NULL) return; fwrite(g, sizeof(Game), 1, fp); fclose(fp); } int load_game(Game *g, const char *filename) { FILE *fp fopen(filename, rb); if (fp NULL) return 0; int ok (fread(g, sizeof(Game), 1, fp) 1); fclose(fp); return ok; }fwrite把整個Game結(jié)構(gòu)體按內(nèi)存原樣寫盤fread再按同樣大小讀回。這個方案要求結(jié)構(gòu)體里只有定長數(shù)組和int不能有指針如果結(jié)構(gòu)體里有鏈表節(jié)點(diǎn)二進(jìn)制存檔會把地址值寫進(jìn)文件讀回來時(shí)地址早已失效。所以敵人列表如果是鏈表存檔前必須先轉(zhuǎn)成數(shù)組讀檔后再重建鏈表這步偷懶不得。從那以后我每次拿到這類單文件游戲都強(qiáng)制自己先走一遍“讀入口 → 畫狀態(tài)機(jī) → 找數(shù)據(jù)結(jié)構(gòu) → 查算法 → 想好怎么拆”的流程這也是這份C語言RPG源碼最值得練的地方。希望這些拆解對你有用把main.c里的模塊擺到明處之后你寫游戲的下限也會跟著抬一個臺階。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲国产精品成人va在线观看| 99热精品在线播放| 丁香五月人妻| 天天操综合网| 97五月天婷婷| 丁香婷婷精品视频| 五月天丁香综合| 国产精品激情AV久久久青桔| www.minyis.com【JT】实力收量可预付QQ2101460746 | 五月婷婷之综合激情| 99久久www| 色婷婷成人做爰A片免费看网站 | 国产三级在线播放| AAA级久久久精品| 色偷偷综合| 狠狠艹狠狠艹| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 1区2区视频| 精品一区二区三区免费毛片爱| 天天做夜夜爽| 婷婷开心激情| 99热6色| 六月丁香婷婷拍拍| 9久热| 亚洲色综合色网| 丁香六月天| 九九热精品在线| 另类婷婷丁香| 可以直接看的av网站| 婷婷激情人妻| 色五月大| 六月激情婷婷| 激情综合5| 视频久久9| 狠狠色婷婷综合开心影视| 99精品免费| 精品人人操| 五月婷婷六月丁香综合在线| 综合五月丁香六月婷婷| 五月草视频| 色综合综合网| 婷婷操婷婷干婷婷射| 操逼123网| www.夜夜操.con| 久久婷婷综合基地| 色色丁香| 可以直接看的av网站| 亚洲成色综合网站免费观看| www.日日夜夜| 99免费视频网| 91久久色| 玖玖婷婷五月天| 91精品久久久久| 五月激情婷婷综合| 欧美日韩成人在线| 丁香五月天婷婷大香蕉| 成人 视频免费观看网站| 先锋资源91| 亚洲自拍天堂| 色综合色婷婷色伊人| 操99| 青青草视频福利| 色色啊| 天天搞夜夜叫| 激情伊人五月天| 丁香五月电影| 伊人五月综合网| 婷婷五月天成人| www色婷婷| www.99在线| 五月丁香婷婷综合| 色综色网| 久久综合激情| WWW.99热| 丁香五月色情| 国产探花一片区| 97婷婷狠狠久久综合9色| 久久新地址| 99久re热视频精品98| 亚洲丁香五月综合| www夜夜| 色色色地址| 丁香婷婷大香蕉| 九九热九九| 亚洲欧洲中文日韩久久AV乱码| 欧美性生交XXXXX无码小说| 超喷97免费在线视频| Www.sesese丁香| 国产人人操| 色婷婷a| 99婷婷五月天| 99色色视频| 久久九区| 久热AⅤ| 久久综合99| www.狠狠干| 色婷婷六月| 亚洲欧美婷婷五月色综合| 四川BBB搡BBB搡多人乱亂| 国内自拍97在线| 懂色av蜜臀av粉嫩av永陈冠希| 六月丁香久久| 2025天天日爽| 婷婷情色五月| 色婷婷成人在线| 五月色天情| 丁香五月综合| 91精品综合久久婷婷九色| 婷婷五月天中文字幕.| AV国产有码| 成人五月丁香社区| 六月婷婷最新网址| 五月激情婷婷开心| 乱精品一区字幕二区| 停停五月色宗合| 影音先锋女人av鲁色资源网小说免费| 噜噜噜狠狠色综| 亚洲色就是色色色| www婷婷亚洲| 激情综合五月天| 激情五月丁香五月色| 五月天婷婷基地综合网| 俺去也综合| 婷婷99| 黄网在线观看免费| 丁香五月天啪啪a日本| 97精品综合| 免费成人网在线观看| 婷婷狠狠久久| 丁香激情网| 久久色五月| 伊人深爱综合| 亚洲精品第一国产综合亚AV | 99色热视频| 亚洲九区| 日韩啪啪网| 五月天综合色| 亚洲爱婷婷| 九九久久综合网站| 丁香五月瑟瑟| 五月天激情av| 自拍视频99| 婷婷基地五月色| 成人看片网站| 天天干夜夜欢| 五月天啪啪网| 婷婷五月天美女21p| 天天色综网| 激情99热| 亚洲传媒在线观看| 婷婷色色婷婷| 久久天堂网| 亚洲色99| 色婷婷六月天| 亚洲激情五月| 热99只有精品| 亚洲视频无| www夜夜操| 亚洲视频在线网| 五月天电影网| 日韩高清久久| 色婷五月| 激情开心五月天婷婷基地丁香社区| 国产AV影片| 丁香五月激情婷婷| 97人妻碰碰碰久久久久-最近国语高清| 五月婷视屏在线观看| 中文字幕不卡网站| 色五月av| 婷婷色女| 亚洲三A| 久热视频这里只有精品68| www,黄色在线,con| 五月天丁香| 五月婷婷啪啪网| 天天肏视频| 99操碰| 五月婷婷综合网| 五月六月激情婷婷| 99玖玖精品| 97色欧美| 天天草天天日| 99这里有精品视频| 激情综合视频| 色色综合网站| 五月色俺婷婷| 九九热在线观看6| 伊人在线视频| 日本一毛片| 99视频内射三四| 亚洲无AV在线中文字幕| 大天天伊人| www.粉嫩av.com| 国产一级片色色| 天天干天天干天天干天天干天天干| 97极品在线| 亚州操人在线视频| 久久99热在线观看| 亚洲综合丁香五月| www.maotanji.com| 久久九网| 91婷婷| www.五月瑟| 综激情网| 超碰在线94| 五月婷婷大香蕉| 色性五月天| 色婷婷狠| 97成人超碰免| 香蕉97碰碰碰欧美| 天天操天天干天天日| 天天舔天天摸视频| 婷婷五月天国产手机在线视频观看| 五月婷婷综合在线视频| 91丨九色丨大屁股| 玖玖热视频| 亚洲精品性色| 婷婷瑟五月天久久综合| 亚洲激情综合| 91一起艹| 色婷婷综合综合网| 99热久久日本| 最新国产AV| 五月婷婷六月色| 婷婷综合五月天亚洲综合| 久久草大香蕉| 九九aV| 欧美性爱专区| 91综合视频丁香| 婷婷丁香色五月| 79精品视频在线观看,| 天天免费成年人视频| 色99色| 色婷婷亚洲综合天堂| 五月丁香六月欧美综合网站| 香蕉狠狠爱视频| 人妻VideOssS人妻高清| 天天日天天做天天操| 丁香六月天AV| 激情 五月 婷婷 丁香| 92国产福利| 七七久久婷婷| 麻豆精品| 激情文学第四色婷婷丁香五月| 99只有精品9| 99这里都是精品| 日本色道视频网站| 九九色综合| 91九色国产熟女| 巴基斯坦粉嫩无码视频| 五月丁香婷爱在线| 婷婷五月亚洲一本在线丁香| 五月婷婷综合在线视频小说| 思思热99热| 五月开行婷婷色五月| 99热在线中文字幕| 久久视频这里99| www.婷婷,com| 草综合14| 久99久视频| 婷婷五月色色| 99热6精品| www九九热| 色综合激情| 婷婷午夜| 国产SUV精品一区二区883| 色婷婷激情| 99热精品免费| 五月婷婷操操| 色五月婷婷伊人| 亚洲色婷婷久久99精品91| 超碰A V在线| 色久一| 亚洲成人AV在线| 婷婷五月a| caopeng97人人| 伊人玖玖网| 一起草无码| 人人操97| 青青草婷婷综合五月| www.色擼擼.com| 亚洲色情在线| 噜噜视频| 最新无码专区| 丁香五月91| 九九人妻福利| 日日夜夜婷婷| 五月婷婷六月丁香在线| 成人婷婷色综合| 十二区无码| 久久青青日本视频| 天堂婷婷五月在线| 丁香五月在线观看| 91操人| 五月婷婷影视| 亚洲av免费在线| 六月五月丁香五月欧美| 99精品视频网站| 97色久| 婷婷五月综合在线| 99热99天堂| www,8050,午夜三级| 深爱五月天婷综合| 97资源欧美日韩大香蕉超碰一区| 大战熟女丰满人妻AV| 97丁香视频| 婷香五月| 99热久| 激情五月天视频| 碰超亚洲| 久久综合网免费视频| 久99热| 丁香九月久久| 99人人干人人操| 思思久久99热| 久久 婷婷 五月天| 婷婷五月综合网激情| 97婷婷五月丁香| 人妻性爱av网站| 色婷亚洲| 久久女人九九| 色情五月停停丁香| 色射婷婷五月天| 激情五月天小说网| 婷婷香草网| 97资源欧美日韩大香蕉超碰一区| 丁香五月婷婷色播艳门照| 五月天综合久久| 99九九这里有免费视频| 嫩草综合网| 日韩人妻无码精品| 九九人人看| 色婷婷成人影片| 男人天堂99| 九九色婷婷Av| 亚洲色欲AAAAAA| 欧美99热| 9l视频自拍9l视频自拍九色学生| 婷婷五月天小说网| 91综合视频丁香| 九九热只有这里是精品| 婷婷五月天综合在线| 久操大屁股女人av| 五月情婷婷| 免费无码毛片一区二区A片| 99热婷婷| 九九热只有精品| 丁香五月网| 久久久久久五月天| 五月天大香焦| 曰日爽日日操| 亚洲精品成人片在线播| 这里只有精品视频在线| 3DAV亚洲香蕉久久 一区二区| 五月婷婷伊人网| 啪啪啪大香蕉| 婷婷六月久久| 影音先锋男士资源网一区| 深爱五月天婷综合| 嫩草极品| 婷婷五月天在线综合| 日韩av免费版| 亚洲a色| 五月丁香婷婷综合网色欲| 狠狠狠狠狠草| 亚洲色色五月| 台湾无码A片一区二区| 亚洲综合成人网站| 色五月婷婷av| 婷婷欧美偷拍综合| 色五月激情五月| 五月丁香婷婷人体| 色婷婷色和| 亚洲精品大片| 欧美va视频| 99热这里只有精品在线| 奸逼视频| 久热亚洲| 久久精品这里只有精品免费首页| 很很干在线视频| 一级AV片| 天天日 天天草| 亭亭色网| 久久精品一区二区三区四区| 美女妹子后射视频网站在线观看| 日本免费91| 婷婷久久网| 五月天色导航婷婷资源婷婷| 色欧美一级| 天天爽天天日天天舔| 丁香六月婷婷社区| 99这里只有精品视频| 五月天激情偷拍| 久久色六月| 六月丁香色婷婷| 欧美精品A片一区在线观看| 久人操| 永久无码色| 97高清国语自产拍| 天天爱天天狠天天透| 97狠狠色| 久操乱| 在线观看欧美| 亚洲爱爱无码婷婷色五月| Av中文在线| 超碰二区| 这里只有精品久| 百度4399有码精品V在线观看| 色欲婷婷五月天| 久久这里只有精品无码| 天天操加勒比| 午夜在线成人网站免费观看| 色色色热| 播五月丁香三月婷婷| 久久婷婷综合网| 精品一二三区久久AAA片| 精品乱码久久久久| 五月天欧美 另类小说| 久久182| 色情综合| 激情六月丁香| 天天精品视频免费观看| 丁香花五月天| 丁香五月婷婷啪啪| 日韩xx在线| 国产亚洲精品久久久久久牛牛| 丁香六月激情国产| caopeng97日韩| 激情久久肏屄视频| 色五月婷婷影视| 亚洲成人免费在线| 日韩AV片| 国产免费一区二区三区三州老师F1F1.CC | 综合五月婷婷| 久久久久98| 国产肥白大熟妇BBBB视频| 婷婷激情人妻| 六月婷婷色综合| 五月婷丁香久久久| 天天肏屄夜夜爽| 久99久视频免费观看| 香蕉影院色| 久热超碰| 综合五月天| 成人av在线网址| 99思思| 色五月天成人在线| 五月丁香在线婷婷蜜桃| 色五月亚洲五月天| 六月婷婷之青青草| 噜噜噜噜噜久| 日本怕怕视频| 色婷婷婷av| 婷婷色五月激情| 91精品综合久久婷婷九色| 丁香五夜激情四射夜夜夜| 国产黄色在线观看| 大香蕉色婷婷伊人在线| 色色网站毛片| 第四色色六月色综合| 日韩二区搞逼插逼毛片| 六月丁花香啪啪激情欧美| 国产午夜精品一区二区三区嫩草| 在线观看国产高清视频免费网站 | 丁香社92视频| 东京热人妻一区二区三区在线| 欧美五月婷婷综合| 色婷婷啪啪| 一区二区乱视频码| 97五月婷婷| 五月丁香婷婷婷激情爱爱| 久久丁香九| 伊人影院久久网| 丁香综合久久| 九九热啪啪| 成人网址在线观看| 99这里只有免费的小视频在线观看| 天天天久久久| 丁香五月天精品| 一本综合丁香日日狠狠色| 欧美性爱5月天天天看| 婷婷五月综合啪| 婷婷五月天激情五月天深爱五月天| 香蕉AV777XXX色综合一区| av中文网站| 五月亭亭直播| 天天色综网| 五月丁香久久| 一本久婷婷综合| 亚洲成人中文字幕| 五月天社区| 婷婷五月天.com| 色婷婷五月天综合网| Www,五月天| 123草逼网| 香蕉综合网| 欧美槡BBBB槡BBB少妇| 五月综合激情啪啪啪啪啪| www狠狠爱com| 婷婷中文字幕| 99爱视频免费看| 亚洲色情网站| 射区导航| AV网在线| 五月停停999| 丁香六月婷婷激情综合| 99热日韩| 日韩aaa| 四川女人毛多水多A片| 婷婷五月在线| 人妻性爱av网站| 5月婷婷激情6月| 日婷婷久久开心| 婷婷天堂站| 婷婷中文字幕| 五月婷婷成人| .操區COm| www.色婷婷.com| 天天拍天天操| 久久久五月天婷婷成人网| 无码字幕中文| 色五月婷婷婷婷婷婷婷婷婷婷| 五月丁香六月婷婷中合网| 久久五月激情| 狠狠干婷婷| 狠狠色综合图片| 久热精品视频在线观| 开心五月综合激情综合五月| 操逼三区| 日本nghangse中文字幕| 色情五月天视频网| 夜夜骑天天操| 超碰av在| 26uuu欧美日韩| 精品久久久久久久人妻| 中国丰满熟女A片免费观| 99精品网址| 精品无码av丁香五月激情| 国产精品VA在线| 狠狠操狠狠插| 婷婷综合精品| 99∨VTV| 爱久久小说下载网| 99在线精品视频观看免费下载| 五月婷婷之综合激情| 26UUU精品一区二区| 激情五月最新网址| 激情网开心网| 久久97| 伊人激情| 熟女网站久久| 日本理论久久| 人人爱国产| 最近中文字幕在线中文视频| 丁香九月婷| 日日夜夜天天| 亚洲激情五月| 五月婷婷六月少妇激情| 久久99草五月婷婷| 亚洲人妻一区二区| 婷婷五月激情四射手| 99这里只有精品视频免费| 五月天天天天天天天天天天天婷婷婷| 欧美日本97| 区区欧美你爱| 久久99最新地址| 婷婷激情五月天色| 99精品在线观看| www久久99| 99热这里只有精品1025| 玖玖激情五月天| 五月丁香性| 婷婷六久久| 婷婷日日天天| 久久综合香蕉国产国产蜜臀AV| 亚洲VA在线| 日本少妇裸体做爰高潮片 | 中文字幕按摩做爰| 激情丁香网| 202丰满熟女妇大| 激情综合播播| 老美AA片| 伊人五月丁香| 超碰在线观看成人视| 97色女人在线| 久久久中文| 337p大胆噜噜噜噜噜91Av| 五月天激情综合在线| www.色婷婷| 思思久久99热| 熟女人妻一区二区三区免费看| 色五月久久成人婷婷| 成人午夜视频精品一区| 五月天激情开心网| 超碰京东热av男人的天堂| 综合五月天| 五月丁香婷草| 色播五月丁香| 在热视频精品| 色播五月天婷婷老师| 亚洲AV成人在线| site:hcxsz888.com| 激情婷婷| 久久激情五月婷婷| 大香蕉五月天| 91精品91久久久久77777| 九九精品在线观看视频6| 亚洲色婷婷久久99精品91| 色综合婷婷| 伦乱美欧| 国产伊人大香蕉| 色婷婷综合网站| 5月婷婷6月丁香aV| 日本久久精品18| 色婷婷久久综合中文久久一本| www.国产亚洲69ty.久久久久久久久久久久 | 色99视| 成人 在线 日韩| 婷婷激情蜜桃玖玖丁香| 影音先锋 一区| 99操99| 狠狠色综合精品视频在线| 婷婷欧美综合| 亚洲av电影在线| 丁香六月激情| 怡红院精品视频久久久久久久久| 九色91美女| 少妇真实被内射视频三四区| 9久久婷婷国产综合精品性色| 99视频精品视频| 91久久九九| 色婷婷成人做爰A片免费看网站| www.99成人视频| 99在线精品视频免费| 丁香五月激情啪啪啪| 99热国产| 久久免费精彩视频| 婷婷精品在线| av在线观看免费| www久久久久久久| 99久热这里只有精品| 五月色色激情网| 国产日批视频| 天天久综合网永久入口17v | 天天操天天插天天射| 久久五月视频| 日本一毛片| 免费五月婷婷网| 婷婷五月丁香综合激情小说| 婷婷综合亚洲| 色吊丝永久访问网址| 日本熟妇乱妇熟色A片蜜桃| 97碰在线视频| 九九精品亚洲| 色色网站在线| 99久久玖玖| 天色综合网站| 色视五月天婷婷| 二色av| 99免费偷拍视频| 丁香五夜激情四射夜夜夜| 中文字幕无码人妻少妇免费视频| 99久久激情视频| 狠狠五月天| 热的无码综合视频| 天天干天天 亚洲| 五月天婷婷午夜丁香| 99热色婷婷| 色亭亭九月| 亚洲亚洲人成综合网络| 欧美久久一级内射wwwwww.| 激情综合网五月婷婷| 免费婷婷| 日韩成人AV在线播放| 夜夜骑夜夜撸| 五月天激情网图片| 五月亭亭开心网| 婷婷五月天AV| 操逼巨乳91| 亚洲精品永久久久久久| 中文成人在线| 七七九色| 五月综合视频| 999婷婷综合| 五月天激情小说网| 五月婷精品| 五月激情网站| 99热免费精品| 狠狠干婷婷| 国产乱子轮XXX农村| 九九综合影音先锋| 97成人丁香| 9热在线视频精品| 91九色无码内射| 禁片二区| 久久hd| 亚洲AV综合网| 青青操绿aaa一区日v| 成人婷婷色五月天| 996日日爱| 色激情五月天| 超碰亚洲天堂| 久热在线中文字幕色999舞 | 夜色综合网| 丁香五月AV| 深爱婷婷基地| 9999热这里只有精品| 婷婷丁香五月激情| 色五月天丁香| 无码99| 9色免费网| 日本欧美国产| 五月丁香综合啪啪対白| 婷婷播5月| 色五月综合激情| 色婷婷丁香五月| 丁香婷婷老熟女综合网| 99啪99| 538午夜激情| 婷婷久久六月费| 激情五月婷婷五月| 九九热超碰| 婷婷激情97| 久久99久久99精品免视看婷| 色五月婷婷婷婷| 激情久久丁香| 五月Huangsewang| 久婷婷五月综合欧美| 欧美99热| 天天视频亚洲| 婷婷色六月| 五月天婷婷Av| 激情综合五月激情XXXX| 人人舔人人| 欧美99热| 大香蕉操操| 丁香六月色香蕉视频| 天天激情| 天天做天天爱天天爽| 懂色av蜜臀av粉嫩av永陈冠希| 五月婷婷新网站| 色噜噜狠狠一区二区三区| 色五月激情婷婷| 天天日P天天射P| 美女天天艹人人爽| 色偷偷综合| 97啪在线观看视频| www.日本久久videos| 五月激情婷婷国产精品久久久久久| 激情综合婷婷| 思思热久久艹| 婷婷丁香18| 国产精品人人做人人爽人人添| 亚洲色图五月丁香| 五月丁香婷爱在线| 日韩一级一片内射视频4K| 婷婷色导航| 日本3级片一区2区| av婷婷丁香| 激情纯色婷婷五月天在线不卡视频| 影音先锋色婷婷| 99综合99| 79色色色色| 国产精品久久久久久久久久 | 玖玖综合色| 思思热在线播放| 97碰碰九九视频| 亚洲婷婷开心五月| 九九99精品| 五月婷婷欧美| 色欲婷婷五月天| 丁香五月综合首页| 开心五月网 | 激情综合网五月天天| 九九精品免费| 亚洲中文字幕av| 婷婷久久99| 婷婷久久图片| 丁香五月欧美午夜视频| 在线亚洲综合网| 91精品综合久久久久久五月丁香| 九九爱激情| 天天夜天天色天天| 琪琪色网在线| 丁香五月激情综合在线观看| 无码人妻少妇色欲AV一区二区| 九月婷婷久久久| 五月丁香成人网| 97干视频| 久久怡红院| 一起草无码视频| 超碰在线国产| 久久久妻人人人| 人妻少妇色综合| 26uuu色噜噜精品一区| 色五月婷婷综合| 久久人人添人人爽添人人片αV| 伊人五月天男人的天堂在线| 亚洲高清在线| 视频这里只有精品16| www.久久久久| 成人婷婷深爱综合网| 五月丁香花成人社区| 婷婷夜夜夜夜| 五月婷婷丁香五月| 激情五月久久| 伊人干综合| 可以免费观看的AV| 五月视频日本免费观看| 少妇高潮呻吟A片免费看软件| 狠狠操.COM| 伊人久热91| 操逼三区| 思思99精品视频在线观看| 三人荫蒂添的好舒服A片| 丁香婷在线| 超碰在线观看成人视| 欧美色图天堂网| 天堂爱爱| www.五月婷| 六月激情婷婷| 99热日| 一级黄色操B| 欧美一级色| 婷婷六月网| 99九九热视频免费| 天干夜夜操| 噜噜色五月| 婷婷天天五月天| 99热久草| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 婷婷 色 丁香 夜| 91人人爽狠狠狠| 色婷婷伊人激情在线观看| 五月的色婷婷高潮| 天天噜天天插| 西西4r午夜剧场| 伊人久久婷婷| 成人色色视频| 九九日本视频| www.久久色.com| 思思热视频| 五月丁香在线综合| 丁香五月综合色婷婷| 色婷婷91激情小说| 五月天婷婷久久| 久久色情综合免费网站| 色色色精品无码区| 最新日韩久热免费视频看看| 欧美成人AAA片一区国产精品| 五月婷婷无码| 人色五月天婷婷| 98永久精品| 久草丁香婷婷1024| 日韩视频99| 26uuu精品一区二区| 五月婷婷深深爱爱| 婷婷六月丁综合| 五月天激情四射| a久久| 亚洲va在线| 思思热国产视频| 色婷婷88| 久久婷婷网址| 国产五月视频| 五月丁香啪啪啪| 色色综合激情| 天天爽天天摸| 婷婷综合网伊人| 婷婷综合网站| 久久性操| 久久超级碰视频| 国产黄色大片| 亚洲欧美在线观看| 婷婷五月天AV| 天堂A∨在线| 涩婷婷五月天在线精品视频| 亚洲麻豆乱码国产2028| 亚洲人人96@| www.91九色| 人橾人| 亚洲视频码| 一区二区无码视频| 无码激情AAAAA片-区区| 丁香五月偷拍| 这里只有精品1| 性爱综合网| 中文字幕,综合,91| 丁香五月偷拍| 婷婷色五月在线视频| 五月天,激情四射,婷婷频道| 五月天五月色| 亚洲性爱日韩无码| 亚洲色婷婷网站| 人妻videos人妻高清| www.五月天婷婷.com| 99er精品| 丁香五月婷婷婷婷欧美综合| 少妇丁香婷婷 | 无码啪啪| 玖玖在线视频| 九九av| 五月丁香六月婷综合成人综合| 色婷婷亚洲婷婷| 久久怕怕视频| 亚洲操人| 五月天婷久久| 成人精品视频99在线观看免费| 99色在线| 爱iii做iiii日| 99色综合久久| 综合玖玖偷拍| 日韩黄色网络| 色色色激情| 天天色天天色天天色天天色天天色天天色 | 婷婷五月免费观看| 密桃激情五月天综合网| 俺去啦综合网| 五月天色五月| 九九精品自拍| 超碰在线99| 亚洲国产精品VA在线看黑人| 狠狠色婷| 丁香五月黄色| 日本99久久| 翔田千里 50岁 无码| 五月天婷综合网站| 五月天黄色激情小说| 婷婷丁香色无五月| 亚洲精品国产setv| 大香蕉久久| 亚洲成人精品三区| 久久婷婷五月天激情四射| 97人人干| 玖玖福利视频资源| 精品女人九九九| 天天色天天日| 99视频综合网| 天堂资源欧日浪女在线播放| 噜噜综合网| 99热这里只有在线| 天天色图| 午夜69成人做爰视频| 99只有精品9| 99九九综合久久九九| 99热这里只有精品268| 色色色.COM| 久久久性爱视频| 成人中文网| 亚洲人妻电影| se99在线| 99精品国产在热久久婷婷| 日日干日日| 丁香九月综合在线| 99热 在线观看| 丁香六月五月婷婷| 九色视频91| 亚洲中文字幕翔田千里| 女同激情久久av久久| 五月丁香六月婷婷a v| 久久婷婷国产| 99A片| 久久婷婷亚洲| 婷婷五月天综合在线| www.日日夜夜.com| 一级性感毛片| 很很干在线视频| 色呦呦美女| 成人精品免费在线观看| 色一情一乱一乱一区91| 婷婷丁香人妻天天| 另类小说色婷婷| 五月开心久久| 5月婷婷性视频| 79精品视频在线观看,| 99九九99九九九视频精品| 亚洲欧洲色色| 丁香五月天激情| AV大片在线观看| 激情五月婷婷在线区| 欧美精品啪啪| 免费看片在线观看| 久色成人| 91精品91久久久中77777| 99精品女人天堂| 人人草人人爱手机视频看看| 婷婷五月色| 9色在线视频| 亚洲色另类| 久久久全国免费视频| 一个色的综合| 99热91| 五月丁香欧美综合| 精品久久66| 97色综合| 丁香婷婷色五月天| 图片区 小说区 区 亚洲五月| 99久久久久| 99热天堂| 91色干| 久久这里有| 超碰自拍天堂| 丁香五月婷婷成人网| 在线播放中文字幕| 婷婷激情丁香五月天综合| 色五月天丁香婷婷| 九九色大香蕉| 五月天亚洲综合网| 亚洲另类av| 婷婷五月天视频| 人人操人| 天天精品视频免费观看| 五月天婷婷色综合| WWW,婷婷,COM| 久久久91精品| 色色综合色| 成人VAV视频在线观看| www.激情五月天| 国产91在线视频| 婷婷色欧美激情| 色噜婷婷| 欧美成人性爱网| 热久久色| 婷婷伊人中文字幕| 色情综合| 五月婷婷六月激情| 久久综合热17c| 亚洲中字AV电影在线网站| 99热99日…..| 亚洲日韩乱码一区二区三区四区 | 99爱免费视频| 五月亭亭色| www.91在线观看| 91超碰在线播放| 狠狠综合网| peg 2区三区四区的| 秋霞少妇AV网站| 五月丁香婷婷综合视频| 99啪在线| 色色色色色综合| 99热日韩这里只有精品| 色一色综合| www,av好吊操| 猫咪伊人久久| 99无码精品| 天天射影视综合网| 欧美婷婷精品激| 欧美 日韩 成人 在线| 欧美五月丁香在线| 伊人狼人干| 天天干天天做| 欧美五月丁香在线| 麻豆AV一区二区三区| 色五月婷婷影院| 亚洲免费看片| 极品人妻VIDEOSSS人妻| 99热精品中文字幕| 激情视频91| 色五月情| 国产精品国产| 丁香五月天激情婷婷丁香六月| 99久久婷婷精品视频| 婷婷社区五月天| 密黄站| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 丁香五月天在线| 九九久久99| 亚洲第一成人无码A片| 饮料下药迷倒漂亮女同事强干| 人妻久久做| 婷婷综合玖玖五月| 久久机热/这里只有精品| 五月婷人妻| 超碰在线免费9| 91中文狠狠综合| 五月婷婷草| 五月婷婷免费| 91九色超碰正在播放| 少妇人妻偷人精品无码视频新浪| 六月婷婷八月丁香| 九九免费精品在线视频| 99久久精彩视频| AA片在线观看视频在线播放| 99热综合网| 五月天伊人日日噜影片AV| 日笨久久网| 香蕉久久av一区二区三区| 婷婷欧美综合| 久热这里只有精品视频6| 色综合婷婷| 五月 婷 久| 国产看真人毛片爱做A片| 亚洲av日韩无码| 五月丁香狠狠地噜噜噜噜| 日本久久网| 婷婷激情六月中文| 99色综合| 99综合免费视频| 色色日本| 99久久婷婷五月天| 思恩热国产视频右线观看| 色色丁香五月天社区| 亚洲人妻av伦理| 久久 婷婷 五月天| 五月丁香六月情| 蜜臀嫩草| 精品婷婷五| 色综合激情| 久久激情天堂| 人人摸人人干| 久久国产一区二区三区| 五月丁香婷婷色| 天天综合五月| 色婷婷色99国产综合精品| 春色激情第四色| 欧美狠狠一在草| 五月天激情四射| 伊人网啪啪| 伦99热| 91热手机在线| WWW色五月| 日韩AV免费电影在线播放| 九九免费视频| 色啪网| www.久久| www.久久久.com| 99九九玖玖| 五月天婷婷色色网| 日韩AAAAAAAAAAA片| 思思热精品在线观看| 亚洲精色| 操你av| 五月婷婷亞洲中文| 色综合色色色色色| 丁香婷五月| 五月丁香久久呀| 丁香五月AV综合激情| 色五月丁香五月五月婷婷| 五月丁香怕怕综合| 深爱五月月天| 天堂AV三级| 99热 免费| 丁香婷婷精品视频| 婷婷五月天天| 久久96热| 国产精品视频久久99| 五月丁香在线综合| 五月丁香婷婷成人网| 色吧五月婷婷| 五月婷婷激情日本| www.五月婷婷| 久草五月天| 天天做天天爱天天爽| 亚洲无AV在线中文字幕| 麻豆WWWCOM内射软件| 99久久超级| 97婷婷在线| 婷婷综合色图| av婷婷丁香 六月| 九九九午夜影院成人| 99热这里只有精品2024| 人人爱国产| 综合99综合久久久久久久| 91操熟女| 天天色情站| YW无码| www久久艹| 五月丁香色婷婷伊人| 五月中旬婷婷丁香六| 色色网站免费| 五月婷精品| 亚洲精品V天堂中文字幕| 婷婷五月欧美综合| 99超碰在线免费| 色五月色五天色情网| 六月丁香成人| 四色AVwww| 超碰成人电影| 精国产品一区二区三区A片| 国产综合A片| 色九月| 夜夜操狠狠操天天操| 波多野结衣AV无码Porn| 五月激情啪啪| 91久女| 成人av免费观看| 婷婷深爱五月亚洲综合| 色色色.COM| 亚洲欧洲另类| 天天操天天插天天射| 99视频在线播放大全| 天天插天天日天天爽| 五月综合视频| 久久综合影院 | 色亭亭五月天网扯| 久久久久久人妻久久久久久久久久人妻久久久 | 九九色院| 就爱啪啪婷婷| 色婷婷综合影院| 九九黄色网| 亚洲熟女乱色综合亚洲网站| 五月丁香六月婷婷综合免| 美国色五月天婷婷资源站| 99亚洲精品视频| 第1影院之五月婷婷| 无码se| 开心婷婷中文字幕| 国产毛片欧美毛片久久久| 国产亚洲成AV人片在线| 久热这里这里有精品| 99久精品视频| 99视频| 怡红院 久久| 久久人妻视频| 欧美A A A A A| 97在线视频观看| 激情六月婷婷| 人人摸人人干| 九九热这里只有精品5| 亚洲va成人va成人va在线观看| 中文字幕有多少字| 色99在线视频| 五月第四色| 丁香五月婷婷免费视频| 99热这里是精品| 丁香五月六月| 亚洲成AV人片在线观看| 成人超碰AV| 亚洲第一成人无码A片| 国产女人十八水真多1| 色亚洲婷婷| 久久九九综合| 91久久精品无码一区二区三区| ji'qi'luan'ren'lun| 99视频精品| 99热这里有精品首页10| 人人爱人人摸人人澡| 91人久| 丁香五月AV综合| 热久久99热欧美国产亚洲| 在线天堂9| 天天激情站| 大香蕉视频99| 久久机只有这里精品| 欧美成人精品三区综合A片| 超碰人人艹| 久99视频在线观看| 色在线99| 99热手机在线精品| 97在线视频 欧美| 日日舔夜夜操| 超碰免费人人肏| 欧美综合婷婷网| 超碰v| 天天综合天天做天天综合| 婷婷五月天激情文学| 99操逼| 99精品网| 伍月婷婷免费视频| 久久只有18视频| 欧美精品99久久久| 思思热精品在线视频| 激情爱爱网站超大免费| 婷婷网五月天| 99热免费精品| 激情五月婷婷网|