免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

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.久久爱.com| 9.1综合网| 琪琪理论片| 午夜免费试看| 激情五月综合ì香亚洲| 超碰在线观看caop| 91天天操天天干天天射| tingting五月天亚洲| 99精品在线播放| 久久久这里都是精品| 激情四射五月天| 婷婷色五月天色| 色五月天丁香婷婷| 色欲丁香久久| 日本毛片内射| 777影视理论片大全在线观看| 天天日夜夜操五月| 淫视馆AV在线| 婷婷五月色| 五月婷婷丁香大陆免费| 亚洲AV网站在线观看| 丁香六月婷婷开心| www色五月天| 九月色婷婷综合亚洲| 亚洲视频色婷婷| 丁香9月婷婷| 天天综合精品| 激情五月综合免费| 婷香五月网在线| 亚洲无AV在线中文字幕| 丁香五月性| 久热99| 97香蕉碰碰人妻国产欧美| 五月色情网| 97操在线| 五月天综合久久| 五月婷婷六月丁香在线| 五六月婷婷久久| 久久 这里只有精品1| 成人色图情色成人网 www.5b5b5bcom 五月天 | www.99热精品| WWW色综合| 波多婷婷久久| 久草热8精品视频在线观看| 婷婷五月激情丁香| 热的无码综合视频| 狠狠婷婷爱| 婷婷五月六月丁香| 亚洲182在线观看| 99色中文| 色欲天天综合| 深爱婷婷色| Caop在线| 丁香五月 性爱| 婷婷九月激情| 可以看的av网站| 九九九九九无码| 国产成人AV在线播放| 欧州婷婷五月天综合| 五月丁香黄色视频| 九九色影院| 视色综合| 激情五月天网页| 7超碰自拍| 东北熟女视频99| 五月天久久久| 日本婷婷| 九色视频91| 丁香五月激情网| 第四色婷婷五月| 99小视频| 五月天色色网站| 亚洲情欲久久| 日本三级第一页| 色久综合| 久久精品99国产精品日本| 碰碰91| 天天谢天天操| 99热这里只有精品2| 色综合五月婷婷狠狠干| 五月色天五月色| 人人爽天天莫| 五月丁香六月在线欧美| 五月天天丁香婷婷在线中| www.久久99热地址发布| 9l视频自拍九色9l视频自拍九色9l社区| 99热黄| 亚洲视频一区| 爆乳熟妇一区二区三区四区| yw国产AV| 丁香婷婷五月天成人| WwW色婷婷| 99∨VTV| 99视频内射三四| 99精品热视频| 亚洲天堂色色| 中文字幕无码人妻少妇免费视频| 色色欧美色色色| 五月婷婷中文字幕| 国产精品久久久久久久久久| 色婷网站| 亚洲国产另类av| 玖玖99婷婷| 婷婷丁香中文字幕| 玖玖婷婷精品| 久9视频| 婷婷五月丁香六月| 在线综合婷婷| 色色色色色色色色色色色色色色,网站| 五月丁香做爱视频| 激情五月综合亚洲另类| 激情综合久久| 亚洲天堂婷婷| 久久久宗合| 武则天精品久久| www.狠狠| 丁香五月亚洲天堂| 夜夜干夜夜操| 一本色道久久88加勒比| 色色婷婷丁香五月天| 国产亚洲网站在线| 亚洲综合色网站| 五月视频日本免费观看| 亚洲精品午夜国产va久久成人| 五月丁香中文| 99精品视频免费观看| 无码成人AAAAA毛片AI换脸| 少妇出轨做爰高潮A片| 果冻传媒A片一二三区| 97自拍视频网| 久热这里只精品| 天天草婷婷五月| 五月天艹天天| 99热最新精品| 五月天婷婷狂暴白浆| www综合久久| 色5月婷婷色| 国产色色在线| 久久人妻乱| 日韩AV片| 久久婷婷老| 啪啪五月综合| 婷婷爱综合| 五月涩涩网| 色欧美影院| 五月婷在线| 色.五月综合网| 久草嫩草在线观看| 婷婷五月天深爱| 色婷婷五月天小说| 丁香五月婷婷五月| 国产一区18| 国产91视频| 欧美va| 色婷五月天| 超碰99在线观看| 91热在线观看视频| 色五月色综合| 五月婷婷综合激情| 操日本三片99| 九九热视频免费| 99爱这里只有精品免费视频| 婷婷99狠狠躁天天躁中文| 婷婷丁香五月av| 丁香五月婷婷天| 婷婷激情五月| www.五月.com| 一级黄在线| 99re在线视频| 婷婷五月天高清无码| 日狠狠| 国产操B| 亚洲AV综合在线观看| 免费播放99性爱视频| 人人爱操| 丁香密臀AV激情网| 特级西西4444www无码| 狠狠操狠狠操| 中文字幕在线资源| 超碰操网| 97人妻碰碰碰久久久久-最近国语高清| 678五月丁香亚洲综合| 婷婷的色色五月天| 色亭亭九月| 亚洲性爱AV在线| 欧美日韩五月婷婷| 久久怡红院| 91男人操女人视频| 激情亚洲色图片丁香综合| 伊人婷婷五月天| 永久天堂日本| 午夜做爱影院| 1024在线视频| 99视频在线精品| 中文字幕丰满孑伦无码专区| 五月丁香六月欧美综合| 涩五月婷婷| 91久久精品无码一区二区三区| 天天高潮夜夜爽| 美国少妇性做爰| 丁香五月狠狠在线观看| 欧亚成人A片一区二区| 丁香五月婷婷久久综合激情网 | 开心婷婷五月花| 97se视频在线| 久久婷婷五月天蜜桃| 美欧日韩国产成人在战| 天天做天天爽| 先锋资源91| 色播激情五月天| 成人丁香婷婷| 色小说五月天| 性爱激情小说AV五月丁香花| 色色婷婷丁香五月天| www99xxxx五月丁| 五月丁香激情婷婷综合| 九九色天堂| 天天干天天爽天天操| 久久小说网| 欧美狠狠草| 天天做天天爽| 人妻在线中文字幕久久| 婷婷久久婷婷色五月| 99热日韩| 六月婷婷AV| 开心激情网五月天| 中文字幕人妻在线| 99精品在线播放| 九九热亚洲中文在线观看免费| 99久久激情视频| 久久久人妻人伦| 超碰在线人妻| 亭亭社区五月天| 狠狠婷婷色综合| 五月天久久www| 高清免费在线视频| 91婷婷| 亚洲成人免费在线| 五月婷婷香蕉| 五月天成人免费视频| av国产精品偷| 婷婷五月天影院| 五月婷婷亚洲综合网| 玖玖爱伊人网| 中文在线成人| 激情五月天综合网| 蜜乳中文字| 色五月综合网站| 色色性爱视频| 99久久精| 色综合女人99| 91久久久久久| 天天 青草 丝袜制服 在线| 五月丁香A片| 国产精品色婷婷久久久精品| 色狠狠六月| 中文字幕不卡网站| 精品久久久人妻| 亚洲综合网激情小说| 天天日日| 丁香五月性| 噜噜综合网| 日比视频91| 啪啪操超碰| 天天日天天狠狠操| 青青草轻轻操| 男同91| 婷婷综合网| 丁香五月天婷婷在线视频| 丁香久久在线| 婷婷性爱网| 五月丁香六月婷婷不卡免费无码 | 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 色七七九九| 婷婷精品视频| av人人操| 国产精品色色| 亚洲天堂啪啪| 五月丁香婷庭在线| 久久人妻乱子伦| www.久操| 丁香五月天操B| 91色五月| 夜夜操夜夜操| 开心综合激情综合| anquye伊人| 九九精品碰| www.五月.com| 久久色五月天| 激情五月深爱婷婷| 天天综合干| 99超碰在线免费| 五月天国产| 色五月在线观看| 丁香五月1页| 久久码久久无清| 最近中文字幕大全免费版在线 | 日韩亚洲视频| 国产亚洲色婷婷久久99精品91| 开心五月婷婷六月丁香| 亚洲AV免费在线| 丁香九月激情在线视频| 激情性爱五月天网页| 五月婷婷色情| 色婷婷五月天| 97色天堂| 亚洲无码免费看| 婷婷在线视频| 天天爽天天爽| 播播网色播播| 色婷婷香蕉| 丁香五月天激情免费在线观看AV777| 久热这里这里有精品| 26.uuu丁香五月婷婷| 丁香五月激情啪啪啪| 人妻丰满精品一区二区A片| 五月丁香综合啪啪| 91色久| 丁香五月人妻| 丁香婷婷社区| 亚洲va成人va成人va在线观看| 婷婷五月天成人综合网| 人人看人人草人人摸| 婷婷五月蜜桃成人桃色丁香| 丁香六月色婷婷欧美| 精品婷婷| 九九热九九| 天天做天天爱天天爽| 香蕉婷婷色五月| 午夜色丁香| 五月四色婷婷| 综合深爱五月| 常久最新免费的色吊丝| 天天色天天日| 婷婷婷婷婷婷婷婷| 色婷婷a v| 激情五月天 婷婷| 噜噜色噜噜网| 伊人婷婷五月天| 久久人妻www| 丁香五月在线观看完整版| 伊人丁香婷婷东京| 思思热久久爱| 亚洲五月色| 狠狠色噜噜色狠狠狠综合久久成人波| 精品人妻久久久久久| 丁香五月婷婷视频| 久久久婷婷婷| 六月婷婷色综合| 精品人妻伦一二三区久久| www.夜夜| 日本WwW色偷偷丁香花久久久京东热| 丁香8月手机综合| 91婷婷五月天嫩女| 色七七九九| 久久久久婷婷| 亚洲亚洲人成综合网络| 激情综合婷婷久久| 色综合激情| 中文字幕在线播放视频| 婷婷五月天伊人网在线观看视频| 激情综合色婷婷六月天| 999热在线视频| 婷婷六月色| 五月婷婷丁香| 涩玖玖免费视频| …亚洲黄色在线播放日韩、av中文a…| 99在线视频精品| www.狠狠| 六月婷婷激情小说网| 婷婷五月天黄色小说| 国产精品色色| 可以免费观看的av| 综合久久综合综合| 婷婷丁香色五月亚洲| 亚洲五月丁| 婷婷干五月综合在线播放| 亚洲AV网址| 五月婷婷丁香五月| 九月大香蕉| av色婷婷| 婷婷播播五月天| 天天色综网| 毛片新网地| 激情丁香五月婷婷| 亚洲成人中心| RenRenSe在线视频网站| 综合久久久| 日日干天天| 欧美色必爱| 九九99九九99偷拍视频免费看| 婷婷丁香五月天欧美| 五月天婷婷婷| 五月激情六月宗合| 男人天堂AV在线一区二区| 92久久| 琪琪秋霞| 99久超碰| 久久性都花花世界成人免费视频| 夜夜操夜夜爽| 国产婷婷综合在线免费视频| 狠狠干.com| 久久人人九| 夜夜噜夜夜奇| 欧美日韩999| 五月婷九九草| 99热 在线观看| 亚洲综合色网| 婷婷热色| 婷婷深爱五月亚洲综合| 天天噜噜| 九九99在线视频| 天天操天天爽天天爱| pom538精品视频| 五月丁香影院| 五月婷婷六月丁香| 欧美色色色色色| 日韩人妻AV在线| 五月婷婷偷拍| 亚洲色五月婷婷| 青草视频在线播放| 五丁香激情综合| www,超碰| 五月丁香六月婷婷的女人| 内射丰满人妻| 天天综合网站| 亚洲在线操| 激情五月六月婷婷| 丁香九月激情在线视频| 丁香五月天五码婷婷| 久久久久er热| 五月丁香色| 色色网站| 色色色宗合网| 婷婷狠狠五月综合| 丁香五月五月婷婷欧美大香蕉| 91操碰| 五月婷婷五月天| 国产免费性爱| 午夜不卡成人一区二区| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 亚洲AV日韩在线观看| 九九色影视| 天天爽日日爽夜夜爽| 无遮挡国产高潮视频免费观看| 亚洲精品成人| 九九色热| 亚洲天堂热| 狠狠色大香蕉| www热久久yy9| 在线视频激情网站| 97影院一级片| 99九九99九九九视频精彩| 久热亚洲| 啪啪色区| 日本久久高清| 亚洲国产精品VA在线看黑人| 深爱婷婷基地| 日日夜夜干| 人人亚洲| 成人视频网| 丁香午月AV中文字幕| 日日日日日| 六月婷婷色综合| 婷婷五月天堂| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 色九月婷婷综合| 99九九视频| 国产高潮白浆一区二区| 色情五月综合婷婷| 色色五月天丁香婷婷| 色五月天堂| 91爱啪啪| 超碰九色| 深爱丁香激情| 色综合色综合色综合| 五月天激情网图片| 五月丁香另类图片| 激情婷婷丁香| 丁香五月六月婷婷综合激情| 91久久电影| 午夜爱爱网站| 伊人婷婷青青cao| 天天日天天色| 涩涩涩.com| 欧美在线视频9| 色婷婷六月天| 66久久视频在线| 不卡在线超碰| 日韩另类在线观看| 伊人六月无码视频| 国产精品人妻在线网址| 婷婷五月天小说网| 六月丁香婷婷开心综合基地| 最新日韩久热免费视频看看| 99精品性爱| 插插干干干色| 亚洲超级碰| 五月成人网站| 天天谢天天操| 五月丁香大香蕉| 久久久久久久11111111111| 久热免费| 婷婷激情五月天天天开心| 九九99精品视品| 亚洲日日日| 色综合久久久久| 久久99热网| 涩婷婷五月天在线精品视频| 久久午夜理论| 久99久99精品免| 久久五月丁香| 五月婷婷综合丁香视频| 另类小说婷婷色| 午夜av网| 成人九九视频| 综合久久综合久久| 99情色五月天| 97av在线视频| 青草激情综合| 国产在线6| 热99久| 99色在线| 六月丁香激情| 思思精品久久艹| 五月丁香琪琪| 五月婷无码| 亚州操人在线视频| 婷婷五月天激情电影| 五月天婷婷丁香花| 色狠狠综合| 热热色色五月天婷婷| 丁香色色色| 五月天电影网| 婷婷丁香午夜综合影视| 婷婷五月电影院| 91av视频| 香蕉久久av一区二区三区| 99热啪啪| 五月丁香综合中文| 五月婷婷五月| 婷婷五月骚厕所| 丁香五月天啪啪| 老师把我爽高潮了免费A片| 草草夜夜操| 99re热在线视频| 色欲一二三| 色五月丁香激情视频| 中字幕视频在线永久在线观看免费| 久久久久这里只有精品| www.色擼擼.com| 激情五月婷婷丁香六月| 51XX午夜影福利| 大香蕉视频99| 亚洲日比视频| 国产亚洲精品久久久久苍井松 | 婷婷五月丁香基地| 欧美成人精品A片免费一区99| 日日夜夜噜噜爽爽| 99亚洲大片精品永久在线观看 | 五月丁香六月婷婷国产视频| 这里只有免费的精品| 色婷婷成人丁香| 久久多色| 婷婷色网站| 亚洲色夜| 五月天婷婷色情| 日本天堂网站99| 色情终和网| 99精品成人无码A片观看金桔| 天天干,天天日| 91久久综合亚洲鲁鲁五月天| 久久伊人婷婷| 综合久久综合久久| 丁香五月在线| 婷婷五月天电影网| 99热这里是精品| 久草婷婷| 夜夜噜夜夜奇| 97干婷婷五月天| 国产Va视频| 九九综合精品| 婷婷六月插屄激情| 久色资源网| 精品三区影院| 激情5月婷婷| 97色色色色色| 可以免费观看的AV| 九九99免费理论| 99热大香蕉| 五月婷婷综合激情网| 青草激情综合| 国产99热| 亚洲性爱AV在线| 玖玖色综合色| 99热精品超碰| 91超碰在线播放| 色一情一乱一乱一区91Av| 亚洲艹网| 精品九九视频| 久久538| 99在线免费观看| 久久久久久久久久8888| 最近免费中文字幕大全高清大全1 免费看欧美成人A片无码 | 日本99视频| 久草五月天| 国产做爰视频免费播放| 97性高潮久久久| 99人妻碰碰碰久久久久视| 五月婷婷色| 国产毛片精品一区二区色欲黄A片| AV大片在线播放| 丁香五月色情av| 日本专区久久| 综合五月草| 婷婷开心激情综合五月天| 五月天啪啪| 激情久久久久久久久久久| 无码99| 亚洲亚洲人成综合网络| 色99无码| 六月丁香婷| 婷婷五月天com| 丁五月激情视频免费| 99热国产免费| 人人操9| www.97干视频| 青青草搞屄视频网站| 婷婷色五月丁香六月欧美啪| AV九九| 色五月激情五月| 婷婷激情五月天激情小说| 337p大胆噜噜噜噜噜91Av| 婷婷六月综合在线| 天天操天天插| WWW.桔色成人.COM| 久久婷婷网| 天天婷婷天天| 99热热这里只精品996小说| 欧美性猛交99久久久久99按摩| 亚洲欧美日韩另类| 婷婷六月丁香在线| 噜噜吧天天爱| 蜜桃人妻无码AV天堂三区 | 综合色五月| 五月天婷婷色紫薇阁| 丁香五月影院| 久久性爱99国产| www98日本小时间到了| 色婷婷九月综合| 五月丁香欧美综合| 亚洲成人AV一区在线观看| 三级三久久线久久99久目本WW| 五月婷婷九月婷婷九月婷婷| 九九色婷婷| 九九热99久久99| 夜夜躁狠狠 | 91丁香五月| 日本熟妇乱妇熟色A片蜜桃| 99久久婷婷五月综合| 9这里只有精品| 亚洲天天| 91色噜噜狠狠狠狠色综合| 99精品22| 激情网五月天| 五月丁香婷婷久久| 色五月欧美| 91re色综合视频| 天天草人人摸| WWW.婷婷五月天.COM| 丁香五月 激情文学| 狠狠 婷婷| 成人国产综合| 婷婷五月天网址| www.成人婷婷综合| 90色免费视频| 丁香五月成人论坛| 色爱综合网| 欧美性爱五月天| 久久思思热| 久久丁香婷婷色情综合| 情涩婷婷五月天| 97色婷婷| 色五月婷婷狠狠撸| 色五月激情五月| 一区二区乱码视频| 人妻九九九九| 噜噜狠狠色综合久| 先锋资源婷婷| 新激情综合| 97色色在线视频| 玖玖色综合色| 另类激情五月| 五月婷婷爽爽爽| 亚洲色情免费网| 99热这里只有精品青草| 丁香五月天啪啪| 九热精品| 9久久婷婷国产综合精品性色| 亚洲AV日韩无码| 一本色道久久88加勒比—| 天天日天天色| 99精品超在线播放| 久久永久视频| 另类图片色五月| 97操操操| 久久激情视频99| 天天日夜夜拍| 丁香五月天无码AV| 国产一区二区三区影院| 四五月婷婷| 男女啪啪做爰高潮无遮挡| 久久机热这里只有| 区欧美日韩成人| 这里只有精品免费视频在线观看| 噜噜五月天综合| 激情丁香六月| 天堂综合久| 99久久婷婷国产综合| 黄色大片又大粗又爽| 日本高清久久| 夜夜爽日日躁| 九九色情网五月天| 婷婷五月天奸女| 久久性爱视频| 婷婷五月天社区| 开心五月综合激情综合五月| 欧美日本97| 9月色婷婷| www婷婷| 99热在线观看| 婷婷十月丁香| www.9797国产| 久久天天| 人人看人人草人人摸| 色噜久| 色九网| 五月丁香六月日逼| 亚洲AV永久无码影院黑人| www.99久久久| 激情五婷精品网在线观看网址| 中文字幕日本最新乱码视频| 99这里只有| 激情五月婷| 色综合99| 色在线视频网2025| 天天操天天爱天天日| 色色色五月天婷婷| 91久久综合亚洲鲁鲁五月天| 五月婷婷就去色| 超碰成人在线免费观看| 国产激情综合五月久久| 亭亭五月天成人| 婷婷五月丁香综合激情| Blackedraw视频一区二区| 五月丁香啪啪啪| 欧美va精品va老师va| 91黄色五月天视频| 久热久| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 另类综合国产| 五月丁香婷婷色色| 亲子乱av一区二区三区的| 久久ww| 天天射综合网天天插| 8区视频在线| 欧美槡BBBB槡BBB少妇| 五月婷婷综合久久| 日韩肏屄网| 丁香婷婷激情| 久久99网| 婷婷五月天在线综合导航| 久热99热| 丁香五月天AV在线| 婷婷综合网| 五月婷婷av| 玖玖在线资源视频| 99视频内射三四| 九九无毛| 狠狠干综合| AV成人在线播放| 激情五月天小说视频| 激情综合五月| 热九九九九| 国产伦亲子伦亲子视频观看| 人人草人人爱| 亚洲人人操| wwwwww.色| 99成人网站| 伊人久久婷| 色综合播放| 免费无码毛片一区二区A片| 婷婷五月激情图片| 99热国内精品| 激情五月天 婷婷| 欧洲亚洲欧洲99久久| 婷婷激情综合无月| 婷婷开心深爱五月天| 成人在线网站| 婷婷五月天av小说| 成人龟情网丁香五月| 五月婷婷色色| 丁香五月天堂网| 丁香五月综合| 婷婷免费视频| 九九精品视频在线观看| 五月婷婷婷婷婷| 一区二区三区四区五区| 狠狠色丁香五月婷巨| 五月婷婷五月天| 五月丁香毛片| 97操| 97成人视频| 99色在线观看视频者| 婷婷五月天电影区小说区| 丁香五月骚喷水视频| 熟女婷婷网站一婷婷五月一丁香婷婷一婷婷激情网 | 99久久婷婷五月| 亚洲亚洲人成综合网络| 亚洲国产精品SUV| 五月激情天| 丁香五月婷久久| 久热91| 亚洲不卡欧洲| 99毛片| 丁香五月天.com| 播播网色播播| 亚洲秘 无码一区二区三区妃光/1| 中文久久婷婷| 色五月偷偷| 99九九在线观看免费| 九色自拍| 91超碰在线观看| 97操操操| 成人丁香五月天| 青青草成人网| 丁香五月婷婷啪啪| 九九无码AV| 欧美成人在线观看| 亚洲图色五月天| 五月丁香六月婷婷的女人| 婷婷激情综合色五月久久图片| 97干在线看| 午夜日韩久久久网站| 五月天激情久久| Av大香蕉| 丁香无五月网| 久久伊人日日夜夜| 无码任你操| 日本欧美成人片AAAA| 日韩AV片| 天天操人人干| 国产午夜成人AV在线播放| 亚洲日比视频| 日韩三及成人AV片| 久久丁香五月天| 天天色天天爽| 久热精品在看| 五月丁香六月婷婷久久肏| 91爱啪啪| 日韩砖区| 五月丁香花开综合网| 婷婷五月综合啪| 影音先锋噜一噜| 久操热| 婷婷福利影院| 久久久久久久久久91| 涩涩涩,com| 另类小说五月天激情| 婷婷俺去也| 丁香五月电影| 牛色色碰| 五月丁香综合成人社区| 【乱子伦】黄色| 五月天色婷婷基地| 亚洲在线操| 久久九九国产精品怡红院| 久久激情四射| 玖玖色综合网| 综合性视频99| 五月天丁香成人社| av国产精品| 五月色婷婷夜色| 日韩成人网址| 丁香五月在线视频黑人| 99热碰碰热| 午夜69成人做爰视频| 色情婷| 五月丁香日本在线视频观看| 亚洲欧美999| 欧洲毛片基地c区| 丁香狠狠干| 精品亚洲国产成AV人片传媒| 99在线看片| 色婷婷五月天成人网| AAA级久久久精品| 亚州操逼网| 婷婷激情综合网| 欧洲亚洲午夜| 日韩黄色中文字幕| 久久停停超碰| 天天干天天射综合网| XX色综合| 国产亚洲在线观看| 九九色中文| 亭亭玉立国色天香| 激情综合色婷婷啪啪六月天| 国产一级片色色| 日本一毛片| 色五月婷婷啪啪五月| 996er热| 欧美婷婷综合网| 五月婷婷开心爱| 久久五月天视频| 日日夜夜九九| 77799热| 99精品久久久久| 综合另类激情| jiujiu无码五区| 久久伦乱| 激情综合丁香| 色五月天天| 五月天精品视频| 婷婷天堂视频| 天天干天天爽天天操| 内射人妻视频国内| 九月色婷婷| 99性色| 九九色网专区| www.色婷婷。com| 六月丁香激情网| 啪啪婷婷五月天激情| 亚洲国产精品VA在线看黑人| 九九爱激情| 丁香婷婷五月天亚洲| 亚洲黄色影视| 噜噜狠狠色综合久| 色婷婷久久综合久色综| 视频一区二区在线| 思思精品久久艹| 性爱久久| 亚洲色色色色色| 99热99色| AV操逼网| 天天操中文字幕| 噜噜狠狠色综合久| 欧美丁香五月夫妻天| 开心婷婷五月综合| 天天夜天天色天天| 国产精产国品一二三在观看| 色五月久久成人婷婷| 啪啪啪综合网| 永久的网站AAAA| 色色婷婷五月天| 成人亚洲精品| 综合网色| 人妻人人操| 久操热线| 97精品自拍| 色综合久久88色综合天天99| 丁香九月婷| 另类A片| 亚洲午夜视频| 91色久| 久热超碰| 久色激情| 久久亚洲色导航| 日本不卡一区二区三区| 人妻操操色| 丁香六月婷婷基地| 99这里只有精| 欧美色色色色色色| 啊v视频在线观看| 日本精品99| 婷婷丁香五月激情| 五月丁香六月日逼| 亚洲综合色婷| 婷婷综合六月| 中文字幕婷婷在线| 五月天丁香成人社| 九九热这里只有精品7| 色色99| 天天综合天天做天天综合| 欧美精品狠狠色丁香婷婷| 亚洲精品国产精品乱码视99| www.综合久久.com| 色播五月婷婷| WWW.桔色成人.COM入口| 五月刺激丁香月综合| 亚洲视频色婷婷| 在线观看亚洲视频影院| 五月婷婷综合视频| www激情网| 变天就操逼婷婷五月| 色五月婷婷在线| 精品乱码视频| 狠狠精品干练久久久无码中文字幕| 韩国久久少妇视屏| 丁香激情五月| 久久六月综合| 九六五月天婷婷| 东北熟女视频99| 五月停停999| sesesesezonghe| 日韩在线看AV| 日婷婷| 色婷婷99| 婷婷五月色播天| 婷婷成人AV| 99久久这里只有精品| 色婷婷五月天不卡| 久热91精品| 这里只有精品视频| 色综合99| 色色婷| 激情久久伊人| 97碰人人操| 婷婷另类开心| 四川操逼站| 能看的AV| 五月婷婷性| 色五月天.con| 五月天小说激情| 久99视频| 婷婷五月天六月| 超碰在线视屏| 六月婷婷综合网2| 超碰在线人人| 色婷婷先锋| 亚洲AV综合在线观看| 久久人人添人人爽添人人片αV | 久久婷五月| 中文网av| 激情视频网址| www.激情五月天.com| 九九色热| 99热这里只有精品3| 激情五月天婷婷久久久久久久久久久| 国产免费av网站| 亚洲天天操| 色婷婷五月综合| 深爱激情五月天色婷婷| 激情婷婷五月| 偷拍丁香九月激情| 天天综合在线网| 久久婷婷六月综合| 先锋男人99资源| BT综合在线视频观看| 丁香深五月婷婷| 五月丁香在线观看| 九九热99熟女| 丁香五月欧美色综合| 婷婷五月天激情文学小说| 色九月国产| 久久五月婷婷综合网| 99色色视频| 日本色五月| 五月综合激情综合久| 欧美欧盟性爱网| 97人妻碰碰碰碰碰久久久久久| 少妇水多A片太爽了| 日本久久网| 婷婷中文字幕| 伊人9999| 日本色婷婷综合| 狠狠爱综合网| 久久婷婷激情四射五月天| 日韩精品在线观看9| 疯狂做受XXXX高潮A片| 久久九九国产精品怡红院| 玖玖爱综合网| 婷婷射丁香| 丁香五月天啪啪激情综合网| 九九热区一区二区三区| 99热国产这里只有| 操一区| 久久九九中文字幕| 大香蕉Av在线| 五月 婷 久| 久久精品凹凸分类| 亚洲无AV在线中文字幕| 五月天激情小说| 六月丁香激情网| 久操大| 激情人妻综合| 99精品视频在线观看| 99网99热| 五月婷婷第四色| 激情性五月天免费小说视频| 国产成人va在线| 激情五月丁香色婷婷| 日日色五月天| 91精品电影18T| 激情四射五月天偷偷看婷婷| 激情五月天久久丁香| 色色色欧美| 日本久久婷| 日韩成人AV在线| 91啪啪视频| 热九九精品| 亚洲色啪| 丁香婷婷色| 日本欧美成人片AAAA| 五月丁香色综合| 丁香五月影院| 色婷婷久久| 亚洲日韩一页精品发布| 99ER热精品视频| 国产又黄又爽又色的免费| 中文字幕日产A片在线看| 亚洲精品又粗又大又爽A片| 亚洲亚洲人成综合网络| 清纯唯美 激情四射| 99re欧美精品| 97人人妻人人艹| 日本偷拍九九九| 一级黄色操B| 婷婷九月在线| 成人Av在线大片| 97人人操在线| 久久综合丁香五月| 日本www五月婷婷| 一本道综合网| 色情五月天A片| 少妇达人正片在线播放_ikun_福利吧| 五月天另类激情在线| 五月丁香欧美综合| 五月亭亭开心网| 婷婷五月丁香五月丁香| 黄色成人网站在线播放| 日本色色色| 人妻VideOssS人妻| 五月婷婷天堂| 91日韩在线| 色五月天丁香| 日韩性爱AV| 欧美丁香五月| 五月婷色丁香| 思思热在线| 五月婷婷色| www.色婷婷.com| 五月婷婷在线网站| 色噜噜综合网| 思思热99在线| 婷婷五月花| 9久久精品视频| 六月激情网| 97九色| 天堂草在线观| 五月天婷婷视频| 99视频在线看| 五月丁香拍拍激情综合| 丁香五月色| 五月激情六月综合| 激情第四色| 色情久久久| 熟女激情五月天| 中文字幕日本最新乱码视频| 婷婷婷久久久| 五月天婷婷影院影院观看| 最近韩国日本免费高清观看| 婷婷久久五月丁香| 婷婷深爱五月天| 人妻在线观看视频| 五月婷人妻| 婷婷久久色| 激情六月丁香| 婷婷五月婷婷| 亚洲国产成人AV在线| 久久精品永久免费| 午夜不卡久久精品无码免费 | 天堂久久精品| 亚洲天堂无码| 人人爱国产| 大香蕉在线99热| 天天摸日日舔狠狠添婷婷婷| 伊人五月天| 色五月xxx| av色色国产| 免费亚洲婷婷中文字幕| 中文字幕av在线播放| 五月天婷婷激情在线色图| 一起草性爱不卡视频| 日韩日比视频在线| 久久久久久丁香五月| 99惹| 超碰av在线| 中文AV在线观看| 亚洲熟女乱色综合亚洲网站| 五月天 另类图片| 国产操B| 夜夜操天天爽| 成人AV片播放| 五月丁香婷婷三级| 超级碰 久久9| 人人爱人人摸人人澡| 亚洲99一级无嗎特制在线| 丁香美女主播视频在线观看| 热久久999| cc精品国产性传播| 91碰免费视频| 婷婷六月花| 激情碰碰碰| 99re8在这里只有精品| 日韩色色一区| 性热视频99精品| 色碰碰| 丁香五月成人社区| 久思思久视频| 天天爱天天操| 五月婷婷,六月激情| 亚洲成人影视在线| 99热精品免费在线观看| 婷综合六月| 激情九色| 爱射综合| 天天综合网站| 婷婷五月天亚洲激情戏精品| www日本熟妇99在线视频| 九九色热视频| 97成人在线视频精品| 久久婷婷五月丁香网| 欧美日韩成人| 日本人妻伦在线中文字幕| 激情五月色综合国产精品| 欧美久久久中文字幕| 丁香五月婷婷六月丁香| 婷婷伊人网| 夜精品无码A片一区二区蜜桃| 六月丁香激情综合| 性爱激情小说AV五月丁香花| 亚洲中文字幕AV| 99色看这里只有精品| 90色免费视频| 99在线精品视频| 狠狠色色| av高清无码| 日婷婷| 色婷婷影视| 成人网在线观看视频| 天天操天天操天天操天天操天天操 | 夜夜爽天天| 雪千夏麻豆| WWW,五月| 亚洲五月天天| 91丨九色丨国产打屁股网站| 国产精品美女| 99热这里只有精品亚洲| 思思干精品| 国产免费一区二区三区三州老师F1F1.CC | www激情| www,婷婷,com| 五月综合丁香婷婷| 韩国情人在线电视剧免费观看高清版全集 | 亚洲婷婷丁香五月天激情小说| 91在线人| 婷婷五月天亚洲| 六月婷婷激情小说网| 91视频精品99| 亚洲成人AV电影在线| 色色五月婷婷久久| 色婷婷丁香五月高清在线| WWW.久久99| 五月丁香影院| A1片久久久| 日日懆天天懆|