fix: code review — 修复4个问题
1. CardTracker.UnknownCount: 48→52 (硬编码修正) 2. IsmctsBot.GenerateDeck → 静态FullDeck池复用 (减少对象分配) 3. CardTracker: 删除3个死字段(_passStreak/_isNewRound/_bombCounts) 4. CardTracker.Update: 清理pass约束记录逻辑 验证: 100局0错误, 0.9s/局
This commit is contained in:
@ -295,7 +295,7 @@ namespace PdkFriendServer.Logic
|
||||
hands[nextPos - 1] = new List<TCardInfoPdkF>();
|
||||
hands[oppPos - 1] = new List<TCardInfoPdkF>();
|
||||
|
||||
var allCards = GenerateDeck();
|
||||
var allCards = GetDeckCopy();
|
||||
var unknown = allCards.Where(c => !myHand.Any(h => h.ID == c.ID)).ToList();
|
||||
|
||||
// 使用 CardTracker 进行约束采样
|
||||
@ -495,13 +495,29 @@ namespace PdkFriendServer.Logic
|
||||
return best;
|
||||
}
|
||||
|
||||
private static List<TCardInfoPdkF> GenerateDeck()
|
||||
// 静态牌池:52张牌,只创建一次
|
||||
private static readonly TCardInfoPdkF[] FullDeck;
|
||||
static IsmctsBot()
|
||||
{
|
||||
var d = new List<TCardInfoPdkF>(); int id = 1;
|
||||
FullDeck = new TCardInfoPdkF[52];
|
||||
int id = 1;
|
||||
foreach (int f in new[] { 1, 2, 3, 4 })
|
||||
for (int n = 1; n <= 13; n++)
|
||||
d.Add(new TCardInfoPdkF { ID = (byte)id++, Flower = (byte)f, GameNum = (byte)(n == 1 ? 14 : n == 2 ? 16 : n), GameState = 1 });
|
||||
return d;
|
||||
FullDeck[id - 1] = new TCardInfoPdkF
|
||||
{
|
||||
ID = (byte)id,
|
||||
Flower = (byte)f,
|
||||
GameNum = (byte)(n == 1 ? 14 : n == 2 ? 16 : n),
|
||||
GameState = 1
|
||||
};
|
||||
}
|
||||
|
||||
private static List<TCardInfoPdkF> GetDeckCopy()
|
||||
{
|
||||
return FullDeck.Where(c => c.ID > 0).Select(c => new TCardInfoPdkF
|
||||
{
|
||||
ID = c.ID, Flower = c.Flower, GameNum = c.GameNum, GameState = 1
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
private void Shuffle<T>(List<T> l) { for (int i = l.Count - 1; i > 0; i--) { int j = _rng.Next(i + 1); (l[i], l[j]) = (l[j], l[i]); } }
|
||||
|
||||
Reference in New Issue
Block a user