欧美成人午夜精品久久久,国产?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
返回資訊列表
高清无码.com| 色婷婷大香蕉| 亚洲AV成人片无码网站| 丁香五月婷婷成人综合| 色欲影香| www超碰com| 九九99热久久精品66中文字幕| 色婷婷操逼| 五月天婷婷成人网| 色色丁香婷婷综合| 五月婷婷婷婷| 99色播| 亚洲影院婷婷色| www.99久久久| 五月激情天| 丁香五月色情av| 99热自拍| 大香蕉天堂| 99久久66| 热九九精品| 年轻的妺妺伦理HD中文| 日本久久99| 婷婷五点亚洲| 色婷婷亚洲在线| 91vip在线观看| 激情五月四色| 九九精品大香蕉| www.色综合| www.狠狠干com| 日日噜狠狠| 国产精品人人做人人爽人人添| 婷婷五月天色播| 久久只有精| 另类丁香综合| 五月开心播播网| 精品久久9| 狠狠做婷婷| 亚洲成人色五月婷婷综合| 九九色之九九色之88| 中文字幕免费高清电视剧| 97在线精品| 六月丁香婷婷综合在线| 五月丁香六月婷婷网| 99色啊| 色婷婷亚洲在线观看| 亚洲日本韩国| 在线免费视频caop| 超碰人妻公开在线| 丁香五月激情五月色综合| 日日夜夜狠狠| 亚洲V国产V欧美V久久久久久| 最新色色五月天| 久久偷拍综合五月天| 五月天婷婷激情干干| 久久精品五月天| 丁香六月婷婷社区| 香蕉网久久| 中文字幕久久婷九女同| 五月丁香六月色| 婷婷激情综合色五月久久91| 97人妻碰碰碰久久久久-最近国语高清| 婷婷色色亚洲| 亚洲九九婷婷| 激情图片亚洲| 激情综合亚洲色婷婷五月| 性 色 婷婷| 久久99三级在线视频| 色色图五月天| 婷婷涩五月| 9久久久久久久久久久| 精品久久婷婷| 五月丁香色婷婷婷基地| 99这里只有精品99| 五月婷婷导航| 久久九九色| www.婷婷五月| 日韩三十六页| 成人版视频在线观看| 五月丁香综合中文| 亚洲综合网区| 开心五月深爱五月丁香五月激情五月 | 精品人妻一区二区三区四区不卡在| 人人综合久| 婷婷情色五月天| 妻久久久久| 亚洲色色精品| 激情综合九月| 老妇六区| 九九色影院| 久久精品婷婷五月丁香| 欧美美女国产日韩一区二区久| 色青青五月| 亚洲九九九九| 激情久久久久久久久久久| 99热亚洲精品| 伊人热在线大香蕉| 在线播放中文字幕| 色婷婷色五月天| 棕合影院色色| 久久婷婷五月综合色和| 琪琪理论片| 思思热国产在线| 婷婷丁香五月综合免费视频百花| 99久久国产宗和精品1上映| 五月婷婷爽爽爽| 人妻无码视频网| 欧美婷婷丁香五月| 久久五月婷综合网| 99热99在线| 日本va欧美va国产激情| 强辱丰满人妻HD中文字幕| 狠狠综合久久综合| 影音先锋激情网| 色欲丁香久久| 欧美精品999| 激情内射人妻1区2区3区| 亚洲综合欧美色丁香婷婷888月图片 | 五月婷婷久久综合| 婷婷成人五月天成人文学| 国产高清RV综合aVa| 色播激情五月天| 色色色色色色色色网站| 激情久久 婷婷| 六月99天天婷婷激情综合| 色婷婷视频在线| 日本色婷婷| 久热这里只有精品在线观看 | 九九热99久久99| 99久热在线精品| 午夜婷婷五月天在线| 中文字幕,综合,91| 综合av在线| 激情综合久久| 在线成人网站| 久久婷婷网| 人妻内射麻豆视频| 丁香五月天视频| 色五月欧美| 丁香五月婷婷亚洲综合精品在线| 婷婷丁香六月| 激情婷婷五月女| 91综合色| 婷婷综合色色| 色爱综合网| 91日本在线免费| 秋霞学生妹一二级| 天堂无码人妻精品AV一区| 九九色图| 亚洲中文字幕网| 激情久久 婷婷| 五月婷婷网站| 97狠狠碰| 99超级碰碰| 99九九热视频免费| 五月天天爱| 丁香六月啪| 9精品在线| 亚洲五月婷婷| 99精品自拍视频| a久久| 国产在线视频1234| 亚洲第一综合| 婷婷91| 99九九综合久久九九| 日本欧特黄色刺激一区影视久精品无码| 热99只有精品| 无码一级片| 婷婷色狠狠| 99热黄| 日本VA视频| 九九综合五月欧美| 日韩久久视频| 国内裸舞二区| 五月婷婷香蕉| 激情五月天婷婷在线网址发给我| 婷婷色五月开心五月| 久久精品系列| 婷婷欧美色| 婷婷伊人| 99婷婷五月天| 久久久久久婷| 久99久视频| 五月激情啪啪| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 婷婷丁香在线| 国产婷伊人| 五月丁香啪啪综合网| 两性婷婷丁香五月| 人人操插| 天天撸夜夜爽| 99九九99九九九视频精彩| 激情综合区| WWW,激情五月天,COM| 99激情| 97婷婷丁香五月| 日本色超碰| 五日激情综合| 天天 日综合| 成人AV播放| www.色婷婷| 9+1视频网址| 国产小精品| 99热老网站| 色婷婷婷婷| 永久的网站AAAA | 99免费视频| 激情色中文| 色天堂婷婷| 色色色色色综合| 婷婷久久网| 琪琪色网在线| av在线资源| 久播影院免费观看电视剧大全最新网| 五月丁香激情啪啪| 婷婷五月丁香综合桃花色网| 国产精品久久99| 国产美女无遮挡裸体毛片A片| 婷婷丁香激情五月天色色| 人人操操| 色吧网91| 色99在线| 免费黄色视频网址| 五月婷婷综合网| 国产亚洲精品人人| 九九热99久久99| 婷婷色综合| 天天干天天射综合网| 丁香五月欧美色综合| 超碰只有精品在线| 五月天婷婷综合| 五月天开心婷婷激情网站 | tingting五月天亚洲| 丁香六月天婷婷| 99精品免费视频| 夜夜撸夜夜骑| 六月丁香VA| 99热这里只有精品1025| 超色欲天天| 99热热热99精品丁香| 六月丁香综合| 五月色丁香| 岛国AV网| 久久久久丁香婷婷五月天| 色噜噜狠狠色综合伊人| 婷婷六月丁香激情| 9久精品| 人操人人| 在线视频99| 人人操人人妻| 99久久国产综合精品五月天喷水\| 99热这里有精品| 99.N在线视频| 9久久婷婷国产综合精品性色| 五月天婷婷成人资源站| 婷婷十月丁香| 我爱婷婷五月天综合88| 九九热九九| 久久丁香婷婷五月| 射久久丁香五月| 色婷婷亚洲综合天堂| 婷婷五月天激情四射| 79色色色色| 思思精品久久艹| 99久久这里只有精品免费官网| 99在线视频色版| 五月天之色情综合网| 色婷婷狠狠久久综合五月| 国产av天堂| 色色色热热热| 国产在线aaa片一区二区99| 亚洲成人网站在线观看| 精品一区二区三区免费毛片爱| 九九久久网| 婷婷激情五月| 91操操| 九九99精品| 婷婷午夜天| 超碰99在线观看| 五月丁香激情四射| 日韩成人av在线| 色婷婷精品| 天天日天天干天天操| 五月丁香六月色| 五月丁香婷婷深深爱| 超碰网站在线观看| 六月婷婷激情| 中文字幕91,综合| 欧美综合123区| 久久综合中文| AV国产有码| 激情五月天免费视频| 99热99精品在线观看| 色婷婷色人人射| 五月天婷婷丁香社区| nvrentiantang av| 公的粗大挺进了我的密道| 丁香成人五月天| 在线看片h站| 99精品综合在线| 综合伊人久久| 天天干狠狠操| 丁香久久久| 午夜一区| 九九色院| 五月天婷婷影院影院| www.五月天社区| 99亚洲精品| 婷婷99狠狠| 色色色com| 97自拍99| 天天碰天天插天天操| 99热这里只有免费精品| 九九成人视频| 婷婷色吧| 青草激情在线| 中文字幕在线免费观看视频| 青青草婷婷五月天| 91婷婷丁香| 99热这里只有精品69| 五月激情婷婷国产精品久久久久久| 六月婷婷综合激情| 玖玖婷婷免费| 九九热在视频| www,色婷婷| 欧美大片| 六月婷婷天天操夜夜爽视频| 99热6这里只有精品| 婷婷玖玖五月天| 国产一区二区av免费| 欧洲一区二区| 五月婷婷之综合激情| 久久婷婷六月综合| 91人人操| 夜夜操天天干| 日本久久激情| www。五月天。com| 丁香六月激情| 99热爱爱干干日| 99热日韩| 久久久久久久11111111111| 五月丁香色婷婷色| 九九热这里只有精品6| 99精品国产在热久久| 久热99热| 丁香婷婷六月| 婷婷色基地在线看 | 久草A片| 丁香激情五月天| 丁香婷婷激情五月色| 1024操逼视频| 日韩精品超碰在线观看| 五月丁香亭亭| 五月婷激情影院| 成年人看Va免费视频| 91viP在线看| 免费看欧美成人A片无码| 国产免费AV网站| 九九热视频这里只有精品| 成人无码精品1区2区3区免费看| 99热国产精品| 亚洲天堂99| 日本99视频精品免费播放| 激情婷婷网| AA片在线观看视频在线播放| 激情综合激情五月| 婷婷五月天A V| 综合狠狠五月婷婷| 久久桃花网色婷婷| 99热成人在线观看| 9久热在线精品| 五月激情网络| 一级无码作爱片| 丁香六月婷婷色XXXXX| 日韩aaaaa| 五月婷婷激情刺激| 最近韩国日本免费高清观看| 六月丁香婷婷开心综合基地| 久操乱| 婷婷五月天日本无码| 艳妇野外情欲放荡HD| 日韩一区二区三区无码| 日本不卡高字幕在线2019| 丁香五月天啪啪| 综合色五月天| 国产超碰在线| 99热99热99热99热| 久久婷婷丁香视频网| 日日操天天爽| 91精品国产99久久久久久天美| 新激情五月天天在线网| 久久九色| 92久久精品一区二区| 色综合久久天天综合网| 操操熟女| 色墦五月丁香| 无码激情精品色婷婷久久久久| 免费无码毛片一区二区A片| 深爱网深爱综合网| 特黄三级又爽又粗又大| 久久婷婷综合网| 久久在这里有精品| 日本欧美999久久久三级片| 色五月激情五月| 最新色色五月天| 色色激情五月天| 激情五月天网页| 亚洲色五月婷婷| 久久久激情视频| 激情五月天久久丁香| 国产毛片欧美毛片久久久| 超碰AAAAAAV| 热99一二三| 婷婷五月香蕉| 蜜桃婷婷丁香| 只有精品在线观看| 91丁香婷婷综合资源| 九九九热精品| 五月丁香六月婷婷久久| 五月天色色激情综合| 91.www综合| 激情五月天婷婷丁香| 97色久| 婷婷丁香成人色综合| 婷婷激情人妻| 丰满少妇乱A片无码| AVDV久久| 久久一二三视频| 九九精品综合| 成人 AV播放| 五月婷婷啪啪| 99久热| 婷婷五六日| 日韩黄色电影| 99久99久| AA片在线观看视频在线播放| 依人大香蕉| VfJxEwPH| 亚洲色婷婷99一9|| 欧美色图45678| 丁香八月综合激情| 成人国产欧美大片一区| 欧美日韩成人| AV在线观看网站| 丁香婷婷五月综合影院| 色情播放| 五月天婷婷久色| 久久久久9| 色久一| 欧洲MV日韩MV国产| 99这里有精品视频| www.99热| 五月天色丁香| 欧美大香蕉视频| 五区毛片七区毛片| 色色色欧美色色| 五月丁香六月综合情在线观看| 性爱五月婷婷| 大香蕉久久久久久久久| 天堂久久丁香| 五月激情婷婷开心| 久久五月天激情视频| 91精品久久久久久| 丁香大香蕉| 欧美伊人9| 婷婷六月天| 五月丁香久久久| 亚洲综合五月天婷婷丁香| 自拍偷窥99热| 丁香婷婷大香蕉| 婷婷成人五月天成人文学| 99热精品一| 婷婷深爱五月亚洲综合| 日韩av大全| 久色视频首页| 激情五月,深深爱五月| 九九视频这里只有精品在线播放| bbwcuckold精品熟妇| 综合色99| 丁香五月丐人妻| 亚洲婷婷五月天在线激情综合网| 99小视频在线| 五月激情精品视频| 天天爱天天做天天爽| 99er6| 亚洲精品乱码久久久久久综合| 婷婷五月播| 婷婷六月丁香激情| 深爱激情四射| 久久婷婷五月天亚洲欧美| 九九免费在线视频| 婷婷激情社区| 超碰色色综合| 国产肥白大熟妇BBBB视频| 99人人干| 九九色黄色| 五月婷婷亚洲色视频| 五月丁香无码视频| 熟女激情网| 亚洲久热| 婷婷在线五月综合| 天堂色色色| 99日韩| 亚洲六月色婷婷| 精品久久99码| 激情网开心网| 亚洲婷婷丁香| 亚洲乱码日产精品BD| 色中色综合| 婷久久| 九九黄色网| 不卡成人免费| 婷婷五月综合激情| 日本成人小说婷婷六月| 79精品视频| 欧美va视频| 色五月婷婷五月天| 日本一级大片| 77799热| 激情五月婷婷老师| 国产亚洲在线| 色五月色五天色情网址| 色色精品色| 开心深爱激情网| 色综合色| 亚洲深喉AV| 久久综合五月天激情小说网站| 婷婷五月综合啪| 久久这里只有精彩| 国产无人区大片| 成人无码髙潮喷水A片| 99碰碰碰| 亚州激情在线视频| 五月丁香花视频| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 亚洲欧美一区二区三区四区爱爱动图| 噜噜噜狠狠色综合| 免费看片操逼| wwwC0maV五月花| 欧美日综合| 日本97在线观看| 99精品在线观看| 综合久久五月天| 99操逼| 伊人色五月| 夜夜骑日日夜夜| 九九99精品| 五月天丁香欧美激情| 情欲综合网| 五月天涩涩| 少妇人妻偷人精品无码视频新浪| 欧美色久| 婷婷六月亚洲综合| 天天爱天天天射AV| 亚洲综合丁香婷婷六月天| 久操大| 超碰色女人| 99热这里有精品2| 五月丁香六月激情| 精品人人操| 丁香婷婷六月| 玖玖色综合色| 99热日本| 国产乱子轮XXX农村| 婷婷伊人久久| 91九色中文字幕女在线观看| 亚洲婷婷丁香五月| 99爱在线精品视频免费观看| 影音先锋五月天婷婷丁香在线观看| 4399在线观看免费高清电视剧| 久久五月网| 在线视频激情网站| 婷婷五月天激情小说| 丁香99| 99re这里有精品手机在线| 综合色播| 五月婷婷激情四季| 五月香婷婷| 欧美黑人大吊| 99热精品在线| www.sd-xiangsu.cpm| 色色色无码| 久热这里只精品| 色色婷| 九九热这里只有精品7| 九九热在线观看6| 91九色中文| 中文网婷婷字幕婷| 碰碰女| 色欲天天综合| 九九Av| 九九99在线观看视频| 人人操AV| 五月天激情Av| 激情五月天色色色| AV成人在线播放| 色99日韩| 99久在线视频| 久久五月天合网| 国产亚洲精品AAAAAAA片| 99在线观看视频蜜臀| 亚洲精品又粗又大又爽A片 | 六月色色婷婷| 99免费偷拍视频| 99久在线视频| 99爱免费在线观看| 97色综合视频| 五月婷在线观看| 99精品视频免费在线播放| 色婷婷操逼| 色色亚洲无码| 色婷婷激情视频| 婷婷色五月开心五月| 超碰人人艹| WWW.国产| 五月天久久91| 噜一噜免费视频| 亚洲网综合在线| 亚洲色热| 91九色小视频| 日韩AV免费电影在线播放| 玖玖资源在线视频| 丁香九月综合激情| 日本熟妇乱妇熟色A片蜜桃| 婷婷五月伦理| 婷婷精品| 五月情涩综合婷婷| 91色婷婷综合久久中文字幕二区| 五月婷A V在线| 欧美精产国品一二三区| 五月天欧美 另类小说| 五月天丁香欧美激情| 五月天婷婷丁香| 亚洲bt丁香五月天婷婷激情小说| 综合激情在线视频| 久久久91精品| 婷婷大香蕉| 丁香五月天婷婷中文字幕| 亚洲色色在线| 182TV大香蕉| 免费观看全黄做爰的视频| 亚洲婷婷六月天| 久久婷婷综合基地| 色婷婷播放| 99热思思| www.99婷婷| 五月婷婷网五月在线| 大香蕉久久伊人婷婷五月丁香| 久久综合9| 九月丁香| 99视频精品在线| 99热在线里有精品| 91色综合| 五月天三级久久| 中文字幕操比影片| 亚洲乱码精品久久久久..| 操逼视频一区| 99热a片免| 九九九午夜影院成人| 日本熟妇精品99| 伊人五月天久久| 七七婷婷综合| 九九综合| 色婷婷综合视频| 五月丁香好婷婷A片网| 99久久玖玖| 开心五月色婷| 五月停停直播| 五月丁香综合激情在线观看| 久热婷婷| 色婷婷电影网| 久久资源网五月婷| www.五月天婷婷| 99热在这里只有精品| 米奇影视资源777狠狠色婷婷五月天激情网| 99九九精品| 51XX午夜影福利| 98色花堂98t.R| 成人色图情色成人网 www.5b5b5bcom 五月天 | 五月精品99综合| 性做爰1一7伦| 亚洲乱码日产精品BD| 九九性视频| 操人91| 九九黄色网| 激情五月综合| 狠狠精品干练久久久无码中文字幕 | 激情六月天婷婷| 97干在线观看视频| 丁香六月激情四射| 久久大香蕉| 日日杆天天| 99爱视频| 日韩综合久久| 99热久| 色9999日韩国产| www.夜夜| 人妻第九页| 性爱激情久久| 五月丁香激情综合网官网| 亭亭丁香97| 亚洲有码在线视频| 碰碰91| 天堂婷婷五月在线| 久久人妻情侣| 婷婷综合精品视频97| 亚洲中文乱字字幕在线永久| 99热在线精品观看| 五月丁香| 超级碰碰一区| 亚洲无线视频| 五月天社区| 97超碰免费超级在线观看| 中文AV网站| 色99无码| 婷婷综合另类小说| 97色色色视频| www.婷婷.com| 天天日夜夜| 久久综合激情| 国产精品黑丝| 婷香五月| 丁香五月23111| 色婷婷五月天| 91狠狠综合久久久久久| 69人人操人人爽| 色综合久久天天综合网| 色大综合| 无码人妻电影| 久久精品凹凸分类| 99热久草| AV天堂婷婷五月天| 男女99免费视频| 免费观看全黄做爰的视频 | www.亚洲激情.com| 99久久婷婷国产综合精品草原| 婷婷五月天伊人网在线观看视频| 六月丁香五月天| 开心激情婷婷| 丁香五婷| 涩五月丁香| 五月综合激情| 91国产精品视频播放| 综合大香蕉| 婷婷五月天美女视频| 人人爱国产| 91AV视频| 丁香五月老师| 色色婷婷五月天| 婷婷五月日本| 天天色天天爱天天舔| 七七九色| 日日操夜夜操中国无码| 丁香五月综合福利视频导航| 97超碰在线免费观看| 婷婷五月天综合久久日美女| 97干欧美| 五月丁香六月欧美综合网站| 99噜噜噜在线播放| www.99热| 色99日韩| 激情五月综合久久| 99re视频精品| 婷婷丁香激情五月天色色色| 综合网天天| 日韩野外 无套| 亚洲第一色网站| 影音先锋噜一噜| 五月婷婷九九久久| www.色擼擼.com| 国产做A爰片毛片A片美国| 伦乱天堂| 99re在线视频| 欧美丁香五月| 色色色图| 91综合色噜噜| 激情五月婷婷色| 精品欧美一区二区三区久久久| 啪啪啪大香蕉| 五月婷婷婷婷| 久久九九亚洲| 天天插天天操| 色99欧洲色19| 五月天六月婷| 色吧99| 五月激情婷婷女| 色涩视频久久| 色五月丁香激情视频| www.久久久久| 五月丁香综合网色欲| www.99热视频| 五月天色婷婷激情综合| 五月婷婷六月丁香在线| 五月天婷婷色在线视频免费观看 | 色97啪啪| www.夜夜操.com| 色色色色区| 六月激情网| 五月婷婷丁香啪啪| 伊人久久99| 狠狠色婷婷| 欧美性爱一区| 粉嫩av蜜桃av蜜臀av| 天天日夜夜拍| 五月婷婷激情综合在线| 9色在线| 呦呦v线| 久热伊人91| 婷婷五点亚洲| 啪啪操超碰| 91精品久久久久久久| 丁香五月日韩| 99这里都是精品| 色婷婷丁香五月天激情综合网| 99精品久久久久久久婷婷久久| 超碰99热精品在线| 五月丁香六月婷婷开心网| 国产婷婷久久| 99在线热| 丁香五月婷婷动漫视频| 人五月天婷婷喷水| 欧美综合激情丁香五月六月婷| 色www.con| 99热6精品| 亚洲女婷婷五月基地综合久久久| 97婷婷五月丁香| 久久丁香五月| 久久久久综合激动五月天| 亚洲第一成人无码A片| 涩涩涩婷婷| 五月婷婷丁香大香蕉| 狠狠色狠狠| 婷婷5月天激情综合| 天天肏视奸| www.99久久久| 久操人妻| 中文字幕 中文字幕明步| 九九热99热| 国产精品久久久久久白浆色欲| 疯狂做受XXXX高潮A片| 久久婷婷五月综合色和| 亚洲天堂爱爱| 五月丁香六月激情网站| 六月丁香婷婷综合狠狠爱夜夜爱| 久久亚洲网| 亚洲av成人电影在线观看| 亚洲色视频| 成人视频九九| 亚洲av网址| 天天射影院| 99久在线精品99re5热视频| 热久久思思热思思| 色婷婷无吗| 九九热最新| 99性视频| 四色 爱 婷婷 精品 亚洲 五月天| 婷婷五月六月| 日本天天操| 1024操逼视频| 26uuu.| 五月久久网| 欧美三9久九观看| 色5月婷婷色| 天天干天天爽天天操| 五月婷婷激情刺激| 天堂久久丁香| 91久久久久久久久18| 欧美五月婷婷| 五月婷婷免费在线观看| 91操碰| 五月婷婷六月少妇激情| 激情婷婷五月天网址| 曰曰久久| CAoub青青超碰| 91嫩草国产线观看亚洲一区二区| 色色亚洲视频| 美欧日韩国产成人在战| 五月激情婷婷丁香天堂| 亚洲精品小视频| 极品色丁香| 99玖玖精品| 亚洲操女| 欧美顶级少妇做爰HD| 九九视频这里只有精品| AV成人在线播放| 色婷婷综合视频| 色色色色av777| 婷婷国产日本欧美| www久久99com| 色啪网| 久久色婷婷| 丁香婷婷色九月| 国产黄色在线观看| 午夜少妇在线观看视频| 亚洲天堂色色| 五月天社区| 操99| 九九黄色网| 黄色三级日本| 色婷婷www| 天天日,天天射,天天舔| 99视频一区| 天天做天天爱天天玩夜夜爽| 婷婷六月久久| 婷婷五月天第四色| sS丁香五月婷婷| 婷婷五月丁香综合亚洲| 日熟女| 玖玖婷婷婷丁香五月| 国产婷婷五月| 99久久视频| 五月婷婷久久爱| 91成人看| 欧美大道不卡| 美女精品一级不卡视频| 另类图片色五月| 九九热这里只有精品5| 久er免费视频| 99爱在线| 色综合网综合| 久久五月天激情| 五月亭亭开心网| 激情四射婷婷| 99热在线只有精品| 国产精品久久久久久久久久| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 国产精自产拍久久久久久蜜| 免费视频WWW在线观看网站| 中文字幕乱码亚洲精品一区| 热日韩欧美| 射婷婷中文字幕| 成人小说色图婷婷五月| 久久宗合影| 色婷久久| 五月丁香综合伦理片| 亚洲VA在线| 婷婷五月情| 99热国产| 蜜臀久久99精品久久久久久酒店| 91fuliwang| 另类精品视频在线观看| 亚洲综合另类| 国产精品久久久99视频| 激情五月天色爱| 狠狠摸狠狠摸| 五月激情六月丁香| 丁香五月电影| 五月天婷婷色播综合在线| 激情婷婷综合网| 91久久婷婷| 色婷婷丁香中文在线播放| 五月婷婷丁香狠狠撸久久| 六月撸婷婷| 少妇人妻偷人精品无码视频新浪| 亚洲最大视频网站| 色婷婷电影| 丁香五月激情视频| 色婷| 91丁香色| www.91操| 激情五月四色| 99色色色色| 天天狠天天叉| 91久草五月天婷婷| 另类五月婷婷| 激情综合一| 丰满女老板BD高清A片| 五月五月婷婷| 婷婷丁香五月激情图片| 99爱视频| 丁香五月天操B| 色综合丁香| jiqingliuyuetian| 女人天堂AV| 色色婷婷色色| 精品一区二区三区木瓜| 思思精品视频| 99国产精品久久久久久久久久久| 婷婷网影院| 欧美日本一区二区三区| 99精品久久| 变态另类色图 | 人伦30P| 六月丁香久久| 香蕉97碰碰碰欧美| 色综合天天网| 天天射影院| 色色婷婷丁香| 综合久久影院| 91啦丨九色丨刺激中文| 另类国产综合| 强壮的公次次弄得我高潮A片日本 | 任你搞网站| 天天插天天干| 人人妻人人澡人人爽| 欧美色五月天| 1级欧美日韩| 色五月婷婷久久爱| 五月丁香香蕉| 五月丁香婷草| 九九精品免费| 九九精品碰| 亚洲中文乱字字幕线在永久| 69精品人人人人| 久久婷五月| 激情亚洲婷婷| 五月天色色色色色| 丁香五月婷婷激情中文| 欧美色一级色| 99 频99热国里只有精品| 五月婷丁香| 另类专区在线观看| 99这里只有精彩视频| 亚洲亚洲人成综合网络| 婷婷激情五月天7| 天天插综合| 骚五月婷婷| 色五月五月天色婷婷色五月| 九月婷婷在线观看| 国产精品成人av在线观看春天| 大地9中文在线观看免费高清| 欧美性二区| 丁香五月天激情视频| 一级性感黄色内射视频| 婷婷久久精品| 91色噜噜狠狠狠狠色综合| 激情五月婷婷开心网| 青青草婷婷久久| 婷婷五月天激情文学| Av在线资源| 人妻久久久久久久| 人人叉久| 偷偷操99| 超碰人人射| 热99这就是精品视频| 九九大香蕉黄色影院| 久久92| 人人操91| 色婷婷在线视频| 亚洲中文字幕av| 九九综合| 天天干-天天日| 久久久久久婷| 五月天婷婷在线AN| 婷婷五月丁香欧洲| 色情婷婷| 深爱激情九九五月天 | 青青久久五月| 亚洲日日日| 综合色影| 天天做天天爱| 五月丁香婷中文字幕| 丁香婷婷五月综合欧美另类| 天天插综合| 色婷婷88| 97狠狠色| www.精品99| 精品国婬伦V无码久久久| 夜夜撸日日操| 五月丁香六月综合情在线观看| 天天干,夜夜爽| 五月婷婷激情四月| 激情综合网色五月| 五月花婷婷| 国产日韩欧美性生活| 不卡成人免费| 蜜臀av粉嫩av懂色av| 婷婷丁香激情综合色情| 丁香五月av| 这里只精品热在线18| 99亚洲视频| 午夜爱爱网站| 五月婷婷色播网| 亚洲成Av人片乱码色第1集| 丁香婷婷大香蕉| 婷婷五月天日日日干干干| 99riAV成人在线视频| 香焦网五月天| 激情五月天之五月婷婷| 欧美日本高清视频99| 丁香五月Av| 天天天天天久久久久久| 97在线碰| 91re色综合视频| 色五月丁香五月| 婷婷五月婷婷五月| 久久视频婷婷视频| 67194线路二在线观看| 亚洲无码播放| 五月综合缴情网| 国产 码在线成人网站| 日韩野外 无套| 这里只有精品2| 5月婷婷激情网| 五月亭亭六月色| 第四色网婷婷| 婷婷六月色| www.91在线观看| 久久66精品| 另类激情五月天。| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 大香蕉在九| 91精品久久久久久久久| 996er在线观看| 欧美色图天堂网色| 国产色色小草视频| 精品热九九| 色www久视频| 亚洲乱码精品久久久久..| www.zbzhongsen.com| 婷婷久月| 婷婷五月情天| 国产一二三四五六七八视频| 狠狠干在线视频| 婷婷五月综合欧美在线播放| 99操| 色墦五月丁香| 亚洲五月婷| 亚洲激情综合网| 丁香六月激情| 天天日夜夜帕| 极品人妻VIDEOSSS人妻| 久色视频| 色婷婷AAA| 综合色图区| 九九综合| 丁香五月性爱| 超碰在线人妻| 五月天综合网| 97人人干| 欧洲色色| 99视频只有精品| 熟女人妻一区二区三区免费看| 色婷五月天| 丁香五月成人| 少妇搡BBBB搡BBB搡毛茸茸| 精品国产乱码久久久久夜深人妻| 激情五月天丁香| 天堂无码人妻精品AV一区| 超碰碰碰碰| 麻豆AV一区二区三区| 久热在线中文字幕色999舞| 影音先锋美国A| www...com黄在线观看| 热久91| 天天肏高清在线| 中文字幕AV在线播放| 婷婷色中文字幕| 免费日韩99| 中文字幕色色色| 操操操AV| 色偷偷色婷婷| 五月天社区| 亚洲欧洲中文日韩久久AV乱码| 国产一级片色色| 欧美高潮9| 亚欧州精品视频| 丁香婷婷六月激情文学 | 亚洲AV激情五月综合网| 99热这里精| 久久六月天| 婷婷91| 无码激情AAAAA片-区区| 九色激情| 女婷久久| 午夜九九电影| 天天干夜晚夜操| 久久婷婷五月综合| 香蕉AV777XXX色综合一区| 香蕉色色网| 99视频在线精品| 久久久久激情| 97人人草| 91女人18毛片水多国产| 99热网址| 99r这里只有精品哦| 色婷婷丁香五月综合| www..999热久| 99色综合| 4399欧美另类视频| 噜综合| 在线可以看的av网址| 久色网址| 日韩一本操| 色婷婷天堂| 婷婷色日本| av在线激情| 91妻人人爽人人看片| 六月婷婷综合久久| 六月丁香激情最新更新| 无码动漫av| 99国产精品久久久久久久久久久| 丁香狠狠操| renrencaoni| 丁香五月婷婷AV在线| 99色婷婷| 日韩精品一区二区亚洲AV观看| 色播五月婷婷综合| 亚洲熟妇无码乱子AV电影| 亚洲乱码精品久久久久..| 五月丁香婷婷综合网色欲| 国产激情综合五月| 欧美丁香五月夫妻天| 风流少妇A片一区二区蜜桃| 久久精品系列| 69激情小说| 五月天狠狠| 4399高清无码视频| 人人干人人操人人摸人人做| 网色99| 99少妇精品| 人妻肉射免费观看| 婷婷爱五月天| 99碰| 狠狠色噜噜| 噼里啪啦完整版中文在线观看| 五月综合激情| 五月天激情网开心网| 欧洲色区| 日本三级韩三级99久久| 天天爽夜爽| 182.t午在线观看| 天天做天天爱天天爽在| 91在线日| 亚洲狠狠婷婷| 婷婷情色激情| 精品亚洲国产成AV人片传媒| Av大香蕉| 亚洲熟女色| 丁香九月综合在线| 伊人午夜综合色啪| 国产欧美精品AAAAAA片| 丁香六月婷婷久久综合| 婷婷五月天Av| 色婷婷影| 婷婷五月天激情丁香| 人人爽网| 色丁香综合影院| 天天肏夜夜肏| 色五月婷色彩免播放器| 婷婷五月天av| 91干视频| 91综合国免费久入| 一区二区免费看| 五月天亚洲综合网| 丁香色影院| 亚洲第一第二网站| 婷婷六月偷拍| 五月 婷婷 成人| 91女人18毛片水多国产| 色区域网站视频| 中日韩美欧成人一区二区精品在线| 99热这只有| 丰满少妇乱A片无码| 亚洲俩性性爱图片久久第六页| 99久久99九九99九九九| 久久这里只有国产| 免费视频99| 人妻乱码久久久| 粉嫩AV久久一区二区三区| 国产六月婷婷| 婷婷97色| 丁香五月开心五月激情| 啪啪色激情五月天| 日本婷婷五月天| 国産精品| 日本人妻A片成人免费看片|