使用构造函数时字符串未出现在类中



我已经在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";

相关内容

最新更新