Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Jprogramer en 28 Marzo 2020, 21:33 pm



Título: Movimiento en un juego c++
Publicado por: Jprogramer en 28 Marzo 2020, 21:33 pm
Necesito ayuda con una forma de hacer desplazar un carácter con tres ordenes "giro a la izquierda",  "giro a la derecha" y que "avance", por el momento tengo el código para que se mueva con las letras "w,a,s,d" pero no es lo que necesito  :-\


Título: Re: Movimiento en un juego c++
Publicado por: Meta en 29 Marzo 2020, 03:27 am
Hola:

En C++ no te puedo ayudar mucho y es lo primero que te diego, pero hay peros, puedes transformar son tu astucia que no tengo, pasarlo de C# a C++. Si lo haces, lo muestras aquí.

Código
  1. using System;
  2.  
  3. namespace Menu_consola_26_cs
  4. {
  5.    class Program
  6.    {
  7.        static void Main(string[] args)
  8.        {
  9.            int xMax = 80;
  10.            int yMax = 25;
  11.            int x = 1;
  12.            int y = 1;
  13.  
  14.            Console.Title = "Moviendo cursor con las flechas del teclado.";
  15.            Console.SetWindowSize(xMax + 1, yMax + 2);
  16.            Console.CursorVisible = false;
  17.            DrawMarco(0, 0, xMax, yMax);
  18.  
  19.            do
  20.            {
  21.                gotoxy(x, y, "█"); // ♠
  22.                ConsoleKey tecla = Console.ReadKey(true).Key;
  23.  
  24.                if (tecla == ConsoleKey.Enter)
  25.                {
  26.                    gotoxy(5, yMax, $" posicion del cursor es x:{x} y:{y} ══════");
  27.                    continue;
  28.                }
  29.                gotoxy(x, y, " ");
  30.                if (tecla == ConsoleKey.DownArrow)
  31.                {
  32.                    if (y < yMax - 1)
  33.                        y++;
  34.                }
  35.                if (tecla == ConsoleKey.UpArrow)
  36.                {
  37.                    if (y > 1)
  38.                        y--;
  39.                }
  40.                if (tecla == ConsoleKey.RightArrow)
  41.                {
  42.                    if (x < xMax - 1)
  43.                        x++;
  44.                }
  45.                if (tecla == ConsoleKey.LeftArrow)
  46.                {
  47.                    if (x > 1)
  48.                        x--;
  49.                }
  50.                if (tecla == ConsoleKey.Escape)
  51.                    break;
  52.            } while (true);
  53.            Console.CursorVisible = true;
  54.        }
  55.  
  56.        // Generar marco.
  57.        private static void DrawMarco(int v1, int v2, int v3, int v4)
  58.        {
  59.            gotoxy(v1, v2, "&#9556;");
  60.            gotoxy(v1, v4, "&#9562;");
  61.            gotoxy(v3, v2, "&#9559;");
  62.            gotoxy(v3, v4, "&#9565;");
  63.  
  64.            for (int i = v1 + 1; i < v3; i++)
  65.            {
  66.                gotoxy(i, v2, "&#9552;");
  67.                gotoxy(i, v4, "&#9552;");
  68.            }
  69.            for (int i = v2 + 1; i < v4; i++)
  70.            {
  71.                gotoxy(v1, i, "&#9553;");
  72.                gotoxy(v3, i, "&#9553;");
  73.            }
  74.        }
  75.  
  76.        public static void gotoxy(int x, int y, string cad)
  77.        {
  78.            Console.SetCursorPosition(x, y);
  79.            Console.Write(cad);
  80.        }
  81.    }
  82. }
  83.  

Pulsas las flechas del teclado pra mover en la pantalla un caracter, pulsa Enter para indicar la posición de donde está.

¿Es algo parecido a lo que buscas?

Saludos.


Título: Re: Movimiento en un juego c++
Publicado por: Jprogramer en 29 Marzo 2020, 20:22 pm
Gracias, pero por lo que veo en el código hace que el carácter se mueva con las flechas pero como lo mencione antes yo hago eso mismo en mi programa con las teclas w,a,s,d.
Lo que estoy buscando es que al carácter yo le pueda dar una orientación (derecha, izquierda) y una vez dada la orientación hacer que el caracter avance.

Seria algo como el usuario digita la letra (D) que orientara el caracter hacia la derecha sin que avance y la letra (A) que haria que el caracter avance, el caracter que esta en la posicion 0,0 pasaria hacia la posicion 1,0

Cabe aclarar que antes de dar las instrucciones se debe ingresar hacia que lado esta apuntando el caracter sea arriba, abajo, derecha, izquierda. para hacer mas claro hacia donde desplazar el caracter


Título: Re: Movimiento en un juego c++
Publicado por: Meta en 29 Marzo 2020, 21:55 pm
Como vez la fecla abajo en C#.
Código
  1. tecla == ConsoleKey.DownArrow

Si quieres la de, solo tienes que poner la D, quedaría así.

Código
  1. tecla == ConsoleKey.D

Saludos.


Título: Re: Movimiento en un juego c++
Publicado por: @XSStringManolo en 30 Marzo 2020, 01:45 am
No me queda claro si quieres mover un caracter desplazándolo del lugar de origen al lugar destino. O si quieres rotar 90 grados sin desplazar el caracter.

En el primer caso puedes almacenar todo el contenido de la pantalla en un array multidimensional y rescribirlo todo a tu gusto. Puedes usar windows.h para obtener la posición del buffer de la consola.

Para rotar tendrás que crear alguna fuente de texto o usar imágenes creo yo. Quizás sea más sencillo utilizar una biblioteca gráfica y hacer tu la propia consola en una ventana para tener control absoluto.


Título: Re: Movimiento en un juego c++
Publicado por: Jprogramer en 30 Marzo 2020, 03:04 am
Gracias
Si, lo que quiero es rotar 90 grados sin desplazar el carácter, aunque no me interesa por ahora tener una interfaz grafica


Título: Re: Movimiento en un juego c++
Publicado por: RayR en 30 Marzo 2020, 04:53 am
En modo texto sólo es posible mostrar caracteres en su forma normal, y no se pueden girar. O usas alguna biblioteca gráfica, o lo simulas con caracteres distintos que den la ilusión de rotación. Por ejemplo: < ^ > v.