[ Foro de C# ]

Juego Parejas

21-Dec-2014 18:35
Pedro Mena
1 Respuestas

Hola chicos,hace un tiempo ya escribí sobre el tema,pero no encuentro el hilo para seguir sobre el,por eso abro este nuevo.
El caso esque 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();
        }
    }
}
 





22-Dec-2014 11:10
Invitado (Caranim)

En esta línea:

 
matriz[i] =Convert.ToString (simbolo)[alea.Next(0, simbolo.Length)]; //Genero aleatoriamente la letra
 


"simbolo" es de tipo system.string[]
En primer lugar conviertes a string el literal "system.string[]", luego tratas de acceder al elemento ( carácter ) "n" de dicho literal. El literal "system.string[]" tiene una longitud de 15 caracteres ( desde simbolo[0] a simbolo[14] ) mientras que la función alea.Next(0, simbolo.Length) te devuelve un valor entre 0 y 15. Cuando la función devuelve 15, intentas acceder al elemento simbolo[15] que no existe y se provoca el error.

Si la idea es elegir un elemento de los 16 de la tabla "simbolo", deberías acceder con Convert.Tostring(simbolo [alea.Next(0,simbolo.length)].
Esto te va a dar otro error: "matriz" lo has definido como un array de enteros y vas a tratar de asignarle un string.
Tienes al menos otro error más en el programa: la variable "juegueOtravez" no está inicializada antes de llegar al  while (juegueOtravez.Equals("S")) que es la tercera linea de la función main(). Cuando llegue ahí el programa cascará miserablemente.

Saludos.







(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.)