我已经在C#中进行了一个月的垄断游戏,我完成了所有事情,从一开始我只有一个问题。有两种形式。首先是您选择玩多少玩家并输入姓名的地方。第二个是游戏,我已经测试过,它将玩家名称从form1传递给form2,但是当我使用类Player的构造函数时,它似乎并没有应用它。 看起来像这样 表格2:
public static string PlayerName1;
public static string PlayerName2;
public static string PlayerName3;
public static string PlayerName4;
public static Player Player1 = new Player(0, PlayerName1, 1, 10000);
public static Player Player2 = new Player(1, PlayerName2, 1, 10000);
public static Player Player3 = new Player(2, PlayerName3, 1, 10000);
public static Player Player4 = new Player(3, PlayerName4, 1, 10000);
正如我所说,PlayerName(所有这些)在form2中完美运行我在标签中测试它并且它显示正确,所以从form1传递它不是问题
现在是Player类代码:
public int ID;
public string Name;
public int Field;
public int Money;
public Player(int id, string name, int field, int money)
{
ID = id;
Name = name;
Field = field;
Money = money;
}
所以现在我在form2中使用这些值:
private void update()
{
switch (turn)
{
case 0: PlayerName.Text = Player1.Name;
Money.Text = Convert.ToString(Player1.Money) + "$";
break;
case 1: PlayerName.Text = Player2.Name;
Money.Text = Convert.ToString(Player1.Money) + "$";
break;
case 2: PlayerName.Text = Player3.Name;
Money.Text = Convert.ToString(Player1.Money) + "$";
break;
case 3: PlayerName.Text = Player4.Name;
Money.Text = Convert.ToString(Player1.Money) + "$";
break;
}
}
form2和money2中的Money是标签,Money标签与每个"更新"但PlayerName标签始终为空。它是可见的,它有文字"名称"当我打开Form2但在第一次"更新"之后它是空的并保持这样,直到我重新启动程序。我还在消息框中使用Player.PlayerName从一个玩家到另一个玩家支付租金而且它也没有在那里工作...希望有人可以帮助我,我必须在明天完成这个,它不是就像我会得到较低的等级,但我希望一切都很完美:)
答案 0 :(得分:1)
正如我所说,PlayerName(所有这些)在form2中完美运行
当创建表单并调用其方法时,他们肯定会这样做。
public static Player Player1 = new Player(0, PlayerName1, 1, 10000);
不幸的是,这种静态初始化发生在表单生命周期的最开始。此时,PlayerName1
尚未清空。您可能会在稍后的某处更改它,但为时已晚,更改并非神奇地复制到播放器对象。
解决方法很简单,请确保在知道名称时更新name属性。
// somewhere you somehow learn the name
PlayerName1 = ...
// update accordingly
Player1.Name = PlayerName1;
答案 1 :(得分:1)
你应该初始化字符串值。
public static string PlayerName1 ="Bob";