2015-10-14 4 views
0

Я работаю над игрой tic tac toe для задания, и способ, которым я хочу сделать игру, не представляется возможным. Я думаю, что другие люди задавали этот вопрос, но весь код, который я видел в любых ответах в Интернете, более продвинутый (или кажется таким образом), чем то, что я пытаюсь сделать.Изменить содержимое кнопки в зависимости от нажатой кнопки

В настоящее время я использую событие 1 щелчок для всех 9 моих кнопок. Когда игрок 1 играет, он становится поворотом игрока 2.

Поскольку я использую одно и то же событие click для всех кнопок, я не могу понять, как сделать содержимое каждой кнопки изменено на «X» или «O» в зависимости от того, кто ее поворачивает.

Если бы я делал 9 различных событий клика, я знаю, как это сделать, но цель этого задания - использовать методы для простоты, и это сводит меня с ума.

Мое первоначальное чувство должно быть «this.Content =« X »;» вариант или что-то еще.

Вот код, который я до сих пор (минус несколько методов, уже работают Есть звездочки вокруг строк коды, я хочу работать, но не знают, что делать, чтобы заставить их работать..):

public partial class MainWindow : Window 
{ 
    bool turn; 
    string playerX; 
    string playerO; 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void IsTurn() 
    { 
     if (turn==true) 
     { 
      textBlockGameInfo.Text = "It is " + playerO + "'s turn"; 
      **button_Click.Content = "O";** 
      turn = false; 
     } 
     else if (turn==false) 
     { 
      textBlockGameInfo.Text = "It is " + playerX + "'s turn"; 
      **button_Click.Content = "X";** 
      turn = true; 
     } 
    } 

    private void button_Click(object sender, RoutedEventArgs e) 
    { 
     IsTurn(); 
    } 
} 

}

+0

Почему бы вам не просто изменить текст кнопки или добавить к ней изображение? – Val

+1

Пытаются сделать это - ((Button) отправитель) .Text = turn? «O»: «X»; –

+0

Это WinForms или WPF? – Lorek

ответ

0

Вы должны определенно литой отправитель получил в методе как Button. Отправителем в методе button_Click будет кнопка, на которую игрок действительно нажал.

Как только вы выбрали кнопку, вы можете установить ее содержимое в соответствии с оборотом. Ваш метод поворота может вернуть символ для назначения. Нечто подобное будет работать:

var button = sender as Button; 
if (button == null) return; 

button.Content = IsTurn(); 
+0

Что именно означает «отправитель как кнопка»; значит/сделать? Я совершенно новый для этого материала, и он определенно показывает:/Последняя строка, которую вы написали, «button.Content = IsTurn();» ссылается на мой метод IsTurn. Как ссылается на изменение содержимого кнопки, когда я не знаю, что положить в сам метод для установки контента? – Audie

+0

Часть 'sender as button' будет отбрасывать' object' на 'Button'. Затем вы получите доступ к свойствам кнопки. Для использования метода 'IsTurn()' я предлагаю вам переформатировать его, чтобы вернуть нужную строку вместо 'void'. – KOTIX

0

Что вы ищете является собственностью Button.Text.

Когда игрок 1 нажимает на кнопку, вы собираетесь хотите сделать

button.Text = "O"; 

и когда игрок 2 нажимает на кнопку:

button.Text = "X"; 
+0

Кнопки не имеют свойства «Текст» ... – KOTIX

+0

@KOTIX Да, они делают. Я предполагал, что это приложение WinForms. Если это так, то есть свойство text, https://msdn.microsoft.com/en-us/library/system.windows.forms.button_properties (v = vs.110) .aspx – GeMaths

+0

@GeMaths Если это не так, вы можете использовать контент – Hristo

0

Пытаясь следовать советам @KOTIX «s, я получил свою игру работать, но я все еще отчасти смущен относительно того, как ситуация кнопка работала вне. Я думаю, мне просто нужно вернуться и рассмотреть некоторые вещи.

Вот мой окончательный код для целой игры на тему tic tac toe. Посмотрите последние 2 метода, чтобы увидеть, как была обработана и использована кнопка button_click.

Я также думаю, что там должен быть лучшим способом справиться выяснить победитель, но это другой вопрос еще раз :)

