2017-06-04 32 views
-1

我已經在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(全部)完全在窗口2我測試了它的標籤,它顯示了它的權利,所以它不是問題,把它傳到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; 
    }  

所以現在這是我在窗口2使用這些值:

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中的Money是標籤,Money標籤與每個「更新」完美匹配,但PlayerName標籤始終爲空。它是可見的,它有文本「名稱」,當我打開Form2,但第一次「更新」後,它是空的,並保持這種狀態,直到我重新啓動程序。我也在消息框中使用Player.PlayerName當從一個玩家支付租金到另一個時,它也不能在那裏工作...希望有人可以幫助我,我必須明天完成這個,它不是像我會得到更少等級爲這個,但我想一切都完美地:)

+0

從上面顯示的內容看來,您只是傳遞空字符串。嘗試填寫名稱,然後初始化播放器對象。 –

回答

1

正如我所說的,PlayerName(全部)完全在窗口2

他們一定會這樣做,創建形式和方法時調用。

public static Player Player1 = new Player(0, PlayerName1, 1, 10000); 

不幸的是這種靜態初始化發生在表單的生命週期的開始。此時,PlayerName1已空。你可能在後面的以上某處改變它,但是太遲了,這個改變並不是魔術般地複製到玩家對象本身。

解決方法很簡單,請確保在名稱已知時更新名稱屬性。

// somewhere you somehow learn the name 
PlayerName1 = ... 

// update accordingly 
Player1.Name = PlayerName1; 
+0

對,我也建議擺脫這些玩家名稱的靜態變量。如果你已經有4個靜態播放器對象,它們就沒用了 – Steve

+0

謝謝你Wiktor!我在form1中定義了公共靜態字符串playername,並在構造函數(form1.PlayerName1)中使用它,而不是在form2中定義的PlayerName1,它運行良好!非常感謝! –

1

您應該初始化字符串值。

public static string PlayerName1 ="Bob"; 
相關問題