none
O que há de errado? RRS feed

  • 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:

    http://pastebin.com/T60BUE6A

    Desde já agradeço.

    quinta-feira, 15 de janeiro de 2015 14:15

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.

    terça-feira, 20 de janeiro de 2015 12:00
  • 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.

    terça-feira, 20 de janeiro de 2015 13:08

Todas as Respostas

  • Poderia postar o trecho de código onde é feita essa mudança de foreground?
    sexta-feira, 16 de janeiro de 2015 11:19
  • 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;
            }
    

     
    sexta-feira, 16 de janeiro de 2015 16:17
  • 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.

    terça-feira, 20 de janeiro de 2015 12:00
  • 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.

    terça-feira, 20 de janeiro de 2015 13:08