Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. // ===++===
  2. //
  3. //    OrtizOL
  4. //
  5. // ===--===
  6. /*============================================================
  7. //
  8. // Clase: Triqui.cs
  9. //
  10. // Original en: http://goo.gl/jgd3e1
  11. //
  12. // Propósito: Implementar la lógica de la entidad Triqui.
  13. //
  14. ============================================================*/
  15.  
  16. using System;
  17.  
  18. namespace Triqui.Modelo
  19. {
  20.     /// <summary>
  21.     /// Representa el tablero lógico de triqui.
  22.     /// </summary>
  23.     public class Triqui
  24.     {
  25.         #region Campos
  26.         /// <summary>
  27.         /// Las 9 casillas que integran el tablero lógico de triqui.
  28.         /// </summary>
  29.         private Casilla[] casillas;
  30.         #endregion
  31.  
  32.         #region Constructores
  33.         /// <summary>
  34.         /// Crea una instancia del juego de Triqui.
  35.         /// </summary>
  36.         public Triqui()
  37.         {
  38.             // Crea las nueve casillas:
  39.             casillas = new Casilla[9];
  40.  
  41.             for(int i = 0; i < casillas.Length; ++i)
  42.             {
  43.                 casillas[i] = new Casilla();
  44.             }
  45.         }
  46.         #endregion
  47.  
  48.         #region Métodos
  49.         /// <summary>
  50.         /// Comprueba que una determinada casilla esté vacía.
  51.         /// </summary>
  52.         /// <param name="casilla">Posición de la casilla comprobar su estado.</param>
  53.         /// <returns>true si la casilla está vacía; false, en caso contrario.</returns>
  54.         public bool CasillaVacia(PosicionCasilla casilla)
  55.         {
  56.             return casillas[(int)casilla - 1].EstaVacia();
  57.         }
  58.         /// <summary>
  59.         /// Comprueba si la columna central está llena.
  60.         /// </summary>
  61.         /// <param name="marcaJugador">Marca del jugador a comprobar en la columna.</param>
  62.         /// <returns>true si la columna está llena, false en caso contrario.</returns>
  63.         public bool ColumnaCentralLlena(char marcaJugador)
  64.         {
  65.             if (casillas[1].ContieneMarca(marcaJugador) && casillas[4].ContieneMarca(marcaJugador) && casillas[7].ContieneMarca(marcaJugador))
  66.             {
  67.                 return true;
  68.             }
  69.             else
  70.             {
  71.                 return false;
  72.             }
  73.         }
  74.         /// <summary>
  75.         /// Comprueba si la columna derecha está vacía.
  76.         /// </summary>
  77.         /// <param name="marcaJugador">Marca del jugador a comprobar en la columna.</param>
  78.         /// <returns>true si la columna está llena, false en caso contrario.</returns>
  79.         public bool ColumnaDerechaLlena(char marcaJugador)
  80.         {
  81.             if (casillas[2].ContieneMarca(marcaJugador) && casillas[5].ContieneMarca(marcaJugador) && casillas[8].ContieneMarca(marcaJugador))
  82.             {
  83.                 return true;
  84.             }
  85.             else
  86.             {
  87.                 return false;
  88.             }
  89.         }
  90.         /// <summary>
  91.         /// Comprueba si la columna de la izquierda está llena.
  92.         /// </summary>
  93.         /// <param name="marcaJugador">Marca del jugador a comprobar en la columna.</param>
  94.         /// <returns>true si la columna está llena, false en caso contrario.</returns>
  95.         public bool ColumnaIzquierdaLlena(char marcaJugador)
  96.         {
  97.             if (casillas[0].ContieneMarca(marcaJugador) && casillas[3].ContieneMarca(marcaJugador) && casillas[6].ContieneMarca(marcaJugador))
  98.             {
  99.                 return true;
  100.             }
  101.             else
  102.             {
  103.                 return false;
  104.             }
  105.         }
  106.         /// <summary>
  107.         /// Comprueba si la diagonal creciente está llena.
  108.         /// </summary>
  109.         /// <param name="marcaJugador">Marca del jugador a comprobar en la columna.</param>
  110.         /// <returns>true si la diagonal está llena, false en caso contrario.</returns>
  111.         public bool DiagonalCrecienteLlena(char marcaJugador)
  112.         {
  113.             if (casillas[6].ContieneMarca(marcaJugador) && casillas[4].ContieneMarca(marcaJugador) && casillas[2].ContieneMarca(marcaJugador))
  114.             {
  115.                 return true;
  116.             }
  117.             else
  118.             {
  119.                 return false;
  120.             }
  121.         }
  122.         /// <summary>
  123.         /// Comprueba si la diagonal decreciente está llena.
  124.         /// </summary>
  125.         /// <param name="marcaJugador">Marca del jugador a comprobar en la columna.</param>
  126.         /// <returns>true si la diagonal está llena, false en caso contrario.</returns>
  127.         public bool DiagonalDecrecienteLlena(char marcaJugador)
  128.         {
  129.             if (casillas[0].ContieneMarca(marcaJugador) && casillas[4].ContieneMarca(marcaJugador) && casillas[8].ContieneMarca(marcaJugador))
  130.             {
  131.                 return true;
  132.             }
  133.             else
  134.             {
  135.                 return false;
  136.             }
  137.         }
  138.         /// <summary>
  139.         /// Comprueba si la fila inferior está llena.
  140.         /// </summary>
  141.         /// <param name="marcaJugador">Marca del jugador a comprobar en la columna.</param>
  142.         /// <returns>true si la columna está llena, false en caso contrario.</returns>
  143.         public bool FilaInferiorLlena(char marcaJugador)
  144.         {
  145.             if (casillas[6].ContieneMarca(marcaJugador) && casillas[7].ContieneMarca(marcaJugador) && casillas[8].ContieneMarca(marcaJugador))
  146.             {
  147.                 return true;
  148.             }
  149.             else
  150.             {
  151.                 return false;
  152.             }
  153.         }
  154.         /// <summary>
  155.         /// Comprueba si la fila media está llena.
  156.         /// </summary>
  157.         /// <param name="marcaJugador">Marca del jugador a comprobar en la columna.</param>
  158.         /// <returns>true si la columna está llena, false en caso contrario.</returns>
  159.         public bool FilaMediaLlena(char marcaJugador)
  160.         {
  161.             if (casillas[3].ContieneMarca(marcaJugador) && casillas[4].ContieneMarca(marcaJugador) && casillas[5].ContieneMarca(marcaJugador))
  162.             {
  163.                 return true;
  164.             }
  165.             else
  166.             {
  167.                 return false;
  168.             }
  169.         }
  170.         /// <summary>
  171.         /// Comprueba si la fila superior está llena.
  172.         /// </summary>
  173.         /// <param name="marcaJugador">Marca del jugador a comprobar en la columna.</param>
  174.         /// <returns>true si la columna está llena, false en caso contrario.</returns>
  175.         public bool FilaSuperiorLlena( char marcaJugador)
  176.         {
  177.             if (casillas[0].ContieneMarca(marcaJugador) && casillas[1].ContieneMarca(marcaJugador) && casillas[2].ContieneMarca(marcaJugador))
  178.             {
  179.                 return true;
  180.             }
  181.             else
  182.             {
  183.                 return false;
  184.             }
  185.         }
  186.         /// <summary>
  187.         /// Comprueba si un jugador (persona o PC) ha ganado el juego.
  188.         /// </summary>
  189.         /// <param name="marcaJugador">Marca del jugador a comprobar.</param>
  190.         /// <returns>true si el jugador ha ganado el juego; false, en caso contrario.</returns>
  191.         public bool GanoJuego(char marcaJugador)
  192.         {
  193.             return (
  194.                     ColumnaCentralLlena(marcaJugador) || ColumnaDerechaLlena(marcaJugador) || ColumnaIzquierdaLlena(marcaJugador) ||
  195.                     DiagonalDecrecienteLlena(marcaJugador) || DiagonalCrecienteLlena(marcaJugador) ||
  196.                     FilaInferiorLlena(marcaJugador) || FilaMediaLlena(marcaJugador) || FilaSuperiorLlena(marcaJugador)
  197.                 );
  198.         }
  199.         /// <summary>
  200.         /// Marca una casilla del tablero de triqui con la marca de un jugador.
  201.         /// </summary>
  202.         /// <param name="posicionCasilla">Casilla a marcar.</param>
  203.         /// <param name="marcaJugador">Marca del jugador a comprobar.</param>
  204.         public void MarcarCasilla(PosicionCasilla posicionCasilla, char marcaJugador)
  205.         {
  206.             casillas[(int)posicionCasilla - 1].Marca = marcaJugador;
  207.         }
  208.         /// <summary>
  209.         /// Limpia el tablero para un nuevo juego.
  210.         /// </summary>
  211.         public void LimpiarTablero()
  212.         {
  213.             foreach(Casilla casilla in casillas)
  214.             {
  215.                 casilla.Limpiar();
  216.             }
  217.         }
  218.         /// <summary>
  219.         /// Obtiene la marca sobre un casilla dada.
  220.         /// </summary>
  221.         /// <param name="posicionCasilla">Posición de la casilla a obtener la marca.</param>
  222.         /// <returns>Marca del jugador en la casilla.</returns>
  223.         public char ObtenerMarcaCasilla(PosicionCasilla posicionCasilla)
  224.         {
  225.             if (posicionCasilla != PosicionCasilla.Ninguna)
  226.             {
  227.                 return casillas[(int)posicionCasilla - 1].Marca;
  228.             }
  229.             else
  230.             {
  231.                 return Casilla.CASILLA_VACIA;
  232.             }
  233.         }
  234.         /// <summary>
  235.         /// Comprueba si el tablero de triqui está vacío.
  236.         /// </summary>
  237.         /// <returns>true si el tablero está vacío; en caso contrario, false.</returns>
  238.         public bool TableroLleno()
  239.         {
  240.             foreach (Casilla casilla in casillas)
  241.             {
  242.                 if (!casilla.EstaVacia())
  243.                 {
  244.                     continue;
  245.                 }
  246.                 else
  247.                 {
  248.                     return false;
  249.                 }
  250.             }
  251.  
  252.             return true;
  253.         }
  254.         #endregion
  255.  
  256.         #region Puntos de extensión:
  257.         /// <summary>
  258.         /// Punto de extensión no. 1.
  259.         /// </summary>
  260.         /// <returns>Respuesta dada por el punto de extensión.</returns>
  261.         public string Metodo1()
  262.         {
  263.             return "Respuesta 1";
  264.         }
  265.         /// <summary>
  266.         /// Punto de extensión no. 2.
  267.         /// </summary>
  268.         /// <returns>Respuesta dada por el punto de extensión.</returns>
  269.         public string Metodo2()
  270.         {
  271.             return "Respuesta 2";
  272.         }
  273.         #endregion
  274.     }
  275. }