[ Foro de C# ]

Tengo un error al iniciar mi código ayuda!!!

26-Nov-2016 23:14
francisco vazques
2 Respuestas

Hola que tal, soy nuevo en esto de programar y no tengo demasiados conocimientos sobre que usar cuando programo y ya trate de investigar y no encuentro una explicación y me gustaría que me puedan ayudar con mi duda, llevo casi 2 semanas atorado con el mismo problema lo que estoy tratando de hacer un mini juego de una nave esquivando obstáculos en visual studio c# 2015 ya tengo el movimiento de la nave y el de los asteroides pero al momento de iniciarlo se empieza con los asteroide moviéndose normalmente pero al iniciar a mover la nave es cuando empieza a fallar mi  programa se empieza a repintar la nave y los asteroides en cualquier lugar donde no deberían estar, me gustaría decir que cuando inicio alguno de los programas individualmente la nave o la parte de los obstáculos  corre con normalidad .

Aquí les dejo el código para que puedan echarle un vistaso.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace nueva_nave_moviendose2
{
   class Program
   {
       //se inicia la creacion de los asteroides
       static void asteroide()
       {
           int m, a, p;
           for (a = 0; a < 40; a++)

           {

               Random rnd = new Random();
               p = rnd.Next(10, 105);
               for (m = 9; m < 27; m++)
               {

                   Console.SetCursorPosition(p, m - 1);
                   Console.WriteLine(" ");
                   Thread.Sleep(50);
                   Console.SetCursorPosition(p, m);
                   Console.ForegroundColor = ConsoleColor.White;
                   Console.WriteLine("?");
                   Thread.Sleep(50);


                   Console.SetCursorPosition(p + 1 , m - 1);
                   Console.WriteLine(" ");
                   Thread.Sleep(50);
                   Console.SetCursorPosition(p + 1 , m);
                   Console.ForegroundColor = ConsoleColor.White;
                   Console.WriteLine("?");
                   Thread.Sleep(50);




                   Console.SetCursorPosition(p - 1, m - 1);
                   Console.WriteLine(" ");
                   Thread.Sleep(50);
                   Console.SetCursorPosition(p - 1, m);
                   Console.ForegroundColor = ConsoleColor.White;
                   Console.WriteLine("?");
                   Thread.Sleep(50);

                 
               }
           }
       }

       // es para crearel sonido al disparar
       static void sonidodisparo()
       {
           Console.Beep(1479, 98);
           Console.Beep(1479, 98);
           Console.Beep(1479, 98);
       }


       static void Main(string[] args)
       {
           Console.SetWindowSize(
               Math.Min(150, Console.LargestWindowWidth),
               Math.Min(38, Console.LargestWindowHeight));
           Console.BackgroundColor = ConsoleColor.Black;

           




           Console.ForegroundColor = ConsoleColor.White;
           Console.SetCursorPosition(8, 2);
           Console.WriteLine("jugador");
           Console.SetCursorPosition(105, 2);
           Console.WriteLine("vidas");
           Console.SetCursorPosition(41, 2);
           Console.WriteLine("F1 regresar al menu.");
             
           //inicializo el programa de los obstaculos al mismo tiempo con los
           
           Thread ast = new Thread(asteroide);
            ast.Start();
         
           //inicio con los movimientos de la nave

           int h, x = 50, y = 26;
           
           ConsoleKeyInfo k;

           do
           {
               
               Console.SetCursorPosition(x, y - 2);
               Console.WriteLine("                   ");
               Console.SetCursorPosition(x, y - 1);
               Console.WriteLine("                   ");
               Console.SetCursorPosition(x, y);
               Console.WriteLine("       ?????       ");
               Console.SetCursorPosition(x, y + 1);
               Console.WriteLine("      ???????      ");
               Console.SetCursorPosition(x, y + 2);
               Console.WriteLine("   ?????????????   ");
               Console.SetCursorPosition(x, y + 3);
               Console.WriteLine("     ???   ???     ");
               Console.SetCursorPosition(x, y + 4);
               Console.WriteLine("                   ");
               Console.SetCursorPosition(x, y + 5);
               Console.WriteLine("                   ");
               



               k = Console.ReadKey(true);

               if (k.Key == ConsoleKey.NumPad9)
               {

                   y = y - 1;
                   x = x + 1;
               }

               if (k.Key == ConsoleKey.NumPad1)
               {
                   y = y + 1;
                   x = x - 1;
               }

               if (k.Key == ConsoleKey.NumPad7)
               {
                   y = y - 1;
                   x = x - 1;
               }

               if (k.Key == ConsoleKey.NumPad3)
               {
                   y = y + 1;
                   x = x + 1;
               }


               k = Console.ReadKey(true);
               if (k.Key == ConsoleKey.NumPad8)
               {
                   y = y - 1;
                 
               }



               if (k.Key == ConsoleKey.NumPad2)
               {
                   y = y + 1;
                 
               }
               if (k.Key == ConsoleKey.NumPad4)
               {
                   x = x - 1;
                 
               }
               if (k.Key == ConsoleKey.NumPad6)
               {
                   x = x + 1;
                 
               }
               if (x == 9)
               {
                   x = x + 1;
                 
               }
               if (x == 96)
               {
                   x = x - 1;
               
               }
               if (y == 5)
               {
                   y = y + 1;
                 
               }
               if (y == 28)
               {
                   y = y - 1;
               
               }
               if (k.Key == ConsoleKey.Spacebar)
               {
                   

                   Thread piuupiuu = new Thread(sonidodisparo);
                   piuupiuu.Start();

                   for (h = y - 2; h > 7; h--)
                   {

                       Console.SetCursorPosition(x + 9, h);
                       Console.ForegroundColor = ConsoleColor.White;
                       Console.WriteLine("|");
                       Thread.Sleep(5);
                       Console.SetCursorPosition(x + 9, h + 1);
                       Console.ForegroundColor = ConsoleColor.Black;
                       Console.WriteLine("|");
                       Thread.Sleep(5);
                       Console.ForegroundColor = ConsoleColor.White;
                   }
                   if (h == 7)
                   {
                       Console.SetCursorPosition(x + 9, h - 1);
                       Console.ForegroundColor = ConsoleColor.Black;
                       Console.WriteLine("|");
                       Console.SetCursorPosition(x + 9, h);
                       Console.ForegroundColor = ConsoleColor.Black;
                       Console.WriteLine("|");
                       Console.SetCursorPosition(x + 9, h + 1);
                       Console.ForegroundColor = ConsoleColor.Black;
                       Console.WriteLine("|");
                       Console.ForegroundColor = ConsoleColor.White;
                   }

               }



           }
           while (k.Key != ConsoleKey.F1);


           Console.ReadLine();

       }
   }
}


27-Nov-2016 11:53
Nacho Cabanes (+84)

No es necesario que publiques la pregunta tres veces. En este momento no puedo probar tu código, pero lo intentaré esta tarde.


27-Nov-2016 13:38
Nacho Cabanes (+84)

En un primer vistazo:

La línea "Random rnd = new Random();" debería esta antes de "for (a = 0; a < 40; a++) ", o todos los asteroides (¿"a" es para indicar el número de asteroide?) pueden aparecer en la misma posición.

Hay otras decisiones de diseño discutibles, como el tener los asteroides en un hilo separado, lo que te complicará la sincronización (es más sencillo hacer que el "ReadKey" no bloquee la ejecución) o el no desglosar en funciones cosas como el dibujado de la nave.

Mira esto por si te sirve de ayuda:

http://www.nachocabanes.com/videojuegos/ipj2012/ipj10.php






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