Бъг в конзолата на C#


0

 Колеги, искам да попитам за един досаден бъг в конзолата.

Как се оправяше следното: Правим си конзолна игра, човечето ни стига най-вдясно и ако натиснем отново надясно започва да се катери нагоре по конзолата?

 Ако му дам ограничение една стъпка преди десния край този бъг го няма. Обаче искам да стига до ръба :)

 ConsoleWidth и BufferWidth ми са равни, да не би там да е проблема?




Отговори



0
Добре ще е ако покажеш кода който мести човечето.

от avalkov (628 точки)


0

private static void ProcessKeys(ref ConsoleKeyInfo pressedKey)
        {
            if (Console.KeyAvailable)
            {
                pressedKey = Console.ReadKey(true);

                while (Console.KeyAvailable) Console.ReadKey(true);
                if (pressedKey.Key == ConsoleKey.LeftArrow)
                {
                    if (RenderShips.ownShip.Col > 0)
                    {
                        RenderShips.ownShip.Col--;
                    }
                }
                if (pressedKey.Key == ConsoleKey.RightArrow)
                {
                    if (RenderShips.ownShip.Col < Settings.FIELD_WIDTH - RenderShips.SHIP_LEN)
                    {
                        RenderShips.ownShip.Col++;
                    }
                }
            }
        }

Всъщност са космически кораби. SHIP_LEN е три, от толкова char-a се състои кораба.


от ivan.mihov1 (4988 точки)


0

Пробвал ли си да пуснеш играта в дебъг моде и да разбереш каде се получава бъг ?

Кода който постна изглежда наред, можеби Settings.FIELD_WIDTH има грешна стойност.


от avalkov (628 точки)


1

За съжаление и аз го имах същия проблем и се отказах - оставих го с една стъпка по-назад.

Това, което установих, е че след като напечата последния символ от космическия кораб, курсорът застава след последния символ, поради което се прехвърля в началото на нов ред и се създава илюзията, че се движи нагоре.

Мъчих се с варианта да наглася курсора така, че да е няколко места по-навътре, за да може като печата символите да не минава след тях и да не прескача последната позиция.

Не се получи при мен, но просто ти споделям аз какво открих, а ако ти успееш, може да го споделиш. ;)))

Успех!


от nasko717 (180 точки)


0

Има логика, с дебъгване нищо не открих. Обаче съм скрил курсора и съвсем забравих за него :D


от ivan.mihov1 (4988 точки)

0
Аз не съм навътре много с .NET, но доколкото разбирам ти ползваш standard output, а за да нямаш подобни проблеми трябва да пишеш директно в console screen buffer, за целта ползвай WriteConsoleOutput.

от avalkov (628 точки)