Problem z "rysowaniem" używając readkey();

Problem z "rysowaniem" używając readkey();
M1
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 11 lat
  • Postów:34
0

Witam,Mam taki problem.Napisałem sobie taki oto program w którym rysuję przy pomocy Readkey

Kopiuj
 using System;

class Program
{
    static void Main()
    {
        int a=0, b=0;
        while (true)
        {

            ConsoleKeyInfo o = Console.ReadKey();
            if (o.Key == ConsoleKey.LeftArrow)
            {
                b = b - 1;
                Console.SetCursorPosition(b, a);
                Console.Write("█");

            }
            if (o.Key == ConsoleKey.RightArrow)
            {
                b = b + 1;
                Console.SetCursorPosition(b, a);
                Console.Write("█");
            }
            if (o.Key == ConsoleKey.DownArrow)
            {
                a = a + 1;
                Console.SetCursorPosition(b, a);
                Console.Write("█");
            }
            if (o.Key == ConsoleKey.UpArrow)
            {
                a = a - 1;
                Console.SetCursorPosition(b, a);
                Console.Write("█");
            }
        }
    }
}

Problem polega na tym,iż kiedy przejadę ponownie po narysowanej linii ( w większości przypadków spróbujcie ) to ona znika.Nie wiem jak temy zaradzić
Pozdrawiam

Wronq
  • Rejestracja:około 17 lat
  • Ostatnio:ponad 10 lat
0
Kopiuj
using System;

class Program
{
    static void Main()
    {
        int a = 0, b = 0;
        Console.CursorVisible = false;
        while (true)
        {

            ConsoleKeyInfo o = Console.ReadKey();
            if (o.Key == ConsoleKey.LeftArrow)
            {
                b -= b > 0 ? 1 : 0;
            }
            if (o.Key == ConsoleKey.RightArrow)
            {
                b += b < 79 ? 1 : 0;
            }
            if (o.Key == ConsoleKey.DownArrow)
            {
                a = a + 1;
            }
            if (o.Key == ConsoleKey.UpArrow)
            {
                a -= a > 0 ? 1 : 0;
            }

            Console.SetCursorPosition(b, a);
            Console.Write("█");
            Console.SetCursorPosition(0, 0);
        }
    }
}

Sądzę, że to spowodowane jest ReadKeyem. Ten kod pomaga, aczkolwiek teraz na pozycji 0,0 nic nie da się narysować.


Some people see things as they are, and say "why?". I dream things that never were and say "why not?".
Azarien
spowodowane jest ECHEM readkeya, który próbuje „rysować” dodatkowo znak naciskanego klawisza, ale strzałki rysują tylko znak pusty.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 16 godzin
0
  1. brak kontroli zakresów, wyjechanie poza ekran wywala program
  2. ConsoleKeyInfo o = Console.ReadKey(true);
  3. najlepiej wyczyść ekran przy końcu.
M1
A można wiedzieć trochę dokładniej dlaczego tak działa Console.ReadKey(true) i kiedy jeszcze można go używać? Podr.a
Wronq
Ten check czy jest poza ekranem dodałem w mojej propozycji.
M1
chodzi mi o to co robi mi ReadKey(true);
M1
gdybym dobrze znał angielski nie pytałbym na polskim forum ( potrafie jeszcze wpisac w google console.readkey(true) msdn ....
ST
Bez znajomości angielskiego to sobie w programowaniu nie poradzisz. Słownik w łapę i tłumaczysz, jakoś dasz radę, a wiedza tak zdobyta zaprocentuje.
M1
Hmmmm.....Prawda

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.