2015-09-01 2 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

Когда вы нажимаете кнопку, выполняется обработчик события click. Это вызывает функцию 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; 
    } 
} 

После этого вы также должны перевернуть player от X к O или наоборот, но вы узнаете, как сделать это, я считаю. :-)

+0

Я не уверен, как это работает. Я добавил это, и он работает, но только когда я нажимаю кнопку, чтобы отправитель, который был напечатан по типу нажатого, менял текст, но затем снова, если щелкнуть, программа меняет x на o – june1992

+0

. Я изменил для дальнейшего объяснения того, что сказано – june1992

+0

@ june1992 Лучше всего было бы, если бы вы установили свойство '.Enabled' в значение False также в событии Click. Кроме того, не изменяйте свой исходный вопрос полностью или ответы больше не имеют смысла. Откройте другой вопрос или добавьте новые данные внизу. – Jens

1

Изменение TicTacToe к этому:

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