欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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
返回資訊列表
五月丁香婷婷综合久久| 欧美成人A片AAA片在线播放| 国产肥白大熟妇BBBB视频| 五月丁香手机在线| 中文字幕日本最新乱码视频| 五月婷婷在线观看| 中文字幕黄色电影网址| 99热这里只有精品9| 激情五月婷婷| 成人免费120分钟啪啪| 午夜性爱影视一区77| 日本一级一级一级一级| 日韩精品二三区| 激情久久月| 99热免费观看| 久久九九网| 色色色成人网| 婷婷五月天激情综合深爱| 人与禽A片啪啪| 国产精品久久99| 99热只有| 色五月婷婷五月| 91日韩美女被插视频| 亚洲婷婷五月天| 久99综合婷婷| 国产99久久久国产精品免费看| 国色天香伊人狠狠色| 狠狠狠狠青草| www.久久99热地址发布| 久久精品在线| 激情丁香五月AV| 爱操人妻| 五月婷网站| 国产操逼网站| 五月天婷婷基地| 色狠狠伊人久久五月丁香| 99久久婷婷精品视频| 好好干av| 五月丁香久久久久| 中文字幕精品无码一区二区| 91九色中文| 成人五月天在线观看| 国产AV一区二区三区最新精品 | 久热九九| 99国产精品白浆在线观看免费| 天天五月情| 99.N在线视频| 五月婷婷色欲| 国产 码在线成人网站| 狠狠五月丁香色婷| 色婷婷久久综| 91久女| 日本丁香五月| 久久午夜理论| 91九色在线| 熟妇无码乱子成人精品| 天天干天天干天天干| 丁香婷婷激情综合五月激情| 99热只有精品在线| 秋霞AV吧| 这里只有精品久久| 99热只有| 欧洲第一久色| 婷婷伊人激情婷婷| 婷婷啪啪| 久久性刺激| 亚洲亚洲人成综合网络| 久久婷婷六月综合| 五月婷婷亚洲色视频| 欧美性二区| 色五月激情五月| 五月天成人在线视频网站| WWW丁香五月| 丁香视频| 五月色激情综合网| 婷婷色色网站| 色婷婷影院| 夜夜骑天天操| 成 人 色 色| 九色91美女| 天天躁日日躁狠狠躁日日躁2022年5月9日| 五月天亭亭俺也| 丁香婷婷月| 婷婷五月天,影院| 26UUU欧美激情一区二区| 被强行糟蹋的女人A片| 97干视频在线| 五月婷婷在线视频| 五月天网站亭亭| 热无码A∨| 五月久久网| 99视频内射三四| 五月天综合| 6080av| 色情五月综合婷婷| 99九九热在线观看| 67194中文字幕| 亚洲中文字幕翔田千里| 天天干,夜夜爽| 五月天激情网图片| 色色色综合网| 久久人人妻| 伊人网色婷婷五月天| 丁香五月婷婷六月婷婷| 亚洲综合在线视频| 久久婷婷五月天激情新地址| 国产亚洲色婷婷久久99精品91| 99热超碰人| 久久久五月天| 九九av| 色玖玖| 欧美Va婷色| 色五月开心五月激情五月| 久久作爱| 玖玖色综合| 丁香五月婷婷色情综合| caop在线| 69精品人人人人| 五月丁香激情怕怕| 九九九九综合| 日韩欧美五月丁综合| 激情视频91| 色五月色五天色情网址| 五月婷婷 激情按摩| 日本不卡一区二区三区| 91人人人人人| 亚洲免费成人电影AV| 日本精品人妻无码77777| 综激情网| 99热综合| 日本强伦片中文字幕免费看| 五月天天爽| 成人婷婷深爱综合网| 久久色五月天| 天天综合插插| 一区二区三区四区无码| Www,五月天| 久久这里只有欧美| 999热这里只有精品| 怡红院视频| 五月天综合婷婷| 五月天婷婷丁香社区| 婷婷色五月情| 激情五月,激情综合网| 九九热免费| 99r这里只有精品在线观看| 激情五月天色婷婷| 97超碰在线免费观看| 久久精品五月天| 九九久久99精品免费观看www| 欧美三级欧美一级| 色五月婷婷在线| 伊人综合网站| 久久丁香社| 日韩 中文 欧美| 久久婷婷91| 日日干五月天婷婷| 五月天婷婷导航| 婷婷激情丁香五月婷婷激情丁香五月婷婷 | 色综合激情| 丁香五月婷婷五月| 99热免费| 99在线视频操999| 男女av免费看| 欧美人人女女精品综合五月天| 日本婷婷在线| 六月色婷婷欧美| 五月宗合激情网| 五月在线| 五月丁香综合啪啪| 丁香花五月天婷婷成人社区| a九九热www| 日韩成人网址| 这里只有精品9| 欧美色六月婷婷| 这里只有精彩视| 天天综合五月天| 久9久9热久热| 98国产精品综合一区二区三区 | 婷婷性爱无码视频| 久9视频免费播放| 丁香五月人妻| 丁香五夜激情四射夜夜夜| 五月婷婷黄色毛片| 日日爽日日操| 日本一级| 99只有精品9| 婷婷丁香五月激情密臀av| 99热网址| 伍月婷丁香婷| 色五月激情网| 日日影院 | 啪精品| 丁香婷婷六月激情文学| 婷婷五月婷| 97福利视频| 中国无码av| 人人超碰99| 五月婷丁香花| 九九成人| 日韩av免费版| 思思视频精品| 久久东京热婷婷五月| 人妻内射一区二区在线视频| 午夜成人av在线| 91久久精品视频| 天天婷婷综合| 婷婷久久五月天丁香| 国产黄色在线| 丁香五月1页| 亚洲色色香蕉| 激情婷婷狠狠干综合| 亚洲操逼片| 国产色五月| 色色色综合网| 六月婷婷香蕉| 九九色99| 风流少妇A片一区二区蜜桃 | 午夜青草资源| 久久婷五月| 亚洲精品第一色色色色色色| 成人操呦av| 天天插天天| 九九色色| 2017狠狠干| 少妇激情五月婷婷| 五月天婷婷综合| 色婷婷四色| 成人婷婷五月| 精品一区二区三区四区五区六区| 91精品婷婷国产综合久久| 日本激情综合| 久久九九激情五月天| 婷婷综合欧美| 91狠狠色丁香婷婷综合久久| 99热最新精品| 日本一毛片| 无语停婷丁香网| 婷婷另类开心| 国产 码在线成人网站| 97成人在线视频精品| 亚洲精品性色| 亚洲欧美日韩VIP| 亚洲综人色综网| 狠狠色大香蕉| 99WWW免费视频| www五月天com| 成人 九九九九| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 国产一区二区av免费| 丁香五月六月久久综合| 中文av网站| 思思热久久艹| 九九久久综合| 99啪啪视频| 97碰人人操| .comwww在线观看免费操| 26uu| 国产精产国品一二三在观看| 丁香亚洲婷婷五月| 色婷婷综合久久| 夜夜骑日日夜夜| 26uuu最新地址| 天天色播| 免费视频99| 久热成人| 六月激情婷婷| 五月天婷亚洲天综合网综合| 嫩BBB槡BBBB搡BBBB| www.婷婷网| 色五月av| 色色丁香五月婷婷| 中文婷婷狠狠| 66色在线日韩| 九九aV| 激情久久丁香| 91热视频色网站| 久久99精品久久久久久噜噜| 91丨九色熟女丨首页| 五月色综合网| 五月丁香婷婷色色色| 五月婷六月| 99福利导航| 色婷婷五月天久久| 色色色色色色色色五月先| 日本久久高清| 思思久ren热| 内射爽无广熟女亚洲| 管管補管管紱| 五月婷视频| 五月天综合婷婷| 婷婷99狠| 婷婷丁香花五月天| 亚洲欧洲国产精品| 五月丁香久久| WWW色五月天| 在线看的免费网站| 深爱开心激情| 色婷婷狠狠爱| 国产黄色在线观看| 婷婷五月天AV在线| 天天弄天天爽| 182tv992tv人之初午夜免费观看| 97热在线精品| 99er免费在线观看| 色色色色色色色色色色色色色五月天| 久久婷婷激情| 99热这里只有精品1998| 五月天婷婷社区久久综合| 综合久久影院| 五月婷婷激情69| 操b视频在线观看一区二区| 婷婷内射视频在线| 日韩九九视频| 五月色情婷婷| 思思热在线| 色五月婷婷婷婷| 九九热婷婷| 99热免费观看| 五月婷六月综合在线观看| 91精品激情9| 天天久| 99热99在线| 中文字幕日本最新乱码视频| 综合狠狠干| 日韩99色| 午夜成人综合| 色色婷婷综合| 99精品综合视频| 九九热在线观看6| 淫视馆av三区| 79精品视频在线观看,| 人人爽人人爽人人爽人人爽| 亚洲无线视频| 人妻丰满精品一区二区A片| 日本色色色| 全亚洲最大的婷婷五月天网站COM| 春色激情| 91综合国免费久入| 色色五月婷婷丁香| 亚洲色色在线| 五月天激情网址| 五月婷婷激情| 久婷| 欧美丁香婷婷五月天| 大香婷婷| 91久久久久久| 久久艹99| 六月综合在线| 夜夜夜夜做天天天做无码视频| 伊人狠狠综合| 婷婷五月天激情网| 人妻久久婷婷| 五月婷婷真爱激情网| 新久久五月天激情| 成人视频在线免费播放| 超碰啪啪网| 六月丁香啪啪啪| 99热免费| 五月婷婷av| 2023天天日夜夜爽| 91热在线| 日韩黄色电影| av一区二区电影免费在线观看| 天天日天天插| 五月色色色| 99色免费观看全部| 欧美婷婷五月激情| 丁香五月激情啪啪| 综合色色婷婷| 人伦30P| 婷婷九月久久| 大香蕉综合视频在线| 99综合色色色| 天天干天天 亚洲| 91超级碰人人操| 99精品偷自拍| 九九综合| 99热在线播放| 五月丁香婷中文| 色色色色色色色色综合网| 婷婷五月永远18免费久久久| 九九热这里只有精品556| 午夜丁香综合婷婷| www激情网站| 67194中文在线| 亚洲精品字幕在线观看| 激情五月婷婷| 亚洲中文字幕av| 99色中文| 激情丁香社区| 亚洲天堂热| 直接看的AV| www.99热. com这里只有精品| 奸逼视频| 丁香五月天五码婷婷| 人妻AV在线| 开心五月综合激情网| 激情丁香久久久久久| 久草 tingting| 婷婷五月天97干| 久久综合九九| 一区二区成人电影| 99九无网码| 超碰99资源站| 中文字幕在线不卡| 99网| WWW.17C亚洲精品| 色色色图| 久久大香蕉同僚| 日韩av在线免费观看| 狠狠干在线| 婷婷刺激综合| 成人视频一区| 五月色网| 风流少妇A片一区二区蜜桃| 激情五月婷| 久热9| 久久狠狠干| 日韩啊啊啊| 99综合| 精品一区二区三区四区五区六区| 日本一级淫| 热日韩欧美| 亚洲视频另类| 久久色五月天| 一级片sese片.COM| 婷婷深爱五月亚洲综合| 色情五月停停丁香| 99这里是99在线视频| 五月天丁香网| 激情六月五月婷婷综合网| 久久机热这里只有 | 五月丁香亭亭成人电影| 五月人人丁香婷婷五月人人丁香| 久久人妻情侣| 99热这里只有精品3| 色五月五月婷婷| 激情婷婷五月| 丁香网站| 成人一区在线观看| 99艹精品在线观看| 99色激| aaaaaa片| 99精在线| 九九热这里| 中字幕视频在线永久在线观看免费| 无码91中文字幕| 玖玖热99| 伊人九九综合| 深爱激情四射| 人妻少妇色综合| 成人丁香五月| 丁香五月综合狠狠| 99在线资源| 亚洲第一色网站| 日韩十国产极品久久| 五月天激情小说| 开心激情网五月天| 久久日本wwww色| 伊人影院久久网| 五月婷婷在线短视频| 东北婷婷五月天| 26uuu日韩| 丁香五月天综合| 色综合久久久无码中文字幕999| 久草丁香婷婷五月天婷| 99热国产国产| 六月婷婷五月丁香| 国产毛片精品一区二区色欲黄A片| 丁香五月综合激情久久潮喷| 色婷| 夜夜躁爽日日| 国产成人精品一区二三区熟女在线| 天天综合色99| 天天网站天天爽| 五月色婷婷综合| 五月天伊人| 婷婷丁香婷婷97| 噜噜噜噜婷婷五月天| 丁香五月婷婷骚视屏| 97五月天| 丁香婷婷浪潮AV久久综合| 五月婷婷激情久久| 婷婷激情五月天在线| 九九碰九九爱97超碰| 艹B高清无码| 亚洲在线操| 青草激情在线| 久久婷婷热| 六月婷婷操逼| 白天AV月月| 婷婷丁香五月亚洲| 亚洲色图81p| 欧美丁香六月激情视频| 五月婷婷色色| 99热九九在线| 婷婷五月天第四色| 五月天大香蕉| 夜夜 操无码| 国产婷婷五月色情综合| 日韩丁香涩| 天天舔天天插天天爱| 丁香五月婷婷AV在线| 国精产品一区一区三区免费视频| 妇激情基地| 亚洲成人五月| 色五月激情图片| 爱之国产色情综合| 婷婷久草| 日韩色五月| 亚洲久久激情| 婷婷五月天大香蕉在线视频观看| 六月丁香婷婷尤物| 久热大香蕉| 五月婷婷人人人操| 天天综合精品| 精品一区二区三区三区| 午夜激情五月| 国产在线网| 婷婷色五月天第7色| 99热偷拍| 婷婷九月亚洲| 色色色色av色色色色| 人妻熟女一区二区AV| WWW.天天日| 久9热在线视频| 大香AV| 无码人妻一区| 婷婷狠狠综合网入口| 婷丁香五月天| 亚洲精品又粗又大又爽A片| 亚洲综合在线伊人婷| 99热播放| 日韩成人无码人妻| 婷婷午夜精品久久久| 99热九九在线| 久久亚洲天堂| 丁香五婷婷| 五月丁香花视频| 日韩在线成人电影| 五月丁香啪啪| 亚洲成人丁香花| 亚洲五月天天| 亚洲无AV在线中文字幕| 2023天天日夜夜爽| 人人摸人人操人人爱| 婷婷五月天黄色小说| 五月天激情AV| 在线色五月婷婷| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 嫩草AV久久伊人妇女超级A| 【乱子伦】黄色| 99热这里只有精品8| 激情五月天色色| 夜夜爽天天干| 久色视频在线| 丰满老熟妇BBBBB搡BBB| 六月婷婷色宗合| 综合aV在线| 99热这里只有精品 搜| tingtingseav| 九九色色| 丁香五月性| 日本狠狠色| 99热99思午夜精品| 丁香狠狠色婷婷久久无码视频| 亚洲精色| 91超级碰在线| 九九色综合九九色| 激情婷婷综合| www.五月天| 91色情播放| 美国不卡视频| 99日韩| 黄色99视频| 精品无码久久久久久久久| 先锋资源 996| 绿色小导航AV| 天堂A∨在线| 丁香六月综合激情| 日本乱子人伦在线视频| 丁香五月天啪啪a日本| 午夜婷婷久久| 九九久久99| 国产精品久久久丁香五月八戒视频| 五月丁香婷婷伊人日韩| www.久久爱.com| 亚洲成人综合在线| 国产亚洲精品久久久久久久久动漫| 色五月亚洲开心网| 激情五婷网| 国产精品久久久久久久久久| 91婷婷五月天嫩女| 26uuu青青| 影音先锋美国A| 六月婷婷国产| 99热99在线| 免费无码毛片一区二区A片| 国产亚洲精久久久久| 久久婷婷综合基地| 青柠影视免费高清电视剧 | 97福利视频| 九九免费视频| 婷婷五月天AV网| 精品人妻在线免费观看| 激情五月婷黄版| 五月婷婷激情四季| 婷婷第一页| 激情深爱五月天| 亚洲色综久久五月| 五月天综合网| 久久久无码精品成人A片小说| 丁香五月综合| 天天久久婷婷| 99热免费| 开心五月激情网| 天天婷婷天天| 婷婷射综合| 婷婷五月综合社区在线| 色情婷婷五月天| 色婷婷五月天视频在线| 91精品熟女| 色一情一乱一乱91Av| 亚洲精品字幕在线观看| 人人干女人| 丁香婷婷激情五月| 婷香五月| 亚洲视频1区| 亚洲精品99| www.色婷婷.com| 亚洲国产成人裸舞| 色婷婷WWW| 国产44页| 在线精品97| 五月丁香综合| 五月婷婷啪啪综合网| 狠狠干在线视频| 天天性视频| 9999热在线观看| 婷婷五月天99综合网站| 久久久久9| 天天色粽合合合合合合合| 99色热视频| 91九色在线| 婷婷丁香红五月91C| 色色色99| 成人视频一区| 在线观看婷婷5月| 久久久久人妻中文| 激情婷婷丁香色五月综合| 久久五月激情| 4399在线观看免费高清黄色视频| 99热九九九九| 丁香狠狠干| 1024人妻| 99亚洲视频| 大香蕉天堂| 婷婷免费视频| 秋霞电影理论| 婷婷成人五月天一区| 天搞天天天天天| 99热在线观看精品| 大香av| OUMEIRIHANCHENGREN| 夜夜嗨一区二区三区直播内容| 亚洲色五月婷婷| 亚洲综合色色色| 色香久久| 26uuu国产| 啪啪小说五月天| 女力报到正好爱上你| 五月婷婷色丁香| 欧美天天五月丁香免费观看| 日本99视频| 黄色三级日本| 91人人操.COM| 亚洲愉拍99热成人精品| 久久婷狠狠色| 97狠狠色| 婷婷综合网| 丁香五月天婷婷在线视频| 色激情综合| 97操视频| 2015好吊操| www.天天色综合| 婷婷五月丁香综合亚洲 | 婷婷四色五月| 欧美色骚婷婷五月天| 婷婷五六日| 天天天天天操| 麻豆五月丁香婷婷| 久久婷婷五月综合伊人| 亚洲第一第二网站| 婷婷综合在线| 五月激情婷婷国产精品久久久久久| 五月丁香婷婷成人网| 五月婷综合| 国产精品美女| 67194成I人在线观看线路1| 免费婷婷| 激情五月天视频| 午夜天堂一区人妻| A片天天| 婷婷五月天干干| 欧美丁香婷婷五月天| 日本天天色| 在线看片av| 天天插天天干| 97在线观视频免费观看 | 五月丁香直播| 五月六月激情| 五月天综合网| 色五月天婷婷| 97在线观视频免费观看| 超碰人人妻| 另类激情五月| 丁香六月天AV| 六月色丁香中文字幕| 第五色婷婷| 日本在线视频www色| 九九色逼| 亚洲综合成人网| 青吴乐视频| 99精品高潮| 五月婷亚洲精品AV天堂| 激情婷婷亚洲五月| 天天色色天天| 亚洲五月天婷婷| 亚洲色无码A片一区二区麻豆| 婷婷综合久久综合| 久久婷婷综合基地| 337p午夜影院| 色婷婷五月在线| 欧美99热| 九九精品9| 成人婷婷| 99色1| 婷婷五月花| 99久视频| 久草嫩草在线观看| 国产成人AV在线| 婷婷色香六月综合激情| 五月婷婷真爱激情网| 另类小说五月天| 天天色天天操天天射| 九九 激情 网| 伊人六月无码视频| 久久99激情| 大地资源色婷婷视频在线| 人妻激情网| 9er热在线精品视频| 色婷婷五月天小说| 大香蕉啪啪啪| 五月婷婷精品视频| 亚洲小视频免费观看| 丁香六月婷婷综合在线| 九九热免费| 日本三级日本黄色| 欧洲永久精品| 99这里都是精品| 色色欧美色色| 婷婷五月天色色| 五月丁香花激情综合网| 国产精品大香蕉| 欧美人人草草| 激情婷婷综合| 91肏| 99热在线播放精品| 都市激情蜜桃婷婷五月天| 五月天开心婷婷激情网站| 九九热视频在线观看| 亚洲视频无| 五月丁香婷婷激情| 97超碰综合| 婷婷中文字幕欧美| 日本a片网址| 婷婷五月花| 五月做爱| 五月激激网w'w'w| 五月婷婷狠狠干| 五月婷婷综合色啪首页| 思思视频精品| 婷婷色五月婷| 在线播放成人| 五月婷婷综合色啪首页| 婷婷五月激情图片| 99精品国产在热久久婷婷| 婷婷激情5月| 久久精品99国产精品日本| 91婷婷在线| 欧美黄色韩日网| 五月天丁香婷婷久久九| 亚洲色色图片| 欧美va在线| 女同激情久久av久久| 26UUU欧美| 色婷婷激情Av久久久| 97色色色视屏| 天天玩夜夜操| 成人在线不卡| 天堂色婷婷| 激情伊人| 免费看成人747474九号视频在线观看| 99热日韩| 综合欧美五月婷婷| 精品综合五月| 精品无码久久久久久久久| 久久久人妻不卡| 五月玖玖| 97性视频| 天天爽天天日天天舔| 婷婷九九色| 天天夜天天色天天| 成人草榴视频| 婷婷五月天六月综合| 这里只有精品视频在线| 天天曰夜夜爽| 五月开心激情| 99综合视频| 色狠狠色| 亚洲精品视频在线| 九九無妻| www.色婷婷.com| 日日爽夜夜爽| 99久久精品国产色欲| 久久美女五月天| 成人VAV视频在线观看| 爱草人视频| 亚州激情九月| 五月丁香网站| 先锋资源91| 激情綜合網址| 成人丁香五月| 玖玖热视频| 精品国产va久久久久| 五月天激情国产综合婷婷婷| 五月丁香爱婷婷深深| 乱岳熟女50岁| 婷婷五月天深爱| 草草女人亚洲| 久久欧洲综合网| 蜜乳AV成人| 99色色视频| 七七九色| 依人大香蕉| 深爱 五月天| 天天干天天拍| 色综合天天网| 九色视频入口91| 婷婷久久色| 激情图片99| A片一曲| 99视频内射三四| www.久久| 丁香色五月婷婷91桃色| 色色综合院| 婷婷激情人妻| 色婷婷五月天天天天天| 97碰碰碰免费公开在线视频| 五月丁香六月情亚洲| 九九综合五月欧美| 六月丁香婷婷综合狠狠爱夜夜爱| 俺来也综合网精品一区| 99ER热精品视频| 牛牛碰免费| 久久99久久久| se99视频| 激情小说 五月天| 色色婷婷婷丁香五月天| 伦乱天堂| 六月色婷婷欧美| 蜜臀AV在线观看| 色婷婷成人五月| 色婷婷777狠狠| www久久99| 日撸夜撸日操| 在线播放成人| 婷婷五月丁香基地| 激情婷婷另类| 色婷婷性爱| 99久热| 我爱宗和色| CAOBIBI| 激情综合网五月激情| 逼逼AV| 九色PORNY在线精品酒店| 99亚洲精品视频| 天天爽综合| 婷婷99狠狠躁天天躁中文| 另类视频五月天| 色婷婷先锋| 婷婷射丁香| 男女啪啪做爰高潮无遮挡| 天天操天天操天天操天天操天天操| 99热老网站| www.丁香六月婷婷久久天堂影院.con| 久操综合| 激情五月天网页| 啪啪夜久久| 丁香五月激情综合| 五月天偷拍| 激情综合色| 99热热这里只精品996小说| 天天做综合| 日日操夜夜操中国无码| 五月婷婷天堂| 人妻操操色| 超碰在线国产| 9精品国产在热久久| 99热免| 激情五月影院| 五月天亚洲最大成人| 狠狠色噜噜狠狠| 少妇AB又爽又紧无码网站| 五月婷婷综合视频| 色五月成人网| 99久久99九九99九九九| 内射 无码 伊人| 色婷婷久久久| 久香草视频在线观看| 99熟女| 91丨人妻丨国产丨丝袜| 久碰视频| 97人人搞| 强伦轩人妻一区二区电影| 成人婷婷桔色| 丁香五月网址| 婷婷综合在线网| 欧美日韩999| 丁香九月综合| 婷婷丁香五月综合网上| 婷婷激情五月天网站| 三日本无码| 色综合色色| 婷婷欧美综合| 五月婷婷五月丁香| 天天拍久久| 五月丁香网av| 五月丁香久人妻中文| 久久五月热| 国产婷婷色综合AV蜜臀AV| 婷婷综合一二三| 九九热视| 色性五月天| 激情六月五月婷婷综合网| 超碰在线人人| 国内久久亭亭| 五月丁香色色色| 国产AV一区二区三区最新精品| 九九热超碰| 久久新地址| 色五月丁香婷婷久草| 亚洲国产va| 91啪级电影| 丁香五月天无码AV| 成人欧美日韩| 五月天婷婷色色网| 丁香五月婷婷亚洲激情四射| 深爱开心激情| w婷婷五月婷婷w| 五月天色不卡| 丁香五月婷婷影院| 婷婷狠狠久久| 婷婷久久夜| 五月婷婷开心深| 婷婷丁香人妻天久久| 色婷婷色| 99色日本| 天堂综合久久| 色婷亚洲五月丁香| 国产精品成av人在线视午夜片| 无码 av电影| 欧洲第一无人区观看| 天天日天天舔| 久久婷婷五月天激情四射| 亚洲美女网Va| 五月六月婷| 九热视频| 538在线精品| 婷婷五月影院| 激情五月天婷婷| 天天爽天天爽| 天天爱天天秀天天做| 丁香婷婷婷五月| 99re思思热久久| 色欲色香综合网| 国产性爱亚洲是图| 99re26视频| 婷婷色爱| 九九热在线视频观看| 五月天啪啪啪| 99激情视频| 国产精品色婷婷99久久精品| 综合久久久| 六月丁香综合| 96丁香六月婷婷蜜桃综合久久| 婷婷五月天无码视频| se99高清无码| 全亚洲最大的婷婷五月天网站COM 丁香五月婷婷狠狠色 | 99热 精品在线| 碰97 久| 丁香花大香蕉婷婷综合| www.色色com| 色色色色色日韩午夜激情| 色97啪啪| 成人网站av免费网站推荐| 成人一区在线观看| 91超级碰在线| 黄网免费看| 久久网站免费亚洲| 梁铮版《蜘蛛女侠》在线 | 色香欲综合| 夜精品无码A片一区二区蜜桃| 九色在线五月婷婷网址| www.久久色.com| 99久久97久久欧美综合网| 丁香五月综合无码趴趴| 婷婷五月天久久久| 乱女乱妇熟女熟妇综合网站| 五月婷婷综合色啪首页| 丁香婷婷人妻综合网| 五月婷婷基地| 久久久久人妻| 99re这里| 久久伊人大香蕉| 五月综合视频| 丁香五月桃花在线激情综合| 青青草99热久久精品国| 四色综合网| 日批在线看| 婷婷深爱五月| 色婷婷综合网| 久久综合26p| 五月狠狠| 九九热只有这里精品| 狠狠激情五月天| 五月天丁香网站| 99国产精品久久久久久久久久久 | 九九99精品| 天天插夜夜爽| 九九热在线99| 成人AV在线电影| 日韩丰满少妇无码内射| 99玖玖视频| 五月天色图| 六月婷婷网站| 九九大香蕉黄色影院| 天天色天天操天天射| 黄色aa观看aaguochan| 婷婷综合五月天| 玖玖九九99| 色五月激情五月开心五月| 婷婷综合网站| 中文字幕不卡视频| 黄色99视频| 无码操B| 激情丁香五月婷婷| 色护士综合| 综合激情伊人影视在线| 女力报到正好爱上你| 婷婷六月啪啪| 五月色亭丁香| 激情婷婷丁香五月天小说| 五月天婷婷影院影院观看| 激情www| 99热人人操人人操| 99re这里只有精品99| 伊人啪啪网| www.激情| 99人人操| 九热视频这里只有精品| 4399在线日本A片| 日韩成人精品中文字幕电影| 日本一级| 性天天中文网| 狠狠色成人影片| 丁香色影院| 日本婷婷网| 狠狠色丁香婷婷久久综合| 国产精品涩涩涩视频网站| 日本人人干| av免费人人| 亚洲色另类| www.久久婷婷| 色婷婷激情五月天在线观看| 天天色综网| av线电影| 五月婷婷久| 99热最新| 伊人网啪啪| 婷婷五月天亚洲综合网| 少妇日麻屄| 色婷婷五月综合| 亚洲中文字幕在线观看| 人妻狠狠操| 色九月婷婷丁香| 99色嘟嘟精品网站| 婷婷丁香午夜综合影视| 日本久热| 亚州激情九月| 另类图片 五月激情| 99re思思久久| 亚洲无aV在线中文字幕 | 色停停香蕉视频| 久久艹网| 日逼免费视频| 99天堂网| 97丁香五月| 亚洲天堂aaa| 草草夜夜操| 五月丁香激情综合网| 综合久久综合久久| 97操男人的天堂| 人妻操操色| 九九九九操逼| 婷五月天天| 精品丁香五月天在线播放| www.九九婷婷| 色五月天视频| 99国产精品白浆在线观看免费| 97久久超碰| 伊人婷婷色| 丁香五月手机视频| 伊人六月丁香婷婷| 狠狠色综合网| 大香蕉久久伊人婷婷五月丁香| 热久精品| 99在线综合视频| 99热99热| 天天日天天插| 99热欧| 五月天激情四射| 开心久久网婷婷| 亚洲激情97五月天| 97色精品视频 | 91操操| 久久香蕉网| 色五月成人| 亚洲精品无码久久| 91碰碰视频| www.minyis.com【JT】实力收量可预付QQ2101460746 | 婷五月丁香俺| 99热在线看| 99欧美| 久久婷色| 超碰成人av| 久热69| 亚洲99在线| 亚洲免费观看高清完整版AV线| 99.N在线视频| 97人人看| 碰碰91| 色噜噜狠狠色综合网| 中文字幕av久久爽一区| 人妻人人操| 99欧美| 五月婷婷综合视频| 五月婷婷伦理| 欧美私人家庭影院| 五月开心婷婷| 九月丁香婷婷基地| 亚洲色情网站| av激情在线| 欧美精品999| 久久视这里只有精品| 亚洲精品又粗又大又爽A片| 五月天激情偷拍| 人妻久久久久久久| 爱草视频在线| 丁香婷婷AV| 新伍月婷婷| www.无码com| 五月色婷| 天天综合天天做天天综合| 五月天婷婷色播综合在线| 天天夜夜操| 永久免费一区二区三区| 久久停停超碰| 日韩欧美一区二区三区四区| 黄色录像网点| 亚洲激情无码久久| 天天操婷婷| 久久久婷丁香五月| 丁香婷婷老司机久操| 久婷五月| 婷婷久草| 国外亚洲成AV人片在线观看| 99色热视频| 色婷婷成人久久| 婷婷AV丁香| 免费超碰在线观看| 亚洲无码成人性爰网| 久久婷婷丁香| 色网五月婷婷| 丁香六月婷| 九九视频在线观看| xx色综合| 操一区| 久久一操| 九九AV| 热五月婷婷| 日本成人小说婷婷六月| 久这里只有精品99| 伊人狠狠色婷婷综合丁香一区| 欧洲色区| 夜夜骑夜夜撸| 国产精品久久久海的味道| 最新午夜理论片| 成人综合AV| 九九色插| 色激情五月天| 五月丁香啪啪啪啪| 精品皮股午夜AV| 99色色网站| 99在线视频播放| 欧美婷婷丁香五月| 五月丁香婷婷成人网| 六月婷婷久久| 婷婷情色激情| 色婷婷五月丁香在线观看| 色墦五月丁香| 国产91九色| 色天使久久综合| 99热国品| 色99视频| 亚洲色久| 射久久丁香五月| 97婷婷五月| 米奇影视资源婷婷狠狠色激情欧美五月丁香| 婷婷九月丁香| 77777亚洲午夜久久| 99免费视频久久| 99在线观看精品视频| 五月婷婷69| 99热99re6国产在线播放| 五月天激情综合网站| 五月婷婷啪啪啪| 男人的天堂五月丁香| 激情五月婷婷色色| 午夜少妇在线观看视频| 五月色综合| 丁香久久综合| 成人在线视频一区| 色五月女| renre人人操国产超碰在线 | 狠狠穞A片一區二區三區| 婷婷中文字幕网| 五月天激情综合| 欧美黄色AA片哗啦啦啦| 激情五月丁香综合网站| 99综合99| 五月婷婷久久开心网| 激情综合五月激情XXXX| 狠狠操综合| 五月丁香综合激情网| 另类伊人婷婷| 婷婷婷久久久| 婷婷 丁香 久久| 色色网91| 丁香婷婷综合喷| 欧美123区免| 国产黄色大片| 国产日韩欧美| 午夜大香蕉| 99只有精品|