Надеется, что это может помочь другому человеку там.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace TicTacToe 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 

     Random random = new Random(); 

     int firstPlayer = 0; 
     bool turn; 
     bool winner = true; 
     string playerX; 
     string playerO; 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void ResetBoard() 
     { 
      //Clear Xs & Os: 
      buttonTopLeft.Content = ""; 
      buttonMiddleTop.Content = ""; 
      buttonTopRight.Content = ""; 

      buttonMiddleLeft.Content = ""; 
      buttonMiddle.Content = ""; 
      buttonMiddleRight.Content = ""; 

      buttonLowerLeft.Content = ""; 
      buttonMiddleBottom.Content = ""; 
      buttonBottomRight.Content = ""; 

      //make board playable 
      winner = false; 

      //reset background colors 
      buttonTopLeft.Background = Brushes.LightGray; 
      buttonMiddleTop.Background = Brushes.LightGray; 
      buttonTopRight.Background = Brushes.LightGray; 
      buttonMiddleLeft.Background = Brushes.LightGray; 
      buttonMiddle.Background = Brushes.LightGray; 
      buttonMiddleRight.Background = Brushes.LightGray; 
      buttonLowerLeft.Background = Brushes.LightGray; 
      buttonMiddleBottom.Background = Brushes.LightGray; 
      buttonBottomRight.Background = Brushes.LightGray; 

     } 

     private void ChooseFirstPlayer() 
     { 
      if (textBoxPlayerO.Text == "Audra") 
      { 
       turn = false; 
       playerX = textBoxPlayerX.Text; 
       playerO = textBoxPlayerO.Text; 
       textBlockGameInfo.Text = playerO + " goes first"; 
      } 
      else if (textBoxPlayerX.Text == "Audra") 
      { 
       turn = true; 
       playerX = textBoxPlayerX.Text; 
       playerO = textBoxPlayerO.Text; 
       textBlockGameInfo.Text = playerX + " goes first"; 
      } 
      else 
      { 
       firstPlayer = random.Next(1, 3); 

       if (textBoxPlayerO.Text == "" || textBoxPlayerX.Text == "") 
       { 
        textBlockGameInfo.Text = "Please enter both player's names"; 
       } 
       else 
       { 

        if (firstPlayer == 1) 
        { 
         turn = true; 
         playerX = textBoxPlayerX.Text; 
         playerO = textBoxPlayerO.Text; 
         textBlockGameInfo.Text = playerX + " goes first"; 
        } 
        else if (firstPlayer == 2) 
        { 
         turn = false; 
         playerX = textBoxPlayerX.Text; 
         playerO = textBoxPlayerO.Text; 
         textBlockGameInfo.Text = playerO + " goes first"; 
        } 
       } 
      } 

      } 

     private void buttonStartGame_Click(object sender, RoutedEventArgs e) 
     { 
      ResetBoard(); 
      ChooseFirstPlayer(); 
     } 

     private void IsNoWinner() 
     { 
      if (buttonTopLeft.Content != "" && buttonMiddleTop.Content != "" && buttonTopRight.Content != "" && 
       buttonMiddleLeft.Content != "" && buttonMiddle.Content != "" && buttonMiddleRight.Content != "" && 
       buttonLowerLeft.Content != "" && buttonMiddleBottom.Content != "" && buttonBottomRight.Content != "" && winner == false) 
      { 
       textBlockGameInfo.Text = "It's a draw!"; 
      } 
     } 

     private void IsXWinner() 
     { 
      if (buttonTopLeft.Content == "X" && buttonMiddleTop.Content == "X" && buttonTopRight.Content == "X") 
      { 
       textBlockGameInfo.Text = playerX + " is the winner!"; 
       winner = true; 
       buttonTopLeft.Background = Brushes.LightPink; 
       buttonMiddleTop.Background = Brushes.LightPink; 
       buttonTopRight.Background = Brushes.LightPink; 
      } 
      else if (buttonMiddleLeft.Content == "X" && buttonMiddle.Content == "X" && buttonMiddleRight.Content =="X") 
      { 
       textBlockGameInfo.Text = playerX + " is the winner!"; 
       winner = true; 
      } 
      else if (buttonLowerLeft.Content == "X" && buttonMiddleBottom.Content == "X" && buttonBottomRight.Content == "X") 
      { 
       textBlockGameInfo.Text = playerX + " is the winner!"; 
       winner = true; 
       buttonMiddleLeft.Background = Brushes.LightPink; 
       buttonMiddle.Background = Brushes.LightPink; 
       buttonMiddleRight.Background = Brushes.LightPink; 
      } 
      else if (buttonTopLeft.Content == "X" && buttonMiddleLeft.Content == "X" && buttonLowerLeft.Content == "X") 
      { 
       textBlockGameInfo.Text = playerX + " is the winner!"; 
       winner = true; 
       buttonTopLeft.Background = Brushes.LightPink; 
       buttonMiddleLeft.Background = Brushes.LightPink; 
       buttonLowerLeft.Background = Brushes.LightPink; 
      } 
      else if (buttonMiddleTop.Content == "X" && buttonMiddle.Content == "X" && buttonMiddleBottom.Content == "X") 
      { 
       textBlockGameInfo.Text = playerX + " is the winner!"; 
       winner = true; 
       buttonMiddleTop.Background = Brushes.LightPink; 
       buttonMiddle.Background = Brushes.LightPink; 
       buttonMiddleBottom.Background = Brushes.LightPink; 
      } 
      else if (buttonLowerLeft.Content == "X" && buttonMiddleBottom.Content == "X" && buttonBottomRight.Content == "X") 
      { 
       textBlockGameInfo.Text = playerX + " is the winner!"; 
       winner = true; 
       buttonLowerLeft.Background = Brushes.LightPink; 
       buttonMiddleBottom.Background = Brushes.LightPink; 
       buttonBottomRight.Background = Brushes.LightPink; 
      } 
      else if (buttonTopLeft.Content == "X" && buttonMiddle.Content == "X" && buttonBottomRight.Content == "X") 
      { 
       textBlockGameInfo.Text = playerX + " is the winner!"; 
       winner = true; 
       buttonTopLeft.Background = Brushes.LightPink; 
       buttonMiddle.Background = Brushes.LightPink; 
       buttonBottomRight.Background = Brushes.LightPink; 
      } 
      else if (buttonTopRight.Content == "X" && buttonMiddle.Content == "X" && buttonLowerLeft.Content == "X") 
      { 
       textBlockGameInfo.Text = playerX + " is the winner!"; 
       winner = true; 
       buttonTopRight.Background = Brushes.LightPink; 
       buttonMiddle.Background = Brushes.LightPink; 
       buttonLowerLeft.Background = Brushes.LightPink; 
      } 


     } 

     private void IsOWinner() 
     { 
      if (buttonTopLeft.Content == "O" && buttonMiddleTop.Content == "O" && buttonTopRight.Content == "O") 
      { 
       textBlockGameInfo.Text = playerO + " is the winner!"; 
       winner = true; 
       buttonTopLeft.Background = Brushes.LightPink; 
       buttonMiddleTop.Background = Brushes.LightPink; 
       buttonTopRight.Background = Brushes.LightPink; 
      } 
      else if (buttonMiddleLeft.Content == "O" && buttonMiddle.Content == "O" && buttonMiddleRight.Content == "O") 
      { 
       textBlockGameInfo.Text = playerO + " is the winner!"; 
       winner = true; 
       buttonMiddleLeft.Background = Brushes.LightPink; 
       buttonMiddle.Background = Brushes.LightPink; 
       buttonMiddleRight.Background = Brushes.LightPink; 
      } 
      else if (buttonLowerLeft.Content == "O" && buttonMiddleBottom.Content == "O" && buttonBottomRight.Content == "O") 
      { 
       textBlockGameInfo.Text = playerO + " is the winner!"; 
       winner = true; 
      } 
      else if (buttonTopLeft.Content == "O" && buttonMiddleLeft.Content == "O" && buttonLowerLeft.Content == "O") 
      { 
       textBlockGameInfo.Text = playerO + " is the winner!"; 
       winner = true; 
       buttonTopLeft.Background = Brushes.LightPink; 
       buttonMiddleLeft.Background = Brushes.LightPink; 
       buttonLowerLeft.Background = Brushes.LightPink; 
      } 
      else if (buttonMiddleTop.Content == "O" && buttonMiddle.Content == "O" && buttonMiddleBottom.Content == "O") 
      { 
       textBlockGameInfo.Text = playerO + " is the winner!"; 
       winner = true; 
       buttonMiddleTop.Background = Brushes.LightPink; 
       buttonMiddle.Background = Brushes.LightPink; 
       buttonMiddleBottom.Background = Brushes.LightPink; 
      } 
      else if (buttonLowerLeft.Content == "O" && buttonMiddleBottom.Content == "O" && buttonBottomRight.Content == "O") 
      { 
       textBlockGameInfo.Text = playerO + " is the winner!"; 
       winner = true; 
       buttonLowerLeft.Background = Brushes.LightPink; 
       buttonMiddleBottom.Background = Brushes.LightPink; 
       buttonBottomRight.Background = Brushes.LightPink; 
      } 
      else if (buttonTopLeft.Content == "O" && buttonMiddle.Content == "O" && buttonBottomRight.Content == "O") 
      { 
       textBlockGameInfo.Text = playerO + " is the winner!"; 
       winner = true; 
       buttonTopLeft.Background = Brushes.LightPink; 
       buttonMiddle.Background = Brushes.LightPink; 
       buttonBottomRight.Background = Brushes.LightPink; 
      } 
      else if (buttonTopRight.Content == "O" && buttonMiddle.Content == "O" && buttonLowerLeft.Content == "O") 
      { 
       textBlockGameInfo.Text = playerO + " is the winner!"; 
       winner = true; 
       buttonTopRight.Background = Brushes.LightPink; 
       buttonMiddle.Background = Brushes.LightPink; 
       buttonLowerLeft.Background = Brushes.LightPink; 
      } 
     } 

     private void PlayButton(Button buttonClicked) 
     { 
      if (buttonClicked.Content == "") 
      { 
       if (turn == true) 
       { 
        textBlockGameInfo.Text = "It is " + playerO + "'s turn"; 
        buttonClicked.Content = "X"; 
        turn = false; 
       } 
       else 
       { 
        textBlockGameInfo.Text = "It is " + playerX + "'s turn"; 
        buttonClicked.Content = "O"; 
        turn = true; 
       } 
      } 

     } 

     private void button_Click(object sender, RoutedEventArgs e) 
     { 
      if (winner != true) 
      { 
       var button = sender as Button; 

       PlayButton(button); 
       IsXWinner(); 
       IsOWinner(); 
       IsNoWinner(); 
      } 
     } 
    } 
} 
+0

Если мой ответ помог вам туда добраться, я предлагаю вам отметить его как ответ. Благодаря ! – KOTIX

+0

Спасибо за помощь! – Audie

Смежные вопросы