国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成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) 簡(jiǎ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)還涉及超聲波測(cè)距并通過串口UART顯示距離的硬件交互示例可延伸學(xué)習(xí)單片機(jī)通信與驅(qū)動(dòng)編寫隨附的PNG圖片提供游戲界面設(shè)計(jì)或流程參考。壓縮包為rar格式共2個(gè)文件1個(gè)C源文件和1張圖片大小僅1.79MB輕量便于分析已有139人學(xué)習(xí)瀏覽。逐步分析與調(diào)試源碼有助于系統(tǒng)掌握C語言游戲開發(fā)的基礎(chǔ)框架為更復(fù)雜的項(xiàng)目打下扎實(shí)基礎(chǔ)。1. 這份C語言RPG源碼值得下但別急著跑C語言RPG游戲源碼這個(gè)資源解壓main.rar之后只有兩個(gè)文件main.c和一張2018-04-18.png。我第一次打開時(shí)也愣了一下一個(gè)游戲就一個(gè).c文件但真正把main.c從頭讀到尾之后反而覺得這種單文件工程最適合學(xué)C沒有工程構(gòu)建噪音沒有框架代碼干擾你在一份文件里能同時(shí)看到數(shù)據(jù)結(jié)構(gòu)、算法、游戲循環(huán)和外設(shè)交互代碼。這份資源適合兩類人一類是語法已經(jīng)過完、想找個(gè)能編譯能改的實(shí)戰(zhàn)項(xiàng)目練手的人另一類是帶著具體問題來查的人比如想搞清楚背包系統(tǒng)怎么用鏈表、main函數(shù)參數(shù)怎么傳、或者“無法打開源文件”這類編譯器報(bào)錯(cuò)到底出在哪。先把話放前面這游戲跑起來不難但想每段都看明白需要一點(diǎn)閱讀順序和踩坑意識(shí)下面按我會(huì)怎么拆它來講。2. main.c的骨架從main()入口到游戲循環(huán)看懂單文件怎么轉(zhuǎn)起來任何C程序都從main()開始RPG也不例外。這一章解決“這個(gè)游戲怎么轉(zhuǎn)起來”和“運(yùn)行以后先發(fā)生什么”這兩個(gè)問題清楚了整份源碼的閱讀順序就定了。main.c里只有一個(gè)main()函數(shù)所有模塊都從它被調(diào)用它以什么順序調(diào)用、以什么條件退出直接決定游戲的壽命。2.1 main()入口初始化順序和狀態(tài)枚舉先講結(jié)論單文件RPG的main()通常不復(fù)雜復(fù)雜的是它背后那些被調(diào)用的子函數(shù)。這份源碼的主函數(shù)骨架大概是下面這個(gè)樣子為了還原老式控制臺(tái)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ù)個(gè)數(shù)argv是參數(shù)字符串?dāng)?shù)組啟動(dòng)游戲時(shí)可以通過argv[1]直接傳入存檔文件名這是很多單文件游戲處理讀檔的常見做法。GameState枚舉是整套程序的狀態(tài)機(jī)中樞每個(gè)switch分支對(duì)應(yīng)不同的玩家界面從這里能看出這份源碼沒有用多線程而是單線程狀態(tài)機(jī)輪轉(zhuǎn)這也是老式控制臺(tái)RPG最常走的路線。初始化順序是我特別想提醒的部分srand()必須放在所有會(huì)調(diào)用rand()的模塊之前否則后面戰(zhàn)斗系統(tǒng)每次啟動(dòng)的隨機(jī)序列完全一樣屬于經(jīng)典的新手翻車點(diǎn)。接下來是init_world()它負(fù)責(zé)把地圖數(shù)組、角色屬性、背包內(nèi)容歸零或讀到初始值。如果在源碼里看到serial_init()或uart相關(guān)的代碼段那就對(duì)應(yīng)摘要中提到的超聲波測(cè)距串口交互功能可以理解成游戲讀取外部傳感器輸入這部分不接硬件時(shí)可以直接注釋掉不影響游戲主體運(yùn)行。注意看這張2018-04-18.png它大概率就是某次運(yùn)行時(shí)的串口調(diào)試窗口截圖或界面布局圖用來輔助理解菜單層級(jí)。2.2 游戲循環(huán)輸入處理與狀態(tài)更新的邊界RPG的“動(dòng)起來”全靠循環(huán)本身。這個(gè)循環(huán)不是普通語言課上的for那種簡(jiǎn)單語句本質(zhì)是“讀輸入 → 改狀態(tài) → 畫畫面”三步不斷重復(fù)。下面的代碼是按這套源碼的習(xí)慣拆出來的主循環(huán)片段while (running) { int key getch(); // 阻塞讀一個(gè)鍵盤字符 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(); // 非玩家角色的自動(dòng)移動(dòng) render_screen(); // 刷新控制臺(tái)畫面 }關(guān)鍵在getch()是阻塞調(diào)用程序會(huì)停在這一行直到有按鍵輸入才往下執(zhí)行。很多人看源碼時(shí)把getch誤當(dāng)成scanf這是原則性錯(cuò)誤scanf會(huì)緩存整個(gè)緩沖區(qū)的輸入并跳過空白字符getch是即按即取兩者處理方向鍵和單字母指令的體驗(yàn)完全不同。move_player()接收兩個(gè)方向增量參數(shù)參數(shù)范圍是-1或1地圖邊界檢查必須放在該函數(shù)內(nèi)部否則角色一步就走出地圖范圍。render_screen()是所謂“渲染”的全部?jī)?nèi)容在控制臺(tái)RPG里就是清屏加printf不存在GPU繪制這種事。研究這個(gè)循環(huán)時(shí)建議先別急著看戰(zhàn)斗和背包直接在switch里加一句printf打印state值觀察每次按鍵后狀態(tài)怎么跳轉(zhuǎn)這是最快摸清單文件游戲架構(gòu)的方式。別小看這個(gè)土辦法我拆過不少開源小游戲狀態(tài)機(jī)跳轉(zhuǎn)關(guān)系是最先要畫出來的東西畫不出來后面所有調(diào)試都是盲人摸象。3. 數(shù)據(jù)結(jié)構(gòu)在RPG里的落地?cái)?shù)組、鏈表、棧與隊(duì)列各管一攤一個(gè)RPG里最密集的技術(shù)點(diǎn)就是數(shù)據(jù)結(jié)構(gòu)這也是這份源碼價(jià)值最高的部分。摘要里提到的數(shù)組、鏈表、棧、隊(duì)列在這類單文件游戲里都有非常直白的映射。這一章不看教科書定義只看它們?cè)谠创a里到底為哪個(gè)功能服務(wù)、為什么這么選。3.1 數(shù)組角色屬性表和背包格子的最簡(jiǎn)單表達(dá)一個(gè)角色有多少條屬性、一個(gè)背包有多少個(gè)格子最自然的數(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用定長(zhǎng)16字節(jié)數(shù)組為什么不用char *因?yàn)樵趩挝募螒蚶镉弥羔樧址馕吨芾韒alloc和freefree時(shí)機(jī)不對(duì)很容易崩定長(zhǎng)數(shù)組占16字節(jié)換來的是不需要手動(dòng)釋放內(nèi)存。bag[24]是固定容量背包對(duì)應(yīng)關(guān)系是“數(shù)組下標(biāo)格子編號(hào)數(shù)組值物品ID”打開背包時(shí)遍歷這24個(gè)格子判斷哪個(gè)大于0即可。map[20][30]直接對(duì)應(yīng)地圖的20行30列障礙物判斷就是map[y][x] ! 0。如果看到背包界面能翻頁那基本就是加了一個(gè)pageIndex變量記錄當(dāng)前頁數(shù)組本身不用動(dòng)。這是數(shù)組方案的最大優(yōu)勢(shì)隨機(jī)訪問是O(1)按下標(biāo)直接改值配合一個(gè)for循環(huán)就能完成背包渲染。雖然這份資源不是什么基礎(chǔ)代碼大全但這一小段背包邏輯的質(zhì)量是夠格的值得抄。3.2 鏈表敵人列表和動(dòng)態(tài)任務(wù)的增刪邏輯數(shù)組處理不了“隨時(shí)新增一只怪、打死后又要?jiǎng)h掉”這類需求鏈表就派上用場(chǎng)了。經(jīng)典寫法是每個(gè)敵人一個(gè)節(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里用二級(jí)指針pp統(tǒng)一處理“刪頭節(jié)點(diǎn)”和“刪中間節(jié)點(diǎn)”兩種情況這是C語言鏈表刪除里最推薦的方式避免“刪除頭節(jié)點(diǎn)時(shí)單獨(dú)改頭指針”這種容易寫漏的分支。注意malloc之后必須配對(duì)free否則一晚上循環(huán)刷怪內(nèi)存就悄悄見底了。鏈表的代價(jià)在訪問速度查找某位置是否有敵人在鏈表上是O(n)遍歷。在這個(gè)游戲場(chǎng)景里地圖通常只有200到600個(gè)格子每幀遍歷一次敵人列表性能完全可接受這也是原作者敢在單文件工程里直接用鏈表的原因。3.3 棧與隊(duì)列狀態(tài)回溯和事件排隊(duì)棧在這個(gè)RPG里最合適的角色是菜單系統(tǒng)玩家按ESC退出子菜單回到上一級(jí)正好符合“后進(jìn)先出”。隊(duì)列則更適合處理帶順序的事件比如戰(zhàn)斗中的先手攻擊順序、對(duì)話消息逐條顯示。下面是一段數(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個(gè)事件滿了直接丟棄而不是無限增長(zhǎng)這個(gè)設(shè)計(jì)避免隊(duì)列撐爆內(nèi)存。用宏定義上限而不用散落的常量改容量時(shí)只動(dòng)一行。如果源碼里出現(xiàn)類似handle_talk_event的調(diào)用基本就是從隊(duì)列取事件分發(fā)給對(duì)話模塊處理。這一段和前面的鏈表放一起看數(shù)據(jù)結(jié)構(gòu)的選型邏輯就清楚了固定數(shù)量用數(shù)組動(dòng)態(tài)數(shù)量用鏈表帶層級(jí)關(guān)系用棧事件順序用隊(duì)列。4. 算法藏在哪BFS尋路、戰(zhàn)斗隨機(jī)數(shù)與升級(jí)排序的實(shí)現(xiàn)細(xì)節(jié)數(shù)據(jù)結(jié)構(gòu)背后一定站著算法。很多下載這份源碼的人上來就找“算法”兩個(gè)字實(shí)際上算法散落在移動(dòng)、戰(zhàn)斗和成長(zhǎng)三個(gè)系統(tǒng)里。這一章挑三個(gè)必考點(diǎn)逐一拆開每個(gè)都能直接抄進(jìn)自己的游戲工程。4.1 地圖尋路BFS在瓦片地圖上的落地RPG里角色跑圖最簡(jiǎn)單可控的自動(dòng)尋路算法是BFS廣度優(yōu)先搜索。邏輯是從起點(diǎn)一圈一圈向外擴(kuò)展先到終點(diǎn)的路徑就是最短路徑。下面這段參考實(shí)現(xiàn)是基于main.c里map[20][30]這個(gè)二維地圖來寫的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}; // 記錄每個(gè)格子來自哪個(gè)“父親格子” 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ù)組定義上下左右四個(gè)方向。pre三維數(shù)組保存每個(gè)位置的前驅(qū)坐標(biāo)最后從終點(diǎn)回溯到起點(diǎn)倒推完整路徑。注意visited和pre直接用定長(zhǎng)二維數(shù)組[20][30]跟map尺寸綁定改了地圖尺寸這兩處維度必須跟著改否則越界訪問直接崩潰。算法用途是“點(diǎn)到點(diǎn)自動(dòng)移動(dòng)”或NPC巡邏路徑生成玩家手動(dòng)按方向鍵時(shí)并不會(huì)調(diào)用它。這套源碼里如果角色能自動(dòng)跟隨某條路線用的就是它。注意BFS隊(duì)列容量600是20×30地圖的格子總數(shù)每格最多入隊(duì)一次所以600足夠地圖擴(kuò)大時(shí)要同步擴(kuò)大隊(duì)列數(shù)組這是最容易忘記的隱患。4.2 戰(zhàn)斗隨機(jī)數(shù)rand()的種子與傷害浮動(dòng)區(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; // 浮動(dòng)區(qū)間 1~5 return base delta weapon_bonus; }base的計(jì)算保證防御再高也不可能完全免傷保底1點(diǎn)傷害是游戲設(shè)計(jì)里的常見習(xí)慣。rand() % 5 1產(chǎn)生1到5的均勻隨機(jī)浮動(dòng)區(qū)間寬度直接影響戰(zhàn)斗手感區(qū)間越大運(yùn)氣成分越重。要實(shí)現(xiàn)暴擊在函數(shù)外面加一個(gè)if (rand() % 100 crit_rate) damage * 2即可。這里最大的坑就是srand()我在第2章強(qiáng)調(diào)過如果開頭忘了寫srand((unsigned)time(NULL))rand()每次啟動(dòng)生成的序列完全相同表現(xiàn)為“打同一個(gè)怪永遠(yuǎn)掉同樣的血”這是C語言游戲開發(fā)里最經(jīng)典的玄學(xué)現(xiàn)場(chǎng)之一。4.3 升級(jí)與排序經(jīng)驗(yàn)閾值查詢與屬性加權(quán)角色升級(jí)需要一張“多少經(jīng)驗(yàn)升下一級(jí)”的對(duì)照表。如果這張表是嚴(yán)格升序數(shù)組最合適的是二分查找而不是從第0級(jí)一直for循環(huán)掃到滿級(jí)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í) }這個(gè)二分返回的是經(jīng)驗(yàn)值能覆蓋到的最大等級(jí)。每次升級(jí)玩家獲得幾點(diǎn)自由屬性點(diǎn)至于加到哪一項(xiàng)源碼里如果用到“優(yōu)先排序”的思路多半是按角色短板分配比如hp最低就先補(bǔ)hp。常見做法是把五項(xiàng)屬性放進(jìn)一個(gè)小數(shù)組做一次簡(jiǎn)單選擇排序找出最小值然后加1。選擇排序在元素只有5個(gè)時(shí)談不上時(shí)間復(fù)雜度但勝在代碼直觀放在玩家成長(zhǎng)系統(tǒng)里閱讀和修改都方便。5. 避坑解析這份C語言RPG源碼最容易翻車的五個(gè)點(diǎn)把源碼跑通、改過幾輪之后我發(fā)現(xiàn)真正浪費(fèi)時(shí)間的不是游戲邏輯而是C語言本身在控制臺(tái)程序里挖的坑。另外有人在VSCode里直接編譯這個(gè)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()讀到的是一個(gè)殘留的換行界面表現(xiàn)為“按了一下沒反應(yīng)”或“自動(dòng)觸發(fā)了一次操作”。解決在scanf調(diào)用后清空緩沖區(qū)或者干脆統(tǒng)一改用讀整行再解析的方式。我一般這樣處理int choice; char line[32]; fgets(line, sizeof(line), stdin); choice atoi(line);fgets會(huì)讀走整行把換行符也一并消費(fèi)掉再用atoi轉(zhuǎn)成整數(shù)。之后同一個(gè)程序里所有輸入都走fgets不要混用scanf和getch兩類輸入函數(shù)混用的結(jié)局通常越修越亂。這個(gè)坑幾乎每個(gè)C語言小游戲都有屬于必踩項(xiàng)。5.2 gets()直接讓程序崩掉現(xiàn)象輸入角色名字時(shí)一長(zhǎng)串字符輸進(jìn)去程序直接崩潰或者編譯器報(bào)警告“the gets function is dangerous”。原因如果源碼里用了gets(name)讀名字而name是定長(zhǎng)數(shù)組gets不做邊界檢查輸入超過數(shù)組長(zhǎng)度的內(nèi)容會(huì)往棧上寫輕則覆蓋相鄰變量重則段錯(cuò)誤。這在老式教學(xué)代碼里是常見病。解決不要用gets改用fgets同時(shí)加一步去掉換行fgets(hero.name, sizeof(hero.name), stdin); hero.name[strcspn(hero.name, \n)] 0; // 去掉fgets帶進(jìn)來的換行sizeof(hero.name)讓讀入長(zhǎng)度嚴(yán)格限制在數(shù)組容量?jī)?nèi)strcspn再把末尾換行替換成字符串終結(jié)符。改完之后輸入長(zhǎng)名字只會(huì)被截?cái)嗖粫?huì)炸。養(yǎng)成這個(gè)習(xí)慣后我再也沒在字符輸入上翻過車。5.3 數(shù)組越界把地圖數(shù)據(jù)寫成亂碼現(xiàn)象角色走到地圖邊緣時(shí)坐標(biāo)變成負(fù)數(shù)或超過地圖寬高隨后地圖上出現(xiàn)各種錯(cuò)亂的墻壁甚至閃退。原因move_player()里沒有做邊界檢查坐標(biāo)直接落到map數(shù)組下標(biāo)上map[-1][0]訪問的是數(shù)組前面的內(nèi)存map[30][0]訪問了數(shù)組后面的內(nèi)存讀寫都是未定義行為。解決移動(dòng)函數(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; }所有移動(dòng)邏輯先調(diào)is_walkable返回0就不允許走。這個(gè)函數(shù)同時(shí)扮演“邊界檢測(cè)”和“墻體碰撞”兩個(gè)角色修完再也不會(huì)跑出地圖。另一個(gè)容易忽略的點(diǎn)是地圖橫坐標(biāo)對(duì)應(yīng)的是列即30縱坐標(biāo)對(duì)應(yīng)的是行即20寫反了會(huì)出現(xiàn)“明明沒越界卻走著走著撞墻”的怪事。這個(gè)坑排查起來很費(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)種子每次程序啟動(dòng)生成的隨機(jī)數(shù)序列完全相同。這個(gè)坑在C語言里存在了幾十年歷屆初學(xué)者都在同一個(gè)位置踩進(jìn)去。解決在main()最前面加一行srand((unsigned)time(NULL))用當(dāng)前時(shí)間換一個(gè)種子隨機(jī)序列就會(huì)變化。如果你在調(diào)試戰(zhàn)斗掉血邏輯時(shí)想復(fù)現(xiàn)某個(gè)問題可以臨時(shí)改成srand(42)固定種子讓每次跑出來的隨機(jī)序列完全一致復(fù)現(xiàn)完再換回時(shí)間種子。這套“固定種子復(fù)現(xiàn)、時(shí)間種子發(fā)布”的調(diào)試習(xí)慣我在項(xiàng)目里一直這么用。5.5 全局變量太多改一個(gè)崩一片現(xiàn)象想給角色加一個(gè)新屬性改完編譯鏈接都正常一運(yùn)行卻出現(xiàn)原本正常的背包打開就閃退。原因單文件程序里全局變量滿天飛新屬性插入讓結(jié)構(gòu)體的大小或?qū)R方式變了但另一處代碼還在用舊偏移量訪問數(shù)據(jù)。全局變量的另一個(gè)問題是可讀性差你根本不知道哪個(gè)函數(shù)改了它排查時(shí)只能滿文件搜賦值語句跟大海撈針一樣。解決把游戲狀態(tài)集中到一個(gè)結(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ù)組越界和其他模塊誤改的概率明顯下降。順著這個(gè)思路走下去自然就到第6章的模塊拆分。6. 進(jìn)階單文件拆多模塊與二進(jìn)制存檔的一小時(shí)改造把main.c讀到后面會(huì)發(fā)現(xiàn)單文件其實(shí)也有邊界游戲初始化、地圖加載、戰(zhàn)斗邏輯全堆在一起搜一個(gè)函數(shù)名要在幾千行里來回翻。我拿到這份源碼后做的第一個(gè)改造是把每個(gè)業(yè)務(wù)塊拆成獨(dú)立.c只留一個(gè)最小main.c負(fù)責(zé)流程調(diào)度。文件劃分按職責(zé)走我用的是下面的對(duì)照關(guān)系。文件負(fù)責(zé)區(qū)域main.c狀態(tài)機(jī)和主循環(huán)map.c / map.h地圖數(shù)組、碰撞檢測(cè)、BFS尋路role.c / role.h角色屬性、升級(jí)、背包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ù)對(duì)象其他模塊通過接口讀寫而不是直接改全局變量。跟拆分同步做的是二進(jìn)制存檔??刂婆_(tái)游戲存檔最省事的方案是直接寫結(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把整個(gè)Game結(jié)構(gòu)體按內(nèi)存原樣寫盤fread再按同樣大小讀回。這個(gè)方案要求結(jié)構(gòu)體里只有定長(zhǎng)數(shù)組和int不能有指針如果結(jié)構(gòu)體里有鏈表節(jié)點(diǎn)二進(jìn)制存檔會(huì)把地址值寫進(jìn)文件讀回來時(shí)地址早已失效。所以敵人列表如果是鏈表存檔前必須先轉(zhuǎn)成數(shù)組讀檔后再重建鏈表這步偷懶不得。從那以后我每次拿到這類單文件游戲都強(qiáng)制自己先走一遍“讀入口 → 畫狀態(tài)機(jī) → 找數(shù)據(jù)結(jié)構(gòu) → 查算法 → 想好怎么拆”的流程這也是這份C語言RPG源碼最值得練的地方。希望這些拆解對(duì)你有用把main.c里的模塊擺到明處之后你寫游戲的下限也會(huì)跟著抬一個(gè)臺(tái)階。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
免费97视频| 岛国1区2区3区在线观看| 青青国产精品在线| 5月婷婷6月六月丁香| 国产91 丝袜在线播放00-百度| 亚洲国产一级中文综合久久天堂在线免费观看| 操逼逼无码| 在线a v| 久久精品国产亚洲粉嫩| 亚洲宗合网| 91N欧美| 五月婷婷AV| 91人妻做a观看视频| 97爱综合| 国产精品9999| 国产9熟妇视频网站| 欧美91色| 蜜臀va69| 中文字幕一区二区三区人妻不卡 | 日逼97| 日本一久是| 人妻天天爽夜夜爽爽| 久久久九九网站| 久久夜黄色无码A级大片| 国产精品内射婷婷一级二| 亚洲乱熟女一区二区| 欧美高潮在线| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 五月丁香大香蕉| 久久国内| 五月天婷婷久久| 激情久久av一区av二区av| 精品人体无圣光凹凸| 国产一区二区成人av在线播放| 精品国产乱子伦一区二区三区,精品一 | 在线中文字幕视频| 男女性无套 免费九一| 久久在肏| 亚洲色91| 无码天天操| 天天操天天干一区二区 | 欧美狠狠操| 麻豆性爱视频在线播放| 国产suv精品一区| 中出91视频| 欧美亚洲丝袜人妻制服中文99| 中精品一区二区三区| 熟女露脸激情自拍视频| 色色97爱| 日韩av在线精品观看| 美女啊啊啊啊啊啊| 亚洲**2021在线观看| 亚洲国产精品V?在线播放| 久久男人的天堂| www熟女乱伦com| av网站在线观看了| 国产玖玖| 欧美日韩亚洲高清不卡一区二区三区| 欧美影音在线| 综合亚洲网| 国产一线二线三线av| 亚州男人天堂| 精品人妻1区| 国产成人+综合亚洲+天堂| 日本在线一二| 免费网站观看www在线观| 综合网97| 久久精品国产亚洲5555| 日韩操逼HD| 2020视频1区2区3区| 殴美牲| 国产熟女| 青青五月天| 欧美性爱精品七区| 久久一区无码| 超碰成人人人爽人人爽| 看黄片视频免费| 天天操天天插| 夜精品久无码| 九九九热| 亚洲综合成人网| 18精品一区| 日日日大屁股骚女人精品| 大香蕉视频啪啪啪啪| 日本淫乱女一区二区三区视频| 天天视频网站黄| 丁香六月婷婷久久综合| 青青草一本道福利视频| 被窝影院午夜看片无码| 欧美激情综合| 爱丝福利| 久9视频| 日韩av情韩国爱禁区av一区二区| 黄色大片视频在线免费看| 色色香蕉| 人妻在线大香蕉| 97se亚洲综合自| 操操逼操操逼操操逼逼| 九九九综合精品| 天躁夜夜躁2021| 日韩综合无码色欲vv| 国产最新AV| 日韩本不卡视频在线观看| 久热在线精品免费观看| 亚洲精品天天影视综合网 | 欧美色性情| 免费公开人人操| 国产久久一区二区午夜| 日本大香蕉综合网| 婷婷五月av| 2019亚洲男人天堂| 丁香五月天激情综合| 风月影院男女十八禁| 午夜美女福利视频| 欧洲无码一区二区| 屁股久久久久久| www.激情| 精品久久久久综合无码| 人妻AV在线| 日韩欧视频| 探花精品视频| 97在线视频免费看| 久久人妻办公室视频| 精品无吗m| 久久理论字幕视频| 亚洲中字幕日本一区二区三区| 亚洲色综合| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 91在线国产后入风骚翘臀美女素人| 久久久女人| 啊啊啊网站| 午夜国产乱伦视频| 色老汉色| 中文字幕亚韩| 蜜臀一二三区| 欧美日韩国内不卡| 精品国产99999| av一区二区三区 中文| 亚洲情色综合网| 亚洲制服aⅴ中文字幕| 女人被男人桶爽视频网站| 日韩av三四区| 操逼无码一区| 又大又大又大又粗爽高潮观看| 99少妇精品视频| 亚洲在线网站| 97精品一区二区三区免费| 97人妻碰碰中文无码久热丝袜| 一级免费精品| 久久亚洲熟妇在线视频| 操操AV电影| 国产在线播放成人免费| 国产乱弄免费在线视频。| 嫩草一区二区在线观看| 久久精品28| 久久一二三四不卡| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 精品成人动漫一区二区| 午夜噜噜噜| 欧美男女午夜啪啪| 国产精品无码在线| 九九九九精品九九九九| 色综合久久夜色精品国产天堂| 欧美强奸乱| 亚洲丝袜诱惑| 青青草影视蜜久久| av情色影音| 日本中文字幕在线视频| 亚洲AV无码乱码| 高潮9999外国| 国产精品国产| 超碰综合色| 中文字幕在线观看丝袜| 日人妻视频91| 国产隔壁老王影院在线| 成人线上超碰| 97鸡把在线视频| 一区二区三区成人| 亚洲欧美一区二区不卡视频播放| 精品无吗久久| 欧美后进式| 欧美人妻久久精品二区三区| 操逼无码操逼| 骚女天天综合网| 大香蕉日亚洲日本亚大| 亚洲精品欧洲精品| 国产日本熟女顶级一区二区三区视频| 国产精品无码论坛| 日本天天操| 色综合久久av| a一区二区三区乱码在线| 农村女一级毛卡片| 极品肉射| 怡红院成人视频| 婷婷九月国产| 天天激色| 日韩不卡网操逼中文字幕日韩| 97精品久久久久久久| 久久久久久夜夜夜夜夜| 九色97| 日韩不卡av一二三| WWW黄片COM| 亚洲国产高清福利视频| 思思热在线cao| 亚洲啪啪视频免费| 国产一级内射无挡观看| 三级激情网站| 蜜乳AV一区| 精品中文字幕一区二区| 精品国产91av一区二区三区| 眼镜人妻101.com| 妇女性内射冈站HDWWWCOM| 久久草草亚洲蜜桃臀| 偷拍偷窥与盗摄视频专区| 色五月AV| 亚洲日本激情| 亚洲最大的综合性av| 国产精品色片一区二区| 九九碰九九爱97超碰| 激情综合网五月婷婷| 久久久 国产精品| 日本在线播放不卡一区| 开心五月激情网| 色婷婷网| 亚洲精品丝袜| 欧美日韩美女精品久草一区二区三区| 日日玩天天干| 女沟厕偷窥piss小便| 国产精品96| 久久成人国产精品| 精品亚洲黄色片 国产精品导航一区二区| 日韩精品人妻一| 日本色色色| 玖玖爱综合| 国产后入清纯| 亚洲熟女综合网| 国产亚洲日韩欧| 美女午夜福利免费视频| 久久精彩免费视频| 情侣操 逼视频99| 无卡一区=区| 日本一级特级毛片视频| 无码精品人妻一区二区三区妖精| 婷婷五月av| 国产传媒1234区| 国产一区二区在线看| 91人妻在线视频| 天天色黄色影院天天操| 欧美性爱五月天| 欧美日韩国第一区| 国内毛片四区| 国产一区二区a毛片| 日本 欧美 亚中文字幕| 91视频综合在线| 国产91精品在线免费| av绯色| 久7色| 国产精品一区二区后入| 国产精品国产精品国产| 日韩精品亚洲专区在线影视| 天天干天天日天天射黄色大片 | 视频黄色国产一级| 男人亚洲91首页在线| 五月天欧美色图| 午夜国产成人精品视频| 日韩精品一区二区三区四虎影视| 超碰午夜| 九九综合久久中文字幕| 91久精品| 国产精品一区二区三区免费视频| 人、人、摸,人、人、草| 久久e6只有精品| 99热这里只有精品1| 国产黄色在线播放观看| 920日本午夜免费| 久久华人网| 无码国产Av| 久久黄黄| 另类图片综合| 婷婷久草一区二区三区| 97 国产精品| 国产精品麻豆视频网站| 婷婷情色五月天| 91操熟女| 亚洲欧美国产中文字幕| 欧美亚洲国产91在线| 欧洲天天在线| 国产h小视频在线观看免费| 欧美日韩第一页| 国产精品在线一区二区| av网页一区二区三区| 一区二区三区四区久久视1| 国产资源中文字幕在线| juliaann精品熟女一区| 白丝av| 啊啊啊不要好疼视频| 欧美色综合网| 蜜臀久久一区二区| 久久精品国产亚洲AV清纯| 91亚洲人电影| 中文字幕蜜乳av| 久久最新免费视频23| 亚洲熟女综合一区二区| 天天影视网综合少妇| 亚洲欧美骚| 中文高清一区二区的| 日躁天天爽爽| 大吊色| 最新日日夜夜天天干干| 亚洲人码13| 亚洲AV无码黄色强奸| 久久是精品| 国产无马av| 好爽免费视频| 鸥美插入视频| 无码乱人伦中文视频| 色欧美色交综合| A V少妇特黄三级| 国产精品点击进入在线影院高清| 亚洲黄日韩无码专区| 99re热有精品视频国产| 久男人久久| 人妻天堂综合网| 久久在线观看免费视频| 中文字幕av片| 99热亚洲天堂| 激情丁香五月婷婷| 啪啪啪精品| 亚洲诱惑天堂| 九久久九精品视频| 色播综合| 91深夜夜| 97天天综合| 久久久不卡区一区二区三区久久久| 精品人妻av在线播放| 亚洲成成熟女人综合一区二区| 国产伊人自拍| 久久精品国产精品亚洲艾通辽熟妇 | 91少妇香蕉久久精品| 色婷婷电影网| 亚州AV无码国产精品| 精品人妻一区二区免费蜜桃视频| 人妻喷水| 91l欧美在线| 麻豆国产尤物AV| 高清成年美女黄网站免费大全| 亚洲在饯| 97国产精品一区| 天天干人妻| 天天摸天天插天天日| 日韩免费看黄片| 韩国一级做a久久久久| 中出20p| 青青草啪啪网| 伊人久久大香蕉线AV五月天| 亚洲情色第一页| 亚洲性爱无码乱伦av| 一级性爱视频免费观看| 女优大全 - 91n| 亚洲青青草| 性欧美体内射精| 看日韩美女二区三区免费操逼视频| 看一级特黄a大一片| 99国产精品| 亚洲少妇综合| 色香天天| 三四中文字幕| 九久久精| 男人天堂毛片| 九九九九九九免费视频| 91n免费处女| 天天干天天中出av| 九九亚洲精品| 美欧老女人97| 日本高清熟女久久一区| 经典丝袜一区| 怡红院网站在线视频| 自拍亚洲综合| 午夜精品久久久久久久99| 国产二区三区粉嫩在线| 校园春色亚洲无码| 亚精品无码毛片一区二区三区| 蜜臀AV一区二区三区激情综合| 91一区二区| 国模一区二区三区| 熟女日韩| 亚洲欧美日韩电影网站一区 | av网站免费线看| 9久在线视频只有精品| 久操97| 精品久久久av无码免费| 影音先锋每日最新资源在线观看 | 色婷婷丁香五月| 五月丁香啪啪网| 精品久久99| av天堂影视中文在字幕在线中文 | 日本中文字幕一区| 日本在线999| 东北女人性交| 操逼操2| 少妇啪啪自拍| 亚洲乱熟女一区二区三区大香蕉| Julia在线播放亚洲久久| 东京热男人的天堂网| 久热伊人99re| 久草精品一区| 九九九九免费| 免费看A片毛毛片在线播| 91精品丝袜在线观看| 婷婷丁香六月天| 污到发麻的视频 国产| 美女AV一区二区| 91男人综合| 国产精品精品系列在线观看| 亚洲第一精品在线视频| 精品人妻伦一二三区久久| 91是天天| 亚洲图片视频小说| 欧美视频一| 国产树林里野战在线看| 亚洲男人天堂网久久| 久久婷婷欧美| 色欲av国内精品久久久久久| 色综合久久88色综合久久天天| 伊人五月天| 欧美色图亚洲特色| 天美传媒精品久久视频| 丁香五六月啪啪| 岛国精品视频在线观看| 久久久久久久78| 久久精品无码熟妇一区二区三区视频导航 | 99在线无码精品秘 入口黑人| 爽爽淫人网| 骚女高跟AV在线| 国产99999| 成人aⅴ一区二区三区| av天堂影视中文在字幕在线中文 | 国产女人视频三四五区| 在线观看中文av字幕| 久久9久9久99久9久9| 本道在线| 欧美大香蕉同搞| 中文字暮97| 久草成人影片| 盗摄女人妻在线| 美女97超碰| 日韩人妻无码不卡网站| 亚洲情色中文字幕一区| 人人妻人人色| 九九九精品成人免费视频小说| 综合久| 欧美性少妇| 久草视频观看视频在线| 欧美视频第二页| 综合久久97| 久久一二三四五六七八九区区区 | 黑人综合网| 伊人久久艹| 亚洲骚男同com| 粉嫩粉嫩一区性色AV片| 亚洲视频二区 | 久久侵犯人妻爽爽爽| 欧美—性—交—色| 婷婷五月天色| 97操| 伊人97色天使| 国产91亚洲精品一区二区三区| 国产精品一二三免费网站| 久久久久久久久久久久色网| 久久精品99| 超碰97日韩| 亚洲综合小说另类图欧美视频激情小说色五月天 | julia国产在线 | 九久久九精品视频| 强奸乱伦 亚洲一区| 操我啊啊啊啊啊| 黄色免费一级在线毛片| 亚州色站 日韩电影| 精品一区二区国产日韩| 97看操| 欧美αv.com| 天美传媒av在线| 自拍大香蕉乱插| 凹凸 69堂 在线播放| 热九九精品| 99无码| 天天弄欧美| 久久久久亚洲AV无码专区少妇| 日韩精品大香蕉伊人在线| 性91| 国产自产22区| 欧美成人精品一区| 妇女性内射冈站HDWWWCOM| 67914在线精品观看| 欧美一二三级精品在线| 超碰久久草| a级理论午夜日本| 色香欲综合| 天天综合欧美综合| 亚洲精品啪视频| 97资源久久| 日本蜜桃| 天美AV片| 综合久久六月久久婷婷| 久久久青青草| 久久日本熟女精品一区| 99精品在线播放| 久热影视| 夜夜爽夜夜爽| 久久成人午夜狠狠| 日本一二三高清| 欧美精品久久久久久久久88| 亚洲色综合| 视频黄站| 国产盗摄美女如厕大神作品在线观看| 国产自偷自拍一区| 伊人精品久久网站| 欧美综合另类| 日日97| 97色涩| 欧美亚洲国内自拍| 99日精品欧美国产| 久综合国内精品自在自线| 漂亮人妻被强中文字幕hd| 东北老女人的激情视频| 天天综合精品| 久久久国产成人一区二区三区在线| 97色色色| 97超级久久| 锕锕好爽 死我在线观看| 欧美激情视频一区二区三区不卡| 婷婷在线播放| 夜夜草网站| 婷婷午夜成人色中色| 欧美日韩国产成人高清| 日韩啪啪视频| 78精品| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 丝袜剧情| 欧美性爱中文字幕无线码| 久久久久国产精品久久久| 黑人性暴力毛片| 99re在线视频国产| 东北女人操比视频| 欧美后入视频| 欧美97视频| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 欧美精品四区| 偷窥自拍亚洲色图| 丝袜六区| 人人妻人人操人人乐| 色99色| 婷婷色综合| 丁香五月婷婷啪啪| 深爱五月天| 后X久久| 欧美另类色图片| 丁香久久| 97精彩视频网站| 禁止观看美女黄| 色噜噜人妻av 中文字幕| 国产人妻精品久久久一区二区三区 | 天天看高清麻豆| 欧美国产一区二区三区麻豆传媒 | 国产精品内射婷婷一级二| av影片在线观看不卡| av三级电影在线播放| 欧美成人免费在线观看| 美女操逼A A| 中国一级操逼视频| 亚洲精品a人片在线观看视| 国产精品三级视频网站| 五月天开心网| 国产有码一区| 日本九九久久99| 亚洲做性| 亚洲国产另类在线中文| 少妇啪啪自拍| 在线播放中文字幕| 久久a久久| 青青欧洲黑| 四虎精品亚洲| 国产强奸乱伦欧美| 26uuu国产成人综合| 狠狠色婷婷777| 精精夜夜| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 顶级丝袜熟女一区二区三区| 久热9| 97久久精品国产| 91女优在线观看| 777超碰| 天堂俺去俺来也www久久婷婷| 五月天黄色激情视频| 男人的天堂2019AV| 天天内射| 69天堂| 亚洲成人性爱在线观看| 美女露胸露屁股| 蜜桃臀一区二区aV| 一起草三级AV电影在线观看| 女人喷水视频在线观看| 美国美女AV在线| 欧美激情亚洲情色| 日韩三级在线观看网站| 亚洲精品美女久久久久久久久| 99re6久热只有精品6在线直播| 青青草狠狠撸| 一起草三级AV电影在线观看 | 日本一本一区二区三区四区五区欧美日韩中文字幕| 成人色女网| 91 偷| 芊芊操逼视频无码| 人妻密肉在线观看| 加勒比99999| 久久亚洲AV成人精品无码| 超碰人人乐97| 欧美日韩狠狠爱| 亚洲av影音先锋| 欧美色图天堂网m| 麻豆精品.欧美精品.日韩精品.| 天堂а√在线最新版在线 | 日韩操逼性鲍| 毛片视频白嫩| 大香蕉综合网| 亚洲国产第一页综合视频| 美女网站黄页| 男人高清无码一区二区| 96免费视频在线| 中文字幕丰满人妻日本| 欧美乱色| 久久免费少妇| 超91综合网| 97视频免费| 日韩成人免费电影| 老熟乱一区二区三区四区| 免费A V在线播放| 啊啊啊啊啊啊啊啊啊啊在线观看| 九九精品无码专区免费| 免费农村成人少妇人妻Aa一区二区视频 | 国产色图乱伦| 三级片大波波| 三级日韩一区二区三区| 国产suv精品一区二区四| 日韩有码专区| 国产玖玖| 中文字幕在线观看网址| 久久久9视频| 国产1024在线播放| 欧美亚洲一区二区久久久婷精品大包诱| 国产三级片在线观看| 中文字幕一区av| 97爱综合| 天天日天天舔东京热| 手机在线免费看的av| 青青草啪啪网| 国产精品激情久久久久久久| 免费草草草草草视频| 欧亚在线视频| 亚洲天堂2020| 婷婷五月天久久精品视频一区二区三区| 男女啪啪网站免费视频| 国产精品熟女九九九| 26uuu性| 色哟哟av| www.97在线| 日本熟女免费視颖| 亚洲自拍青操视频| 91在线色综合| 日韩成人在线性爱视频| 久久 久久国内精品亚洲| 色婷亚洲五月在线观看| 97精品国产| 噜噜噜久久亚洲精品色情| 欧美日韩性爱无码| 亚洲图片91| 美女的肌被草喷水视频| 性爱乱伦网址| 亚洲日韩电影| 一区二区视频你懂的| www久久99| 日本性爱视频一级| 久超碰这里只有精品| 欧美嫩性色| 亚洲成人av电影在线| 亚洲人妻日日日| 亚州色站 日韩电影| 亚洲AV无码国产精品久久久久| 欧美性性性| 黑人与人妻| 成人欧美一区二区三区黑人一| 极品欧美一区二区三区| 亚洲天天自拍| 校园春色亚洲无码| 欧美第一页性| 亚洲无码一区二区三区三州| 中文字幕天堂在线| 玖玖资源视频一区二区三区| 精品美女在线视频| 在线播放成人网站| 草草影院最新网址| 精品黄色电影| 91狠狠狠| 日韩 欧美 国产 麻豆| 亚洲有码 视频一区| 国产福利小视频高清在线观看| 免费在线看黄片av| 69久久| 91成人久久| 女人一区| 亚洲熟妇乱女区二区三区| 999国产精品999| 国产成人无码a| 欧美色亚洲| 水滴偷拍| 清纯唯美综合| 成人AV在线网站| 日韩精品大香蕉伊人在线| 欧美九九99久久精品| 99热免费| 色99视频| 日韩成人免费电影| 国产免费一区在线观看| 夜色AV无码手机在线影院| 岛国在线免费视频| 尤物av网站免费在线播放| 狠狠爱大香蕉| 亚洲人妻五月丁香婷婷| 凹凸 69堂 在线播放| 中文一区二区| 亚洲欧美综合网站| 九九九九九九九九九九九蜜桃| 啊啊啊啊操死我了| 久久一二三四五六七八九区区| 黑丝少妇麻豆| 狠肏骚人妻| 一区二区三区男女操逼黄色小电影| 欧美视频在线第3页| 男人的天堂亚洲| 午夜精品久久久久久久男人的天堂 | 91成人国产综合久久精品蜜月| 亚洲乱色视频一区、二区在线| 91人妻超碰| 91美腿丝袜在线观看| 日本青青草在线| 欧美爆操91| 97日视频| 941超碰| 色九九久九九| 啊啊啊免费视频| 午夜性生活av免费在线看| 人妻天天爽天天爽三区| 日韩一区二区精彩视频| 五月婷网站| 亚洲精品aa久久伊人| 十八禁视频网站| 男人的天堂2010| 99re这里只有精品3| 久久久久久91香蕉国产| 人人操人人射人人干| 人妻大香蕉| 少妇久久久久| 亚洲无码成人精品| 国产 日韩 另类 视频一区爱| 无套内射性感少妇视频| 久久久影院| 亚洲精品国产精品乱码不卡| av 模特一区了| 亚洲色图欧美色18直播在线| 日本精品999| 亚洲 日本 国产 综合| av婷婷色婷婷色六月| 五月天综合| 少妇69中文| 91日韩网站| 亚洲一区在线观看欧洲| 91精品人妻电影| 97中文天堂| 走光一区92下载| 老妇女91| 亚洲日韩美女中文字幕乱| 九九色色| 久久久久久久久久久999| 久久九九精品一区二区| 国产精品不卡av免费在线观看| 亚洲天堂人妻熟妇视频| 日本人体九九九九九九| 日日妻色网| 男人午夜天堂| 白嫩国模丰满一二三区| 久久蜜桃综合网| 大香蕉草草| 国产大学生口爆吞精合集| 最新加勒比丝袜在线| 精品欧美日韩在线观看| 日本性感人妻91| 五月天婷婷色| 亚洲啪啪啪啪视香蕉| 午夜男女爽爽爽影院视频| 婷婷综合网| 中文字幕文字幕无码一区二区三区电影99| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 久久成人国产| 国产午夜福利视频在线| 久久久久久久久久9| 国产亚洲色婷婷久久99精品91葵花宝典| 中文一区二区婷婷视频| 欧美亚洲首页| 少妇滛荡视频| 精品视频久久区| 欧美日韩大黄片| 韩国女主播青草福利视频| 一本久久久精品| 亚欧性爱ab| 久久久久斤小| 国产日韩区| 久久97资源 网| 天天激清| 色性荡荡荡荡视频| 日韩射精| 国产精品一二三免费网站| 综合大香蕉美。| 日韩欧美中文| 走光一区92下载| 曰韩精品视频一区二区| 色婷婷蜜臀av| 韩日色费| 久草新免费| 亚洲高清无毛一区二区| 一道本东京热加勒比一区二区三区| 欧美激情在线观看视频| 九九色精品| 欧综合网| 丁香五月天婷婷姐| 永久免费观看的毛片的网站| 禁止观看美女黄| 26uuu最新| 玖玖蜜臀资源网| 91香蕉视频在线观看免费| 超碰 av 女人天堂| 久久久久久亚洲Av无码| 人妻酒店出差被中出免费在线播放| 人人贴人人摸| 噜噜噜亚洲精品| 国产一区在线免费播放| 国产三级中文字幕粉嫩| 免费一级视频特黄色大片| 99re99在线视频| 97超级久久强资源| 日韩精品资源专区二区| 人妻一区久久二区三区色播| 亚洲精品国产熟女| 97超碰人操| 99操碰| 亚洲精品久久久久久久蜜桃臀| 夜夜狼人妻| 国产操伦| 我爱操| 欧美成人9797| 福利操逼| 婷婷人妻激情| 自拍盗摄一区| 日本欧美亚洲高清在线看| 亚洲欧美综合图片| 久久国产精品91| 久操网无码在线| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 久久久91| 五月天综合网| 亚洲色图欧美视频| 亚洲在线欧美| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 日本伦乱九九九综合| B049AV在线播放| 狠狠干婷婷| 大香蕉一区二区在线观看.| 中文字幕午夜精品久久久| 九九热精品免费视频| 夜夜天天噜狠狠爱2021| 中文字幕视频二区| 夜夜嗷嗷一区二区| 狼人久草| av在线观看不卡网站| 9精品久久久久| 97精品第3页| 激情综合五月| 国产高清在线观看欧美| 超碰97护士| 岛国不卡超碰护士AV在线播放| 欧美亚洲综合色| 中文字幕一区二区韩| 青青在线视频日韩欧美| 九九九九一级| 殴美综合色88| h在线看免费版在线看| 熟女五十路一区二区三| 久操精品| 欧美色图20P| 国产欧美后入| 国产性感在线观看| 99热免费| 亚洲av乱伦色图网站| 8x福利精品第一福利视频导航| 国产精品久久久久久久久久久久久久| 黄日韩| 日韩AV色图| 欧亚综合一卡二卡中文字幕| 人妻在线视频| 亚州免费啪啪视频| 久久亚洲国产成人| 天天综合中文字幕 91| 中文字幕欧美日本乱码一线二线| 欧美色图私拍91| 在线黄页看毛片| 九月婷婷久久| 精品亚洲国产成人AV制服丝袜 | 天天干天天日天天射黄色片| 花野真衣| 人妻少妇视频在线播放| 亚洲日本韩国在线| 人妻系列无码专区中文有码| 精品无码久久久久久国产浪潮| 91这里只有精品| 精品久| 色欧洲| 91n欧美| 天天干18禁| 欧美一级二级三级| 91日韩网站| 四虎免费在线播放| 久草电影网| 后入福利| 狠狠色五月亚洲91| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 青青草原成人| 超碰久草| 理论久久婷婷网8| 蜜区区视频79| 97超碰精品图片| 亚洲欧美97√| 欧美劲爆第一页| 日韩小电影| 欧美色欧美| 天堂v无码免费视频| 五月丁香黄色网| 成人av福利在线观看| 国产精品原创巨作?v网站| 日韩综合成人免费视频| 国产 日韩 欧美高清 | 正宗无毛一线天嫩逼| 97资源站国产精品| 黄页| a片自拍直播视频| 国产精品探花色| 操高情无码| 91九色精品熟女内射| 殴美牲| 99热导航| 粉嫩久久久极品| 男人综合网| 国产精品爆乳懂色蜜乳| 国产精品一区二区久久精品| 人人操人人操人人操人人操人人操人人人11.CM | 国产欧美亚洲精品a第2页| 婷婷激情五月综合| 亚洲国产一区二区三区在线| 日韩78m视频| 清纯唯美综合亚洲| 婷婷超| 久久久国产亚洲精品系列| 久操不卡视频| 草b在线 | 色婷婷六月丁香七月婷婷| 黄色AAAAAAAAAAA大片| 久热大香蕉| 亚洲国产综合久久久性感熟妇| 人妻少妇精品久久久| 欧美成97爱| 欧美日韩黄片精品在线| 日韩av乱伦| 97视频7| 日韩精品午夜操呦呦不卡影院| 欧美一级黄色免费专区| 手机在线看片免费人成视频| 91九九九馒头| 97超色| 国产兽交视频在线播放| 在线国产探花| 97精品久久久久久久| 蜜臀99久久精品久久久久久| 日韩性爱免费观看视频| 日本久久精品| SUV一区二区在线看| 我要色综合网| 中文字幕亚洲在线一区| 日日夜夜国产综合| 丰满人妻一区二区三区免费| 密乳无码| 精品人妻夜夜草| 亚洲欧美日韩不卡人妻| 亚洲色图日韩精品| 人妻插插人妻人| 天天综合网~91| 最新日产中文在线麻豆| 天天综合影院91| 伊人网高清| 国产精品亚洲免费| 欧美91精彩| 国产福利一区二| 屌色在线97视频| 密臀国产在线| 国产大学生口爆吞精合集| 欧洲中文字幕| 天美传媒精品一区二区| 国产精品大香蕉| 欧美亚洲清纯| 18禁网站在线播放| 上床不卡网站| 亚洲av国产av综合av卡| 大鸡巴久久久| 91欧美综合| 涩涩五月天| 日韩97超碰| 久久久久久AⅤ无码免费肉站| 无码久| 一本大道不卡一二三区| 久久久久久久久久久久黄色| 26uuu久久| 精品v1区| 高清国产无码av| 一个人在线看的黄色电影网站| 日本精品五区| 天天色悠悠激情| 少妇久久久久久久久| 青青网三级视频| 久久久久国产精品久久久| 男人的天堂2019AV| 性猛交| 99热这里只有精| 97香蕉网| 亚洲情色一区三区| 日韩av电影成人在线| 激情露脸爱| 国产精品蜜臀久久久久无码AV| 99热精品青草在线| 久久精品国内Av熟女高清| AV天堂男人的天堂| 日韩免费在线视频观看| 精品国产国产AV| 人人爱人人操人人性| 欧美人妻一区二区| 五月天婷婷久久| 久草在线| 黄总AV色图| 亚洲精品影视老司机| 天天日熟妇| 大香蕉啪啪网| 中文?日韩?免费?精品| 97资源欧美| 久久精品毛片免费不卡| 精品人妻一区二区三区蜜桃视频| 六月丁丁香| a'v在线资源| www.91欧美| av一区二区三区 中文| 成人国产二区三区在线,男女精品。| 9久超碰| 大香蕉www.超碰| 欧美亚洲韩国视频十五区| 青青草操逼逼视频| 国产精品嫩草影院午夜两性| 国产第二页| 日本有码久久| 高清无码一区二区三区| 亚洲AV色图一区| 人人喜人人妻| 亚洲欧美在线观看免费| 1024精品在线| 91av天美性媒精品视频| 亚洲女毛多水多21P| 人妻少妇精品久久久久久久| 夜夜人妻爽| 婷婷五月天在线观看| 欧美十八禁视频| 欧美啪啪啪91| 狠狠操一区二区| www久久久| 26UUU欧美激情一区二区| 99热这里都是精品| 久久久久9999妇女| 色99视频| 中文字幕日韩人妻视频一区二区三区| 综合亚洲欧美| 一区二区国产视频在线观看| 亚洲少妇喷视频看| 26uuu国产成人综合| 男人天堂2017| 久久熟女嫩草成人片免费| 一及黄久一点| 亚洲黑丝在线| 粉嫩不卡一区二区性爱| 国产精品人妻无码久久久老鸭窝 | 亚洲欧美日韩精品久| 26uuu最新| 久久久久久久| 人妻色情天天操| 99re69| 高清不卡国产| 九九热最新| 福利在线黄片| 中文字幕国产| 亚洲日韩人妻中文字幕一区| 插插综合网天天影视网| 韩日巨乳美女免费视频在线观看| 亚洲有薄码区日本系列中文字幕| 亚洲国产高清福利视频| 亚洲第一免费视频| 精品无码久久久久久久杏吧| 婷婷丁香人妻| 少妇蹲下买菜露大唇0| www.高清无码诱惑一区.com| 成人AV素股で擦久久| 麻豆国产尤物AV| 激情AV| 欧洲熟妇xxXx欧美老妇裸体| 亚洲日韩精品一区视频在线| 日本精品网站在线中文| 在线免费观看高清无码视频| 97超碰欧美中文字幕| 天天综合网~91| 玖玖无码超碰| 青青草国产一区二区三区| 综合视频91| 少妇专区一二三四五| 丝袜视频一区二区在线播放国产中文 | 南澳成人一级片在线播放| 久久精品人妻一区二区三区| 韩日色费| 粉嫩绯色AV一区二区在线| 久久久精品91八戒| 国产主播福利| 国产精品99999| 久久男人的天堂| 91精品网站| 午夜精品久久久久久久久久久久久| 深喉吞精| 亚欧洲日韩国产精品| 九九热三级片| 精品人妻一区二区三区在线视频不卡| 美女诱惑久久| 亚洲欧洲激情卡通另类文学四射小说网站| 欧美人妻制服| 日韩精品人妻| 性色AV蜜色av色欲av| 久久精品国产亚洲妲己影视| 性爱乱伦视频免费| www.91逼逼.com| 亚洲色图欧美视频| 1区2区3区中文字幕日韩| 久久久精品成人国产|