Programa não está funcionando corretamente (C#)

0 respostas
programaçãocsharp
M

Fiz um código de JogoDaVelha de console (bem simples e sem verificação de ganhador). Ele funcinou em Java, mas quando fui passar para C#, apareceram muitos problemas. Por exemplo, quando coloco a posição que eu quero, já diz que ela foi preenchida… Acredito que os problemas estejam nos laços de repetição, mas não sei como resolvê-los… :confused:

Alguém poderia me ajudar?

Código:

namespace TicTacToe
{
    class TicTacToe
    {
        /** DECLARAÇÃO E INICIALIZAÇÃO DE VARIÁVEIS PÚBLICAS **/
        // variáveis de entrada do usuário
        // fiz a declaração aqui para que eu pudesse usá-las em todos os métodos da classe 
        public static string tokenJogador = ""; // "X" ou "O"
        public static int posicaoToken = 0;
        // número da rodada
        public static int rodada = 1;

        static void Main(string[] args)
        {
            /** DECLARAÇÃO E INICIALIZAÇÃO DE VARIÁVEIS **/
            string[,] tabuleiro = new string[3,3];

            /** APRESENTAÇÃO AO USUÁRIO **/
            Console.WriteLine("");
            Console.WriteLine("**********************************************");
            Console.WriteLine("*                TIC-TAC-TOE                 *");
            Console.WriteLine("**********************************************");
            Console.WriteLine("");

            // imprimindo o tabuleiro vazio... 
            imprimirTabuleiro(tabuleiro);

            /** ENTRADA E PROCESSAMENTO **/
            // como temos 9 espaços em branco no tabuleiro, temos 9 rodadas
            // enquanto a rodada for menor ou igual a 9 
            while (rodada <= 9)
            {
                // o usuário pode fazer uma jogada
                fazerJogada();
                // o tabuleiro é preenchido após a jogada
                preencherTabuleiro(tabuleiro, tokenJogador, posicaoToken);
            }

            Console.WriteLine(" ***** FIM DO JOGO! ***** ");
        }

        // imprime o tabuleiro, inicialmente com nada, mas posteriormente com o token e posição informados pelos usuários 
        static void imprimirTabuleiro(string[,] tabuleiro)
        {
            for (int linha = 0; linha < tabuleiro.GetLength(0); linha++)
            {
                for (int coluna = 0; coluna < tabuleiro.GetLength(1); coluna++)
                {
                    // quando crio uma matriz de String e a inicializo com um tamanho
                    // todos os seus elementos possuem inicialmente o valor "null"
                    // é por isso que aqui eu verifico se a posição da matriz tem null 
                    // se tiver, quer dizer que o jogo ainda não começou e tenho que exibir o tabuleiro vazio
                    if (tabuleiro[linha,coluna] == null)
                    {
                        // imprimo um espaço vazio no tabuleiro 
                        Console.Write("   ");
                    }
                    else
                    {
                        Console.Write(" " + tabuleiro[linha,coluna] + " ");
                    }

                    // imprimo as barras  para as posições 0 e 1,  que quero somente duas desenhadas no tabuleiro
                    if (coluna != 2)
                    {
                        Console.Write("|");
                    }
                }
                // depois de imprimir as duas barras, pulo uma linha 
                Console.WriteLine("");
                // imprimo as linhas  para as posições 0 e 1,  que quero somente duas desenhadas no tabuleiro
                if (linha != 2)
                {
                    Console.WriteLine("---+---+---");
                }
            }

        }

        // recebe o token e a posição 
        static void fazerJogada()
        {
            // verifico de quem é a vez de jogar 
            verificarRodada();

            Console.WriteLine("");
            Console.WriteLine("Vez do " + tokenJogador + ".");

            Console.Write("Em qual posição? ");
            posicaoToken = Console.Read();
            Console.WriteLine("");
        }

        // preenche o tabuleiro com o token e posição informados pelos usuários
        static void preencherTabuleiro(string[,] tabuleiro, string tokenJogador, int posicao)
        {
            int linha = 0;
            int coluna = 0;

            switch (posicao)
            {
                case 1:
                    linha = 0;
                    coluna = 0;
                    break;
                case 2:
                    linha = 0;
                    coluna = 1;
                    break;
                case 3:
                    linha = 0;
                    coluna = 2;
                    break;
                case 4:
                    linha = 1;
                    coluna = 0;
                    break;
                case 5:
                    linha = 1;
                    coluna = 1;
                    break;
                case 6:
                    linha = 1;
                    coluna = 2;
                    break;
                case 7:
                    linha = 2;
                    coluna = 0;
                    break;
                case 8:
                    linha = 2;
                    coluna = 1;
                    break;
                case 9:
                    linha = 2;
                    coluna = 2;
                    break;
            }


            // o tabuleiro recebe o token do jogador na posição informada
            // se a posição estiver vazia
            if (tabuleiro[linha,coluna] == null && posicao <= 9)
            {
                // quer dizer que posso jogar ali
                // e o tabuleiro recebe o token do jogador na posição informada
                tabuleiro[linha,coluna] = tokenJogador;
                imprimirTabuleiro(tabuleiro);
                rodada++;
            }
            else
            {
                Console.WriteLine("Oooops! :C Essa posição já foi preenchida... Tente novamente!");
            }

        }

        // verifica de quem é a vez de jogar -> do jogador "x" ou do jogador "o"
        static void verificarRodada()
        {
            // se o número da rodada por par...
            if (rodada % 2 == 0)
            {
                tokenJogador = "O";
            }
            // se for ímpar...
            else
            {
                tokenJogador = "X";
            }
        }

    }
}
Criado 24 de fevereiro de 2017
Respostas 0
Participantes 1