我已经在C#中进行了一个月的垄断游戏,我完成了所有内容,从开始就只有一个问题。有两种形式。首先是您选择正在玩多少玩家并输入他们的名字的地方。第二是游戏,我已经测试过,它将播放器名称从Form1传递到Form2,但是当我将constructor用于class 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
传递的问题不是问题现在,玩家类代码:
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;
}
}
playername和form2中的金钱是标签,金钱标签与每个"更新"完美搭配,但是Playername标签始终是空的。它是可见的,当我打开Form2时,它在其中有文本"名称",但是在第一次"更新"之后,它是空的,并且在我重新启动程序之前一直保持这样的态度。我也使用player.playername在一个从一个玩家到另一个玩家的租金时在消息框中,也无法在那里工作...希望有人可以帮助我,我必须在明天之前完成此操作,这并不是说我会得到更少的等级,但我希望一切都完美:(
正如我所说的,Playername(全部(在Form2
中完美工作
当创建表单并调用其方法时,他们肯定会这样做。
public static Player Player1 = new Player(0, PlayerName1, 1, 10000);
不幸的是,这种静态初始化发生在表格生命周期的一开始。目前,PlayerName1
尚未空。您可能会在以后的某个地方更改它,但为时已晚,更改并未单独将其复制到播放器对象。
解决方法很简单,请确保您已知名称时更新名称属性。
// somewhere you somehow learn the name
PlayerName1 = ...
// update accordingly
Player1.Name = PlayerName1;
您应该初始化字符串值。
public static string PlayerName1 ="Bob";