Usuário com melhor resposta
O que há de errado?

Pergunta
-
Olá pessoal estou iniciando com arrays e fiz um pequeno projeto do tipo jogo-da-velha baseado em um exemplo que achei na internet (em Windows Forms) que funciona perfeitamente.
Porém no projeto Windows Phone 8.1 que estou fazendo acontece isso.
o último botão não aplica o foreground.
Segue o código do meu projeto:
Respostas
-
Onde você aplica o foreground, você colocou obj3.Foreground duas vezes. Remova uma.
Certamente isso não é o problema, mas depure a aplicação e verifique o valor contido em cada uma das variáveis obj1, obj2 e obj3. Certifique-se de que todas estão apontando para os botões corretos.
- Marcado como Resposta Franklin Bitencourt terça-feira, 20 de janeiro de 2015 13:09
-
Olá Joel, obrigado pela atenção.
Estive dando uma olhada agora e descobri o seguinte:
Na parte do Click_Handler
private void ClickHandler(object sender, RoutedEventArgs e) { var obj = sender as Button; var content = obj.Content; //this._isGameOver = TicTacToeUtils.CheckAndProcessWinner(_buttonArray); //só da certo assim verificando no começo if (this._isGameOver) { lblResultado.Visibility = Windows.UI.Xaml.Visibility.Visible; lblResultado.Text = "Parabéns jogador " + Jogador + " você venceu!"; return; } if (_isX) { obj.Content = "X"; obj.IsEnabled = false; Jogador = "0"; } else { obj.Content = "O"; obj.IsEnabled = false; Jogador = "X"; } _isX = !_isX; }
só funciona verificando no começo, porém é preciso pressionar outro botão para o resultado acontecer. Então eu resolvi criando um timer que fica verificando se há ganhador.
private void Timer_Tick(object sender, object e) { this._isGameOver = TicTacToeUtils.CheckAndProcessWinner(_buttonArray); if (_isGameOver) timer.Stop(); }
e alterando essa linha:
obj1.Foreground = obj2.Foreground = obj3.Foreground = obj3.Foreground = new SolidColorBrush(Colors.LimeGreen);
por essa:
obj1.Foreground = obj2.Foreground = obj2.Foreground = obj3.Foreground = new SolidColorBrush(Colors.LimeGreen);
Dessa forma está funcionando.
Mas de qualquer forma obrigado pela atenção.
- Marcado como Resposta Franklin Bitencourt terça-feira, 20 de janeiro de 2015 13:09
Todas as Respostas
-
-
static public bool CheckAndProcessWinner(Button[] myControls) { bool gameOver = false; for (int i = 0; i < 8; i++) { int a = Winners[i, 0], b = Winners[i, 1], c = Winners[i, 2]; //get the indices of the winners //Button b1 = myControls[a], b2 = myControls[b], b3 = myControls[c];// just to make the var obj1 = myControls[a] as Button; var obj2 = myControls[b] as Button; var obj3 = myControls[c] as Button; // the code readable if (obj1.Content.ToString() == " " || obj2.Content.ToString() == " " || obj3.Content.ToString() == " ") // any of the squares blank continue; // try another -- no need to go further if (obj1.Content.ToString() == obj2.Content.ToString() && obj2.Content.ToString() == obj3.Content.ToString()) // are they the same? { // if so, they WIN! //Aqui é aplicado o foreground obj1.Foreground = obj2.Foreground = obj3.Foreground = obj3.Foreground = new SolidColorBrush(Colors.LimeGreen); gameOver = true; foreach (Button item in myControls) { item.IsEnabled = false; } break; // don't bother to continue } } return gameOver; }
-
Onde você aplica o foreground, você colocou obj3.Foreground duas vezes. Remova uma.
Certamente isso não é o problema, mas depure a aplicação e verifique o valor contido em cada uma das variáveis obj1, obj2 e obj3. Certifique-se de que todas estão apontando para os botões corretos.
- Marcado como Resposta Franklin Bitencourt terça-feira, 20 de janeiro de 2015 13:09
-
Olá Joel, obrigado pela atenção.
Estive dando uma olhada agora e descobri o seguinte:
Na parte do Click_Handler
private void ClickHandler(object sender, RoutedEventArgs e) { var obj = sender as Button; var content = obj.Content; //this._isGameOver = TicTacToeUtils.CheckAndProcessWinner(_buttonArray); //só da certo assim verificando no começo if (this._isGameOver) { lblResultado.Visibility = Windows.UI.Xaml.Visibility.Visible; lblResultado.Text = "Parabéns jogador " + Jogador + " você venceu!"; return; } if (_isX) { obj.Content = "X"; obj.IsEnabled = false; Jogador = "0"; } else { obj.Content = "O"; obj.IsEnabled = false; Jogador = "X"; } _isX = !_isX; }
só funciona verificando no começo, porém é preciso pressionar outro botão para o resultado acontecer. Então eu resolvi criando um timer que fica verificando se há ganhador.
private void Timer_Tick(object sender, object e) { this._isGameOver = TicTacToeUtils.CheckAndProcessWinner(_buttonArray); if (_isGameOver) timer.Stop(); }
e alterando essa linha:
obj1.Foreground = obj2.Foreground = obj3.Foreground = obj3.Foreground = new SolidColorBrush(Colors.LimeGreen);
por essa:
obj1.Foreground = obj2.Foreground = obj2.Foreground = obj3.Foreground = new SolidColorBrush(Colors.LimeGreen);
Dessa forma está funcionando.
Mas de qualquer forma obrigado pela atenção.
- Marcado como Resposta Franklin Bitencourt terça-feira, 20 de janeiro de 2015 13:09