[ Foro de C# ]

Juego Parejas

22-Dec-2016 18:13
Invitado (Quironx)
1 Respuestas

Quiero hacer un juego con un array de 4x4 y que me muestre de inicio el símbolo ?. El jugador seleccionará una posición y el mostrará aleatoriamente  una de las letras desde la A... a la H el jugador tendrá que elegir otra posición y encontrar la misma letra,osea la pareja y así sucesivamente, cuando encuentre todas las parejas,gana.
Este es el código que llevo por el momento,pero me da errores al compilar,en el lenght del arreglo,no encuentro porque,haber si me podeis echar una mano:

namespace JuegoParejas
{
   class Program
   {
      static int[] matriz = new int[16];
      static String juegueOtravez;

       static void iniciarvariable()
      {
          Random alea = new Random();
          string[] simbolo = new string[]{"A","B","A","B","C","D","C","D","E","F","E","F",
               "G","H","G","H"};
          for (int i = 0; i < 15; i++)
          {
              matriz[i] =Convert.ToString (simbolo)[alea.Next(0, simbolo.Length)]; //Genero aleatoriamente la letra
          }


      }
      static void juegeOtravez(String mensaje )
      {
          Console.WriteLine(mensaje + " Quiere jugar de nuevo?");
          if (Console.ReadLine().Equals("S"))
              juegueOtravez.Equals("Y");
          else
              juegueOtravez.Equals("N");
      }
      static void ganador()
      {
          Console.WriteLine("Enhorabuena,ganaste!\n\nQuiere jugar de nuevo?");
          if (Console.ReadLine().Equals("S"))
             juegueOtravez.Equals("S");
          else
              juegueOtravez.Equals("N");

      }


      static void Main(string[] args)
       {
           iniciarvariable();

           inicio();
           while (juegueOtravez.Equals("S"))
           {
               while (gana() == false)
               {
                   dato("Jugador 1");
                   if (gana() == true)
                       break;
                   dato("Pruebe otra vez");


               }
               ganador();
           }
       }

       static void dato(string jugador)
       {
           Console.WriteLine("Jugador:" + jugador);
           Console.WriteLine("Seleccione una casilla");
           escrimatriz();
           int selection = Convert.ToInt32(Console.ReadLine());
       }
       static void escrimatriz()
       {
           for (int i=0; i<15; i+=4) //Escribir y mostrar la matriz en consola.
           Console.WriteLine(matriz[i] +"?", "|" + matriz[i+1] +"?", "|" + matriz[i+2]+ "?","|"+ matriz[i+3]+ "?");

       }


       static Boolean gana()
       {
           for (int i=0; i<15; i+=2)
           {
               if (matriz[i].Equals(matriz[i+1]) && matriz[i+1].Equals(matriz[i+2]))
               {
           return false;
               }
       }
           if (matriz[0].Equals(matriz[3]) && matriz[3].Equals(matriz[6]))
               return true;
           if (matriz[1].Equals(matriz[4]) && matriz[4].Equals(matriz[7]))
               return true;
           if (matriz[2].Equals(matriz[5]) && matriz[3].Equals(matriz[8]))
               return true;
           if (matriz[2].Equals(matriz[4]) && matriz[4].Equals(matriz[6]))
               return true;
           if (matriz[0].Equals(matriz[4]) && matriz[4].Equals(matriz[8]))
               return true;
           return false;
       }

         static void inicio()
         {

           Console.WriteLine(" Adivina las parejas");
           Console.WriteLine("Pulse una tecla para continuar");
           Console.ReadLine();
           Console.Clear();
       }
   }
}


28-Dec-2016 10:16
Invitado (Caranim)

El primer error que encuentro es que no inicializas la variable "juegueOtravez" y eso hará "cascar" el programa al principio del todo. Si lo declaras así:
                              static String juegueOtravez = "S";
se solucionará.


"matriz" la declaras como entero, pero en iniciarvariable tienes esto:
                           matriz[i] = Convert.ToString(simbolo)[alea.Next(0, simbolo.Length)];

Estás convirtiendo a cadena y luego cargando en un array de enteros. Declarando matriz como string puedes dejar esta sentencia como:
                          matriz[i] = simbolo[alea.Next(0, simbolo.Length)];

y el error desaparece.
Aún así hay más errores en el código. En los procedimientos "juegeOtravez" y "ganador" tienes cuatro líneas similares a esto:
                         juegueOtravez.Equals("Y");

Esa instrucción devuelve "True" si son iguales, pero o mucho me confundo o realmente querías hacer una asignación. Cambialo por juegueOtravez = "Y";

Espero que te ayude... y no dudes en preguntar si te quedan dudas.

Un abrazo.

Caranim






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)