亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

C#實(shí)戰(zhàn):從0到1實(shí)現(xiàn)單機(jī)版搶車位游戲

C#實(shí)戰(zhàn):從0到1實(shí)現(xiàn)單機(jī)版搶車位游戲 簡介基于C#語言開發(fā)的單機(jī)版搶車位游戲完整源碼面向C#初學(xué)者、面向?qū)ο缶幊虒W(xué)習(xí)者及游戲開發(fā)入門者。以搶車位玩法為載體完整演示了從玩家、車輛、車位等類設(shè)計(jì)到用戶登錄、窗體交互、游戲循環(huán)的開發(fā)鏈路適合課程設(shè)計(jì)、個(gè)人練手或畢業(yè)設(shè)計(jì)參考。壓縮包共83個(gè)文件大小6.37MB主要包含15個(gè)cs源碼文件核心邏輯與窗體、37個(gè)png和9個(gè)jpg界面素材、3個(gè)resx與3個(gè)resources資源文件另有exe可執(zhí)行程序、功能說明doc文檔和初始化玩家對象的txt代碼目錄清晰便于運(yùn)行和修改。已有244人學(xué)習(xí)瀏覽。源碼開放可直接查看和修改包含Player、Car、ParkingSpace、LoginFrm、ManiFrm等核心類模擬隨機(jī)事件、時(shí)間限制與策略決策并涉及線程同步、計(jì)時(shí)器等機(jī)制配套文檔詳細(xì)說明了界面布局、按鈕功能和操作流程初始化示例展示了創(chuàng)建玩家對象、分配初始資源的完整步驟對理解封裝、繼承、多態(tài)以及多窗體程序組織方式都有直接幫助也能根據(jù)需求擴(kuò)展車位類型或調(diào)整游戲規(guī)則非常適合作為C#實(shí)戰(zhàn)練習(xí)項(xiàng)目。1. 單機(jī)版搶車位把社交玩法壓進(jìn) C# 的一個(gè)完整閉環(huán)搶車位這個(gè)玩法經(jīng)歷過社交平臺時(shí)代的人都不陌生把車停到別人車位賺錢趁對方離線時(shí)貼條、拖車最刺激的就是收益上限卡點(diǎn)前被人清空車位。放在當(dāng)年這套規(guī)則幾乎全在服務(wù)端本地只負(fù)責(zé)發(fā)請求想把它改成一個(gè)離線可玩、邏輯完整、拿得出手的 C# 項(xiàng)目得把停車、貼條、拖車、AI 對手整個(gè)重寫一遍。這份資源做的就是這件事它不是教學(xué) Demo而是一套能直接編譯運(yùn)行、完整玩完一把對局的課程設(shè)計(jì)級源碼。適合正在找 C# 題目交差的學(xué)生也適合想從增刪改查跳出來、認(rèn)真摸一遍游戲狀態(tài)機(jī)寫法的初學(xué)者。2. 先拆玩法再拆代碼搶車位的核心規(guī)則與類設(shè)計(jì)2.1 搶車位到底在搶什么貼條與拖車的收益閉環(huán)先說玩法因?yàn)轭愒O(shè)計(jì)完全由玩法推導(dǎo)出來。經(jīng)典搶車位的循環(huán)是這樣地圖上有若干公共車位玩家的車停進(jìn)去后按分鐘產(chǎn)出金幣收益有上限停得越久越接近上限。但車位是有限的別人的車占著位置你就可以對他做兩件事貼條沒收他當(dāng)前累計(jì)收益的一半作為罰金拖車直接清空累計(jì)收益并把車送回空閑狀態(tài)進(jìn)入一段冷卻時(shí)間。這兩個(gè)動(dòng)作構(gòu)成了整個(gè)游戲的博弈核心車位越熱門、停得越久越容易被針對。單機(jī)版最大的問題在于沒有真人來“惡心”你。如果沒有AI這個(gè)游戲本質(zhì)上就是個(gè)倒計(jì)時(shí)領(lǐng)錢器五分鐘就沒勁了。所以這套資源里實(shí)現(xiàn)了AI玩家來承擔(dān)對抗角色它會有三種行為基元尋找空位停車、給玩家或者其他AI的車貼條、拖別人的車。各行為觸發(fā)概率由難度參數(shù)控制后面第4章單獨(dú)講。先把規(guī)則定下來所有的代碼邏輯都以這張表為準(zhǔn)。動(dòng)作目標(biāo)條件效果罰金公式停車車位空閑車輛不在冷卻車位被占開始累計(jì)收益無貼條車位被占且未被貼條沒收當(dāng)前累計(jì)收益標(biāo)記貼條AccIncome × 50% 20拖車車位被占且未被貼條清空累計(jì)收益車輛進(jìn)冷卻AccIncome × 80%挪車玩家同一輛車停到新空位舊車位釋放累計(jì)收益清零無這張表是整套源碼的基石后續(xù)所有方法都圍繞它展開。注意“挪車”這條容易被忽略經(jīng)典規(guī)則里把車從 A 車位挪到 B 車位A 車位釋放但累計(jì)收益清零。這么設(shè)計(jì)是為了防刷錢——如果挪車不清零玩家可以把車停在高級車位上賺滿上限再挪到另一個(gè)高級車位繼續(xù)賺等于無限套利。拿到源碼后改功能時(shí)這條規(guī)則建議不要?jiǎng)右粍?dòng)經(jīng)濟(jì)系統(tǒng)就崩。2.2 六張核心類圖從 Car 到 GameData 的職責(zé)劃分接下來看資源里的類設(shè)計(jì)。它沒有用復(fù)雜的框架就是幾個(gè)實(shí)體類加一個(gè)游戲管理類。實(shí)體類全部采用“貧血模型”只存數(shù)據(jù)不寫邏輯規(guī)則統(tǒng)一放在 GameManager 里。為什么這么分因?yàn)橥\?、貼條、拖車之間交互頻繁貼條要改車位狀態(tài)、改車輛收益、改玩家金幣如果規(guī)則散落在實(shí)體類里后期調(diào)整 AI 策略時(shí)會改到懷疑人生。集中管理后規(guī)則的入口只有一個(gè)調(diào)試時(shí)下斷點(diǎn)也只盯 GameManager 一個(gè)類。核心實(shí)體類的定義如下命名空間統(tǒng)一放在 ParkingGame.Models 下public class Car { public int Id { get; set; } public string Nickname { get; set; } // 車牌昵稱玩家自定義 public int Level { get; set; } // 等級影響收益加成 public int AccIncome { get; set; } // 當(dāng)前累計(jì)未結(jié)算收益 public int CurrentSpaceId { get; set; } // 當(dāng)前所在車位Id-1表示閑置 public bool InCooldown { get; set; } // 拖車后的冷卻標(biāo)志 public DateTime CooldownEnd { get; set; } // 冷卻結(jié)束時(shí)間 } public class ParkingSpace { public int Id { get; set; } public int Row { get; set; } public int Col { get; set; } public int Level { get; set; } // 車位等級影響基礎(chǔ)收益倍率 public int ParkedCarId { get; set; } // 停著的車Id-1表示空閑 public bool HasTicket { get; set; } // 是否被貼條 public DateTime ParkedAt { get; set; } // 停車時(shí)間用于收益上限計(jì)算 } public class Player { public string Name { get; set; } public int Money { get; set; } public ListCar Cars { get; set; } } public class GameData { public Player HumanPlayer { get; set; } public ListAIPlayer AIPlayers { get; set; } public ListParkingSpace Spaces { get; set; } public int TickSec { get; set; } // 每個(gè)Tick對應(yīng)的游戲秒數(shù) public bool IsRunning { get; set; } }這段代碼有幾個(gè)細(xì)節(jié)值得說。Car 里的 CurrentSpaceId 用 -1 表示閑置而不是用int?原因有兩個(gè)一是 JSON 序列化時(shí) -1 不需要額外處理存檔讀檔更省事二是判斷“這輛車現(xiàn)在有沒有停在車位上”時(shí)寫成car.CurrentSpaceId -1一眼就能看懂不會出現(xiàn) null 判斷漏掉的情況。ParkingSpace 里的 ParkedAt 用的是 DateTime 而不是 tick 計(jì)數(shù)這是為了存檔后不丟收益進(jìn)度——如果你存的是“停了 300 個(gè) tick”讀檔后 Timer 重啟tick 數(shù)就對不上了DateTime 則能通過相對時(shí)間差恢復(fù)。AIPlayer 在資源里單獨(dú)定義它繼承 Player額外帶一組決策權(quán)重字段public class AIPlayer : Player { public int ParkWeight { get; set; } // 停車行為權(quán)重 public int TicketWeight { get; set; } // 貼條行為權(quán)重 public int TowWeight { get; set; } // 拖車行為權(quán)重 public int ThinkTick { get; set; } // 每幾Tick決策一次 }這組權(quán)重會在第 4 章詳細(xì)展開。現(xiàn)在只要知道每個(gè) AI 不是每 Tick 都行動(dòng)而是每隔 ThinkTick 才做一次決策這樣能模擬“思考延遲”也能避免 AI 行動(dòng)過于頻繁導(dǎo)致玩家毫無還手之力。想調(diào)出不同性格的 AI就是改這四個(gè)數(shù)字后續(xù)不用動(dòng)任何邏輯代碼。2.3 游戲主循環(huán)Timer 驅(qū)動(dòng)的秒級收益結(jié)算機(jī)制整個(gè)游戲的調(diào)度核心是一個(gè) System.Windows.Forms.Timer。為什么不用 System.Timers.Timer因?yàn)?WinForms 的 Timer 事件在 UI 線程上觸發(fā)事件里可以直接改控件屬性不需要 Invoke 跨線程System.Timers.Timer 的回調(diào)在線程池線程上改界面必須 this.Invoke寫起來麻煩還容易死鎖。單機(jī)游戲的主循環(huán)沒有高性能需求Forms.Timer 的毫秒級精度完全夠用。初始化代碼長這樣private void InitGameLoop() { gameTimer new Timer(); gameTimer.Interval 200; // 200ms 一次Tick即每秒5次 gameTimer.Tick GameTimer_Tick; gameTimer.Start(); gameData.TickSec 3; // 每個(gè)Tick相當(dāng)于游戲內(nèi)3秒 tickCounter 0; } private void GameTimer_Tick(object sender, EventArgs e) { if (!gameData.IsRunning) return; tickCounter; gameManager.UpdateIncome(gameData); // 第1步所有在停車輛結(jié)算收益 gameManager.UpdateCooldown(gameData); // 第2步檢測冷卻結(jié)束恢復(fù)可用 if (tickCounter % aiDecisionInterval 0) // 第3步AI按節(jié)奏做決策 { aiController.Decide(gameData); } if (tickCounter % uiRefreshInterval 0) // 第4步定時(shí)刷新界面不每Tick刷 { RenderBoard(); } }這里有個(gè)容易抄錯(cuò)的地方Interval 為什么用 200 而不是 1000因?yàn)槭找娼Y(jié)算如果每秒才走一次玩家看到的數(shù)字變化是跳變沒有“金幣在漲”的持續(xù)感反過來如果每毫秒結(jié)算一次CPU 浪費(fèi)嚴(yán)重。200ms 一個(gè) Tick每 5 個(gè) Tick 湊成游戲內(nèi) 3 秒需要改游戲速度時(shí)只改 TickSecTimer 本身不用動(dòng)。參數(shù)上aiDecisionInterval 默認(rèn)設(shè) 6意思是 AI 每 6 個(gè) Tick、約 1.2 秒決策一次uiRefreshInterval 默認(rèn)設(shè) 10即約 2 秒刷新一次界面。UI 刷新頻率別設(shè)太高WinForms 里每次改 PictureBox 的 BackColor 都會觸發(fā)一次重繪48 個(gè)車位全刷一遍就容易閃爍這個(gè)玄學(xué)問題第 5 章再展開。3. 把停車邏輯寫成代碼車位狀態(tài)機(jī)與收益結(jié)算3.1 車位的四種狀態(tài)與狀態(tài)遷移條件車位的生命周期可以抽象成四種狀態(tài)空閑、占用未貼條、占用已貼條、冷卻中。嚴(yán)格說冷卻屬于車輛狀態(tài)但它的存在影響了車位的可停判定所以實(shí)際編碼時(shí)兩個(gè)狀態(tài)要一起判斷。把這四種狀態(tài)畫成遷移圖邏輯是這樣的空閑狀態(tài)下玩家或 AI 可以停車進(jìn)入占用占用狀態(tài)下可以被貼條進(jìn)入已貼條占用和已貼條狀態(tài)下都可以被拖車拖完后車位回到空閑車輛進(jìn)入冷卻冷卻結(jié)束車輛重新可用??雌饋砗唵蔚百N條之后能不能拖”這個(gè)細(xì)節(jié)很多初版實(shí)現(xiàn)都會做錯(cuò)資源里明確要求貼條后的車不能再被拖避免雙重懲罰疊加。核心方法全部收斂在 GameManager 里三個(gè)方法對應(yīng)三個(gè)玩家動(dòng)作public bool TryPark(GameData data, int carId, int spaceId) { var car FindCar(data, carId); var space data.Spaces[spaceId]; if (space.ParkedCarId ! -1) { return false; // 車位被占不能停 } if (car.InCooldown) { return false; // 被拖后冷卻中 } if (car.CurrentSpaceId ! -1) { // 自己已有車停在別處停到新位子時(shí)先把舊車收回來 var oldSpace data.Spaces[car.CurrentSpaceId]; oldSpace.ParkedCarId -1; oldSpace.HasTicket false; car.AccIncome 0; } space.ParkedCarId carId; space.ParkedAt DateTime.Now; car.CurrentSpaceId spaceId; return true; }注意 TryPark 的返回值是 bool這是給 UI 層用的。玩家點(diǎn)了空車位但停車失敗時(shí)UI 層要根據(jù)返回值決定彈提示還是靜默處理如果方法返回 voidUI 層就只能靠猜。另外移動(dòng)舊車時(shí)把 AccIncome 清零并且把舊車位的 HasTicket 也重置這兩步缺一不可。漏掉 HasTicket 重置的話舊車位會殘留“已貼條”標(biāo)記后續(xù) AI 決策時(shí)以為那里有車可貼直接空指針或者收益錯(cuò)亂。接下來是貼條和拖車public bool TryTicket(GameData data, int spaceId) { var space data.Spaces[spaceId]; if (space.ParkedCarId -1 || space.HasTicket) { return false; // 沒車可貼或者已經(jīng)貼過 } var car FindCar(data, space.ParkedCarId); var player FindOwner(data, car.Id); int fine (int)(car.AccIncome * 0.5) 20; // 罰金收入一半加20保底 player.Money - Math.Min(player.Money, fine); // 收益不夠就從本金扣 car.AccIncome 0; space.HasTicket true; return true; } public bool TryTow(GameData data, int spaceId) { var space data.Spaces[spaceId]; if (space.ParkedCarId -1 || space.HasTicket) { return false; // 拖車只對未貼條的在停車輛生效 } var car FindCar(data, space.ParkedCarId); var player FindOwner(data, car.Id); int fine (int)(car.AccIncome * 0.8); player.Money - Math.Min(player.Money, fine); car.AccIncome 0; car.CurrentSpaceId -1; car.InCooldown true; car.CooldownEnd DateTime.Now.AddSeconds(config.TowCooldownSec); space.ParkedCarId -1; space.HasTicket false; return true; }兩個(gè)方法的公共判斷都用條件表達(dá)式合在一行這是故意的貼條和拖車的目標(biāo)條件高度相似寫進(jìn)方法的開頭一眼就能看出差異只在 HasTicket 的判斷。罰金里Math.Min(player.Money, fine)的處理要說明一下——如果玩家的當(dāng)前金幣小于罰金只扣到 0不讓玩家負(fù)債。課程設(shè)計(jì)答辯時(shí)經(jīng)常會被問到“罰金不夠扣怎么辦”這個(gè)實(shí)現(xiàn)就是標(biāo)準(zhǔn)答案。3.2 點(diǎn)擊命中檢測用控件數(shù)組而不是算像素坐標(biāo)點(diǎn)擊車位做交互是初版實(shí)現(xiàn)翻車率最高的地方。常見的做法是給地圖 Panel 掛一個(gè) MouseClick 事件然后用 e.Location 除以格子寬高算行列。聽起來很合理但實(shí)際跑起來經(jīng)常點(diǎn)一個(gè)格子響應(yīng)的是旁邊那個(gè)因?yàn)?Panel 有邊框、有 Padding、有 AutoScrollPosition甚至窗體縮放后格子尺寸變了你硬編碼的固定行列全部失效。這個(gè)資源里的做法非常務(wù)實(shí)用 TableLayoutPanel 鋪滿 PictureBox 矩陣每個(gè) PictureBox 對應(yīng)一個(gè) ParkingSpace點(diǎn)擊事件掛在格子上Tag 里存車位索引。這樣甚至不需要寫坐標(biāo)換算鼠標(biāo)點(diǎn)的是哪個(gè) PictureBox就必然是哪一個(gè)車位。// 初始化 6 行 8 列的網(wǎng)格映射到 GameData.Spaces for (int r 0; r rows; r) { for (int c 0; c cols; c) { var index r * cols c; var pic new PictureBox(); pic.Width cellW; pic.Height cellH; pic.Tag index; // Tag 存車位索引不存對象引用 pic.BackColor GetSpaceColor(data.Spaces[index]); pic.Click SpaceCell_Click; tableLayout.Controls.Add(pic, c, r); } } private void SpaceCell_Click(object sender, EventArgs e) { var pic (PictureBox)sender; int spaceIndex (int)pic.Tag; if (currentAction PlayerAction.Park) gameManager.TryPark(gameData, selectedCarId, spaceIndex); else if (currentAction PlayerAction.Ticket) gameManager.TryTicket(gameData, spaceIndex); else if (currentAction PlayerAction.Tow) gameManager.TryTow(gameData, spaceIndex); RenderBoard(); // 操作后立即刷新不等下一個(gè)UI刷新周期 }cellW 和 cellH 不要在初始化時(shí)寫死應(yīng)該在 Form 的 Resize 事件里重新計(jì)算cellW (tableLayout.ClientSize.Width - tableLayout.Padding.Horizontal) / cols; cellH (tableLayout.ClientSize.Height - tableLayout.Padding.Vertical) / rows;Tag 里存索引而不是直接存 ParkingSpace 對象這算是一個(gè)防御性習(xí)慣如果后續(xù)在代碼里替換了整個(gè) Spaces 列表比如讀檔后重建索引仍然有效對象引用則會變成懸空引用。用控件數(shù)組方案之后鼠標(biāo)坐標(biāo)計(jì)算這個(gè)“玄學(xué)”環(huán)節(jié)完全消失了代價(jià)僅僅是內(nèi)存里多了幾十個(gè) PictureBox對單機(jī)游戲來說可以忽略。3.3 收益結(jié)算上限、保底與結(jié)算順序收益結(jié)算是整個(gè)游戲的經(jīng)濟(jì)引擎代碼最短但最容易寫歪。資源里的 UpdateIncome 方法在每次 Timer Tick 時(shí)被調(diào)用遍歷所有車位給停著的車?yán)奂邮找?。關(guān)鍵有三點(diǎn)收益上限、保底收益、結(jié)算順序。public void UpdateIncome(GameData data) { foreach (var space in data.Spaces) { if (space.ParkedCarId -1) continue; var car FindCar(data, space.ParkedCarId); if (car null || car.CurrentSpaceId ! space.Id) continue; // 收益上限判斷停車超過 MaxStopSeconds 后不再漲錢 var parkedDuration (DateTime.Now - space.ParkedAt).TotalSeconds; if (parkedDuration config.MaxStopSeconds) { continue; } int baseIncome config.BaseIncomePerMinute; double rate 1.0 car.Level * 0.2 space.Level * 0.1; int income (int)(baseIncome * rate * data.TickSec / 60.0); car.AccIncome Math.Max(income, 1); // 保底 1 金幣避免0收益 } }上限判斷用 DateTime 差值而不是 tick 計(jì)數(shù)器原因在第 2 章說過存檔讀檔時(shí)只有 DateTime 能正確恢復(fù)。rate 的計(jì)算用的是加法稀釋乘法收益倍率 1 車輛等級加成 車位等級加成這樣后期數(shù)值膨脹速度可控。如果你改成 1.0 * 1.2^Level * 1.1^SpaceLevel指數(shù)增長會在 30 分鐘后完全失控這是數(shù)值設(shè)計(jì)上的一個(gè)陷阱。保底 1 金幣必須加原因很實(shí)際TickSec 設(shè)置為 3 秒時(shí)基礎(chǔ)收益如果是 20 金幣/分鐘每個(gè) Tick 的理論收益是 1 金幣如果把 TickSec 改成 1 秒理論收益算下來是 0 金幣玩家看到車停了半天一分錢沒漲會認(rèn)為游戲壞了。Math.Max(income, 1)一行解決這個(gè)邊界問題代價(jià)是極端低收益時(shí)金幣總量會略高于理論值但單機(jī)游戲內(nèi)部經(jīng)濟(jì)這點(diǎn)誤差無所謂。結(jié)算順序上保持“先結(jié)算收益后處理玩家操作”是這套源碼的一個(gè)隱式約定。玩家在兩次 UI 刷新之間點(diǎn)擊貼條貼條方法拿到的是最新結(jié)算過的 AccIncome罰金計(jì)算是準(zhǔn)的反過來如果先執(zhí)行操作再結(jié)算貼條罰金會少算一個(gè) Tick 的收益雖然單次誤差很小但累計(jì)起來就是“為什么我總是差幾塊錢”的詭異問題。4. 單機(jī)版不冷場AI 對手的決策與實(shí)現(xiàn)4.1 三種行為與加權(quán)隨機(jī)為什么 AI 決定要“抽簽”單機(jī)版搶車位最怕冷場。如果 AI 只是在車位空著時(shí)去停游戲不會有任何對抗感所以資源里的 AI 集成了三種完整行為停車、貼條、拖車。但 AI 不能每次決策都做同樣的動(dòng)作否則行為模式很快就會被玩家摸透于是這里引入加權(quán)隨機(jī)——給每個(gè)行為分配一個(gè)權(quán)重值權(quán)重越大被抽中的概率越高。這樣 AI 的行為有隨機(jī)性但整體傾向可控。public void Decide(GameData data) { foreach (var ai in data.AIPlayers) { if (!ai.IsFree) continue; var action WeightedPick(ai.ParkWeight, ai.TicketWeight, ai.TowWeight); switch (action) { case AiAction.Park: PerformPark(data, ai); break; case AiAction.Ticket: PerformTicket(data, ai); break; case AiAction.Tow: PerformTow(data, ai); break; case AiAction.Wait: break; // 啥也不干模擬“在考慮中” } } } private AiAction WeightedPick(int parkW, int ticketW, int towW) { int total parkW ticketW towW 5; // 最后5是Wait的基礎(chǔ)權(quán)重 int rnd random.Next(total); if (rnd parkW) return AiAction.Park; if (rnd parkW ticketW) return AiAction.Ticket; if (rnd parkW ticketW towW) return AiAction.Tow; return AiAction.Wait; }加權(quán)隨機(jī)實(shí)現(xiàn)的細(xì)節(jié)在區(qū)間劃分。第一段區(qū)間長度是 parkW第二段是 ticketW以此類推。這里有個(gè)很隱蔽的 bug 源random必須是類級別的靜態(tài)實(shí)例不能在 Decide 里new Random()。同一個(gè) Tick 里多個(gè) AI 依次決策如果各自 new Random系統(tǒng)時(shí)鐘種子相同的情況下會生成完全相同的隨機(jī)序列結(jié)果就是所有 AI 在同一次決策中做出一模一樣的動(dòng)作。這個(gè)資源里把 Random 設(shè)成了 GameManager 的靜態(tài)字段踩過這個(gè)坑的人都知道我在說什么。4.2 決策前先做狀態(tài)快照防止 AI 之間串臺AI 決策過程中最容易出問題的不是隨機(jī)數(shù)而是數(shù)據(jù)一致性。假設(shè)有 3 個(gè) AI第一個(gè) AI 停進(jìn)了 8 號車位第二個(gè) AI 在掃描空閑車位時(shí)也選中了 8 號——如果它直接讀實(shí)時(shí)的 data.Spaces會看到 8 號已經(jīng)被占然后跳過但如果它的掃描邏輯是先把所有空閑車位收集成 List再從中隨機(jī)選一個(gè)而這個(gè) List 是決策開始時(shí)生成的那它選中的可能正是第一個(gè) AI 剛占掉的車位最終停車失敗表現(xiàn)為“AI 莫名其妙發(fā)呆”。這個(gè)資源里的解法是給每次決策做一次數(shù)據(jù)快照所有 AI 基于同一個(gè)快照做判斷而不是基于實(shí)時(shí)變化的 Live 數(shù)據(jù)// AI 決策入場前鎖定一次狀態(tài)避免同一輪內(nèi)相互覆蓋 var snapshot data.Spaces.Select(s new SpaceSnapshot { SpaceId s.Id, ParkedCarId s.ParkedCarId, HasTicket s.HasTicket }).ToArray(); foreach (var ai in data.AIPlayers) { var target ChooseTargetFromSnapshot(snapshot, ai); if (target null) continue; // 真正執(zhí)行時(shí)要重新檢查實(shí)時(shí)狀態(tài)防止快照過期導(dǎo)致邏輯錯(cuò)亂 if (data.Spaces[target.SpaceId].ParkedCarId -1) { PerformPark(data, ai, target.SpaceId); } }SpaceSnapshot 是一個(gè)輕量結(jié)構(gòu)體只包含判斷所需的三個(gè)字段不引用實(shí)體對象。快照的存在讓同一輪 AI 決策之間互不干擾玩起來的感覺就是“三個(gè) AI 在同一秒各自做了自己的決定”這正是單機(jī)版對多人博弈的模擬。但也要注意快照的時(shí)效執(zhí)行操作前必須回到實(shí)時(shí)數(shù)據(jù)上做一次二次校驗(yàn)否則 AI 的停車操作會因?yàn)榭煺者^期而頻繁失敗失敗率過高時(shí) AI 看起來就像一個(gè)傻子。4.3 難度參數(shù)三個(gè)檔位的調(diào)參建議資源內(nèi)置了新手、普通、困難三個(gè)難度檔位實(shí)際改動(dòng)只有一張表參數(shù)新手普通困難ThinkTick決策間隔864ParkWeight停車權(quán)重706050TicketWeight貼條權(quán)重202530TowWeight拖車權(quán)重51015AI 收益倍率1.01.01.2調(diào)難度的邏輯有兩條線。第一條是決策頻率ThinkTick 越小AI 行動(dòng)越頻繁玩家剛停下車 2 秒就被盯上的幾率越大壓迫感直接上升。第二條是行為傾向新手檔拖車權(quán)重只有 5AI 很少拖車玩家不會被突然清空車位困難檔把拖車權(quán)重拉高到 15同時(shí)給 AI 加了 1.2 倍收益倍率保證 AI 在頻繁對抗的同時(shí)自己的經(jīng)濟(jì)也能跟上玩家不會滾雪球崩盤。這里有個(gè)容易忽略的細(xì)節(jié)AI 收益倍率不是加在 AI 玩家的初始資金上而是加在 AI 每次收益結(jié)算的產(chǎn)出上。如果只調(diào)初始資金游戲進(jìn)行 10 分鐘后 AI 就會破產(chǎn)后續(xù)只能靠貼條和拖車維持行為模式會變得非常單調(diào)。倍率調(diào)產(chǎn)出才能讓 AI 長期和玩家保持同層級的競爭力。5. 避坑記錄搶車位開發(fā)中常見的五個(gè)翻車現(xiàn)場5.1 界面卡死Tick 事件里做了耗時(shí)操作現(xiàn)象游戲運(yùn)行后點(diǎn)擊按鈕沒有任何反應(yīng)窗口拖動(dòng)時(shí)出現(xiàn)白屏幾秒后才恢復(fù)。原因Timer 事件本身在 UI 線程執(zhí)行如果 Tick 里阻塞了整條消息隊(duì)列全部排隊(duì)所有控件都卡死。當(dāng)時(shí)是在 RenderBoard 里循環(huán)給 48 個(gè) PictureBox 設(shè)置 BackColor 和 Text圖片數(shù)量多時(shí)一次刷新耗時(shí)接近 300ms而 Timer 每隔 200ms 就觸發(fā)一次等于 UI 線程永遠(yuǎn)在趕場。解決把“數(shù)據(jù)更新”和“界面渲染”徹底分層。Tick 事件里只改 GameData 數(shù)據(jù)RenderBoard 統(tǒng)一放在 uiRefreshInterval 控制下實(shí)測將刷新頻率降到 2 秒一次并把 PictureBox 的 DoubleBuffered 屬性設(shè)為 true界面卡死問題完全消失。5.2 收益翻倍重復(fù)創(chuàng)建 Timer 沒釋放舊實(shí)例現(xiàn)象玩著玩著金幣增速突然變快打開日志發(fā)現(xiàn) UpdateIncome 被執(zhí)行了兩次甚至三次。原因?qū)崿F(xiàn)“重新開始游戲”功能時(shí)代碼里直接 new 了一個(gè) Timer 再 Start但沒有 Stop 和 Dispose 舊 Timer。舊實(shí)例還在 Tick 事件里繼續(xù)驅(qū)動(dòng) UpdateIncome新舊兩個(gè) Timer 同時(shí)在跑收益結(jié)算被重復(fù)執(zhí)行。解決新開一局前強(qiáng)制執(zhí)行一次gameTimer?.Stop(); gameTimer?.Dispose();再 new 新實(shí)例。從那以后我每次寫帶 Timer 的游戲都會養(yǎng)成習(xí)慣只要出現(xiàn)“重新開始”“切換場景”這類邏輯第一步永遠(yuǎn)是清理舊的定時(shí)器這個(gè)習(xí)慣幫我省了無數(shù)次排查時(shí)間。5.3 坐標(biāo)偏差固定行列在窗體縮放后全部錯(cuò)位現(xiàn)象窗口默認(rèn)大小時(shí)點(diǎn)擊正常把窗口拉大后點(diǎn)擊格子響應(yīng)的是旁邊甚至對角線的車位。原因初始化時(shí)把格子寬高寫死成了默認(rèn)窗口對應(yīng)的尺寸Resize 后 PictureBox 被 TableLayoutPanel 自動(dòng)拉伸但點(diǎn)擊事件里記錄的車位索引仍然按初始化時(shí)的順序排列。其實(shí)這個(gè)方案本身沒有錯(cuò)錯(cuò)的是格子尺寸沒有跟著重算。解決改用控件數(shù)組方案后把 cellW 和 cellH 的計(jì)算放在 Resize 事件里每次窗體尺寸變化都重新計(jì)算。代碼上只加了幾行但從此坐標(biāo)偏移的問題再沒出現(xiàn)。如果堅(jiān)持用坐標(biāo)手動(dòng)算行列還需要額外減去 Panel 的 Padding 和 Border 寬度那個(gè)組合就是玄學(xué)中的玄學(xué)。5.4 貼條與拖車同時(shí)生效AI 把玩家打到倒欠金幣現(xiàn)象玩家車輛先被貼條緊接著又被拖走兩者罰金疊加玩家金幣直接變負(fù)游戲數(shù)值崩壞。原因TryTicket 和 TryTow 都只檢查了車輛是否存在沒有互斥檢查。貼條之后車還在原車位拖車邏輯又把它判定為“可拖對象”兩套罰金疊在一起扣。解決在 TryTow 開頭加上if (space.HasTicket) return false;明確貼條和拖車是互斥動(dòng)作。規(guī)則上貼條后的車不能被拖這樣罰金只有一筆玩家損失可預(yù)期AI 的連招懲罰也不會顯得“不講道理”。5.5 讀檔后時(shí)間錯(cuò)亂DateTime 直接序列化導(dǎo)致收益上限失效現(xiàn)象昨晚存檔時(shí)車才停了 5 分鐘今天打開繼續(xù)車子的收益直接變成 0顯示已到上限。原因存檔時(shí)把 ParkedAt 按 DateTime 序列化讀檔后 DateTime.Now 減去存檔里的 ParkedAt得到的是包含整個(gè)離線時(shí)間段的差值遠(yuǎn)超收益上限系統(tǒng)理所當(dāng)然地認(rèn)為收益已經(jīng)停發(fā)。解決存檔時(shí)不要存 ParkedAt而是存累計(jì)停車秒數(shù)。讀檔后重建 ParkedAtspace.ParkedAt DateTime.Now.AddSeconds(-space.ParkedElapsedSeconds);這樣離線時(shí)間不會混入收益時(shí)長。另一個(gè)坑是 DateTime 在 JSON 里默認(rèn)序列化成帶時(shí)區(qū)的 UTC 字符串讀檔回來如果不轉(zhuǎn)換成當(dāng)?shù)貢r(shí)間差值也會錯(cuò)建議統(tǒng)一用 DateTimeOffset 或者干脆在存檔類里全用 Unix 時(shí)間戳。6. 越玩越像樣JSON 存檔、車位升級與數(shù)值平衡技巧6.1 用 System.Text.Json 做存檔注意版本兼容存檔是課程設(shè)計(jì)里最容易拿加分也最容易丟分的點(diǎn)。資源里沒有用復(fù)雜的二進(jìn)制格式就是 System.Text.Json 直接序列化 GameData 對象public void SaveGame(GameData data, string filePath) { var options new JsonSerializerOptions { WriteIndented true, Converters { new JsonStringEnumConverter() } }; var json JsonSerializer.Serialize(data, data.GetType(), options); File.WriteAllText(filePath, json); } public GameData LoadGame(string filePath) { var json File.ReadAllText(filePath); var data JsonSerializer.DeserializeGameData(json); return data; }因?yàn)樗袑?shí)體類都是普通對象序列化不需要額外標(biāo)記。如果以后給類加了新字段建議在存檔里加一個(gè) version 字段讀檔時(shí)判斷版本做字段補(bǔ)默認(rèn)值避免舊存檔直接反序列化報(bào)錯(cuò)。這個(gè) version 字段不用參與游戲邏輯只在存檔類里額外掛一個(gè)屬性就行。6.2 貼條罰金別寫 100%一個(gè)保底公式數(shù)值平衡是整個(gè)單機(jī)版能“玩得下去”的底線。貼條罰金如果設(shè)為當(dāng)前累計(jì)收益的 100%玩家停滿半小時(shí)被貼一次條直接歸零挫敗感強(qiáng)到想刪游戲。資源里的處理方式是 50% 加固定保底int fine (int)(car.AccIncome * 0.5) 20;這樣收益低的階段貼條也有 20 金幣保底收益AI 不會因?yàn)橥婕臆嚿系腻X少而懶得貼條收益高的時(shí)候罰金不會超過收入的一半玩家的損失可接受也有動(dòng)力繼續(xù)經(jīng)營。拖車罰金用 80% 而不是 100%也是同樣的道理——拖車是最強(qiáng)的懲罰手段但直接清零會讓玩家覺得“這個(gè)游戲不講道理”。車位升級的數(shù)值設(shè)計(jì)也是同理每升一級花費(fèi)是當(dāng)前等級金幣的 1.8 倍收益加成只加 10%。這個(gè)曲線保證前期升級便宜、收益提升明顯后期升級貴但在玩家可負(fù)擔(dān)范圍內(nèi)。整個(gè)升級系統(tǒng)給了玩家一個(gè)消耗金幣的出口不然游戲進(jìn)行 20 分鐘后金幣溢出所有懲罰都變得不痛不癢。說到車位升級順手分享一個(gè)我自己的習(xí)慣每次調(diào)試數(shù)值平衡我都會強(qiáng)制走一遍“新號開局 10 分鐘、掛機(jī) 1 小時(shí)、AI 困難檔”三個(gè)狀態(tài)的完整流程觀察金幣曲線和玩家挫敗感。這個(gè)項(xiàng)目我拆完后也重跑了一遍貼條保底公式就是從那輪調(diào)試?yán)锟吹降摹P金低于 20 金幣檔位AI 貼條熱情明顯下降。以后再做這類模擬經(jīng)營小游戲我應(yīng)該都會先拿這三檔流程測試一遍再交出去。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久操视频在线观看| 国语对白露脸XXXXXX| 很黄很色的视频在线观看| 东北女人性交| 欧美天天影院| 人妻 欧美亚洲| 国产嫩草精品A88AV在线| 精品一二三区久久AAA片| 久久久久久久精| 欧美亚洲涩涩| 色超碰综合| 私色综合网| 九九99精品视频在线观看| 九月丁香婷婷色| 午夜小电影在线插入淫高潮| 国产9熟妇视频网站| 人人污日韩一区二区| 韩日无码在线观看| 一道本东京热加勒比一区二区三区| 色色香蕉| 亚欧成人中文字幕一区| 再深点灬舒服灬太大了添视频| 欧美综合另类| 91性色| 中文字幕免费在线观看| 国产一线二线三线av| 粉嫩av一区二区三区四季| oumeisetupian| 91 刺激在线| 蜜臀AV网站| 国产成人精品日本视频| 中文字幕在线免费观看视频| www.狠狠| 91丝袜美腿网站| 久无码| 久久免费老司机精品| 99热思思| 性站| 国产丰满熟夫69mpp| 91最新综合| 精品福利视频| 天美精品一区二区三区四区在线观看| 欧美最大综合网| 天堂网 主播 亚洲| 97超碰欧美手机在线| 在线色资源| 天天拍天| 亚洲中文sv| 丁香九月婷婷| 欧美白嫩在线放| 亚洲青青青视频在线| 91碰碰| 99色综合| 色五月第四色| 亚洲第一视频 欧美风情 日韩| 97精品视频在线| 大色网久久| 欧美大的香蕉有线电视视频| 亚洲不卡三级手机播放| 青娱乐欧美激情一区二区 | 久久婷婷五月天| 六月丁香五月婷婷| 久久久久网站-538在线视频-欧美永久乱码 | 18禁网站在线播放| 天天肏夜夜肏| 超碰97玖玖爱| 人人操人人大香蕉| 人妻中文字幕精品无码| 青青草视频这里只有精品| 中文字幕精品区先锋资源| 日本精品无码三级网站| 婷婷五月天网| 成人在线午夜视频一区| 欧美日韩亚洲少妇寂寞影院正在播放 | 久久综合久色欧美综合狠狠 | 欧美最婬乱婬爆婬性视频| 第45页一区二区| 久久久久斤小| 99热在线播放| 99久久综合| 欧美色日本| 男人的天堂VA| 婷婷影院入口| 91撸色网 玖玖网 欧美| 人人爽夜夜玩视频| 超碰在线人人射| 久操网址| 97香蕉人人乳| 清纯唯美亚洲| 亚洲欧美经典一区二区| 国产精品久久久久久9999| 97国产超碰| 在线观看成人性爱免费小视频| 9l视频自拍9l九色成人| 日韩欧美水蜜桃人妻| 狼人狠干| www.91久久| 精品999日本| 日本二三四区| 亚洲国产激情国产av| 91网亚洲| 欧美色狠| 亚洲欧美性生活| 懂色av中文字幕一区二区三区天美 | 人人做天天爱| 亚洲欧美情色| 最新欧美色网| 91熟女丨91老女人| 九九碰九九爱97超碰| 91激情综合| 日本高清免费一本视频在线观看| 人妻丝袜无 码视频专区| 日韩97精| 丁香六月激情综合| 久热精品在线| 亚洲aw毛茸茸在线| 日韩欧无码一区二区三区免费不卡 | 日本精品88888888| 无码人妻精品一区二区中文| 日本天堂在线播放| 久久久久亚洲Aⅴ无码| 久久久久国产| 成人性爱高清视频免费看| 日韩淫色网| 精品少妇人妻av久久免费| 美女淫穴| 女人午夜视频777| 欧美视频一区二区三区| 日韩另类| 国语av狠狠色丁香婷婷综合激情| 偷拍网站久久男女男| 精品人妻av区天天看片| 丝袜喷水在线| 免费视频a级毛片免费视频| 超碰这里有精品| 在线精品福利免费播放| 人妻91少妇| 色综合色欲色综合色综合色综合| 啊啊啊啊啊好多水| 精品一二三区四视频| 在线A日本| 无码精品啪啪啪一区二区三区三州| 日韩精品一区二区三区色欲| 97AV在线观看| 欧美综合 站| 国产吞精a级片激情电影| AV色五月天| 五月丁香综合激情| 操逼天美3区| 极品少妇久久久| 亚洲不卡不卡中文字幕不卡| 在线观看免费视频国产| 91高清欧美| 嗯嗯嗯嗯啊啊啊好紧好大| 国产乱伦性爱区| 2020中文字幕在线| 国内91熟女人妻丝袜天天精品视频在线 | 探花视频免费观看国产专区| 啊啊啊骚| 男人的天堂在线| 人妻22p| 1人人看人人摸人人操| 欧美最大综合网| 蜜臀av一区二区三区免费观看| 老熟女91| 欧美丝袜91| 午夜久久一区二区无码中出| 亚洲中文日韩精品| 亚洲日韩人妻中文字幕一区| 麻豆成人影音在线| 呦女网站| 中文字幕一区二区三区人妻少妇在线| 久久五月婷| 高潮的A片激情扒开一区| 97超碰影音| 五月天伊人| 嗯嗯嗯好爽| 涩涩这里只有精品视频| 69国产对白刺激| 天天干夜夜操一区二区| 夜草欧美| 夜夜嗨av午夜成人| 啊好爽受不了无码| 久久天堂婷婷网| 欧美日韩国内不卡| 国产精品探花在线| 欧美日韩香蕉| 亚洲色系另类精品国产| 国产一级特黄大片处女| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 可以看的av| 国产大学生口爆吞精合集| 日本孕妇一区二区视频操逼免费看 | 色999亚洲人成色| 亚洲小电影免费涩涩成人在线高清| 亚洲高清自拍| 久久少妇| 国产精品嫩草影院午夜两性| a片 xxxx受爽视频| 久久久91| 成人国产二区三区在线,男女精品。| 九一国产精品| 国产精品动态一区二区三区四四| 加勒比伊人影院| 色天堂综合| 久久爽爽精品| 天天情欲宗合网| 北野未奈加勒比av| 成人草草视频| 99久久99九九99九九九| 中国操逼无码| 鸡巴插逼视频| 色综合婷婷| 日本三级R| 天天日B夜夜干B时时操B| av天堂精品久久| 日韩精品一区二区日韩| 夜嗨影院| 亚洲中文字幕噜噜噜久久久| 激情露脸爱| 五月天伊人| 极品AV网站在线观看| 人妻少妇色综合| 色五月激情AV在线| 热99这里有精品综合久久 | 伊人久久综合精品欧美| 日韩精品中文字幕一| 黄色电影观看久久9| 欧美精品99久久久**| 国产久久av| 国产黄色av大片网站| 丰满人妻大屁一区二区| 黄色AV影视| 97干色天堂| 亚洲第91页 | 欧美黄色大片在线观看| 中文字幕av亚洲在线| 五月丁香婷婷色| 日韩草久视频| 97就爱干| 亚洲男人天堂av| 中文色综合| 激情五月天色色网| 亚洲综合影片| 日本一线产区和二线产区伦理片| 国产精品爱欲| 九九AV| 国产精品 午夜福利| 男人精品天堂一区| 国产无码高清操逼视频| 91蜜臀在线久久久久| 国产第二页| 东京热毛片177b2viP| 91露脸熟女专区| 日韩无码成人电影| 60秒免费小视频| 92一区二区| 国产探花精品在线| 国产成人主播| 亚洲色婷婷久久91| 婷婷丁香六月| 99日免费视频中文字幕| 少妇一级婬片免费放一级a性色.| 国产这里只有精品| 麻豆黄站| av绯色| 中日无幕一二三四区| 久久久精品一区二区| 看全色黄大色大片免费视频| 久久98| 嗯,啊。舔我逼| 99夜夜操| 色色激情| 91老妇女| 激情五月天色色网| 激情文学亚洲| 亚洲精品aa久久伊人| 啊啊啊啊二区好大| 日韩无码人妻| 女人天堂AV五区在线| 中文精品少妇天堂| 啪啪91| avav青青草久久夜| 另类天堂| 日韩亚洲欧美中文字幕| 亚洲日本成人动漫| 综合色91| 亚洲……91| 69精品| 色蜜AV| 97在线视频观看| 五月婷婷六月丁香| 天美传媒AV在线播放| 天天日天天干天天整| 内射卯月麻衣| 人人摸人人叼| 综合自拍| 91 丝袜在线| 人妻啪| 日日夜夜青青草母狗| 日本乱人伦片中文三区| 夜夜高潮夜夜爽| 97爱爱| 精品人妻夜夜草| 精品国产av一区二区三区四区入口| 久操B网| 国产中文字幕在线| 日韩精品熟妇| 97人妻色| 日本久久久久久久久| 亚洲第91页| 黄色在线网站| 亚洲视频小说| 操我无码| 亚洲美女精品九九视频| 校园春色综合色| 免费观看国产小粉嫩喷水精品午| 男人天堂久久精品不卡| 淮穴色AV| 青娱乐国产精品| 黑人性暴力毛片| 夜夜爽爽爽| 一区二区三区美女超清| 97网址97| 欧美超碰9798| 日本护士高潮| 日韩无码操逼片| 91国产丝袜美女| 五月天激情小说网| 国产欧美日韩一区二区三区| 国产精品白丝AV| 九九精品美女高溯喷水| AAAAAAAAA黄片| 亚洲男人天堂手机版| 亚洲中文字幕乱码无码一区二区 | 国产精品久久久三级无码| 精品69网| 天天综合网~91入口| 99热综合| 国产人妻天天干精品| 麻豆久久精品亚洲精品88| 清清草影| 美女诱惑一区| 99色色| 亚洲美腿丝袜香蕉影视欧美成人| 999九九精品| 91丨九色丨国产打屁股| 亚洲乱色熟女一区| 清纯唯美综合| 亚洲91综合| 超碰午夜在线| 人人人人人人少妇| 欧美一级黄色18片免费看| 91精品老女人| 亚洲黄色电影| 久久久久久裸体| 日日A∨| 91一区二区| 91动漫操逼视频| 亚洲一区操| 极品色综合| 国产后入内射| 啊啊啊啊啊好舒服视频| 97超碰亚洲| 有码人妻系列| 九热大香蕉| 国产亚洲人妻综合日韩 久久| 操逼片国产| 国产精品午夜福利亚洲综合网| 青女偷拍网| 制服丝袜第二页| 国产精品suv一区| 人妻精品综合中文字幕在线 | 国产精品人人爽人人做可爱福利| 国产色图乱伦| 久久精品一区二区一8| 久操免费视频| 欧美久久伊人| 国产伦乱91| 久久精品三级影视| 综合啪啪| 男人夜色天堂ss| 在线 制服丝袜中出 人妻| 丰满岳乱妇一区二区三区| 亚洲一区二区三区欧美日韩| 97超级久久| 婷婷探花久久精品一区| 清纯唯美第一页| 91无码人妻精品一区二区三区蜜桃| 国产欧洲精品亚洲午夜拍精品| 91国产在线精品| 亚洲。天堂。日本在线观看| 亚洲成人帖图| 综合第一页| 久久夜夜| 亚洲成人av电影在线| 日韩性爱1级片视频| 岛国黄| 大色综合网| 天天插天天操| 欧美嗯啊……在线观看视频免费| 东北老女人的激情视频| 欧美日韩美女精品久草一区二区三区 | 人妻天天爽夜夜爽爽| 97国产精品国| 色超碰综合| 男人成人黄色视频在线观看免费下载| 蜜桃久久一区| 国产在线观看一区二区三区| 天堂а√在线最新版在线| 欧美操逼熟女| 婷婷激情四射| 超碰人妻久久人妻中文97| 人妻免费观看| 婷婷激情四射| 一牛影视成人片免费| 国产欧美日韩在线不卡第一页| 色色99| 日产中文字幕2020| 人妻蜜桃臀| 老熟女乱伦片| 久久久一二三四区| A片大香蕉在线| 午夜啪啪片| 色五月婷婷五月天| 久久国产999| 777超碰| 久久av一级av少妇av高潮 | 九九九九精品精| 性爱视频啪啪啪啪| 日韩丝袜人妻AV| 超碰97久久国| 欧美成人A√在线一区二区| 国产粉嫩出水在线播放| 久插不卡| 欧美色狠| 五月婷婷六月丁香| 日韩av情韩国爱禁区av一区二区| 乱伦强奸区日韩| 澳门特级毛片免费观看| 操高情无码| 蜜臀aV午夜一区二区三区| 亚洲清纯唯美| 亚洲欧洲自拍图片专区满春格| AV无码久久久精品| 久久久性爱视频| 囯产精品久久久久久久久久二区三区| 浪人综合网| 亚洲综合网图| 日韩精品在线视频,日韩精品……| 人人操,操人人| 熟女中出视频| 97碰| 99国产精品人妻人伦| 国产精品一区二区三区在线| 97人人操人人摸人人爱| 色综合99999| 日韩一区二区精彩视频| 5252色欧美在线| 97视频免费在线观看| 久久精品国产精品| 91精品久久久久五月天精品| 国产精品经典一卡久久久| 精品国产乱子伦一区二区三区,精品一| 日日操丁香五月天| 熟妇激情| 欧美久久伊人| 91高清日| 欧美做爰无码A片视频| 九一国产精品| 日本在线激情一区二区三区| 蜜臀aV午夜一区二区三区| 美女尤物人人操| 欧美在线55555| 最好看的中文字幕在线2018| 超碰538| 日韩av不卡在线看| 操死我了啊啊啊| 强奸乱伦资源| 最新AV在线| 国产后入精品| 黄色大片免费在线| 超碰在97| 色五月综合| 日本男人天堂| 91精品成人| 一本久道在线综合视频| 91无码人妻精品一区二区三区蜜桃| 操逼网免费无码视频| 高清无码学生妹高潮| 色色99| 羞涩视频| 中文字幕在线2| 激情久久av一区av二区av| 久久久精品,3| 蜜桃中文字日产乱幕4区| 欧美自拍偷拍综合图片| 超碰9 7女人 | 男人的天堂2010| 成人精品在线免费视频| 中文字幕AV片| 色色色综合网| 巨爆乳一区二区爆乳区| 欧美性爱另类综合| 国产日韩精品suv| 最新9久久久9免费视频| 东京热亚洲一区二区| 思思久热在线精品66| 国产成人主播| 久久五月份| 国产成年免费大片黄在线观看| 综合自拍| 人妻激情在线视频| 色婷婷aV一区二区三区麻豆综合| 久久成人午夜精品影院| 高清国产精品福利网站| 国产蜜臀在线| 亚洲吊色| 九九热九九热| 97久久视频| 亚洲AV无码翔田千里网站| 91精品网站| 龙兴卡官方查询| 熟女在线视频| 久久久久久久人妻| 国产午夜无码片在线观看影视| 欧美高清第一页| 久草成人影片| 欧美在线色| 久久综合中文国产| 欧美久久草熟女| 中文字幕在线观看二区三区| 国产精品亚洲天堂网址| 成年无码动漫av片无尽在线| 91中出视频| 国模久久在线| 日韩视频小说在线观看| 综合激情97| 人妻天天爽夜夜爽爽| 91九色首页| 国产亚州精品美女久久久免费| 高清无码久操视频| 日本孕妇一区二区视频操逼免费看 | 九九九九一区| 玖玖综合视频| 91青青在线视频| 国产青青美女玩逼视频| 亚洲大色堂| 91女神在线视频| 欧美色偷拍 | 97资源站日韩| 91女日逼| 97资源久久| 欧美天天干| 欧洲亚洲少妇| 天天看天天日| 秋霞一集毛片观看| 成人性爱AV在线免费观看| 自拍内地三级在线观看| 18禁无码永久免费无限制| 国产高清亚洲日韩一区| 国产精品黑人一区二区三区| 午夜男女爽爽大片免费观看| 伊人一区二区在线播放| 大香蕉www.超碰| 日本性爱欧美性爱| 夜嗨影院| 99在线免费观看| 国产欧美美女免费观看视频| 精品福利视频| 亚洲美女 晚间男人天堂 | 另类欧美色| 国产熟女精品一区二区| 蜜乳AV免费观看| 国产日韩欧美中文在线播放| 福利在线观看一区二区| 综合一区中亚洲国产成人综合精品| 亚洲AV无码国产精品久久久久| 欧美性爱另类综合| 日韩精品.久久精品.AV女优.天美传媒| 久久久蜜桃一区二区三区| 午夜久久一区二区无码中出| 粉嫩小泬久久久一区二区| 日韩av电影网站| 夜夜高潮夜夜爽夜夜爱爱一区| 国产精品国产精品国产| 欧美伊人久久综合网| 国产中文字幕曰本毛片| 99热这里只有精品9| 午夜福利久久久噜久噜久久综合| 天美欧美国产| 强乱老妇中文字幕| 人妻二区| 日韩欧美亚洲一区二区三区影院 | 麻豆成人影音在线| 天天操人人操狠狠插| 中文字幕aⅴ在线视频| 亚洲成人久久美女| 亚洲熟妇丝袜在线观看| 精品视频久久区| 久久久偷拍| 久久熟女久| 日本不卡在线二区三区| 九九精品99| AA丁香综合激情| 超碰97最新人妻| 极品色综合| 日韩人妻制服丝袜av| 久久精品一区二区三区不卡| 激情视频一二三| 啪啪啪亚欧美视频| 很很热性爱视频| 中文字幕55555| 人妻丝袜二区| 大伊香蕉在线视频免费| 夜夜嗷嗷一区二区| 国内伊人久久久久久网站视频| 欧美极品性爱天天射| 在线观看AV不卡| 骚鸭AV| 日韩乱伦AⅤ| 中文字幕视频在线观看一区二区| 新91视频.cmp| 国产 v乱码一区二| 超碰天天操| 久久大黄片| 人妻久久久| 一本色道久久综合亚洲二区三区| 欧美的性爱网站免费| 天天色综合图片| 久久久天堂| 青草青草久热| 俞拍自拍| 黄色小视频日本txt| 伊人国产视频| 被窝影院午夜看片无码| 亚洲熟妇乱女区二区三区| 99热这里都是精品| 9久精品| 东京热AV男人的天堂| 国产91精品福利在线| 性色av一区二区| 亚洲男人的天堂一区二区| 天天天干977| 插欧洲美女欧美精品| 久久超碰av在线| 国产69精品久久久久99尤物| 超碰无码五月97| 欧美激情性爱视频网站| 福利一级版子| 国产网站在线播放| 97人肏| 欧美中出1| 久久久久96| 日本一本道A级黄色毛片试看60分钟| 啊好爽快点-国产一区二区三区撒尿在线-成人AV | 久久国色天香香蕉| 国产成人欧美精品在线| 日韩内射视频| 国产精品高清2021在线| 97国产天堂岛| 国产99久久99热这里只有精品15 | 婷婷色综合欧美日韩| 干B视频伊人网| 激情五月综合开心五月| 日本一片一区| 国产亚洲日韩在线三区黑人| 久久影视二区三区行押| 99精品久久久久久久婷婷蜜桃| 久久久青青草| 亚洲熟妇乱女区二区三区| 国产无码三级视频在线观看| 噜噜噜亚洲精品| 图片区小说区| 国产激情视频一区区三区| 日产中文字幕2020| 欧美久久伊人| 极品另类| 伦理日韩国产久久| 一区二区三区在线资源| 中文字幕一区二区三区四区在线视频| 欧美激情久| 91狠狠综合久久久| 乱伦日本中文自拍| 老司机福利社视频在线观看| 97九色人妻| 日韩精品一区二区日韩| 久久久久久999| 男人的天堂va| 亚洲一二三| 青青草中文-久久青草精品一区二区三 | ,成人免费啪啪视频| 91精品婷婷国产综合久久| 色哟哟国产精品免费网址| 久操com| 91综合网在线| 操老熟女AV| av情色影音| 中文字幕 国产区| 免费久久一级毛片大黄| 久久精品国产亚洲粉嫩| 人妻熟女一区二区三区在线| 色婷婷99| 黑人操一区二区| 岛国黄片网站| 黑人综合网| 春色综合免费| 夜夜 中文视频rt| 天天欧美色| 综合色色婷婷| 亚洲欧综合另类无码一区| 亚洲色图欧美一区二区不卡| 色天天野狼综合社区| 超碰人妻中文在线| 天美av在线观看| 996热| 国岛片视频| 久久久久亚洲av综合波多野制衣| 国产精品久久久| 亚洲天堂资源在线| 少妇蹲下买菜露大唇0| 亚洲色图美腿丝袜| 97免费视频网| 日韩AV中文字幕电影| 色哟哟的毛片| 久久怡红院| 99操碰| 自拍偷拍2025在线观看| blacked精品一区国产| 高清无码在线播放网站| 一级AV性爱| 亚洲国产另类在线中文| 好吊色综合| 欧美日韩亚洲天堂| JuliaAnn丝袜熟女系列| 高颜值美女口爆高潮浪叫| 超碰精品人妻狠狠干| 和协影院中文字幕三区| 91九九九小逼| 目产99999久久999| 欧美大片天天看| 人妻少妇色综合| 麻豆国产第一| 97精品97久久| 啊啊啊轻点在线观看| 凸凹视频在线观看| 欧美麻豆成人同性GⅤ在线| 一区二区三区四区免费视频| 无码精品一区二区三区潘金莲| 免费看黄视频亚洲网站| 日韩人妻中文视频| 伊人久久大香大香线蕉中文| 超碰人人在线| 大香蕉97久久| 插老姨肥穴| 亚洲熟久久| 久久9免费视频| 亚洲天堂资源网| 中国一级αV| 日本免费一级AAA大片器| 国产麻豆福利av在线播放| 亚洲精品乱码久久久久久蜜桃麻豆 | 清纯唯美激情四射| 欧美激情片一区二区| 精品一区二区三区四区外站| 公司1区2区3区精产精| 怡红院成人视频| 永久免费观看的毛片的网站| 不卡中文字幕aⅴ在线| 国产区91柔拿会所技师| 免费一级毛片在线视频观看| caorenqi shipin| 超碰99热中文字幕| 国产精品97超碰| 久久久久久久9| 中文字幕精品日韩中文字幕| 手机在线人成免费视频| 六月婷婷激情| 欧美一区二区成人一卡| 伊人网在线点播| 乱伦熟妇一区二区| 手机看av网站在线看| 91精品电影18| 97爱啪| 国产在线综合福利网站| 亚洲Av无码成人精品国产| 亚洲欧美一区二区三区在钱蜜桃| 精品人妻一区二区三区夜夜| 伊人九九九| 干干干天天| 日产国产精品中文久久婷婷| 久久久精| 国产视频一区二区三区在线免费观看| 国产日韩欧美三级片| 青青草国产亚洲精品久久| 9久9久9久9久视频网站| 人人贴人人摸| 国产熟女乱论| 成人A片男人的天堂| 国产一线二线三线av| 国产高清免费不卡av| 大香蕉碰| 97久久综合网| 天天做日日做天天欢。| 吉川爱美98堂在线| 日韩精品-原创伙伴| 久久av成人无码免费| 青青草吊丝| 欧美性暴力| 韩国一级做A片免费的| 高跟伊人julia ann| 九热中文字幕| 色婷婷色99国产综合精品| 亚洲老司机123专区| 电家庭影院午夜69久久夜色精品国产69乱| 亚洲图片偷拍视频区| 嫩草在线视频| 亚洲AV无码天美传媒一区| 亚洲精品黄码久久久久| 日韩人妻免费精品| 91精品国久久久久久无码| 26uuu久久| 国产精品一区二区三区在线密挑| 噜噜噜亚洲精| 曰韩av中文字幕专区| 屁股久久久久久久久| 亚洲欧洲综合成人av一区| 久久亚州高清| 操逼无码操逼| 99re不伦| 在线观看一级α片刺激高潮视频| www老逼91| 老熟妇乱轮| 真实高潮91| 国产二区三区免费视频| 亚洲不卡不卡中文字幕不卡 | 国产午夜激片Av毛片不卡| 亚码人妻| 最近2019中文字幕国语免费版| 欧美在线视频观看一二三四区高清| 久久riav中文精品| 在线中文AV| 国产av美女被艹的乱叫| 欧美啪啪天堂| 日产狠狠干| 极品销魂美女一区二区 | 久久久久久十| 日韩一级二级| 国产综合日韩伦理| 久久久婷| 日本www操操操| 好湿好紧视频| 免费夜夜爱黄色视频毛片| 欧州91高潮| 亚州乱码中文字幕综合久久久| 国产男女边吃边摸视频网站| 密臀视频一区二区三区| 人妻日日干| 亚洲女人91| 伊人国产av| 91人妻素女| 性91| 精品无人区麻豆乱码久久久| 国产精品亚洲一级av第二区| 中文字幕av一区二区三区人妻少妇| 久久露脸国产老熟女| 少妇久久久久久| 亚洲精品国产av天美传媒| 留下AⅤ黄色片| 97AV在线观看| 亚洲老司机123专区| 亚洲中文字幕精品久久久久久直播| 欧中美三级一区二区三区| 好淫网一二三视区| 国产极品美女高潮无套在线观看| 啊啊啊慢点| 96免费视频在线| 熟女视频久久| 欧美一二在线| 牛黄色久午久| 国产亚洲色停停久久99精品91| 亚洲日韩久久精品一区| 久久精品国产精品亚洲艾通辽熟妇 | 日韩无码视频黄色| 呻吟 欧美 日本 中出| 麻豆久久视频在线地址| 秋霞久久亚洲精品成人| 女色综合| 日本 情色 1区2区3区| 江都AV在线| 国产超碰| 伊人久久在线视频观看| 日比av无码| 99只有精品| 国产久久一区二区午夜| 在线A日本| 69视频入口| 欧美日韩欧美| 91精品免费| 东北老女人的激情视频| 啊啊啊啊一区| 亚洲精品成人| 午夜寂寞欧美| 亚洲免费成人在线高清无码视频| 熟女人妻一区二区三区| 天天干夜夜操一区二区| 欧美国产有色电影| 免费农村成人少妇人妻Aa一区二区视频| 破苞ⅩXXX性无码动漫无码| 少妇厨房愉情理伦片bd在线观看| 国产精品不卡少妇白| 91热色| 精品九九淫乱男| 免费av在线播放二区| 日本在线激情一区二区三区| 国产精品99精品视频网站| 97亚洲在线| 精品十八在线观看| 智利AV在线网| 九九九九免费高| 色噜噜人妻丝袜AV资源| 国产精品小视频一区二区三区| 在线播放中文字幕| 国产欧美亚洲精品a第2页| 人人操人人操人人操人人操人人操人人人11.CM| 亚洲熟女av中文字幕| 国产精品午夜福利| 后入福利| 久久精品男人的天堂| 色综合久久夜色精品国产天堂| av操操不卡| 大香蕉免| 麻豆久久久久久久久丝袜| 91原创在线观看| 啊啊啊啊啊在线观看网址 | 综合熟女| 欧美一级三级| 久久黄黄| 人妻天天夜夜爽一区二区| 日本三级韩国三级99| 91美女中出| 国产一区二区三区中文字幕| 蜜臀久久99精品久久久久久久久| 男人兔费天堂| 一区二区三区网站日日骚| 九久久九精品视频| 久久久av爱| 亚洲一二三| 久久精品99| 在线 欧美 亚洲| 日本大香蕉综合网红本杳社区| 精品人妻一区二区三区不卡断 | 欧美久热| 混色激情av| 少妇人妻精品| 亚洲人码13| 久草看看看| 亚洲加勒比久久日本道| 超碰精品日韩欧美国产| 久久久久久亚洲中文| 久久亚洲AV无码专区国产精品 | 国产女主播视频在线观看| 91天堂丝袜美腿| 69一区二区三区| 欧美日韩插逼视频| 无码av永久免费专区网站| 欧美丰满熟妇XXXX性ppX人交| 天天日少妇逼AV| 91撸色网 玖玖网 欧美| 老司机老司机午夜影院| 美欧老女人97| 激情文学小说一区二区| 伊人超碰97| 在线中文字幕| 大伊香蕉在线视频免费| 91粉芽高清在线一区二区| 欧美亚男人的天堂| 国产乱码久久久久久| 亚洲欧洲日韩中文字幕一区| 人妻少妇久久中文字幕一区二区 麻豆| 91一区二区三区蜜桃| 国产剧情AV不卡在线观看| 国产精品一二三区福利| 久久久国产精品人妻丝袜| 久久久久久无码人妻中文字幕| 男人久久天堂| 亚洲精品人妻在线| 久久超碰天天| 精品人成视频在线观看| 美中日韩无码| 婷婷国产精品九区| 久久久久久无码人妻中文字幕| 呦呦一区| 久久精品国产亚洲AV成人直播| 欧美在线官网| 久久精品男人的天堂| 狠狠久久亚洲欧美专区| 欧美强奸乱能| 欧美日不卡| 久久久久久裸体| 搡老女人911熟妇老熟女| 91精品啪在线观看国产城中村| 欧美在线官网| 欧日韩一二三f区| 中文字幕久热视频在线| 欧美激情总合网| 国产中文字幕在线观看| 高清国产精品无码| 97亚洲一区| 九t超碰| 无码乱人伦中文视频| 97在线欧洲| 在线观看中文字幕| 六月色色| 久久久久极品| 性开放中文AV高清无码免费看| 国产大片精久久久久久| 亚欧美色| 99免费在线视频| 大香蕉性欧美| 大伊香蕉在线视频免费| 超碰538| 啪啪啪精品| 强上我不卡卡| 欧美色就是色| 青青草原人妻| 91视频综合网| 男人的天堂啪啪| 亚洲丝袜少妇在线| 色五月婷婷在线| 国产乱码久久久| 亚洲AV永久无码一区仙野| 欧美亚州色的图| 色天使亚洲综合在线观看| 欧美色图偷拍另类| 综合亚洲欧美精品日韩?v| 日韩亚洲美女一区久久| 日韩熟女精一区二区三区不卡| 啪啪一区| 欧美双插| 91人妻视频在线| 亚洲AV无码乱码| 中出789在线视频| 久久久久亚洲av综合波多野制衣| 骚逼一区二区| 金莲网址| 久草毛片| 亚洲五月丁香花狠狠干一区二区三区 | 98福利在线视频| 91动漫操逼视频| 深夜激情| 欧美亚洲综合色| 亚洲婷婷综合网| 色偷偷色偷偷欧美日韩| 国产高清成人mv在线观看| 人妻大香蕉| 深爱五月婷婷| V A在线| 激情欧美日韩女同久久| 太久视频| 97视频在线观看免费高清| 国产欧美第五页| 乱性AV| 偷拍片久久| 久久人妻视频| 国产精品懂色tv影视免费观看| 天天日日本| 欧美人妻一区| 久久系列| 绑缚麻绳人妻寝取完整版| 成人乱码一区二区三少妇| 美女91网| 久久超碰免费的| 国产精品无码论坛| 蜜臀99久久精品久久久久| 麻豆AV96熟妇人妻| 国产精品久久伊人| 国产91精品在线免费| surenchaopeng| 国产精品国产拍高清AV| 97在线视频免费看| 天天爱天天操| 伊人综合色网| 午夜精品久久久久久久99| 91综合天天看| 亚瑟国产精品久久无码| 精品一区二区三区蜜桃臀赵总 | 秋霞午夜成人福利片片| 久久超碰大香蕉| 日本三级日本三级99| 1769一区| 欧美美逼| 超碰这里只有精品| 99热网站| 久久成人午夜精品影院 | 中文字幕一区二区三区人妻少妇在线| 日本东京热加勒比久久| 蜜臀久久99精品久久久久久婷婷| 91操操操操| 欧美人妻一区二区| 久久99手机免费视频| 丁香啪啪| 乱伦av麻豆| 9色国产精品一区粉嫩| 狠狠躁久久躁| 国产成人主播| 厕所偷拍在线| 九九伊人网| 成人性爱高清视频免费看| 日韩av无码网站| 99999久久精| 无码人妻系列少妇| 亚洲熟女乱色| 亚洲五月丁香花狠狠干一区二区三区| 国产理论视频在线播放| 精品人妻免费观看| 亚洲人久久久久日| 欧美精品,四区。五区| 欧美韩国你懂得在线 | 99久久精品无码一区二区| 18禁看网站一区| 啪啪自拍九九综合| 久热精品在线| 青久久| 久久骚少妇| 亚洲精品天天影视综合网 | 99久久无色码| 婷婷色综合| 欧美日韩中文亚洲v在线综合| 亚洲综合小视频小说在线观看| 欧美啪啪啪91| 人妻天天爽| 99久热精品99re6热| 男人的天堂色偷偷青青草视频婷婷网| 天美av在线观看| 吻戏激情性巴克| 丁香五月综合| 99ri视频| 九九色婷婷| 欧美精品日韩一区二区| 偷窥自拍A片| 美女国产一区二区久久| 亚州操逼图| 韩国午夜理伦三级好看| 精品人妻一区二区视频| 成 人片 黄色大片| 女同女同恋久久级三级| 亚欧性爱无码| 乱伦图av| 日韩丝袜二区| 99热这里只有精品地址| 亚洲熟女中文字幕在线| 免费观看啪视频| 九九热免费视频| 国产精品老熟女一区二区| 日韩美脚一区二区网站| 顶级少妇BT天堂| 一本大道综合伊人精品热热| 日韩欧美偷拍美女视频| 97se综合|