我试图在C#中声明一个与我的数据一致的委托,但这似乎并不编译。我希望有人能帮我构建我的想法或代码。
我的目标是在网络游戏中创建不同的玩家类型。每种类型的玩家都有他们所采用的策略。此策略是通过调用内联异步函数来使用的,该函数可以调用HTTP资源作为IQueryable评估的一部分。
问题:
AIPlayer类型配置EvaluateTurn()委托中所需的代码的可维护方式是什么?将添加更多的播放器类型,IQueryable将是针对CosmosDB、AzureTable、SQL、内存中数组等的延迟执行Linq查询。
public class AIPlayer
{
public string PlayerPersonaName { get; set; }
public string Description { get; set; }
public delegate int EvaluateTurn(IQueryable<GameplayRound> playHistory);
}
public List<AIPlayer> CreateDefaultPersonas()
{
var ret = new List<AIPlayer>();
ret.Add(new AIPlayer()
{
PlayerPersonaName = "CopyCat" ,
Description = "Hello! I start with Cooperate, and afterwards, I just copy whatever you did in the last round. Meow",
});
ret.Add(new AIPlayer() {
PlayerPersonaName = "Grudger" ,
Description = "Listen, pardner. I'll start cooperatin', and keep cooperatin', but if y'all ever cheat me, I'LL CHEAT YOU BACK 'TIL THE END OF TARNATION."
});
ret.Add(new AIPlayer() {
PlayerPersonaName = "AlwaysCheat",
Description = "the strong shall eat the weak"
});
ret.Add(new AIPlayer() {
PlayerPersonaName = "AlwaysCooperate",
Description = "Let's be best friends! <3"
});
ret.Add(new AIPlayer() {
PlayerPersonaName = "Detective",
Description = "First: I analyze you. I start: Cooperate, Cheat, Cooperate, Cooperate. If you cheat back, I'll act like Copycat. If you never cheat back, I'll act like Always Cheat, to exploit you. Elementary, my dear Watson."
});
ret.Add(new AIPlayer()
{
PlayerPersonaName = "CopyKitten",
Description = "Hello! I'm like Copycat, except I Cheat back only after you Cheat me twice in a row. After all, the first one could be a mistake! Purrrrr",
});
ret.Add(new AIPlayer()
{
PlayerPersonaName = "Simpleton",
Description = "hi i try start cooperate. if you cooperate back, i do same thing as last move, even if it mistake. if you cheat back, i do opposite thing as last move, even if it mistake.",
});
ret.Add(new AIPlayer()
{
PlayerPersonaName = "Random",
Description = "Monkey robot! Ninja pizza tacos! lol i'm so random (Just plays Cheat or Cooperate randomly with a 50 / 50 chance)",
});
return ret;
}发布于 2020-06-02 14:28:45
委托是一种类型,您需要声明该类型的属性:
public class AIPlayer
{
public string PlayerPersonaName { get; set; }
public string Description { get; set; }
public EvaluateTurn Evaluation { get; set; }
public delegate int EvaluateTurn(IQueryable<GameplayRound> playHistory);
}然后:
new AIPlayer()
{
PlayerPersonaName = "CopyCat" ,
Description = "Hello! I start with Cooperate, and afterwards, I just copy whatever you did in the last round. Meow",
Evaluation = playHistory => 1
};或者,您可以使用Func来简化:
public class AIPlayer
{
public string PlayerPersonaName { get; set; }
public string Description { get; set; }
public Func<IQueryable<GameplayRound>, int> Evaluation { get; set; }
}https://stackoverflow.com/questions/62154074
复制相似问题