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

ARTICLE DETAIL

資訊詳情

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

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

C#推箱子小游戲源碼解析:地圖建模、移動判定與避坑指南 簡介C#推箱子小游戲完整源代碼面向C#入門與游戲編程愛好者演示了Windows窗體應(yīng)用從界面搭建、鍵盤事件到游戲邏輯的完整寫法適合作為課程設(shè)計(jì)或練習(xí)項(xiàng)目參考。程序支持推箱子、撤銷CtrlZ、重復(fù)CtrlY、選關(guān)等核心操作通關(guān)后可將最佳步數(shù)保存為.way文件用于回放演示或分享通關(guān)過程同時支持自行設(shè)計(jì)關(guān)卡、當(dāng)前狀態(tài)存盤與讀盤方便反復(fù)挑戰(zhàn)和擴(kuò)展玩法。資源包共76個文件以10個.cs源碼為中心配以11張.bmp地圖與角色素材、15個.way路徑記錄、13個.dat數(shù)據(jù)存檔以及項(xiàng)目工程和可運(yùn)行exe整體僅135KB結(jié)構(gòu)緊湊、層次分明便于對照源碼逐模塊理解。目前已有960人學(xué)習(xí)下載適合想通過小游戲?qū)崙?zhàn)熟悉C#文件I/O、窗口控件與邏輯控制的讀者源碼中還預(yù)留了自動尋路深度優(yōu)先搜索與棧實(shí)現(xiàn)、鼠標(biāo)拖拽操作、通關(guān)光榮榜等未完成功能能引導(dǎo)進(jìn)階者進(jìn)一步練習(xí)算法和交互設(shè)計(jì)。1. C# 推箱子小游戲源代碼練手就該從這種能跑完的項(xiàng)目開始不少 C# 初學(xué)者手頭不缺語法書缺的是一個「能跑起來、讀得懂、改得動」的完整小游戲源碼。掃雷涉及遞歸展開貪吃蛇要處理隊(duì)列和定時刷新對剛摸到面向?qū)ο箝T檻的人都有點(diǎn)勸退推箱子剛好卡在那個舒服的位置上——二維數(shù)組管地圖、方向鍵管輸入、幾個 if 管碰撞判定整個游戲邏輯一晚上能讀完。C# 推箱子小游戲源代碼這個標(biāo)題背后你要找的其實(shí)就是一套地圖建模、角色移動、箱子推進(jìn)、勝負(fù)判定的完整實(shí)現(xiàn)外加一個能交互的界面。這套源碼解決的不只是「交作業(yè)」這一件事。對想轉(zhuǎn)上位機(jī)或 Unity 的開發(fā)者來說推箱子是把「狀態(tài)機(jī) 坐標(biāo)運(yùn)算 UI 刷新」串起來的最小可運(yùn)行樣本對老師或培訓(xùn)講師來說它是一個能讓學(xué)生照著改出幾十個變體的課程設(shè)計(jì)載體。本文按一條主線走先把地圖和移動邏輯講透再給出控制臺與 WinForms 兩種可運(yùn)行版本最后拆類、講坑、加悔棋。跟著走完你手上會有一套自己能二次開發(fā)的推箱子源碼而不是一個「跑完就刪」的黑匣子。2. 推箱子的核心邏輯地圖建模與移動判定先寫對這 3 個函數(shù)2.1 地圖建模用字符數(shù)組把關(guān)卡變成一張可以計(jì)算的網(wǎng)格所有推箱子源碼的第一步都是把「一張畫著墻、箱子、人的圖」變成程序能讀的數(shù)據(jù)。常見做法是用一個二維字符數(shù)組char[rows, cols]來存地圖每個格子是一個單字符字符的約定在推箱子圈子里基本是通用的# 表示墻$ 表示箱子. 表示目標(biāo)點(diǎn) 表示玩家。下面的解析函數(shù)把一組字符串?dāng)?shù)組轉(zhuǎn)換成一個二維數(shù)組同時記住玩家初始坐標(biāo)。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ù)避免某個短行導(dǎo)致數(shù)組變成參差不齊的形狀。代碼里的x lines[y].Length是為了防止某一行比其他行短缺失的部分統(tǒng)一補(bǔ)成空格。這個健壯性處理很關(guān)鍵——你從文本文件讀關(guān)卡時最后一行很可能因?yàn)閾Q行符問題少一個字符。參數(shù)說明Rows 和 Cols 是地圖邊界TryMove里所有坐標(biāo)判斷都要先拿它們做越界檢查否則數(shù)組越界異常會在你按下方向鍵的瞬間噴出來。玩家坐標(biāo)的初始化放在解析階段是因?yàn)楹竺婷恳徊揭苿佣家馈溉爽F(xiàn)在在哪」。2.2 移動邏輯與碰撞檢測角色能不能走、箱子能不能推全在這一個函數(shù)里有了地圖數(shù)組接下來的問題是按下方向鍵后會發(fā)生什么。這里有個新手容易寫亂的判定順序——必須先把「人和箱子能不能動」全部探明再一次性更新坐標(biāo)先動人再判斷箱子就會出現(xiàn)主角瞬移穿墻的靈異事件。四個方向的移動本質(zhì)上是給坐標(biāo)加一組偏移量上(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; // 第一步目標(biāo)格越界或撞墻直接返回 if (nx 0 || nx Cols || ny 0 || ny Rows) return false; if (Grid[ny, nx] #) return false; // 第二步目標(biāo)格是箱子檢查箱子能不能再往前一步 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; // 箱子移動目標(biāo)格若是 . 則變成 *,否則是 $ Grid[by, bx] Grid[by, bx] . ? * : $; Grid[ny, nx] (Grid[ny, nx] *) ? . : ; } // 第三步角色移動原位置恢復(fù)成 . 或空格 Grid[PlayerY, PlayerX] Grid[PlayerY, PlayerX] ? . : ; PlayerX nx; PlayerY ny; Grid[ny, nx] (Grid[ny, nx] . || Grid[ny, nx] *) ? : ; return true; }邏輯說明Dirs數(shù)組把四個方向映射為坐標(biāo)偏移避免在函數(shù)里寫四段幾乎相同的 if 分支。判斷的先后順序是重點(diǎn)——先檢查角色目標(biāo)格(nx, ny)能不能站如果站的是箱子再檢查箱子前方(bx, by)能不能落。兩步檢查全部通過之后才去改地圖數(shù)組這就是「先探測后更新」的防穿墻關(guān)鍵。參數(shù)說明這里用到了*和兩個特殊狀態(tài)*表示箱子站在目標(biāo)點(diǎn)上表示玩家站在目標(biāo)點(diǎn)上。很多人第一次寫字面量判斷漏掉這兩個狀態(tài)導(dǎo)致箱子推到目標(biāo)點(diǎn)上后地圖顯示變成空格勝利條件永遠(yuǎn)判不中。把這個狀態(tài)在注釋里寫清楚后面所有關(guān)卡顯示和勝負(fù)判定都會輕松很多。2.3 勝負(fù)判定箱子到?jīng)]到齊兩種計(jì)數(shù)方案任選推箱子的勝負(fù)條件很直白所有目標(biāo)點(diǎn)都被箱子占住。實(shí)現(xiàn)上有兩種思路。第一種是每次移動后遍歷整個地圖數(shù)一下*的數(shù)量是否等于目標(biāo)點(diǎn)總數(shù)第二種是提前記錄目標(biāo)點(diǎn)的坐標(biāo)集合每步移動后逐個檢查。小地圖上兩者性能差別可以忽略但我建議用第二種原因是它還能順帶告訴你「還差哪個點(diǎn)沒歸位」做關(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階段收集凡遇到.或都記錄坐標(biāo)。IsWin遍歷目標(biāo)點(diǎn)只要有一個點(diǎn)上不是*就說明箱子沒壓上去。判定時把也算通過是因?yàn)橥婕铱赡芮『谜驹谀硞€目標(biāo)點(diǎn)上如果玩家的位置和目標(biāo)點(diǎn)重疊了那個格子仍然算目標(biāo)已占用。參數(shù)說明這個實(shí)現(xiàn)不去數(shù)「箱子總數(shù)」因?yàn)榭赡艽嬖谙渥硬辉谌魏文繕?biāo)點(diǎn)上的死局狀態(tài)數(shù)箱子會誤判。實(shí)際調(diào)用IsWin的時機(jī)放在每次TryMove成功返回true之后移動失敗不用判。死局檢測箱子全卡墻角屬于求解算法范疇這個最小源碼里不做后面做關(guān)卡編輯器時可以通過「可解性」過濾關(guān)卡。3. 把源碼跑起來從控制臺最小版本到 WinForms 界面3.1 控制臺最小版本不碰 UI 線程先把游戲循環(huán)跑通邏輯寫完后第一步永遠(yuǎn)先做控制臺版本。它沒有窗體焦點(diǎn)的干擾沒有跨線程訪問控件的異常能讓你把注意力全放在游戲循環(huán)上讀按鍵、調(diào)TryMove、判斷勝負(fù)、重繪地圖。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表達(dá)式把ConsoleKey枚舉映射成 0 到 3 的方向索引正好對上前一節(jié)Dirs數(shù)組的順序這是一處極容易踩的對不齊問題——方向枚舉寫錯了不會報(bào)錯只會表現(xiàn)為「按上鍵人往左跑」。參數(shù)說明Escape鍵單獨(dú)映射成-1退出循環(huán)其他無關(guān)按鍵映射成-2忽略掉避免按了個字母鍵導(dǎo)致程序直接把一個未知索引傳給TryMove??刂婆_版不用加延遲推箱子是回合制游戲天然等人輸入加Thread.Sleep只會讓按鍵體驗(yàn)變黏。3.2 WinForms 最小版本用 Label 數(shù)組當(dāng)瓦片邏輯與 UI 分離控制臺版能跑通后往 WinForms 遷移時最省事的方式是用Label[,]數(shù)組做地圖瓦片。每個Label顯示一個字符背景色區(qū)分墻和空地窗體的KeyDown事件接方向鍵。這樣地圖邏輯完全復(fù)用上一章的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讓窗體先于子控件收到鍵盤事件否則焦點(diǎn)落在某個 Label 上時方向鍵根本不會傳到窗體。BuildGrid按CellSize逐個擺控件ClientSize根據(jù)行列數(shù)算這樣窗口大小能嚴(yán)格罩住地圖不會出現(xiàn)地圖畫了一半被窗體邊緣切掉的局面。參數(shù)說明字體用Consolas是等寬字體否則每個字符寬度不一致貼了磚塊的墻畫出來會歪歪扭扭。Redraw用 switch 表達(dá)式做字符到背景色的映射后續(xù)想換皮膚比如把墻改成深灰色、箱子改成木紋色只改這一處不需要碰邏輯層。這就是邏輯與 UI 分離的第一個好處調(diào)樣式不碰判斷代碼。3.3 鍵盤輸入與刷新參數(shù)KeyDown 別寫成長按連發(fā)重繪用 InvalidateWinForms 里的方向鍵處理常見的翻車點(diǎn)是把邏輯寫在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的返回值在這里還有一個額外價值只有這一步確實(shí)發(fā)生了移動時才重繪和判勝負(fù)按了方向鍵但撞墻時界面紋絲不動玩家從視覺上就知道「這條路走不通」。參數(shù)說明WinForms 的KeyDown在按鍵按住時會自動重復(fù)觸發(fā)這是系統(tǒng)行為回合制游戲不需要屏蔽它但如果要做「按住方向鍵連續(xù)移動」就得在Shift狀態(tài)的配合下自己加節(jié)流。Redraw內(nèi)部用的是 Label 控件的屬性修改本身會觸發(fā)重繪不需要手動調(diào)用Invalidate只有改成自定義Paint繪制時才需要Invalidate()通知窗體刷新。3.4 三種界面方案怎么選控制臺、WinForms 與 Unity 的取舍方案上手難度卡點(diǎn)適合場景控制臺最低字符渲染丑中文輸入法可能截獲方向鍵驗(yàn)證游戲邏輯、教學(xué)演示W(wǎng)inForms中等控件數(shù)量多大數(shù)據(jù)量地圖會卡課程設(shè)計(jì)、小型桌面游戲Unity較高引入了 Sprite、Input System 等新概念想繼續(xù)做游戲方向的人參數(shù)說明如果你只是要「C# 推箱子小游戲源代碼」?jié)M足課程要求WinForms 是性價比最高的終點(diǎn)如果目標(biāo)是學(xué) Unity 開發(fā)建議把這里的GameMap直接搬過去渲染層替換成 Sprite 渲染器邏輯層完全不用動。這也印證了拆類的價值——換界面不換腦子。4. 源碼怎么組織拆類、關(guān)卡文件與擴(kuò)展點(diǎn)決定這套代碼能走多遠(yuǎn)4.1 類怎么拆地圖數(shù)據(jù)、游戲引擎、UI 渲染三者各管一段很多初學(xué)者拿到別人的源碼第一反應(yīng)是把所有代碼塞進(jìn)Form1.cs結(jié)果一個窗體文件寫到六百行最后連自己都找不到箱子判定在哪。拆類的原則是地圖數(shù)據(jù)歸地圖、游戲規(guī)則歸規(guī)則、界面歸界面。下面是一個從實(shí)戰(zhàn)里沉淀出來的三分結(jié)構(gòu)按這個結(jié)構(gòu)組織源碼后面加悔棋、換皮膚都只需要動一個文件。類 / 文件職責(zé)關(guān)鍵成員GameMap地圖數(shù)據(jù)、解析、坐標(biāo)查詢Grid、PlayerX/Y、IsWin()GameEngine移動規(guī)則、步數(shù)統(tǒng)計(jì)、操作歷史TryMove()、StepCountMainForm渲染與輸入Redraw()、OnKeyDown()GameEngine可以看作GameMap的上層封裝GameMap知道地圖長什么樣但不知道「人能不能推箱子」GameEngine只調(diào)用GameMap暴露的Grid和玩家坐標(biāo)決定是否修改數(shù)據(jù)。這樣GameMap可以單獨(dú)做單元測試比如直接構(gòu)造一張地圖斷言TryMove的返回值。4.2 關(guān)卡文件格式把地圖存成文本換關(guān)不用改代碼地圖硬編碼在源碼里的缺點(diǎn)是換個關(guān)卡就要改代碼重新編譯。常見做法是把關(guān)卡放進(jìn)外部文本文件用純 ASCII 字符保存每行代表地圖的一行。標(biāo)準(zhǔn)格式約定#墻$箱子.目標(biāo)點(diǎn)玩家空格是空地其他字符一律視為非法。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)卡中沒有目標(biāo)點(diǎn)); if (map.PlayerX 0 map.PlayerY 0) throw new InvalidDataException(關(guān)卡中沒有玩家); return map; }邏輯說明File.ReadAllLines會自動按平臺換行符拆分行省去手工處理\r\n的麻煩但如果你在 Linux 上寫好關(guān)卡、拿到 Windows 上用要確認(rèn)文件沒有混入異常換行。校驗(yàn)放在Parse之后是因?yàn)镻arse只負(fù)責(zé)構(gòu)造數(shù)組不負(fù)責(zé)業(yè)務(wù)合法性目標(biāo)點(diǎn)為零或者玩家缺失的關(guān)卡運(yùn)行后會變成死圖提前拋異常比運(yùn)行到一半出錯直觀得多。參數(shù)說明編碼用Encoding.UTF8是防止文件里有 BOM 或中文注釋導(dǎo)致首字符解析異常。關(guān)卡文件的列數(shù)不必每行相等Parse里已經(jīng)做了補(bǔ)齊處理但建議還是保持矩形因?yàn)楹芏嚓P(guān)卡編輯器生成的文本都是嚴(yán)格矩形的非矩形文件在別人復(fù)用時容易閱讀錯位。4.3 擴(kuò)展點(diǎn)步數(shù)統(tǒng)計(jì)、關(guān)卡切換、操作歷史留好接口一個能交差的推箱子源碼通常還要有兩個數(shù)字步數(shù)和關(guān)卡號。步數(shù)統(tǒng)計(jì)最容易犯的錯是「移動失敗也算一步」。正確做法是在GameEngine里做增量計(jì)數(shù)只有TryMove返回true時才StepCount。這個細(xì)節(jié)直接決定成績統(tǒng)計(jì)準(zhǔn)不準(zhǔn)。關(guān)卡切換有兩種做法把所有關(guān)卡寫進(jìn)一個文本文件用空行分隔或者放在Levels目錄下按Level01.txt、Level02.txt命名。我一般推薦后者因?yàn)閱蝹€游戲文件不會膨脹到幾百行而且可以單獨(dú)替換某一關(guān)而不影響其他關(guān)卡。切換時至少要做一次越界保護(hù)——當(dāng)前關(guān)卡號超過文件數(shù)量時提示「沒有更多關(guān)卡了」。至于悔棋第六章詳細(xì)講這里只需要知道GameEngine里留一個StackSnapshot類型的字段未來的操作歷史全掛在GameEngineMainForm只負(fù)責(zé)把撤銷按鈕接到這個堆棧上。5. C# 推箱子小游戲開發(fā)避坑指南5 個最容易翻車的點(diǎn)與排查方法5.1 方向鍵按了沒反應(yīng)窗體焦點(diǎn)被控件搶走事件根本沒到你手里現(xiàn)象程序跑起來用鼠標(biāo)點(diǎn)了地圖上的某個格子或空白區(qū)域后再按方向鍵角色紋絲不動。原因是窗體上添加了大量Label控件其中某些.TabStop屬性默認(rèn)為true的控件會搶占焦點(diǎn)KeyDown事件被派發(fā)到那個控件而不是窗體。解決方法是兩行設(shè)置KeyPreview true讓窗體優(yōu)先于子控件處理鍵盤事件同時把地圖瓦片的TabStop全部設(shè)為false讓 Label 不參與 Tab 循環(huán)。如果問題依舊在OnKeyDown開頭加一個Console.WriteLine(e.KeyCode)先確認(rèn)事件到底有沒有進(jìn)來再往下排查。5.2 窗口瘋狂閃爍重繪整個 ClientArea但沒有開啟雙緩沖現(xiàn)象每次按鍵后整個窗體像在放幻燈片尤其地圖超過 10×10 后閃爍肉眼可見。原因是刷新地圖時把所有 Label 的Text和BackColor都改了一遍每個控件分別觸發(fā)布局和重繪高頻觸發(fā)時 GDI 忙不過來。解決方法是給窗體開雙緩沖DoubleBuffered true把繪制先寫進(jìn)內(nèi)存位圖再一次刷到屏幕如果用了自定義控件自繪地圖同樣在自定義控件的構(gòu)造函數(shù)里設(shè)DoubleBuffered true。這是 WinForms 圖形開發(fā)里最無腦也最有效的性能開關(guān)新手經(jīng)常把它當(dāng)成玄學(xué)忽略掉實(shí)際上它是微軟文檔明寫的原生屬性。5.3 跨線程訪問控件報(bào)錯別用 Timer 輪詢鍵盤狀態(tài)現(xiàn)象用Timer每隔 100ms 讀一次按鍵狀態(tài)來驅(qū)動移動運(yùn)行幾分鐘后彈出InvalidOperationException說某控件只能從創(chuàng)建它的線程訪問。原因是Timer事件的回調(diào)跑在 UI 線程之外直接修改 Label 屬性觸發(fā)了線程安全檢查。推箱子是回合制游戲根本不需要定時器——按鍵本身就是事件KeyDown天然在 UI 線程上執(zhí)行。如果你的確需要在特定時間點(diǎn)自動執(zhí)行動作比如做步數(shù)超時懲罰就該用Control.BeginInvoke把 UI 更新封送回主線線程private void TimerTick(object sender, EventArgs e) { BeginInvoke(new Action(() { // 在這里更新 UI 控件 })); }5.4 地圖數(shù)組越界換行符、全角空格、矩形不齊三個隱形兇手現(xiàn)象直接復(fù)制網(wǎng)上關(guān)卡文本貼到代碼里運(yùn)行時一進(jìn)入某一行就拋IndexOutOfRangeException。原因有三個復(fù)制文本時每行末尾帶了 Windows 的\rParse按字符處理時多出一個不可見字符字符串里混入了全角空格或制表符\t導(dǎo)致邊長計(jì)算錯誤行長短不一程序取了最長行的長度作為列數(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)象面對墻角的箱子按下朝向墻角的方向鍵箱子直接穿透墻跑出去了。原因是移動邏輯里先把玩家坐標(biāo)更新了再判斷箱子能不能推結(jié)果TryMove用的是「新玩家位置」去取箱子坐標(biāo)全部偏移一格判定自然錯位。解決方法是嚴(yán)格按上一章的順序先取目標(biāo)格再判斷目標(biāo)格是箱子時取箱子前方所有越界和撞墻檢查通過后才統(tǒng)一改寫玩家和箱子的位置。這里有個把每個地圖存成char[,]快照放進(jìn)棧里的前提——你的GameMap必須支持深拷貝否則棧里存的是引用所有快照會在下一次移動時一起改變。6. 更進(jìn)一步給源碼加上悔棋和關(guān)卡校驗(yàn)增量改造不超過 20 行6.1 悔棋三步走快照、入棧、回退推箱子最常見的剛需是悔棋。地圖不大完整復(fù)制整個char[,]的開銷可以忽略所以最可靠的做法是「整圖快照」而不是記錄單步操作再反向推演。每一次移動前把當(dāng)前Grid、玩家坐標(biāo)、步數(shù)壓進(jìn)棧撤銷時彈出快照恢復(fù)原狀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)計(jì)數(shù)字不會虛高。Clone()對二維數(shù)組做的是淺拷貝但這里Grid的元素是char值類型淺拷貝恰好等效于深拷貝。這個方案的一個隱藏收益是撤銷不受「箱子經(jīng)過哪些路徑」影響哪怕關(guān)卡狀態(tài)再亂都能完整回退到上一步。6.2 關(guān)卡編輯器寫一個校驗(yàn)函數(shù)手工編關(guān)也能跑拿到源碼后想自己加關(guān)卡最省事的就是做文本編輯器。在Notepad或 VS Code 里按 ASCII 畫地圖保存成 txt再用LoadFromFile加載。校驗(yàn)函數(shù)至少查三件事玩家有且只有一個、至少存在一個目標(biāo)點(diǎn)、地圖四周閉合。四周閉合可以遍歷第一行、最后一行、第一列、最后一列確認(rèn)全是#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(至少需要一個目標(biāo)點(diǎn)); }我第一次寫推箱子源碼時把地圖硬編碼在Form1.cs里加了三個關(guān)卡后代碼就亂成一團(tuán)。后來把地圖挪到外部文件、把邏輯拆成GameMap和GameEngine再回頭看真正難的部分根本不是界面而是移動判定里的狀態(tài)枚舉——*和這倆狀態(tài)一漏地圖顯示和勝負(fù)判定同時出錯。這也是我給所有拿這份源碼做二次開發(fā)的人唯一的建議遇到詭異 bug 先打印當(dāng)前地圖到控制臺把數(shù)組真實(shí)值看清楚再改代碼。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷色片| 五月天偷拍| 激情综合五月| www.第四色99| 国产首页在线| 六月婷婷开心| 婷婷五月天激情综合深爱| 亚洲成人精品三区| 五月丁香综合| www.五月天| 国产精品A片| 九九99九九99九九99视频网| 久久久久五月丁香| 精品99*| 九九热99免费视频| 五月的色婷婷高潮| 亚洲第一精品网站| 丁香五月婷婷乱| 91碰| 五月婷婷三级| 成人丁香五月天Av| 99热这里只有精品最新网址| 婷婷五月花| 日本www免费九九| 99网| 五月天激情丁香| 日本颜色视频人人爱| 人妻久久做| 九九九九大香蕉| 丁香婷婷五月份| 夜夜骑夜夜撸| 丁香婷婷影院| 婷婷伊人网| 色婷婷AV在线| 丁香五月婷婷偷拍| 干一干xxxx| 久色五月| 色J香五月天| 五月在在观看| 天色综合网站| 天天干天天操天天干天天操天天干天天操| 丁香五月瑟瑟| 青青草六月丁香| 激情婷婷色小说| 色五月激情视频在线综合| 九色激情网| 丁香婷婷影院| 九九九九九九毛片| 日韩AV在线免费观看| 精品导航在线x不卡| 激情六月天| 亚洲愉拍99热成人精品| 丁香五月在线观看| 少妇人妻人伦A片| 亚洲综合色网站| 五月婷婷婷综合网| 99精品久久久| 婷婷伊人无码| 激情综合网 激情五月天| 3p日韩网站视频| 丁香桃色综合网| 久久精品爱爱| 婷婷爱综合| 在线观看熟女少妇| 五月丁香久久激情网| 天天插天天很| AV成人在线播放| 久久五月天色| 99激情视频| 亚洲视频伍月婷婷| 香焦网五月天| 在线播放成人网站| 综合aV在线| 青草视频在线播放| 99在线爽| 激情五月天丁香| 99热情这里只有精品在线播放| 99热r| 五月婷五月婷伊人伊人五月婷| 天天做天天爱高潮片| 久久精彩综合视频| 欧美英丁香开心快乐六月天网| 色图亚洲91| 91精品激情9| 五月天婷久久| 99日本黄站| 九九激情综合| 热九九在线| 欧美va亚洲va| 五月丁香六月婷婷成人| 99爱爱| 丁香五月影院| 97人碰人操| 九九热内射| 九月大香蕉| 五月色婷婷中文字幕| 一级黄色操B| 伊人在线视频| 99久在线精品99re5热视频| 99A片| 91主播在线| 六月丁香六月婷婷欧美| 六月婷婷深深爱| 五月丁香激情综合六月涩涩爱| 99热99热| www婷婷| 狠狠干五月天| www.91AV.COM| 91精品综合久久婷婷九色| 97色天堂| 色色网站| 天天日夜夜拍| 182无码| 中文字幕网站在线观看| AA片在线观看视频在线播放 | 激情婷婷五月天日本系列 | 五月丁香激情综合六月涩涩爱| 99熟女视频| sisi热国产| 色五月婷婷亚洲| 国产白丝在线一区| 激情五月天婷婷| 丁香激情综合| 色色色视频免费无码 | 黄桃AV无码免费一区二区三区| 人妻免费网站| 色婷五月| 久久免费精彩视频| 久久曰9| 日韩在线视频网站| 五月成人网站| 亚洲综合色婷| 婷婷综合97| 操逼福利视频| 久热久| Www.Av网9| 色情五月天视频网| 婷婷久久五月丁香| 色欲色香伊人| 五婷婷综合网| 日本久久天堂| 激情综合色图| 9999热在线免费观看| 99久久a线观| 激情亭亭五月| 99久久亚洲国产| 婷婷五月天影视网址| 婷婷操超碰| 欧美天堂婷婷日韩| 天天爽曰日爽| 久久久99精品免费观看| 婷婷六月丁香久| 国产操碰| 网色99| 久久丁香五月婷| 99精品偷自拍| 久草免费福利视频| 婷婷激情六月综合| 午夜成人片400| 日本久热| 99热99色| 久草天堂| 丁香五月欧美午夜视频| 97luluse| 日韩在线五月天婷婷| 97在线精品| 亚洲免费观看高清完整版AV线| 五月天 另类图片| 色婷五月天网站| 影音先锋毛片网站| 九九色色网| www亚洲无码| 久久精品亚洲一级牲爱综合| 九九热99精品| 五月天 婷 欧美亚洲| 一级内射毛片| 爱草视频在线观看| 亚洲人成播放网站| 色五月婷婷五月| 久久五月丁香综合| 中文av网站| 超碰中文字幕在线| 天天综合色丁香| 成人AV网站在线| 婷婷五月天激情网站| 五月婷无码| 激情网综合| 久久婷婷免费| 婷婷五月天丁香社区| 大香蕉75线| 五月婷在线观看| 色婷婷久久7777| 五月六月婷婷| 99热久草| 香蕉综合在线| 欧美综合激情五月丁香| 日本色超碰| 丁香六月婷婷色XXXXX| 日本在线wwww| 丁香六月色婷婷| 色色五月丁香婷婷| 国产精品涩涩涩视频网站| 伊人超碰| 99热传媒| 中文字幕综合网| 丁香婷婷社区| 人妻精品久久久久久| 婷综合六月| 五月丁香婷婷爱| 五月丁香操婷逼| 色情五月综合婷婷| 久久这里有精品视频| 婷婷综合九月| 色情综合网| 天天综合网亚洲综合网| AV在线中文| 深爱激情丁香| www,26uuu,c0m,色情| 麻豆精品| 色色色综合网| 天天日狠狠| 高清免费在线视频| 日本久久99| 伊人天天色| 五月天另类小说久久小说网| 婷婷爱五月天| 久久九九热视频| 欧美在线干| 国产毛片精品一区二区色欲黄A片 国产人妻777人伦精品HD | 色色丁香婷婷综合| 成人婷婷色五月天| 538任你爽视频不一样的| 四色永久成人网站| 五月天,激情四射,婷婷频道| 人妻性爱av网站| 欧美 色婷婷| 色色色在线观看| 成人婷婷五月天| 亚洲精品网址| 婷婷五月花.97| 色七七九九| 日本va网站| 狠狠久久婷婷| 99视频在线9| 狼人婷婷久久| 色青青视频| 亚洲啪啪网| 婷婷狠狠97| 婷婷五月天激情电影| 丁香六月婷婷综情欧美| 天天狠狠综合精区| 国产亚洲色婷婷久久99精品91| 开心婷婷五月天激情网| 色五月婷婷五月久久| AV在线收看| 日本精品久久久久中文字幕| 激情综合无码| 天天干天天拍| 99热99色| 五月天激情开心网| 狠狠狠狠狠狠草| 五月丁香黄色| 综合久久久婷| 国产亚洲99久久精品熟女| 丝袜大香蕉| 婷婷的色色五月天| 色婷婷丁香| 婷婷在线五月天观看| 六月丁香色色色| 丁香五月大香蕉在线99| 风流少妇A片一区二区蜜桃 | 丁香五月天成人| 五月婷婷啪啪| 天天日天天爽夜夜爽| 天堂五月婷婷| 狠狠色丁香99| 婷色成人| 激情五月天之六月婷婷| 五月丁香好婷婷A片网| 婷婷丁香五月天综合激情| 99热亚洲| 五月天综合在线| www九九热| 激情五月婷| 午夜色丁香| 五月丁香婷婷人体| 欧美视频在线观看噜噜| 日韩 中文 欧美| 六月丁AV| 亚洲成人免费在线| 久久狠狠干| 97久久超碰| 五月丁香影院| 亚洲午夜一区二区| 久久婷婷丁香六月天| 国产激情AV| 免费看片操逼| 久久婷婷青青| 亚洲国产网站| ztEJj| 五月丁香婷婷综合| 婷婷五月色播放| 色99自拍| 夜夜爽天天干| 深爱激情五月天| 久久99热这里只频精品6学生| 六月婷婷激情| 五月丁香亭亭操逼| 五月叮香啪| 亚洲综合五月| 狠狠色综合五月人人| 人五月天婷婷喷水| 丁香五月激情综合婷综| AV在线大香蕉| 操逼福利视频| 九九热最新| 香焦网五月天| 久久婷综合| 91久久99久久91熟女精品| 婷婷99狠狠躁天天躁| 五月天播播| 日韩一级片| 97人人草| 99原创自拍视频在线观看| 婷婷丁香色五月天| 午夜福利8055| 成人亚洲精品| 色久综合| 国产永久一二一起草| www.jiujiujiu| 国产av基地| 97在线99| 色玖玖网| 香蕉中文在线| 综合天天综合| 成人性爱无码| 久久停停超碰| 99热思思| 九九久久高清| wwxx日本| www.久热| 色色色99| 99热欧美精品| 亚洲色情激情丁香五月| 影音先锋91| 99热在线播放| 人妻激情在线| 思思久久99热只有频精品66| 亚洲永久免费| 97婷婷五月丁香| 99人妻碰碰碰久久久久禁片| 丁香五月婷在线观看| 97人人操人人| 九九99偷拍视频| 玖玖色资源| 国产97色在线 | 日韩| 国产高潮A片羞羞视频涩涩| 涩婷婷五月天| 99这里只有精品视频在线| 色五月婷婷操逼| 成人一级片| 免费无码毛片一区二区A片| ww超碰在线| www.激情五月天。com| 热99只有里视频| 婷婷99狠狠| 九色视频入口91| 国产99热在线看| 婷婷五月天电影网| 99热这里只有精品26| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 午夜理论片最新午夜理论剧 | 这里只有精品在线视频精品| 婷婷激情图片| 色丁香五月| 六月综合婷婷开心伊人| 成人做爰A片免费看视频| yazhochengrenavwang| www色婷婷久久综合久色 | 色九月婷婷综合| 人人操人人爱丁香五月| 国产精品久久久爽爽爽麻豆色哟哟 | 日本三级韩三级99久久| 久久五月视频| 五月天天爱| 日本一级一级一级一级| 婷婷五月天AV| 狠狠 久久| 婷婷五月丁香在线观看| 天天爽天天操| WWW.天天日| 超碰99久久| 影音先锋综合网| 97色伦另类图片小说视频| 99热精品在线播放| 婷婷五月电影| 激情久久综合| 狠狠香蕉| 99热这里只有精品在线观看| 99热啪啪| 99这里只有精品|v| 性爱综合网| 色色9 9| 91操人视频| 婷婷五月花| 久久九九中文字幕| 啪色综合| av色色国产| 婷婷五月天伦理| 白天AV月月| 婷婷丁香色五月| 色九月| 五月色综合| 五月天五月天激情网| 99热久久这里只有精品| 久久人妻情侣| 影音先锋男人av资源站| 夜夜操夜夜操| 日本久久视频| www婷婷| 99热99色| ,99视频久久| 五月天婷婷综合| 97五月天婷婷午夜| 玩熟女五十AV一二三区| 日日日日操| 影音先锋91视频| 99网| 激情丁香社区| 国产亚洲在线| 97涩涩丁香五月天| 人操91在线| 激情五月图| av大香蕉| www.婷婷五月天,com| 色婷婷www| 丁香六月婷婷久久综合| 99色热综合| 国产色色色色色| 51XX午夜影福利| 欧美丁香婷婷五月| 亚洲综合网激情小说| 拍真实国产伦偷精品| AV国产有码| 婷婷久久婷婷| 狠狠色综合网| 亚洲综合色棒| 色婷网| 久久综合激情| 99思思热只有在这里看| 亚洲人妻Av| 色五月婷婷色| 五月天涩涩| 综合久久综合久久| 久久久婷婷五月天| 99热在线精品观看| www.五月天。com| 免费成人中文字幕| 天天插天天插| 日韩爱操视频| 激情五月黄色小说| 久久天堂色| 99色天堂| 欧美啄木乌丝袜人妻系列| 亚洲AV无码成人精品区电影网| 亚洲啪啪视频| 天天日夜夜B久久| 91ncm视频| 亚洲第一色色色色| www.97干视频| 国产91资源在线| 五月丁香婷婷网在线在线| 人妻啪啪啪| 婷婷六月中文字幕| 亚洲综合视频在线| 婷婷五月开心六月AV| 色欲婷婷五月天| 五月丁香六月欧美| 亚洲色情久久| 夜夜爱影院| 性生生活大片又黄又| 在线视频99| 日本熟妇人妻在线| 婷婷久热| 色综合久久综合| 亚洲精品99| 免费看成人747474九号视频在线观看| 丁香婷婷五月六月天| 思思99久久| 2015在线中文字幕| 亚洲亚洲人成综合网络| 伊人久久大香网| 日韩精品无码99| WWW,激情五月天,COM| 九九九九无码| 婷婷香蕉精品| 最近免费中文字幕大全高清大全1| 99人妻碰碰碰久久久久视| 丁香涩涩五月天| 色情性爱视频网址| 大香蕉婷婷丁香天堂AV| 成人永久免费视频在线观看| 久久久.www| 青柠影视免费高清电视剧| 婷婷操久久| 婷婷激情社区| 婷婷色成人| 日韩欧美四五区| 激情婷婷五月久久| 少妇高潮一区二区三区99欧美| 丁香五月婷婷激情中文| 91人妻人人操| 丁香五月天成人| 婷婷五月天网| 五月天成人伊人| 午夜婷婷| 婷婷激情五月| 99热99在线| 精品网站:999WWW| 久久久久九九九九视屏小说88| 国产欧美精品AAAAAA片| 97干在线视频| 91色色色| 综合色色网| 99色性爰网络| 99亚洲视频| www激情| 26UUU欧美激情一区二区| 六月丁香五月天| 婷婷五月天激情在线| 99视频在线观看视频| 亚洲99精品九九在线| 中文成人在线| 色色色色色色色五月| www.色婷婷.com| 五月丁香综合激情| 4438激情网| 色老久久| 亚洲操b| 夜夜操天天干| 性一交一乱一交A片久久四色| 婷婷伊人网| 婷婷丁香五另类网站| 大香蕉久久久久| 99九九精品| 色色色色色色网| 在线播放中文字幕| 九九热精品| 国产精品久久久久久久久久免费 | 成人片黄网站色大片免费毛片| 无码日本精品XXXXXXXXX | 欧洲MV日韩MV国产| 91人妻人人操| 婷婷五月中文字幕| 婷婷色在线观看| 色婷婷丁香五月| 五月婷婷黄色| 激情五月丁香五月色| 婷婷五月天av小说| 天天综合五月天| 99久.| 日韩免费乱轮网站| 国产在线另类五月婷婷| 5月婷婷6月六月丁香| 123草逼网| 人人操五月天| 色啪久| 色青五月天| 男女99免费视频| 久久99热这里| 五月叮香啪| 日韩av在线电影| 99碰碰| 国产成人网址| 丁香六月婷月91婷月| 欧美天堂久久| 九九亚洲| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 91在线视频观看午夜福利| 亚洲在线成人| 天天舔天天插天天爱| 色五月丁香在线| 这里只有精品视频免费在线观看| www色五月| 日韩野外 无套| av在线观看网站| 丁香五月婷婷色综合基地| 另类综合婷婷五月天欧美视频| 在线中文字幕av| 成 人片 黄 色 大 片| 9色在线视频精品观看| 婷婷导航| 色色日本| 夜精品无码A片一区二区蜜桃| 超碰中文字幕在线| 99热这里只有精品98| 激情五月小说婷婷| 九九婷婷五月天影视| 五月丁香激情综合网| www色婷婷| 久久大香蕉伊人| 中文字幕丰满乱孑伦无码专区| 人人人舔人人人操人人人摸人人人97| 99久久性爱| 99艹精品在线观看| 久久99最新| 免费看欧美成人A片无码| 天天日夜夜| 99日精品视频| 五月丁香六月婷婷综合网缴情| 色五月在线播放| 无码G高清天| 婷婷五月激情综合| 激情五月天综合网| 色色COm| 国产综合81p| 婷婷在线视频| 综合色网站| 噜噜噜精品欧美成人在线观看| 五月婷婷激情色情网| 婷婷人人操| 亲子乱AV-区二区三区| 中国丰满熟女A片免费观| 久热这里| 丁香五月中文字幕| 亚洲丁香五月天视频| 中文成人在线| 梁铮版《蜘蛛女侠》在线| 久久婷婷内射| 婷婷色偷拍| 人人草人人爱手机视频看看| 被强行糟蹋的女人A片| 91丨九色丨国产打屁股| 日亚二欧美| 卡视频1区2区| 99er热精品视频| 老师高潮流白浆喷水的A片| 六月综和久久| 91碰碰| 俺来也综合网精品一区| 超碰在线成人| 婷婷九九| 99色在线视频| 超碰超碰在线| 丁香五月婷婷手机| 色婷婷丁香五月高清在线| 网色99| 超碰国产AV| 久久人妻久久| 丁香花五月天婷婷成人社区 | 996热re视频精品视频这里| 青青草网武则天| 亚洲五月丁香六月婷婷| 五月婷婷乱| 色婷婷丁香五月高清在线| 99av视频| 免费AV在线| 四色五月婷婷| 五月综合在线婷婷图片| 丁香五月 激情文学| 久久9视频| 亚州激情在线视频| 97色干| 婷婷她六月天| 八戒青柠影视剧在线观看| 激情 五月 婷婷 丁香| 亚洲色99| 99在线观看精彩视频| www.天天干| 热久久66| 九九色黄色| 几激情五月婷婷色五月色天堂| 婷婷丁香色性爱| 久久综合首页| 日韩欧美一级大黄网站| 中文字幕在线观看视频www| 另类五月婷婷| 激情五月婷婷综合网| 99热久久这里只有精品2010| www.99精品视频| 久久人人九九| 五月色丁香综合| 人人色人人弄人人操| 99成人小视频| 91要啪| 99re这里只有| 天天日天天做天天操| 婷婷中文字暮| 99色婷婷视频| 婷婷五月激情片| 国产综合A片| 成人在线视频一区| 安息电影在线观看完整版| 久久无码成人| 久热99热| 2025中文在线视频字幕免费观看| 偷拍九九热| 思思99热| 日韩一66精品| 开心五月婷婷综合在线精品素人| 久久婷五月婷| 色五月婷婷丁香婷婷| 第1影院之五月婷婷| 91精品久久久久久77777| 婷婷五月天少妇| 色九月综合网| 国产激情视频在线观看| 婷婷五月在线播放| 精品99这里有| 免费成人中文字幕| 久久久久9| 日日操天天| 亚洲精品亚洲人成人网| 99A片| 另类天堂| 99热国产这里只有精品| 久久久妻人人人| 精品国产a| 婷婷五月色播| 久久九九色| 96人人操人人操人人| 伊人久久大香线蕉综合网站| 中文字幕成人| 99啪啪网| 激情五月四色| 欧美大奶熟女噜噜噜噜| 婷婷五月丁香花综合| 97在线观看| 色五月色五天色情网| 丁香五月婷婷在线视频| 色热久资源| 九九re视频在线视频| 桃色五月天| 无码人妻电影| 色综合色综合色综合色综合| 日日夜夜青青草| 欧美婷婷日本| 99热在线看| 中文字幕婷婷9月天| 欧美日韩999| 亚洲美女网Va| 凹凸操Av| 蜜臀九九九九| 人人澡天天色天天做| 国产视频福利| 5Www色5夜| 精品人妻伦九区久久AAA片| 欧美 日韩 成人在线| 婷婷色5月激情网| 678五月丁香亚洲综合| av中文在线| 久久精品99久久久久久| 综久久久| 伊人五月婷| 成人精品视频99在线观看免费| 粉嫩av懂色av蜜臀av熟妇| A久久| 亚洲激情.com| 六月丁香激情综合| 天天色天天噜| 天天婷婷操| 激情综合自拍五月婷婷色五月| 久99视频在线观看| 蜜桃婷婷狠狠久久| 日本久久人| 99内射视频| 久久婷婷五月激情综合| 日韩AV一区二区三区| 色99久草在线| 日韩99色| 久久婷五月婷| 久久激情视频| AV在线大香蕉| 精品草原久久视频| 99视频地址| 久热伊人9| 国产片XXXXA片国语对白| 大香蕉综合| wwW天天干| 丁香五月久久| 六月丁香狠狠爱| 久久精品天| 热婷婷在线视频| 97丁香视频| 91精品啪| 日本天堂免费99| 婷婷终合色图| 国产综合视频婷婷| 婷婷九月色| 五月婷婷新网站| 激情深愛五月視頻| 婷婷丁香水多多视频| 婷婷丁香五月天综合网| 五月丁香婷中文字幕 | 五月 婷婷 成人| 五月亚洲| 久热中文字幕| 激情五月天综合网| 777精品久无码人妻蜜桃| 大地9中文在线观看免费高清| 图片区 小说区 区 亚洲五月| 人妻丰满精品一区二区A片| 麻豆观看夏晴子| 91国产精品视频播放| 色五月婷婷天堂| 先锋资源91| 欧美天天草人人草| 五月天婷婷丁香花| 午夜色丁香| 97碰碰视频| 五月婷婷色五月| 亚洲爆乳无码精品AAA片蜜桃| 六月婷婷毛片| 色综合狠狠色| 无码九九| 婷婷伊人久久综合| 91日日日| 九九碰九九爱97| 日逼影音先锋男人AV资源站| 超碰免费电影| 日本色道视频网站| 国产美女精品| 99视频在线精品| 五月花免费视频| 色婷婷8| 色玖玖玖| 国产日批视频| 五月丁香777| 久热伊人| 3p九色在线| 成人一级片| 五月丁香六月婷婷免费| 色偷偷五月天| 色婷婷av在线观看| 久久五月天激情婷婷| 亚洲色啪| 亚洲国产色色| 色综合色色色| 色婷婷另类| 天堂AV三级| 婷婷五月天精品| 五月天婷婷社区| 99精品手机在线视频| 日本一级一级一级一级| 色噜噜狠狠狠综合曰曰曰| 黄网免费观看| 人人肏逼视频在线一区二区| 色情五月综合婷婷| 狠狠操性爱av| 激情五月影院| 久久一品区| 色婷婷4| 婷婷午夜综合| 日韩AV中文在线观看| 久久久久久久97| 五月综合六月婷婷| 色五月综合| 综合激情专区| 精品成人无码A片观看香草视频 | 激情综合网色五月| 婷婷丁香五月天小说| av在线免费播放| 99九九99九九九视频精品| 亚洲视99| 欧美激情综合色综合啪啪五月| 亚洲日韩成人三级av| 超碰av在线| 可以看的av网站| AV网在线| 婷五月丁香俺| 久婷婷婷| 一区二区传媒视频| 亚洲99手机免费看视频| 可以看的av| 久久九九玖玖| 欧美这里只有精品| 久久婷婷一级片| 天天色天天爱天天舔| 激情AV| 天天日日天天| 79精品视频| 免费视频WWW在线观看网站| 五月婷色色| 天堂久久精品| 综合亚洲色色| 色欲天天综合网| 五月婷婷综合性爱噜噜| 99狠狠操一| 亚洲艹网| 极品 少妇 内射| 97狠狠色| 九九日伊人| 狼人久草| 五月婷深深爱激情网| 久久性爱视频| 色五月综合| 大香蕉婷婷久久| 久草网大香视频| 激情综合色播| 激情综合五月丁香六月婷婷| 激情丁香网| 亚洲成av人影院| 婷婷五月天视| 深爱五月天| 99er这里只有精品视频| 99碰超| 色综合激情| 色播播五月天| 久九色| 人人干女人| 五月丁香婷婷老司机| 三级三久久线久久99久目本WW| 天天日天天操心| 狠狠爱夜夜| 九九精品热播| 9久久久久| 日日操天天爽| 中文字幕性爱视频| 久久日韩婷婷五月| 色婷婷丁香五月天在线观看| 精品操逼一区二区| 99热这里只有精彩| 亚洲AVDVD| 天天综合精品| 五月丁香操婷逼| 日韩AV大全| 五月总合激情网| 久久9视频| WWW、日本色丁香、co m| 日本熟妇乱妇熟色A片蜜桃 | 国产精品久久久久久久久久久久| 婷婷五月天va| 久久九九激情五月天| 激情五月少妇| 99五月婷| 久99| 色五月 激情婷婷 综合五月天| 超碰v| 色爱终和网| 亚洲国产色婷婷| 97狠狠色| 99热国内| 淫视馆av三区| 97碰碰视频| 五月天无码| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 五月天丁香婷| 天天操比比| 五月丁激情| 久久艹网| 五月丁香婷婷色| 五月婷婷狠天天色综合| 婷婷九月久久| 伊久久婷婷| site:picc-up.com| 97操女视频| 伊人久久艹| 五月丁香天天| 97人人看一| 婷婷丁香五月综合| 热99精品视频| 91人操| 国外亚洲成AV人片在线观看| 可以免费看AV网站| 色娸娸综合网| 噼里啪啦在线观看免费完整版视频| 无码人妻一区二区三区免费九色| 射久久丁香五月| 久久久久久久久久8888| 日日爱699| 日韩另类| 人妻视频一区而且二区| 91热在线| 狠狠干伊人| -91九色大屁股| 精品国产AV色一区二区深夜久久| 天天爽天天| 99热www.| 色老久久| 六月五月婷婷| 日本WWW九九九| 日本一级一级一级一级| 玖玖热视频| 久久一热免费视频| 91色干| 99re在线播放| 激情婷婷五月| 久久婷出差欧美色两性综合网| 成人色图情色成人网 www.5b5b5bcom 五月天 | 91色涩| 五月婷婷免费视频| 天天搞夜夜六| 99亚洲综合| 天天日日爽| 99在线精品免费视频| 五月婷婷香| 丁香六月婷婷色XXXXX| 伊人婷婷激情| 天天综合干| 五月综合婷婷久久在线| 热这里| 热99精品视频| 激情五月婷婷五月丁香五月开心五月| 成人五月天视频| 涩涩五月天| 久久综合干| 五月开心网| bukadeavzaixian| 精品国产人人爱人人| 久久这里有精品| 国产精产国品一二三在观看| 欧美操我| 人妻熟妇六区| 丁香六月情| 中文字幕av亚洲| 久久99热这里只有精品23| 综合网啪| 超碰69天堂| 久久五月婷综合网| 五月综合色| 婷婷不卡基地| 激情伊人五月婷婷久久| 丁香六月婷婷色播| 婷婷开心综合人妻小说网址| 日本欧美成人片AAAA| www.色综合.com| 91操片| 开心日韩丁香婷婷五月| 5月婷婷激情在线| 国产XXXX搡XXXXX搡麻豆| 亚洲AV免费国产电影| 天天骑天天操| 色色五月婷| 人妻体体内射精一区二区| 久久蜜臀婷婷| 婷婷放心五日爱| 五月天综合影院| 欧美99热| 香蕉五月婷婷| 人妻自慰在线| 天天爽天天操| 国产又色又爽又黄又免费| 九九99在线| 色青五月天| 激情内射人妻1区2区3区| 九九热10| 久久精品国产精品| 69激情小说| 久久九九Com| 五月婷激情| 中文字幕日韩成人| 色九区| 99久久a线观| 99免费超碰在线| 日本va欧美va欧美va| 色婷婷综合影院| 五月婷婷啪| 久久在线视频只有这里有精品| 日本乱子人伦在线视频| 天天干com| 超碰人人91| 五月婷婷丁香| 99精品大片| 久久九九网| 无码视频国内精品久久久| 九九精品热| 五月总合激情网| 百度一下国产精品A| 一月婷婷色色| 人人爱天天摸摸天天爱| 97性高潮久久久| 久久久久人妻网址| 超碰在线中文字幕| 国产寻花在线| 国产欧美日韩综合精品一区二区| 国产亚洲99久久| 我要射综合| 中国女人做爰A片| 69堂午夜视频最新地址| 国产欧美日韩综合精品一区二区| Av性爱网| 操91综合网| 五月天播播中文字幕| 久久久久久9| AVDV久久| 永久地址 色| 日本久久人| 久久人妻精品| 日本AAAAAAAAAAAAAA片| 婷婷五月电影院| 久久久精品99| 99热最新国内| 疯狂做受XXXX高潮A片动画| 狼人婷婷综合| 玖玖资源在线视频| 色99综合视频| 激情五月综合视频| 九九Av| 综合网啪啪| 99热99天堂| 青青草婷婷久久| 婷婷干| 色五月色综合| 国产精品第一国产精品| 俺去也婷婷| 狠狠色综合网| 亚洲激情在线| 99热这里| 色情五月综合婷婷| 久久怡红院| 99久久综合网| 丁香六月婷婷综合| 婷婷综合网| 国产精品国产成人国产三级| 久碰视频| 日日操夜夜擼| 日韩色色色色| 亚洲日比视频| 九月av在线| 91婷婷色| 欧美激情五月天在线观看| 婷婷激情视频| 五月丁香婷婷欧美| 亚洲激情高潮| 日本理论久久| 日韩成人无码| 成人看片网站| 五月婷激情影院| 九九综合色| 婷婷五月天播播| 亚洲中文乱字字幕在线永久| 五月丁香六月情亚洲| 丁香六月狠狠干| 久久婷婷激情久久| 色五月色情| 碰人人97| 五月天激情亚洲| 日操熟女| 人妻免费网站| ww超碰在线| 色五月婷婷影视| AV在线二十六页| 99艹精品在线观看| 婷婷香蕉视频| 99碰碰中文| 色五月97| 五月6香色婷婷视频| 深爱激情五月天色婷婷| 5月婷婷6月六月丁香| 五月婷婷六月色| H亚洲| 欧美日韩成人在线| 午夜做爱影院| 超碰在线成人| 国产综合81p| 甈你aaaaa| 激情婷婷五月| 在线看黄色| 人人做人人看人人摸| 婷婷99狠狠躁天天躁| 久久性爱激情| 五月婷婷在线网站| 中文字幕黄色片| 日韩三及成人AV片| 五月丁六月婷| 婷婷五月影院| 亚洲色五月| 久久五月天视频| 五月激情久久| 六月丁香激情婷婷| 婷婷五月天小说| 国产激情久久| 色婷婷综合久久久久| 色婷亚洲五月丁香| 五月丁香六月婷婷综合网站| 丁香五月大香蕉在线99| AV天堂淫乩| 亚洲AV免费在线| 婷婷五月情色| 丁香五月av在线| 99热97| 超级碰 久久9| 日本久久婷| 久色视频| 99riAV成人在线视频| 欧美成人无码高清一区二区三区| 中文在线成人| 免费操超碰| 天天舔天天摸天天透| 日本强伦片中文字幕免费看| 亚洲 精品 综合 精品| 97婷婷狠狠| 六月丁香五月婷婷| 亚洲激情av| 超碰无码318604| 九月色婷婷综合| 538在线精品| 亚洲AV网站| 五月天婷婷综合网| 色五月丁香91| 性小说五月天| 99无码视频| 色狠狠综合| 天天色99| A级毛片高清免费不卡播放谢谢谢谢| 激情的五月| 欧洲色色| 99热20| 五婷婷综合网| 极品人妻VideOssS人妻| 五月婷婷久久久| av国产精品| 99视频久久| 久久er这里只有精品| www99精品日韩| 婷婷五月天网址| 色婷婷成人在线| 九九久久精品國產| 色婷婷综合视频| 第五色色色婷婷| 美女丁香五月天| 五月亭亭色| 亚洲亚洲人成综合网络| 色丁香五月婷婷| 婷婷久久视频| 第五婷婷伊人丁香色| 影音先锋91网站在线观看| 五月激情天| 国产熟女日日骚五月丁香爱| 九九热啪啪| 九九伦子片| 99色在线| 91欧美日韩综合| 91人人爽久久涩噜噜噜| 久久色五月天| 五月天婷婷操逼视频| 思思热99er| 无码少妇高潮喷水A片免费| 欧美精品99| 五月丁香中文| 婷婷激情五月天小说| 久久亚洲色导航| 99在线观看| 国产激情av| 殴美日韩成人| 99re在线免费视频| 一本久久婷婷| 超碰日韩成人| 午夜天堂一区人妻| 九九99精品| 99热| 婷婷色六月| 99热手机在线精品| 亚洲小视频免费看| 婷婷性爱五月天丁香网| 成人综合网站| 成人免费在线电影| 成人在线视频一区| 99狠狠色| 丁香五月另类小说| 久久婷婷原创视频| 色色日本| 丁香色五月天| 色婷婷久久| 婷婷五月免费视频| 99色干|