Pintar un marco en c#

publicado por: Anonymous

estoy en clase y nuestro profe nos está haciendo crear un marco de base para lo que sería un juego de snake, justo voy por la función que debe pintar el marco, pero tengo un cierto problema, y es que el lateral derecho, se me pinta justo al lado del izquierdo, en vez de pintarse como un marco… A ver si alguien me puede ayudar, esto es lo que tengo:

    static void pintaMarc()
            {
                //caracteres marc 186 ║, 187 ╗, 188 ╝, 200 ╚, 201 ╔, 205 ═

                int alçada = Console.WindowHeight - 10, amplada = Console.WindowWidth - 30;

                Console.Write('â•”');
                for (int i = 0; i < amplada; i++)
                {
                    Console.Write('═');
                }
                Console.Write('â•—');

                for (int x = 0; x < alçada; x++)
                {
                    Console.Write('n');

                    for (int y = 0; y < amplada; y++)
                    {

                        if (y == 0)
                        {
                            Console.Write('â•‘');
                        }

                        if (y == amplada - 1)
                        {
                            Console.Write('â•‘');
                        }
                    }

                }
                Console.Write('n');
                Console.Write('â•š');
                for (int x = 0; x < amplada; x++)
                {
                    Console.Write('═');
                }
                Console.WriteLine('╝');
}

muchas gracias de antemano!

Adjunto captura de cómo se ejecuta:
Como veis, se debería pintar en el espacio faltante, no justo al lado del otro margen

Bien, pues al final lo hice con la función console.setcursorposition:

Console.SetCursorPosition(1, 1);
            Console.WriteLine("â•”");
            Console.SetCursorPosition(1, 30);
            Console.WriteLine("â•š");
            Console.SetCursorPosition(100, 1);
            Console.WriteLine("â•—");
            Console.SetCursorPosition(100, 30);
            Console.WriteLine("╝");


            for (int y = 2; y < 100; y++)
            {
                int x = 1;
                Console.SetCursorPosition(y, x);
                Console.WriteLine("═");
            }

            for (int x = 2; x < 30; x++)
            {
                int y = 1;
                Console.SetCursorPosition(y, x);
                Console.WriteLine("â•‘");

                y = 100;
                Console.SetCursorPosition(y, x);
                Console.WriteLine("â•‘");
            }

            for (int y = 2; y < 100; y++)
            {
                int x = 30;
                Console.SetCursorPosition(y, x);
                Console.WriteLine("═");
            }

De forma que en el segundo for, las barras verticales, se van colocando paralelamente, a la distancia que asignes.

solución

Aquí esta la respuesta, revisalo 🙂

 static void pintaMarc()
    {
        //caracteres marc 186 ║, 187 ╗, 188 ╝, 200 ╚, 201 ╔, 205 ═

        int alçada = Console.WindowHeight - 10, amplada = Console.WindowWidth - 30;

        Console.Write('â•”');
        for (int i = 0; i < amplada; i++)
        {
            Console.Write('═');
        }
        Console.Write('â•—');

        for (int x = 0; x < alçada; x++)
        {
            Console.Write('n');

            for (int y = 0; y < amplada; y++)
            {

                if (y == 0)
                {
                    Console.Write('â•‘');
                }

                if (y == amplada - 1)
                {
                    Console.Write(" â•‘");//Puse un espacio antes aqui
                }
                else
                {
                    Console.Write(' ');//Esta linea agrega los espacios, en el else
                }
            }

        }
        Console.Write('n');
        Console.Write('â•š');
        for (int x = 0; x < amplada; x++)
        {
            Console.Write('═');
        }
        Console.WriteLine('╝');
    }

introducir la descripción de la imagen aquí

Intente como menciono @Arie:

static void Main(string[] args)
    {
        pintaMarc2();
        Console.ReadLine();
    }

    static void pintaMarc2()
    {
        //caracteres marc 186 ║, 187 ╗, 188 ╝, 200 ╚, 201 ╔, 205 ═
        int height = Console.WindowHeight - 10, width = Console.WindowWidth - 30;
        WriteAt("â•”", 0, 0);
        WriteAt("â•š", 0, height);
        WriteAt("â•—", width, 0);
        WriteAt("╝", width, height);
        for (int i = 1; i < width; i++)
        {
            WriteAt("═", i, 0);
            WriteAt("═", i, height);
        }
        for (int i = 1; i < height; i++)
        {
            WriteAt("â•‘", 0, i);
            WriteAt("â•‘", width, i);
        }

    }

    protected static void WriteAt(string s, int x, int y)
    {
        try
        {
            Console.SetCursorPosition(x, y);
            Console.Write(s);
        }
        catch (ArgumentOutOfRangeException e)
        {
            Console.Clear();
            Console.WriteLine(e.Message);
        }
    }

Si funciona muy bien.

NOTA: La respuesta correcta debe ser de el 🙂

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *