久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

C#推箱子小游戲源碼解析:地圖建模、移動判定與避坑指南

C#推箱子小游戲源碼解析:地圖建模、移動判定與避坑指南 簡介C#推箱子小游戲完整源代碼面向C#入門與游戲編程愛好者演示了Windows窗體應(yīng)用從界面搭建、鍵盤事件到游戲邏輯的完整寫法適合作為課程設(shè)計或練習項目參考。程序支持推箱子、撤銷CtrlZ、重復CtrlY、選關(guān)等核心操作通關(guān)后可將最佳步數(shù)保存為.way文件用于回放演示或分享通關(guān)過程同時支持自行設(shè)計關(guān)卡、當前狀態(tài)存盤與讀盤方便反復挑戰(zhàn)和擴展玩法。資源包共76個文件以10個.cs源碼為中心配以11張.bmp地圖與角色素材、15個.way路徑記錄、13個.dat數(shù)據(jù)存檔以及項目工程和可運行exe整體僅135KB結(jié)構(gòu)緊湊、層次分明便于對照源碼逐模塊理解。目前已有960人學習下載適合想通過小游戲?qū)崙?zhàn)熟悉C#文件I/O、窗口控件與邏輯控制的讀者源碼中還預(yù)留了自動尋路深度優(yōu)先搜索與棧實現(xiàn)、鼠標拖拽操作、通關(guān)光榮榜等未完成功能能引導進階者進一步練習算法和交互設(shè)計。1. C# 推箱子小游戲源代碼練手就該從這種能跑完的項目開始不少 C# 初學者手頭不缺語法書缺的是一個「能跑起來、讀得懂、改得動」的完整小游戲源碼。掃雷涉及遞歸展開貪吃蛇要處理隊列和定時刷新對剛摸到面向?qū)ο箝T檻的人都有點勸退推箱子剛好卡在那個舒服的位置上——二維數(shù)組管地圖、方向鍵管輸入、幾個 if 管碰撞判定整個游戲邏輯一晚上能讀完。C# 推箱子小游戲源代碼這個標題背后你要找的其實就是一套地圖建模、角色移動、箱子推進、勝負判定的完整實現(xiàn)外加一個能交互的界面。這套源碼解決的不只是「交作業(yè)」這一件事。對想轉(zhuǎn)上位機或 Unity 的開發(fā)者來說推箱子是把「狀態(tài)機 坐標運算 UI 刷新」串起來的最小可運行樣本對老師或培訓講師來說它是一個能讓學生照著改出幾十個變體的課程設(shè)計載體。本文按一條主線走先把地圖和移動邏輯講透再給出控制臺與 WinForms 兩種可運行版本最后拆類、講坑、加悔棋。跟著走完你手上會有一套自己能二次開發(fā)的推箱子源碼而不是一個「跑完就刪」的黑匣子。2. 推箱子的核心邏輯地圖建模與移動判定先寫對這 3 個函數(shù)2.1 地圖建模用字符數(shù)組把關(guān)卡變成一張可以計算的網(wǎng)格所有推箱子源碼的第一步都是把「一張畫著墻、箱子、人的圖」變成程序能讀的數(shù)據(jù)。常見做法是用一個二維字符數(shù)組char[rows, cols]來存地圖每個格子是一個單字符字符的約定在推箱子圈子里基本是通用的# 表示墻$ 表示箱子. 表示目標點 表示玩家。下面的解析函數(shù)把一組字符串數(shù)組轉(zhuǎn)換成一個二維數(shù)組同時記住玩家初始坐標。public class GameMap { public char[,] Grid; public int Rows { get; private set; } public int Cols { get; private set; } public int PlayerX { get; private set; } public int PlayerY { get; private set; } public static GameMap Parse(string[] lines) { int rows lines.Length; int cols 0; foreach (var line in lines) cols Math.Max(cols, line.Length); var map new GameMap { Rows rows, Cols cols, Grid new char[rows, cols] }; for (int y 0; y rows; y) { for (int x 0; x cols; x) { char c x lines[y].Length ? lines[y][x] : ; if (c ) { map.PlayerX x; map.PlayerY y; } map.Grid[y, x] c; } } return map; } }邏輯說明GameMap把地圖數(shù)據(jù)和玩家位置打包在一起Parse先把所有行的最大長度取出來作為列數(shù)避免某個短行導致數(shù)組變成參差不齊的形狀。代碼里的x lines[y].Length是為了防止某一行比其他行短缺失的部分統(tǒng)一補成空格。這個健壯性處理很關(guān)鍵——你從文本文件讀關(guān)卡時最后一行很可能因為換行符問題少一個字符。參數(shù)說明Rows 和 Cols 是地圖邊界TryMove里所有坐標判斷都要先拿它們做越界檢查否則數(shù)組越界異常會在你按下方向鍵的瞬間噴出來。玩家坐標的初始化放在解析階段是因為后面每一步移動都要知道「人現(xiàn)在在哪」。2.2 移動邏輯與碰撞檢測角色能不能走、箱子能不能推全在這一個函數(shù)里有了地圖數(shù)組接下來的問題是按下方向鍵后會發(fā)生什么。這里有個新手容易寫亂的判定順序——必須先把「人和箱子能不能動」全部探明再一次性更新坐標先動人再判斷箱子就會出現(xiàn)主角瞬移穿墻的靈異事件。四個方向的移動本質(zhì)上是給坐標加一組偏移量上(0, -1)、下(0, 1)、左(-1, 0)、右(1, 0)判斷邏輯對四個方向完全對稱。private static readonly (int dx, int dy)[] Dirs { (0, -1), // 上 (0, 1), // 下 (-1, 0), // 左 (1, 0) // 右 }; public bool TryMove(int dirIndex) { var (dx, dy) Dirs[dirIndex]; int nx PlayerX dx; int ny PlayerY dy; // 第一步目標格越界或撞墻直接返回 if (nx 0 || nx Cols || ny 0 || ny Rows) return false; if (Grid[ny, nx] #) return false; // 第二步目標格是箱子檢查箱子能不能再往前一步 if (Grid[ny, nx] $ || Grid[ny, nx] *) { int bx nx dx; int by ny dy; if (bx 0 || bx Cols || by 0 || by Rows) return false; if (Grid[by, bx] # || Grid[by, bx] $ || Grid[by, bx] *) return false; // 箱子移動目標格若是 . 則變成 *,否則是 $ Grid[by, bx] Grid[by, bx] . ? * : $; Grid[ny, nx] (Grid[ny, nx] *) ? . : ; } // 第三步角色移動原位置恢復成 . 或空格 Grid[PlayerY, PlayerX] Grid[PlayerY, PlayerX] ? . : ; PlayerX nx; PlayerY ny; Grid[ny, nx] (Grid[ny, nx] . || Grid[ny, nx] *) ? : ; return true; }邏輯說明Dirs數(shù)組把四個方向映射為坐標偏移避免在函數(shù)里寫四段幾乎相同的 if 分支。判斷的先后順序是重點——先檢查角色目標格(nx, ny)能不能站如果站的是箱子再檢查箱子前方(bx, by)能不能落。兩步檢查全部通過之后才去改地圖數(shù)組這就是「先探測后更新」的防穿墻關(guān)鍵。參數(shù)說明這里用到了*和兩個特殊狀態(tài)*表示箱子站在目標點上表示玩家站在目標點上。很多人第一次寫字面量判斷漏掉這兩個狀態(tài)導致箱子推到目標點上后地圖顯示變成空格勝利條件永遠判不中。把這個狀態(tài)在注釋里寫清楚后面所有關(guān)卡顯示和勝負判定都會輕松很多。2.3 勝負判定箱子到?jīng)]到齊兩種計數(shù)方案任選推箱子的勝負條件很直白所有目標點都被箱子占住。實現(xiàn)上有兩種思路。第一種是每次移動后遍歷整個地圖數(shù)一下*的數(shù)量是否等于目標點總數(shù)第二種是提前記錄目標點的坐標集合每步移動后逐個檢查。小地圖上兩者性能差別可以忽略但我建議用第二種原因是它還能順帶告訴你「還差哪個點沒歸位」做關(guān)卡提示時不用再掃一遍地圖。public class GameMap { private readonly List(int x, int y) _targets new(); public int TargetCount _targets.Count; public bool IsWin() { foreach (var (x, y) in _targets) { if (Grid[y, x] ! * Grid[y, x] ! ) return false; } return true; } }邏輯說明_targets在Parse階段收集凡遇到.或都記錄坐標。IsWin遍歷目標點只要有一個點上不是*就說明箱子沒壓上去。判定時把也算通過是因為玩家可能恰好站在某個目標點上如果玩家的位置和目標點重疊了那個格子仍然算目標已占用。參數(shù)說明這個實現(xiàn)不去數(shù)「箱子總數(shù)」因為可能存在箱子不在任何目標點上的死局狀態(tài)數(shù)箱子會誤判。實際調(diào)用IsWin的時機放在每次TryMove成功返回true之后移動失敗不用判。死局檢測箱子全卡墻角屬于求解算法范疇這個最小源碼里不做后面做關(guān)卡編輯器時可以通過「可解性」過濾關(guān)卡。3. 把源碼跑起來從控制臺最小版本到 WinForms 界面3.1 控制臺最小版本不碰 UI 線程先把游戲循環(huán)跑通邏輯寫完后第一步永遠先做控制臺版本。它沒有窗體焦點的干擾沒有跨線程訪問控件的異常能讓你把注意力全放在游戲循環(huán)上讀按鍵、調(diào)TryMove、判斷勝負、重繪地圖。static void Main() { string[] lines { ##### , # # , # $ # , ### . ###, # $ #, # . #, ### . ###, # # , ##### }; var map GameMap.Parse(lines); while (true) { Console.Clear(); Render(map); if (map.IsWin()) { Console.WriteLine(你贏了); break; } var key Console.ReadKey(true).Key; int dir key switch { ConsoleKey.UpArrow 0, ConsoleKey.DownArrow 1, ConsoleKey.LeftArrow 2, ConsoleKey.RightArrow 3, ConsoleKey.Escape -1, _ -2 }; if (dir -1) break; if (dir 0) map.TryMove(dir); } } static void Render(GameMap map) { for (int y 0; y map.Rows; y) { for (int x 0; x map.Cols; x) Console.Write(map.Grid[y, x]); Console.WriteLine(); } }邏輯說明Console.ReadKey(true)的參數(shù)true表示按鍵不回顯否則你每按一次方向鍵控制臺窗口里會多出一個箭頭字符干擾地圖顯示。switch表達式把ConsoleKey枚舉映射成 0 到 3 的方向索引正好對上前一節(jié)Dirs數(shù)組的順序這是一處極容易踩的對不齊問題——方向枚舉寫錯了不會報錯只會表現(xiàn)為「按上鍵人往左跑」。參數(shù)說明Escape鍵單獨映射成-1退出循環(huán)其他無關(guān)按鍵映射成-2忽略掉避免按了個字母鍵導致程序直接把一個未知索引傳給TryMove??刂婆_版不用加延遲推箱子是回合制游戲天然等人輸入加Thread.Sleep只會讓按鍵體驗變黏。3.2 WinForms 最小版本用 Label 數(shù)組當瓦片邏輯與 UI 分離控制臺版能跑通后往 WinForms 遷移時最省事的方式是用Label[,]數(shù)組做地圖瓦片。每個Label顯示一個字符背景色區(qū)分墻和空地窗體的KeyDown事件接方向鍵。這樣地圖邏輯完全復用上一章的GameMapUI 層只做「把數(shù)組渲染成控件」這件事。public partial class MainForm : Form { private GameMap _map; private Label[,] _cells; private const int CellSize 24; public MainForm() { InitializeComponent(); KeyPreview true; DoubleBuffered true; FormBorderStyle FormBorderStyle.FixedSingle; MaximizeBox false; string[] lines { /* 與 Console 版相同的關(guān)卡字符串 */ }; _map GameMap.Parse(lines); BuildGrid(); Redraw(); } private void BuildGrid() { _cells new Label[_map.Rows, _map.Cols]; for (int y 0; y _map.Rows; y) { for (int x 0; x _map.Cols; x) { var cell new Label { Left x * CellSize, Top y * CellSize, Width CellSize, Height CellSize, TextAlign ContentAlignment.MiddleCenter, Font new Font(Consolas, 12F) }; _cells[y, x] cell; Controls.Add(cell); } } ClientSize new Size(_map.Cols * CellSize, _map.Rows * CellSize); } private void Redraw() { for (int y 0; y _map.Rows; y) { for (int x 0; x _map.Cols; x) { char c _map.Grid[y, x]; _cells[y, x].Text c.ToString(); _cells[y, x].BackColor c switch { # Color.Gray, $ or * Color.SandyBrown, . or Color.LightGreen, _ Color.White }; } } } }邏輯說明KeyPreview true讓窗體先于子控件收到鍵盤事件否則焦點落在某個 Label 上時方向鍵根本不會傳到窗體。BuildGrid按CellSize逐個擺控件ClientSize根據(jù)行列數(shù)算這樣窗口大小能嚴格罩住地圖不會出現(xiàn)地圖畫了一半被窗體邊緣切掉的局面。參數(shù)說明字體用Consolas是等寬字體否則每個字符寬度不一致貼了磚塊的墻畫出來會歪歪扭扭。Redraw用 switch 表達式做字符到背景色的映射后續(xù)想換皮膚比如把墻改成深灰色、箱子改成木紋色只改這一處不需要碰邏輯層。這就是邏輯與 UI 分離的第一個好處調(diào)樣式不碰判斷代碼。3.3 鍵盤輸入與刷新參數(shù)KeyDown 別寫成長按連發(fā)重繪用 InvalidateWinForms 里的方向鍵處理常見的翻車點是把邏輯寫在KeyPress事件里——方向鍵根本不是字符鍵KeyPress不會觸發(fā)還有人用Timer每秒輪詢鍵盤狀態(tài)產(chǎn)生連發(fā)和輸入黏滯。正確做法是重寫OnKeyDown或在KeyDown事件里處理。protected override void OnKeyDown(KeyEventArgs e) { int dir e.KeyCode switch { Keys.Up 0, Keys.Down 1, Keys.Left 2, Keys.Right 3, _ -1 }; if (dir 0 _map.TryMove(dir)) { Redraw(); if (_map.IsWin()) MessageBox.Show(過關(guān)); } base.OnKeyDown(e); }邏輯說明OnKeyDown是窗體的虛方法重寫它比掛事件委托更直觀也避免在InitializeComponent里額外登記一遍 handler。TryMove的返回值在這里還有一個額外價值只有這一步確實發(fā)生了移動時才重繪和判勝負按了方向鍵但撞墻時界面紋絲不動玩家從視覺上就知道「這條路走不通」。參數(shù)說明WinForms 的KeyDown在按鍵按住時會自動重復觸發(fā)這是系統(tǒng)行為回合制游戲不需要屏蔽它但如果要做「按住方向鍵連續(xù)移動」就得在Shift狀態(tài)的配合下自己加節(jié)流。Redraw內(nèi)部用的是 Label 控件的屬性修改本身會觸發(fā)重繪不需要手動調(diào)用Invalidate只有改成自定義Paint繪制時才需要Invalidate()通知窗體刷新。3.4 三種界面方案怎么選控制臺、WinForms 與 Unity 的取舍方案上手難度卡點適合場景控制臺最低字符渲染丑中文輸入法可能截獲方向鍵驗證游戲邏輯、教學演示W(wǎng)inForms中等控件數(shù)量多大數(shù)據(jù)量地圖會卡課程設(shè)計、小型桌面游戲Unity較高引入了 Sprite、Input System 等新概念想繼續(xù)做游戲方向的人參數(shù)說明如果你只是要「C# 推箱子小游戲源代碼」?jié)M足課程要求WinForms 是性價比最高的終點如果目標是學 Unity 開發(fā)建議把這里的GameMap直接搬過去渲染層替換成 Sprite 渲染器邏輯層完全不用動。這也印證了拆類的價值——換界面不換腦子。4. 源碼怎么組織拆類、關(guān)卡文件與擴展點決定這套代碼能走多遠4.1 類怎么拆地圖數(shù)據(jù)、游戲引擎、UI 渲染三者各管一段很多初學者拿到別人的源碼第一反應(yīng)是把所有代碼塞進Form1.cs結(jié)果一個窗體文件寫到六百行最后連自己都找不到箱子判定在哪。拆類的原則是地圖數(shù)據(jù)歸地圖、游戲規(guī)則歸規(guī)則、界面歸界面。下面是一個從實戰(zhàn)里沉淀出來的三分結(jié)構(gòu)按這個結(jié)構(gòu)組織源碼后面加悔棋、換皮膚都只需要動一個文件。類 / 文件職責關(guān)鍵成員GameMap地圖數(shù)據(jù)、解析、坐標查詢Grid、PlayerX/Y、IsWin()GameEngine移動規(guī)則、步數(shù)統(tǒng)計、操作歷史TryMove()、StepCountMainForm渲染與輸入Redraw()、OnKeyDown()GameEngine可以看作GameMap的上層封裝GameMap知道地圖長什么樣但不知道「人能不能推箱子」GameEngine只調(diào)用GameMap暴露的Grid和玩家坐標決定是否修改數(shù)據(jù)。這樣GameMap可以單獨做單元測試比如直接構(gòu)造一張地圖斷言TryMove的返回值。4.2 關(guān)卡文件格式把地圖存成文本換關(guān)不用改代碼地圖硬編碼在源碼里的缺點是換個關(guān)卡就要改代碼重新編譯。常見做法是把關(guān)卡放進外部文本文件用純 ASCII 字符保存每行代表地圖的一行。標準格式約定#墻$箱子.目標點玩家空格是空地其他字符一律視為非法。public static GameMap LoadFromFile(string path) { string[] lines File.ReadAllLines(path, Encoding.UTF8); if (lines.Length 0) throw new InvalidDataException(關(guān)卡文件為空); var map GameMap.Parse(lines); if (map.TargetCount 0) throw new InvalidDataException(關(guān)卡中沒有目標點); if (map.PlayerX 0 map.PlayerY 0) throw new InvalidDataException(關(guān)卡中沒有玩家); return map; }邏輯說明File.ReadAllLines會自動按平臺換行符拆分行省去手工處理\r\n的麻煩但如果你在 Linux 上寫好關(guān)卡、拿到 Windows 上用要確認文件沒有混入異常換行。校驗放在Parse之后是因為Parse只負責構(gòu)造數(shù)組不負責業(yè)務(wù)合法性目標點為零或者玩家缺失的關(guān)卡運行后會變成死圖提前拋異常比運行到一半出錯直觀得多。參數(shù)說明編碼用Encoding.UTF8是防止文件里有 BOM 或中文注釋導致首字符解析異常。關(guān)卡文件的列數(shù)不必每行相等Parse里已經(jīng)做了補齊處理但建議還是保持矩形因為很多關(guān)卡編輯器生成的文本都是嚴格矩形的非矩形文件在別人復用時容易閱讀錯位。4.3 擴展點步數(shù)統(tǒng)計、關(guān)卡切換、操作歷史留好接口一個能交差的推箱子源碼通常還要有兩個數(shù)字步數(shù)和關(guān)卡號。步數(shù)統(tǒng)計最容易犯的錯是「移動失敗也算一步」。正確做法是在GameEngine里做增量計數(shù)只有TryMove返回true時才StepCount。這個細節(jié)直接決定成績統(tǒng)計準不準。關(guān)卡切換有兩種做法把所有關(guān)卡寫進一個文本文件用空行分隔或者放在Levels目錄下按Level01.txt、Level02.txt命名。我一般推薦后者因為單個游戲文件不會膨脹到幾百行而且可以單獨替換某一關(guān)而不影響其他關(guān)卡。切換時至少要做一次越界保護——當前關(guān)卡號超過文件數(shù)量時提示「沒有更多關(guān)卡了」。至于悔棋第六章詳細講這里只需要知道GameEngine里留一個StackSnapshot類型的字段未來的操作歷史全掛在GameEngineMainForm只負責把撤銷按鈕接到這個堆棧上。5. C# 推箱子小游戲開發(fā)避坑指南5 個最容易翻車的點與排查方法5.1 方向鍵按了沒反應(yīng)窗體焦點被控件搶走事件根本沒到你手里現(xiàn)象程序跑起來用鼠標點了地圖上的某個格子或空白區(qū)域后再按方向鍵角色紋絲不動。原因是窗體上添加了大量Label控件其中某些.TabStop屬性默認為true的控件會搶占焦點KeyDown事件被派發(fā)到那個控件而不是窗體。解決方法是兩行設(shè)置KeyPreview true讓窗體優(yōu)先于子控件處理鍵盤事件同時把地圖瓦片的TabStop全部設(shè)為false讓 Label 不參與 Tab 循環(huán)。如果問題依舊在OnKeyDown開頭加一個Console.WriteLine(e.KeyCode)先確認事件到底有沒有進來再往下排查。5.2 窗口瘋狂閃爍重繪整個 ClientArea但沒有開啟雙緩沖現(xiàn)象每次按鍵后整個窗體像在放幻燈片尤其地圖超過 10×10 后閃爍肉眼可見。原因是刷新地圖時把所有 Label 的Text和BackColor都改了一遍每個控件分別觸發(fā)布局和重繪高頻觸發(fā)時 GDI 忙不過來。解決方法是給窗體開雙緩沖DoubleBuffered true把繪制先寫進內(nèi)存位圖再一次刷到屏幕如果用了自定義控件自繪地圖同樣在自定義控件的構(gòu)造函數(shù)里設(shè)DoubleBuffered true。這是 WinForms 圖形開發(fā)里最無腦也最有效的性能開關(guān)新手經(jīng)常把它當成玄學忽略掉實際上它是微軟文檔明寫的原生屬性。5.3 跨線程訪問控件報錯別用 Timer 輪詢鍵盤狀態(tài)現(xiàn)象用Timer每隔 100ms 讀一次按鍵狀態(tài)來驅(qū)動移動運行幾分鐘后彈出InvalidOperationException說某控件只能從創(chuàng)建它的線程訪問。原因是Timer事件的回調(diào)跑在 UI 線程之外直接修改 Label 屬性觸發(fā)了線程安全檢查。推箱子是回合制游戲根本不需要定時器——按鍵本身就是事件KeyDown天然在 UI 線程上執(zhí)行。如果你的確需要在特定時間點自動執(zhí)行動作比如做步數(shù)超時懲罰就該用Control.BeginInvoke把 UI 更新封送回主線線程private void TimerTick(object sender, EventArgs e) { BeginInvoke(new Action(() { // 在這里更新 UI 控件 })); }5.4 地圖數(shù)組越界換行符、全角空格、矩形不齊三個隱形兇手現(xiàn)象直接復制網(wǎng)上關(guān)卡文本貼到代碼里運行時一進入某一行就拋IndexOutOfRangeException。原因有三個復制文本時每行末尾帶了 Windows 的\rParse按字符處理時多出一個不可見字符字符串里混入了全角空格或制表符\t導致邊長計算錯誤行長短不一程序取了最長行的長度作為列數(shù)但短行訪問時越界。解決方法是統(tǒng)一讓關(guān)卡文件走LoadFromFile再在Parse里做一次防御char c x lines[y].Length ? lines[y][x] : ;。這樣即使某行短了一截也只會在視覺上多出一個空格不會產(chǎn)生異常。組裝關(guān)卡時可以用Debug.Assert(map.Cols expectedCols)把邊界約束寫死在代碼里。5.5 箱子穿墻瞬移狀態(tài)更新順序?qū)懛聪葎恿巳嗽賱拥南渥蝇F(xiàn)象面對墻角的箱子按下朝向墻角的方向鍵箱子直接穿透墻跑出去了。原因是移動邏輯里先把玩家坐標更新了再判斷箱子能不能推結(jié)果TryMove用的是「新玩家位置」去取箱子坐標全部偏移一格判定自然錯位。解決方法是嚴格按上一章的順序先取目標格再判斷目標格是箱子時取箱子前方所有越界和撞墻檢查通過后才統(tǒng)一改寫玩家和箱子的位置。這里有個把每個地圖存成char[,]快照放進棧里的前提——你的GameMap必須支持深拷貝否則棧里存的是引用所有快照會在下一次移動時一起改變。6. 更進一步給源碼加上悔棋和關(guān)卡校驗增量改造不超過 20 行6.1 悔棋三步走快照、入棧、回退推箱子最常見的剛需是悔棋。地圖不大完整復制整個char[,]的開銷可以忽略所以最可靠的做法是「整圖快照」而不是記錄單步操作再反向推演。每一次移動前把當前Grid、玩家坐標、步數(shù)壓進棧撤銷時彈出快照恢復原狀public class GameEngine { private readonly Stack(char[,] grid, int px, int py, int steps) _history new(); public bool TryMoveWithUndo(int dir) { _history.Push((CloneGrid(), PlayerX, PlayerY, StepCount)); return TryMove(dir); } public void Undo() { if (_history.Count 0) return; var (grid, px, py, steps) _history.Pop(); Grid grid; PlayerX px; PlayerY py; StepCount steps; } private char[,] CloneGrid() (char[,])Grid.Clone(); }參數(shù)說明棧里同時存了步數(shù)撤銷后步數(shù)回退統(tǒng)計數(shù)字不會虛高。Clone()對二維數(shù)組做的是淺拷貝但這里Grid的元素是char值類型淺拷貝恰好等效于深拷貝。這個方案的一個隱藏收益是撤銷不受「箱子經(jīng)過哪些路徑」影響哪怕關(guān)卡狀態(tài)再亂都能完整回退到上一步。6.2 關(guān)卡編輯器寫一個校驗函數(shù)手工編關(guān)也能跑拿到源碼后想自己加關(guān)卡最省事的就是做文本編輯器。在Notepad或 VS Code 里按 ASCII 畫地圖保存成 txt再用LoadFromFile加載。校驗函數(shù)至少查三件事玩家有且只有一個、至少存在一個目標點、地圖四周閉合。四周閉合可以遍歷第一行、最后一行、第一列、最后一列確認全是#public static void Validate(GameMap map) { int pCount 0, targetCount 0; for (int y 0; y map.Rows; y) for (int x 0; x map.Cols; x) { if (map.Grid[y, x] ) pCount; if (map.Grid[y, x] . || map.Grid[y, x] *) targetCount; if (y 0 || y map.Rows - 1 || x 0 || x map.Cols - 1) if (map.Grid[y, x] ! #) throw new InvalidDataException(地圖邊界未閉合); } if (pCount ! 1) throw new InvalidDataException(玩家數(shù)量必須為1); if (targetCount 0) throw new InvalidDataException(至少需要一個目標點); }我第一次寫推箱子源碼時把地圖硬編碼在Form1.cs里加了三個關(guān)卡后代碼就亂成一團。后來把地圖挪到外部文件、把邏輯拆成GameMap和GameEngine再回頭看真正難的部分根本不是界面而是移動判定里的狀態(tài)枚舉——*和這倆狀態(tài)一漏地圖顯示和勝負判定同時出錯。這也是我給所有拿這份源碼做二次開發(fā)的人唯一的建議遇到詭異 bug 先打印當前地圖到控制臺把數(shù)組真實值看清楚再改代碼。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
精品人妻1237| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | AV色五月| 国产不卡精品91| 亚洲一区二区精品福利| 91久久久亚洲| 欧日韩一二三f区| 国产乱弄免费在线视频。 | 国产超碰在线一区| 熟妇精品juliaannAV| 日韩av乱伦| 国产在线视频二区| 免费精品国偷自产在线在线 | 人妻 丝袜美腿 中文字幕| 久久久久99999| 亚洲综合九| 日韩国语字幕| 亚 欧 美 综合| 国产精品激情久久久久久久| 国产精品呦一区二区三区| 亚洲综合首页| 国产精品九九九| 天天综合网~91| 97伦乱| 91黑丝少妇| 天天操天天插| 99热综合| 九月丁香婷婷| 江都AV在线| 亚洲麻豆精品二区三区| 婷婷五月天影院| 五月天玖玖资源站| 国产欧美日韩在线不卡第一页| 国产精品一区二区久久精品| 精品亚洲一区在线观看| yw尤物av无码点击进入麻豆| 91人妻在线视频| 久久在肏| 婷婷超| 中文字幕蜜乳av| 97视频在线播放| 中文字幕丰满子伦无码专区在线视频最新 | 啊啊啊啊在线播放| 久久精品91| 性爱AV天堂| 91激情网| 极品色综合| 日韩欧美加勒比| 亚洲人成在线放东京热| AV一起草在线| 久久午夜伦| 欧美性爱97超碰| 丝袜内射| 一二三四视频在线社区中文字幕| 欧美综合777| 久久久久久无码人妻中文字幕| 欧美天天综合站| 好色美女九七第一页| 久久这里只精品| 青青草大香蕉视频| 无码 有码 国产18p| 极品色www影院| 国产福利第一视频| 操学生天天| 道久久五香丁月婷婷激情综合| 韩国毛片一区二区三区| 亚洲少妇在线观看| 欧美成人四级在线播放| 亚洲九区| 日韩电影天堂视频一区二区| 91狠狠综合久久| 久操精品| 亚洲中文一区二区三区视频| 久久久久久性爱视频| 亚洲系列欧美| 无码精品久久久久久亚洲| 日本欧美一区二区三区免费| 91丨九色丨国产打屁股| 欧美亚洲涩涩| 99久久无码| 国产亲戚伦亲在线| 综合网欧| 人人操人人93| 99热思思| 午夜在线播放| 色综91| 丁香五月av| 高凊专区人人操| 麻豆区久久久久亚| 久久久精品电影| 日本亚洲熟女视频| 91日产欧美| 一二三区精品视频| 久久欧美性爱视频| 久久久一区二区| 国产强奸乱伦无码视频| 99热最新网址| 51一区二区三区| 人妻啪| 偷拍欧美综合| 久久精品国产亚洲AV先锋| 操逼操逼逼操操逼91 | 伊人97色天使| 97天天| 久久一区二区三区入口| 99re在线视频国产| 91成人久久| 97网址97| 逼逼逼逼操操操操操操操操操午夜剧场 | 欧美性暴力猛交XXXX| 91精品操美女| 精品超碰国产| 色淫网站优优视频| yiren97| 欧美亚洲中文| 狼人综合婷婷激情四射 | 99re在线视频| www.狠狠| 青草成人免费视频一com| 留下AⅤ黄色片| 欧美视频一区二区三区| 亚洲成?V人片在线观看福利| 蜜臀在线网站| 开心五月天激情网| 69XX一中文字幕人妻91| 欧美高清性猛交| 精品人妻中文字幕高清| 男人天堂站| 韩国三级一线观看久| 国内精品不卡无毒99999| 精品九九九九| 久久久久久波多野吉衣高潮| www.av在线视频| 欧美人妻中出| 福利在线黄片| 99999国产| 激情综合97| 96精品久久久久久久久| 亚熟在线| 亚洲欧美日韩精品久久久一区二区| 亚洲综合贴图91 | 亚州色交| 人人操,操人人| 男人的天堂久久狠| 屌逼麻豆| 日韩欧美aⅴ综合网站发布| 日韩精品人妻中文字有码在线| 人妻一区视频| 日韩欧视频| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 加勒比伊人综合| 天天精品| av网站在线看| 青青草大香蕉视频| 99国内熟女露脸视频| 五月色网| 黄片www.| 草草草视频在线免费看| 强奸熟女一区二区三区 | 91天天综合日韩欧美| 蜜桃精品一区二区三区ww| 91久久九九精品国产综合| 久久综合久色欧美综合狠狠 | 91久久精品国产| A级国产欧美激情在线| 久久婷婷亚洲欧| 亚洲精品aa久久伊人| 精品人妻一区二区三区鲁大师| 成人日韩中文字幕| 九九久久一区二区三区| 韩国三级理论在线| www.久久制服糖| 一本大道青青| 亚洲精品九九九九九九| 久草热制服丝袜在线观看| 欧美一级A片在线看视频性色| 免费观看一区| 欧美亚洲韩国视频十五区| 伊人久久青青草| 男男H黄动漫啪啪无遮挡网站| 日韩人妻丝袜中文字幕| 日本不卡中文| 伊人在线大香蕉视频久久| 久久久久国产亚洲一区欧美色图日韩 | 国产高清免费不卡av| 综合网91| 亚洲天堂2020| 97久久久久| 亚洲日韩欧美一区二区| 好看的久久不射无码影视影院| 一本一道人妻久久一区二区三区 | 久操不卡视频| 亚洲日韩成人性爱视频| 男女激情黄色网址| 国产精品久久久久久照片| 激情色图| 岛国片在线视频网站| 91综合在线| 97资源站日韩| 香港久久久| 久久蜜桃一区二区| 97Ai亚洲| 九九久久玖玖| 婷婷伊人五月| 日韩人妻有码免费视频| 天天插夜夜操| 天天摸夜夜添无码小视频| 成人精品久久久午夜福利| aa片毛片| 天天爽夜夜爽夜夜爽精| 夜夜操美女| 欧美日韩午夜精品一区二区三区| 成 人 A V免费视频在线观看| 亚洲精品人体| 国产无吗在线播放| 岛国黄| 久久国产热视频97电影| 草草网站影院白丝内射| 国产美女mm131爽爽爽爽| 久久久久免费看少妇A片特黄| 眼镜人妻101.com| 伊人久久综合影院精品久久久| 在线看的av| 久久综合亚洲色1080p| 欧美,日韩综合久久| 日韩色欲久久一二三四区| 国产小视频91| 亚洲人在线| 亚洲 另类 丝袜 自拍 动漫| 精品少妇一区二区| 亚洲毛片基地专区| 日本欧美一区二区三区视频麻豆| 欧美精品1区2区3区| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 我想要啊 啊 啊| 国产999精品久久久| 日韩亚洲欧美中文字幕| 久久夜黄色无码A级大片| 日本人人操人人操| 91欧美偷拍| 99色日| 久久久久久人体| 欧美人黑A片无码免视费| 亚洲成人日韩小说| 台湾佬激情综合| 一本久久精品中文字| 婷婷激情丁香| 一个国产在线综合网站| 99视频只有精品| 麻豆激情综合| 91久久久久久久久18| 密乳无码| 亚洲欧美激情另类色图| 亚洲性综合| 久久久新亚洲AV| 婷婷五月天激情网| 好爽,再快点啊哈嗯嗯嗯嗯| 欧美日韩国产人人| 国产亚洲深夜激情| 狠狠中文字幕| 久久久久久999| 强奸乱伦Av网| 第四色亚洲色图| 91M一社| 成年女人黄网站| 99.色网| 精品免费囯产一区二区三区| 永久免费发布性爱网| 成人AV素股で擦久久| 96精品久久久| 秋霞影音一区二区三区| 亚洲色香| 九九视频黄色片| 日本三级黄页| 色五月av| 五月婷丁香| 久久久久久久六六 | 天综合网| 韩日欧亚a级| 中文字幕日本久久| 超碰偷拍| 色999;丁香五月| 999熟女精品| av天堂精品久久| 九九久久久九九| 97免费视频在线| 日本 欧美 亚中文字幕| 伊人九九| av大香蕉| 中文字幕一区二区无码成人| 丁香五月天堂网| 疯操AV| 黑人精品成人一区二区三区 | 久久久久国产精品片区无码直播| 成人一级二级| www.av在线观看| 青青操在线视频| 久久98| 国产白丝网站| 日本高清电影欧美色图| 女人精品内射国产99| 一区二区三区 丝袜 高跟 美腿| 老熟女网站| 91色鬼| 久久久国产av美女私房| 中文字幕久久精品一区| 不卡啪啪视频| 97久久久久| 欧美激情综合| 国产真实子伦对白| 日韩钢筋无码高清啾啾啾| 国内偷自视频区视频综合| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 区一二区日韩亚洲乱码av电影| 91久久久亚洲| 好屌色综合| av天堂手机版追回| 亚洲女人91| 国产欧美一区二区| 无码精品久久久天天影视| 91处女视频在线观看| 国产无马视频| 国产精品不卡av免费在线观看| 艾草av| 看一级特黄a大一片| 日比av无码| 极品粉嫩一区二区| 巨爆乳一区二区爆乳区| 老鸭窝在线视频播放| 少妇99成人麻豆| 在线有码中文字幕| 久草综合网| 黄色大片一区二区密桃丝袜| 探花一区二区三| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 久草精品一区| 欧美中文字幕男人天堂久久精品 | 人妻在线臀日韩| av无码av无码专区| 中文字幕后石码三区四区| 99热这里只有是精品10| 欧美日日夜夜| 久久综合五月天| 宅男影院久久久,99| 久久精品女同亚洲女同13| 夜夜高潮夜夜爽高清视频一 | 亚洲综合99999| 性色av婷婷久久一区二区点复制| 麻豆国产视频精品观看| 亚洲高清综合网| 亚洲黄色网址| 蜜桃视频一区二区三区在线观看| 五月丁香网站| 日韩性爱高清免费视频| 亚洲三区视频| 日韩电影在线观看网址| 国产精品ww久久| 日日躁天天躁狠狠躁| 青青草成人视频在线观看二区 | 97视频免费在线观看| 国产精品第一页国产大屁股视频免费区i | 熟女人妻精品一区二区视频 | 爱av免费| 2018天天干在线视频| 国产真实子伦对白| 97资源久久| 91天堂丝袜美腿| 91亚洲丝袜| 婷婷情色五月天| 人人喜人人妻| 亚码激情| 97久久资源| 国产九月婷婷| 色婷婷五月天| 亚州精人品大香蕉| 五月天伊人| 91精品久久久久久综合五月天| 污污汅18禁网站在线永久免费观看| 日本一区二区中文字幕久久| av网站在线看| 波多野结衣被操50分钟免费视频 | 九九热免费国产视频婷婷伊人| 婷婷久久久| www.狠狠| 蜜臀少妇一区二区| 欧美日日夜夜| 青青青青草av在线观看| 国产成人主播| 五月天人妻综合| 99这里只有精品| 欧美色老汉| 久操国产在线| 久久久精品网站| 欧美亚洲天堂| 国产精品久久久无码AV网站| 成人性爱全视频观看| 午夜精品探花| 嗯啊不要在线| 97色色色综合网站| 欧美中字不卡| 东北熟女91| 丁香婷婷五月| 人人射人人操人人摸| 日本午夜福利影院| 精品国产污一区二区三区| 91夜夜蜜桃臀1区2区3区| 综合97亚洲| 久久华人网| 欧美色图91| 91视频伊人| 天堂中文资源在线bt| 99热18| 九九九久千久久激情蜜桃在线看 | 综合亚州欧美| 欧美成年人性爱视频免费观看| 天天做日日做| 亚洲男人天堂2019| 亚洲色图综合网| 美女91AV| 精品人人插人人操| 一区二区三区四区五区高清无码永久视频 | 婷婷五月天小说| 少妇69中文| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 飘花国产午夜精品不卡| 97色碰| 久久99手机免费视频| 日夜尻逼网| 99久久久无码国产精品性啊聊| 伊人久久综合精品欧美| 亚洲丝袜天堂| 久操频道免费在线呗看| 国产亚洲精品无码三区| 91爽啪| 伦理日韩国产久久| 亚洲欧美一区二区网址| 色妺妺在线视频| 国产免费一区| 91精品女厕偷拍视频| 五月丁香影视| 亚洲欧美综合网站| 欧美一区二区三区互相| 淫妻综合网| 亚洲高清男人天堂| 超碰色男人操熟女| 91制服丝袜中文字幕| 丁香婷婷九月| 九月丁香综合网| 色91综合网| 亚洲情色 欧美| 日美免费黄片| 欧美性综合| 婷婷色色五月天福利| 91狠狠色丁香婷婷综合久久精品| 亚洲日韩东京热一区| 思思热国产高清| 超碰99在线| 国产精品夜夜夜| 视频黄色国产一级| 精品96久久| 日本操逼无码| 九九热免费国产视频婷婷伊人五月 | 大香蕉丝袜一级片| 黑白配性爱AV成| AA特级绝黄| 麻豆一区在线| 久久精品国产99精品亚洲蜜... | 国产一区二区三区久久久精品| 国产不卡精品91| 激情在线青青操| 天美麻花大全视频| 五月天日日操夜夜操| 成人黑料社久久| 色与欲影视天天看综合网| 日韩精品在线观看网站| 91黄射| 大香网伊人久久综合| 97在线观看免费| 蜜桃av综合网发布| www欧美91| 人妻久久久| 亚洲欧美日韩中文播放 | 久操操AV电影| 欧美999999| 日本高清_区二区三区| 亚洲drav色图| 丁香五月激情婷婷| 美国日韩黄片| 东北操逼| 天天影视色香色欲| 精品久久无码午夜福利| 九九九九九精品十六| 国产精品久久久久久 百度| 青青草中出视频| 性吧在线视频| 国产美女裸体秘 永久无遮挡| 淫骚熟女一区二区三区| 激情五月婷婷综合| 欧美性爱精品七区| 五月天人妻综合| 插入综合网| 九九热久久99精品re| 欲女人妻性色av| 五月天色五月| 91精品久久久| 美女黄页网站| 97视频在| 综合激情五月天| 测评在线观看AV| 亚洲精品97中文字幕| www久久久| 天天色黄色影院天天操| 欧美综合色| 久久25| 国产吞精a级片激情电影| 在线观看中文字幕| 天美av在线| 9 7超碰在线免费观看| 国产黄色av大片网站| 日本久久女同性恋视频| 欧美另类天堂| 亚洲性猛交| 超碰人人乐97| 中文字幕在线观看视频www| 日本人妻中文字幕| 91色狼| 伊人久大| 天堂亚洲精品久久老牛| 67194无码不卡| 大香蕉黄色一区| 欧美精品日韩久久久九| 97久久超碰| 99热在线只有精品| 超碰在线1234区| 久久精品天美| 亚洲色图a| 偷窥自拍亚洲色图| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 色娱乐色呦呦夜夜夜夜av| 狼天天狼天天大香蕉| 亚洲制服欧美另类内射| 欧美1区二区三区公司| 91 欧美| 天天日天天看| 欧美熟妇精品黑人巨大91| 91美女国产在线| 日本欧美m v精品网站加| 男人干美女| 91女神在线视频| 女同在线视频一区| 韩国久久97| 日日干夜夜干| 欧美亚洲综合色| 黑丝少妇| 日韩AV电影网站| 91狠| 日韩熟女精品无码专区一区二区 | a片在线播放| 黄片免费日韩| 久久性爱视频99| 操操操五月天婷婷丁香影院| 亚洲天堂五月天国产| 三级日韩一区二区三区| 日本潮催一卡操| 国产日韩无码一区二区三区久久区| 97爱| 国产乱伦性爱区| 性色生活片久久毛片婬片免费放女人一级毛片| 久久久精品中文字幕爱豆| 九九视频黄色片| 国产91啪| 亚洲高清无码免费观看视频| 五月婷婷大香蕉| 校园春色制服丝袜中文字亚洲| 男人的天堂亚洲| 天天干天天日天天射黄色| 超碰午夜在线| 青青草字幕AV| 欧美色图另类图片| 黑人娇小av在线播放| 日韩一区二区精彩视频| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 国产三级中文字幕粉嫩| 猛猛干| 欧美影院一区二区三区| 新久久AV| 99久在线精品99re8热| 麻豆2区1区天美| 性色中出| 亚洲中字慕不卡| 超碰91在线| 午夜.DJ高清在线观看免费7| 天天操天天舔| av在线人气| 久久精品成人一区二区三区蜜臀| 国产精品久久久久久久久久久久久久吹 | 一牛影视成人片免费| 高清国产av无码| 综合国产97| 欧美激情黑人| 青春草莓视频在线观看网址| www.av在线视频| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 大香蕉操久久| 亚洲精品久久一区二区三区蜜桃臀| 中文三一区| 日韩操逼性鲍| 91校园春色长篇| 亚精品无码毛片一区二区三区| 黑人在线91| 国产精品无码av嫩草| 猛交交| 精品美女人人干| 日本操逼aaaaa| 日韩成人网址| 后入福利视频| 国产在线激情视频| 久久久噜噜噜久久久| 青青久日| 久久久无码av精| 色五月69夫妻| 91丝袜在线观看| 久操热线| 日韩无码服务区| 黄色在线网站| 超碰97男人| 超碰78| 九九热免费视频| 色偷偷综合91久久噜噜| 国产操操日韩三级黄| 嗯嗯啊啊用力视频免费| 国产熟女精品一区二区| 五月天开心网| 熟人人妻少妇精品久久| 亚洲综合精品国产一区| 欧美亚州色的图| 国产精品亚洲无码| 婷婷激情一区二区三区俺也去| 亚洲乱妇p22| 国产刺激视频| 午夜一区| 亚洲有薄码区日本系列中文字幕| 青青青在线高清视频在线一二三四区| 8050午夜少妇无码| 亚洲综合伊人| 欧美久久伊人| 色噜噜狠狠色综无码久久| 成人美女av| 久久成人网站| 丁香色五月 97干| 色九九久九九| 精品一区二区三区蜜桃臀赵总| 国产精品久久久亚洲第一牛牛_在线观看 | 熟女自慰久久久| 亚洲成人在线高清| 北条麻妃性愛视频| 国产小黄片在线免费观看| 欧洲小说色图视频另类| 大香网站| 就去色综合| 天天干美少妇一区| 亚洲一区中文精品| 一直超碰| 无码少妇精品一区二区60岁老人| 亚洲欧美综合图片| 国产蜜臀精品一区免费尤物| 日韩一级久久毛片| 91视频综合在线| 日本岛国黄色网址| 在线视频97| 91/欧美| 无码 有码 国产18p| 欧洲视频在线| 区一在线观看| 国产欧美岛国精品一区| 天天操天天舔| 极品内射| 亚洲精品成人| 蜜乳中文字幕a在线| 欧洲亚洲人人爽爽视频| 久99| 久久久久免费看少妇A片特黄| 东京热大香焦| 久久超碰爱| 亚洲国产精品9999在线观看| 久久久久久久久9| 嗯嗯啊啊用力视频免费| 91精品无码人妻系列| 97香蕉网| 208天天久久九九九| 日本三级人妻a人妻一在线| 一牛影视成人片免费| 日韩小电影| 欧日韩在线观看| 国产又粗又又黄又猛| 大香蕉一区二区在线观看.| 亚洲激情深爱文学小说网站| 久久综合久久综合人久久夜精品| 色欲日韩欧美在线一区| 国产偷人伦激情在线观看| 久久人妻少妇| 欧美性色综合网| 99热最新网址| 欧美亚洲另类在线蜜桃| 黄色免费一级在线毛片| 老熟女阿 国产91| 蜜桃久久久久久久久久久久| 国产农村妇女一区二区| 黑人精品成人一区二区三区| 亚洲黄色视频在线观看视频| 欧美性暴力猛交| 国产精品动态一区二区三区四四| 99www.bibizy香蕉资源国产一区二区三区高清 | 国产人伦a片信息免费片| 亚洲综合九九| 高精欧美色| 欧美综合传媒| 亚洲熟久久| 97色色国产视频| 翘臀vidoes| 91九色首页| 日韩人妻一区二区精品| 99re公开精品免费视频| 人人人摸人人| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 免费啪啪啪网站18岁| 久久riav中文精品| 日韩中文字幕国产| 先锋影音av先锋一区| 凹凸视频在线一区二区| 日韩少妇无码| 福利视频网站| 五月天亚洲色图| 超碰欧美97| 2019天天干| 91丝袜| 亚洲在线91| 超碰2017| 97在线免费观看视频| 麻豆美女丝袜人妻中文| 九九无码| 日韩电影在线观看网址| 亚洲人妻在线精品| a片自拍直播视频| a片在线播放| 超清福利精品视频在线| 久久久久久人妻一区精品色欧美| 超碰在线人妻中文字幕| 国产日韩无码一区二区三区久久区| 亚洲视频中文一区| CCYY草草影院地址入口| 一区二区三区亚洲| 1024人妻熟女一区二区三区| 日韩丝袜二区| www.久久爱| 天天综合在线4| 日本丝袜美腿人妻九九| 日韩电影天堂视频二区三区| 加勒比伊人综合| 死我十八禁| 99re久久| 国产极品粉嫩馒头一线天av| 欧美日韩另类在线播放| 亚洲天堂7777| 日韩AV片| 欧美亚洲AN| 欧亚日本情色| 网友自拍第一页| 曰韩精品视频一区二区| 无遮挡猛进视频免费无限观看| 日韩AV一区二区三区四四| 日本不卡三级网在线播放| 麻豆伊人网| 精品无码久久| 成人26uuu| 91人妻Pr| 天天舔九色婷婷| 91欧洲入口| 2024年最新色情网站在线观看| 成人aⅴ一区二区三区| 亚洲超碰在线| 9 7超碰在线免费观看| 欧美女同在线| 成人一二| 色婷婷狠狠| 久久 亚洲 日韩 人妻| 亚州黄站| 国产精品亚洲天堂网址| 东京日日夜夜| 欧美综合网1| 在线亚洲欧美| 欧美 亚洲 偷拍自拍| 天堂日本亚洲欧美| 91中出视频| 中文字幕中文字幕一区二区| 视频二区美腿丝袜制服人妻欧美| 校园春色中文字幕AV| 91爱| 国产免费一区在线观看| 日本东京热大香蕉a片| 亚洲国产97| 日韩黄色一区二区三区| 97综合国产精品高潮久久| 4虎在线观看| 国产高清MV操逼视频| 夜夜操夜夜爽夜夜高潮| 欧洲人妻视频| 日本三级R| 九九国产热| 日韩综合无码一区久久92| 99久在线精品99re8| 青青草玖玖爱| 大香蕉黄色一级片免费看| 熟妇高潮一区二区免费视频| www男人天堂| 欧美精品1区2区3区| 天操老女人| 人妻偷拍一区二区三区| 91九九九馒头| 东北女人操逼| 欧美天天插| 日本久久超碰| 青青草日韩无码| 少妇激情一区二区三区视频| 天天操天天舔| 婷婷五月天色网| 操逼操逼逼操操逼91| 91N综合在线| 一级岛国大片| 青青草啪啪网| 亚洲 欧美 制服 另类 自拍| 91成人国产综合久久精品蜜月| 好色综合| 天堂资源欧美| 狠狠色伊人亚洲综合网站色| 91+欧美| 69少妇一区二区| 99亚洲人人| av网站在线观看了| 97爱b| 四虎影视永久在线免费| SUV一区二区在线看| 国产中文精品一区二区在线观看| 青青伊人加勒比海| 熟女色综合久久| 97在线日韩中文字幕| 久久99久久99久久99人受| 91老司机精品| 97久精品| 亚洲春色欧美激情自拍| 国产第11页| 一级啊性爱在线视频| 久久久无码精品人妻二区| 9久热| 青娱乐淫乱1314| 亚洲欧美setu| 精品一二三区久久AAA片| 女人香蕉久久毛毛片精品| 亚洲丝袜色| 国产精品一二三区18| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 天天做天天爱| 五月亭亭六月丁香| 国产在线精品电影观看| 熟女被操视频网址| 97超碰站| 偷拍色图| 亚洲宅男天堂| 蜜乳av一区二区| 蜜臀中文无码午夜| 日韩中文字幕熟妇人妻| 男人a天堂手机在线版| 九九九九精品视频| 男生女生啊啊啊啊| 欧美一级做a爰片免费视频| 色悠久| 欧美综合 站| 婷婷在线视频| 免费公开人人操| 夜夜夜夜久久久久| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 久射吧| 亚洲综合性感在线| 凹凸视频特色日本特黄| 成人AV超碰免费在线| 91蜜臀人妻中文字幕在线| 超碰色中文| 色综合婷婷| 17c在线成人免费A片观看| 性欧美999| 97一本大道亚洲一区| 大香交伊人网| 人妻乱仑一区二区三区| 高清国产精品福利网站| 欧美色图亚洲色,麻豆| 亚洲网自拍| 超碰人人妻| 国产精品成人无码av无码免费| 国产91影院| 天堂网亚洲区手机版| 男人把坤坤插入女人的下体 | 91欧洲国产成人久久精品网站| 蜜臀av网址| 亚洲自拍一区夜夜操| 天天综合网一91网| 亚洲国产成人高清在线| 2018天天干在线视频| 国产精品 视频| 精品免费囯产一区二区三区 | 中国乱伦一区二区| 啪啪啪精品| 免费在线看黄片av| 久久综合97| 久久久久久久久久久久97| 九九九九一级| 伦在线97| 丁香婷婷激情五月天无毒不卡| 混色激情av| 五月天激情婷婷| 青青国产精品在线| 屌逼传媒| 色色色网站| 中文字幕 码 自拍 视频 区| 日韩黄色成人性爱| aⅴ日韩成人电影av在线免费看av大全| 99久国产精品午夜性色福利| 视频国产欧美在线播放| 干超碰碰熟女| 男人的天堂2018| 天天伊人| 淫荡网址| 性猛交| 超碰97久久| 国产操逼网站亚洲一级黄色| 9丨久久九九九| 久久粉色| 亚洲天天操| 亚洲色图91| 亚洲色图欧美一区二区不卡| 色五月AV| 你懂的在线观看区国产 | 啊啊啊好舒服好爽啊啊啊视频| 欧美少妇一区二区三区| 青青草视频久久久久| 日日干日日操五月天伦理视频| 午夜久久一区二区无码中出| 尤物av网站| 97看操| 色偷综合| 久久久久久久久9| 中文字幕人妻丝袜乱一区三区| 欧美性爱一区二区三区| 欧美日韩97| 国产辣妈在线视频福利| 在线播放一级无码视频| 综合操逼| 婷婷五月色| 91丝袜美腿网站| 亚洲黄色网址| 亚洲色图8| 亚洲欧美另类激情小说| 中文色综合| 亚洲午夜福利视频| 色噜噜综合在线| 麻豆精品A片免费观看| 亚洲污污网站| 久久久一区二区三区麻豆| 资源新线在线天堂| ,成人免费啪啪视频| 强奸乱伦动态污图免费 | 免费试看60秒| 人人操肉肉| 国产伦精品一区二区三区在线观| 欧美日韩国产传媒在线精品| 秋霞午夜视频一区二区| 欧美后入式| 国产偷拍网站| 亚洲九月丁香| 亚洲s在线观看| WWW美腿丝袜香蕉中文| 天天做天天爱| 无码操逼网| 中文无码一二三区| 综合激情一一91| 久久免费少妇| 国产精品久久久无码AV网站| 95精品在线| 国产丸一视频| 亚洲无码偷拍| 熟女视频久久| 91国产美女丝袜足交精品视频| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 亚洲美女精品九九视频| 国产精品一区二区亚洲人成毛片| aaa一级黄片| 久久夜嗨| 午夜精品久久99蜜桃的功能章节| 日韩亚洲国产视频| 国产精品经典一卡久久久| 婷婷激情五月综合| 国产亚洲精品激情| 电影69乱码96| 欧美黑人与女人91| 岛国AB视频| 色诱中文字幕| 91爱网| 极品尤物在线观看| 欧美久久人妻少妇一区二区| 乱伦强奸区日韩| 亚洲激情网| 少妇特黄一区二区三区| 中文字幕AV乱伦| 日本美女性生活久久久久久久| 97日韩欧美亚洲| 色噜噜精品一区二区三| 欧色综合| 国产91精品在线免费| 九九色色| 99在线观看视频在线高清| 在线看片国产精品每日更新| 伊人久久大香线综合无码| 97亚洲综合影院| 99这里只有精品| 一二三区视频在线观看| 在线视频日韩欧美国产| 亚洲综合图片在线| 奇米四色影视777久久久| 和协无码影院| 精品欧美不卡在线播放| 欧美乱色| 97爱爱| 久久发布国产伦子伦精品| 色汉综合| 操九九九九九九| 国产色产精品在线观看| 亚洲一区二区三区久久 亚洲一区二区| 黄色成年| 欧美亚洲日韩人妻在线观看| 91色插| 好吊色在线观看| 午夜精品久久久| 国产乱婷婷精品二区三区| 精品九九| 日本97久久久精品| 蜜乳AV.COM| 亚洲无限观看| 97欧美性爱| 99热线麻豆 | 日日夜夜精品视频| 亚洲人在线成线成人| 人妻精品免费一二三区| 久久久久9999妇女| 伊人久久在线视频观看| 欧美天堂亚洲电影院一区在线播放 | 99热精品在线| 一区二区乱码福利| 亚洲色性情三级| 国产自产自拍| 夜夜嗨一区二区三区三州加勒比| 精品成人av一区二区三区在线| 殴美色网| 人妻久热在线| 人人妻人人爽 97人人看碰人免费公开视频| 台湾肥佬网一区二区三区| 婷婷五月色| 亚洲欧美另类少妇精品| 日本综合色图| yazhousetuoumei| 性色av蜜臀av色欲aV| 九九久精品| 一色网男人的天堂| 国产一区二区三区久久久精品| 欧美一二级| 69人妻精品一区二区绯色| 天天看精品动漫视频一区| 日韩不卡网操逼中文字幕日韩| 人妻99p| 99热在线观看| 色阁阁AV综合网| 久久一二三四五六七八九区区区| av网站免费线看| 日韩专区久久久| 久久久久久久久久久97| 国产h片在线观看视频| 中文字幕激情小说| 国产精品高潮久久AV| 超碰在线国产| 免费?级毛片无码?∨蜜芽试看| 国产精品动态一区二区三区四四| 超碰97起碰| 温婉少妇玩3p| 久久97| 亚欧美无遮挡| 欧美精品久久96人妻无码| 91粉嫩萝控精品福利网站_精品影音先锋国 | 人妻少妇色综合| 超碰调教97| 综合欧美激情网| 91丨人妻丨国产丨丝袜| 五月天加勒比啪| 东北女人av| 日本在线不卡一二区| 亚洲 小说 欧美 激情 另类| 天堂亚洲精品| 亚码人妻| 中文字幕精品人妻丝袜| 久久99视频| 日韩一级特黄av毛片| 九九九九精品| 超碰久久.com| 中文字幕一区二区三四五区日日骚| www.91色综合| 国产成人久久久精品免费AV| 国产特级毛片AAAAAA高潮流水 | 日本肉体xxxx裸交| 美国精品国产精品| 狠狠婷婷亚洲中文综合久久| 青青五月天| 国产天天噜一噜久久久| 98精品国产乱码久久久久久| 顶级少妇BT天堂| 色蜜AV| 二色av| 国内三级自拍小视频在线观看| 久久av一级av少妇av高潮 | 美女露胸露屁股| 激情丁香五月婷婷| 久久精品性| 免费av大片| 加勒比在线视频一区二区三区| 国产亚洲深夜激情| 蜜臀一区二区三区在线 | 亚洲欧美国产日本一区二区三区| 综合五月婷婷亚洲一区| 性爱网站一区二区| 色哟哟AⅤ| 欧美片第一页| 国产91福利小视频在线观看| 日韩97P| 男人的午夜天堂| 9Ⅰ老熟女| 一起草高清无码| 立川理惠被中出无码| AAAA级日本片免费视频| 女性91网站| 大香蕉一级黄色片久久| 中国人高清www色视频免费| 日本精品五区| 青娱乐淫乱1314| 国模私拍一区二区三区神乳| www.亚洲成人一区| 吖在线不卡一区二区国产剧情| 最新日日夜夜天天干干| 老司机天天操| 一牛影视成人片免费| 极品美女福利在线观看| www.av在线观看| 五月婷婷五月天| 欧美不卡在线美女| 日韩传媒在线|