使用构造函数

时间:2017-06-04 20:01:27

标签: c# string class

我已经在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从一个玩家到另一个玩家支付租金而且它也没有在那里工作...希望有人可以帮助我,我必须在明天完成这个,它不是就像我会得到较低的等级,但我希望一切都很完美:)

2 个答案:

答案 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";