From 8120b32cb85d9151be0cfcccc05d2519bc6e2a3e Mon Sep 17 00:00:00 2001 From: 2riniar Date: Sun, 24 Nov 2024 00:03:54 +0900 Subject: [PATCH] =?UTF-8?q?Slot:=20=E4=B8=80=E5=AE=9A=E7=A2=BA=E7=8E=87?= =?UTF-8?q?=E3=81=A7=E7=9B=B4=E5=89=8D=E3=81=A8=E5=90=8C=E3=81=98=E5=87=BA?= =?UTF-8?q?=E7=9B=AE=E3=81=8C=E5=87=BA=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/Master/SlotItemMaster.cs | 3 +++ Common/NumberUtility.cs | 5 +++++ Common/SlotManager.cs | 24 +++++++++++++++++++++--- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/Common/Master/SlotItemMaster.cs b/Common/Master/SlotItemMaster.cs index 72b2b34..6c6881b 100644 --- a/Common/Master/SlotItemMaster.cs +++ b/Common/Master/SlotItemMaster.cs @@ -17,4 +17,7 @@ public class SlotItem : MasterRecord [field: MasterIntValue("return_rate_permillage")] public int ReturnRatePermillage { get; } + + [field: MasterIntValue("repeat_permillage")] + public int RepeatPermillage { get; } } diff --git a/Common/NumberUtility.cs b/Common/NumberUtility.cs index a22f7fa..a4246a9 100644 --- a/Common/NumberUtility.cs +++ b/Common/NumberUtility.cs @@ -22,6 +22,11 @@ public static TimeSpan GetTimeSpanFromMilliseconds(float milliseconds) return TimeSpan.FromMilliseconds(milliseconds); } + public static float GetProbabilityFromPermillage(int permillage) + { + return permillage / 100000f; + } + public static float GetPercentFromPermillage(int permillage) { return permillage / 1000f; diff --git a/Common/SlotManager.cs b/Common/SlotManager.cs index 0a626bf..2aa39b4 100644 --- a/Common/SlotManager.cs +++ b/Common/SlotManager.cs @@ -15,9 +15,27 @@ public void LoadMaster() public SlotExecuteResult Execute() { var itemCount = _items.Count; - var reelItems = EnumerableUtility - .Repeat(() => _items[RandomUtility.GetRandomInt(itemCount)], ReelCount) - .ToArray(); + + var reelItems = new SlotItem[ReelCount]; + for (var i = 0; i < ReelCount; i++) + { + if (i == 0) + { + reelItems[i] = _items[RandomUtility.GetRandomInt(itemCount)]; + continue; + } + + // 一定確率で直前と同じ出目が出る + var repeatProbability = NumberUtility.GetProbabilityFromPermillage(reelItems[i - 1].RepeatPermillage); + var isRepeat = RandomUtility.IsHit(repeatProbability); + if (isRepeat) + { + reelItems[i] = reelItems[i - 1]; + continue; + } + + reelItems[i] = _items[RandomUtility.GetRandomInt(itemCount)]; + } var isWin = reelItems.Select(x => x.Id).Distinct().Count() == 1; var resultRatePermillage = isWin ? reelItems[0].ReturnRatePermillage : 0;