我正在开发一款具有预定义级别的C#游戏。我正在尝试拥有一个能够保存所有级别的预定义数据的类。这就是我要做的事情:
public static GameLevel startLevel = new Level() {
startLevel.Actions.Add(action);
startLevel.Actions.Add(action);
}
等等。但是,似乎C#不希望我以这种方式初始化。如何在不将其投入大型构造函数的情况下实现我想要的效果?
答案 0 :(得分:0)
您如何看待我们如何更改静态变量:
private static GameLevel _startLevel;
public static GameLevel StartLevel
{
get
{
if(_startLevel == null)
{
_startLevel = new Level();
_startLevel.Action.Add(action1);
_startLevel.Action.Add(action2);
}
return _startLevel;
}
}
答案 1 :(得分:0)
“...... C#不希望我以这种方式初始化......”
你可以这样开始。你只是没有正确的语法。这应该工作
public static Level startLevel = new Level()
{
Actions = new List<Action>()
{
new Action() {...},
new Action() {...}
},
OtherProprty = "Other"
};
注意:这必须在类范围
下完成“Massive constructor” - 除非这是静态构造函数,否则通常不会在构造函数中初始化静态成员。听起来你需要为这件作品使用 Singleton 模式。然后,你再次在构造函数中调用所有需要的代码,“大规模”或不是。把它分解成方法。
答案 2 :(得分:0)
由于您有预定义的级别,我建议采用一种不同的方法。
创建一个Level基类,并为每个Level创建一个类。每个级别类的构造函数都可以设置Actions以及游戏需要知道如何显示自身的任何其他内容。
using System;
public class Program
{
public static void Main()
{
new GameState(new Level1());
Console.WriteLine("Current level is " + GameState.CurrentLevel.Name);
Console.WriteLine("User leveled up");
GameState.CurrentLevel = new Level2();
Console.WriteLine("Current level is " + GameState.CurrentLevel.Name);
}
}
public class Level
{
public string Name;
// public static IEnumerable<Action> Actions { get; set; }
}
public class Level1 : Level
{
public Level1()
{
// level 1 init
Name = "1";
// Actions = new List<Action> { ... }
}
}
public class Level2 : Level
{
public Level2()
{
// level 2 init
Name = "2";
}
}
public class GameState
{
public static Level CurrentLevel { get; set; }
public GameState(Level startLevel)
{
CurrentLevel = startLevel;
}
}