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… 
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 só para as posições 0 e 1, já 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 só para as posições 0 e 1, já 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";
}
}
}
}