2015-09-01 94 views
1

我明白,這個工程和所有,但有沒有更好的方式做到這一點?Tic Tac Toe遊戲winforms

Button clicked = (Button)sender; 
     if (turn) 
     { 
      clicked.Text = player; 
     } 
     else { 
      clicked.Text = cpu; 
     } 

     turn = !turn; 
+0

那些按鈕永遠不會添加到您的形式,所以我不知道你點擊了哪個按鈕,但它不是那些在你的陣列。你的'InitializeComponent()'方法發生了什麼? – Sayse

回答

6

當你點擊一個按鈕,它的點擊執行事件處理程序。這會調用您的tictactoe函數。在那裏你的代碼從上到下執行,它首先檢查陣列中第一個按鈕的.Text並調整它。然後你的If..Else塊結束。在下一次單擊這個重複。這導致了行爲。

相反,您應該將sender對象投射到Button,並且只能對此起作用。無需整個If..Else塊。 Sender是引發事件的對象(此處爲點擊按鈕)。

public void tictactoe(object sender, EventArgs e) 
{ 
    Button b = (Button)sender; 
    if (string.IsNullOrEmpty(b.Text)) { 
     b.Text = player; 
    } 
} 

之後,您還需要從Xplayer翻轉O反之亦然,但你會發現如何做到這一點我想。 :-)

+0

我不確定這是如何工作的。我添加了這個,它的工作原理,但只有當我點擊按鈕發送類型被點擊的發件人改變文本,但如果再次點擊該程序將x更改爲 – june1992

+0

我已經做了更改,以進一步解釋說什麼 – june1992

+0

@ june1992最好的可能是如果你設置'.Enabled'屬性爲False以及Click事件。此外,不要完全改變你的原始問題,否則答案就沒有意義了。打開另一個問題,或在底部追加新數據。 – Jens

1

更改井字遊戲本:

public void tictactoe(object sender, EventArgs e) 
{ 
    var button = (Button)sender; 
    if (button.Text == "") 
     button.Text = player; 
}