Movimiento en un juego c++

Iniciado por Jprogramer, 28 Marzo 2020, 21:33 PM

0 Miembros y 1 Visitante están viendo este tema.

Jprogramer

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  :-\

Meta

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 (csharp) [Seleccionar]
using System;

namespace Menu_consola_26_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            int xMax = 80;
            int yMax = 25;
            int x = 1;
            int y = 1;

            Console.Title = "Moviendo cursor con las flechas del teclado.";
            Console.SetWindowSize(xMax + 1, yMax + 2);
            Console.CursorVisible = false;
            DrawMarco(0, 0, xMax, yMax);
           
            do
            {
                gotoxy(x, y, "█"); // ♠
                ConsoleKey tecla = Console.ReadKey(true).Key;

                if (tecla == ConsoleKey.Enter)
                {
                    gotoxy(5, yMax, $" posicion del cursor es x:{x} y:{y} ══════");
                    continue;
                }
                gotoxy(x, y, " ");
                if (tecla == ConsoleKey.DownArrow)
                {
                    if (y < yMax - 1)
                        y++;
                }
                if (tecla == ConsoleKey.UpArrow)
                {
                    if (y > 1)
                        y--;
                }
                if (tecla == ConsoleKey.RightArrow)
                {
                    if (x < xMax - 1)
                        x++;
                }
                if (tecla == ConsoleKey.LeftArrow)
                {
                    if (x > 1)
                        x--;
                }
                if (tecla == ConsoleKey.Escape)
                    break;
            } while (true);
            Console.CursorVisible = true;
        }

        // Generar marco.
        private static void DrawMarco(int v1, int v2, int v3, int v4)
        {
            gotoxy(v1, v2, "╔");
            gotoxy(v1, v4, "╚");
            gotoxy(v3, v2, "╗");
            gotoxy(v3, v4, "╝");

            for (int i = v1 + 1; i < v3; i++)
            {
                gotoxy(i, v2, "═");
                gotoxy(i, v4, "═");
            }
            for (int i = v2 + 1; i < v4; i++)
            {
                gotoxy(v1, i, "║");
                gotoxy(v3, i, "║");
            }
        }

        public static void gotoxy(int x, int y, string cad)
        {
            Console.SetCursorPosition(x, y);
            Console.Write(cad);
        }
    }
}


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.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Jprogramer

#2
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

Meta

Como vez la fecla abajo en C#.
Código (csharp) [Seleccionar]
tecla == ConsoleKey.DownArrow

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

Código (csharp) [Seleccionar]
tecla == ConsoleKey.D

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

@XSStringManolo

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.

Jprogramer

Gracias
Si, lo que quiero es rotar 90 grados sin desplazar el carácter, aunque no me interesa por ahora tener una interfaz grafica

RayR

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.