ErrorDeSintaxis

Pequeños fragmentos de código fuente en distintos lenguajes de programación, agrupados por categorías.

Puedes buscar entre los fuentes existentes, o aportar los tuyos.

C#: Tres en raya

Juego de 3 en raya (TicTacToe) en modo consola con C#

Lenguaje: C# (compilador: Mono 2.10)

Categoría: Minijuegos

// Fuente procedente de ErrorDeSintaxis.es 
// Juego de 3 en raya (TicTacToe) en modo consola 
//  con C# 
// Compilador: Mono 2.10 
// Nivel: Básico 
// Disponible desde 04/02/2012 
// Aportado por Nacho 
// Autor original: Nacho Cabanes 
// Tres en raya, por Nacho
 
using System;
 
public class TresEnRaya1 
{
 
    // Tablero de juego
    static int[,] tablero = new int[3,3];
    // Símbolos del tablero: blanco, jug.1, jug.2
    static char[] simbolo = { ' ', 'O', 'X'};
 
 
    // ----- Cuerpo del programa
    public static void Main() 
    {
        bool terminado = false;
 
        // Dibujar el tablero inicial
        DibujarTablero();
        do
        {            
            // Pedir al jugador 1
            PreguntarPosicion( 1 );
            // Dibujar la casilla del jugador 1
            DibujarTablero();
            // Comprobar si ha terminado la partida
            terminado = ComprobarGanador();
            if (terminado)
                Console.WriteLine("Ganó jugador 1");
            else
                {
                    terminado = ComprobarEmpate();
                    if (terminado)
                        Console.WriteLine("Empate!");
                    else
                    {
                        // Pedir al jugador 2
                        PreguntarPosicion( 2 );
                        // Dibujar la casilla del jugador 2
                        DibujarTablero();
                        // Comprobar si ha terminado la partida
                        terminado = ComprobarGanador();
                        if (terminado)
                            Console.WriteLine("Ganó jugador 2");                
                    }
            }
        // Repetir hasta 3 en raya o empate (tablero lleno)
        } while (!terminado);
    }
 
 
    static void DibujarTablero()
    {
        Console.WriteLine();
        Console.WriteLine("-------------");
        for (int fila=0; fila<3; fila++)
        {
            Console.Write("|");
            for (int columna=0; columna<3; columna++)
                Console.Write(" {0} |", simbolo[tablero[fila,columna]]);
            Console.WriteLine();
            Console.WriteLine("-------------");
        }
    }
 
 
    // ----- Pregunta dónde mover y lo anota en el tablero
    static void PreguntarPosicion( int jugador ) // 1 = Jug.1, 2= Jug.2
    {
        int fila, columna;
        do
        {
            Console.WriteLine();
 
            // Pido fila
            do
            {
                Console.Write("En qué fila (1 a 3) ");
                fila = Convert.ToInt32( Console.ReadLine() );
            } 
            while ((fila < 1) || (fila > 3));
 
            // Pido columna
            do
            {
                Console.Write("En qué columna (1 a 3) ");
                columna = Convert.ToInt32( Console.ReadLine() );
            } 
            while ((columna < 1) || (columna > 3));
 
            if (tablero[fila-1,columna-1] != 0)
                Console.WriteLine("Casilla ocupada!");
        } 
        while (tablero[fila-1,columna-1] != 0);
 
        // Si todo es correcto, se la asigno
        tablero[fila-1,columna-1] = jugador;
    }
 
 
    // ----- Devuelve "true" si hay tres en raya
    static bool ComprobarGanador()
    {
        bool hay3enRaya = false;
 
        // Si en alguna fila todas las casillas son iguales y no vacías
        for (int fila=0; fila<3; fila++)
            if ((tablero[fila, 0] == tablero[fila, 1]) 
                    && (tablero[fila, 0] == tablero[fila, 2])
                    && (tablero[fila, 0] != 0))
                hay3enRaya = true;
 
        // Lo mismo para las columnas
        for (int columna=0; columna<3; columna++)
            if ((tablero[0,columna] == tablero[1,columna]) 
                    && (tablero[0,columna] == tablero[2,columna])
                    && (tablero[0,columna] != 0))
                hay3enRaya = true;
 
        // Y finalmente miro las dos diagonales
        if ((tablero[0, 0] == tablero[1, 1]) 
                && (tablero[0, 0] == tablero[2, 2])
                && (tablero[0, 0] != 0))
            hay3enRaya = true;
        if ((tablero[0, 2] == tablero[1, 1]) 
                && (tablero[0, 2] == tablero[2, 0])
                && (tablero[0, 2] != 0))
            hay3enRaya = true;
 
        return hay3enRaya;
    }
 
 
    // ----- Devuelve "true" si hay empate 
    static bool ComprobarEmpate()
    {
        // Si no quedan huecos donde mover, es empate
        bool algunHueco = false;
 
        for (int fila=0; fila<3; fila++)
            for (int columna=0; columna<3; columna++)
                if(tablero[fila,columna] == 0)
                    algunHueco = true;        
 
        return ! algunHueco;
    }
}
 

 
Resultado:

-------------
|   |   |   |
-------------
|   |   |   |
-------------
|   |   |   |
-------------

En qué fila (1 a 3) 1
En qué columna (1 a 3) 1

-------------
| O |   |   |
-------------
|   |   |   |
-------------
|   |   |   |
-------------

En qué fila (1 a 3) 2
En qué columna (1 a 3) 3

-------------
| O |   |   |
-------------
|   |   | X |
-------------
|   |   |   |
-------------

En qué fila (1 a 3)