Source Guy

Nie jesteś zalogowany na forum.

Ogłoszenie

#1 2015-08-29 10:45:16

PolskiSwir345
Administrator
Dołączył: 2015-08-22
Liczba postów: 9
Windows XPFirefox 40.0

[C#] Usuwanie "migania" w konsoli

Często problem z grami w konsoli jest taki, że po każdym czyszczeniu ekranu konsola "miga", jeśli ekran czyści się w krótkim odstępie czasowym, to bardzo rzuca się to w oczy.

Istnieje jednak bardzo prosty sposób na "czyszczenie" ekranu bez migania.

Na początek porównanie, po lewej standardowe Console.Clear(), po prawej moja funkcja.

KkgTWbI.gif

Tak wygląda kod testowego programu:

using System;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static char[,] map = new char[20, 20];
        static Random rand = new Random((int)DateTime.Now.Ticks);
        static int r;
        static void Main(string[] args)
        {
            for (int i = 0; i <= 19; i++)
            {
                for (int j = 0; j <= 19; j++)
                {
                    r = rand.Next(1, 4);
                    if (r == 1) map[i, j] = 'A';
                    else if (r == 2) map[i, j] = 'B';
                    else if (r == 3) map[i, j] = 'C';
                }
            }
            string h = Console.ReadLine();
            if (h == "1") { Console.Clear(); Console.Title = "Console.Clear();"; a1(); }
            else if (h == "2") { Console.Clear(); Console.Title = "Moja funkcja"; a2(); }
        }

        static void a1()
        {
            Console.Clear();
            for (int i = 0; i <= 19; i++)
            {
                for (int j = 0; j <= 19; j++)
                {
                    if (map[i, j] == 'A') Console.ForegroundColor = ConsoleColor.Yellow;
                    else if (map[i, j] == 'B') Console.ForegroundColor = ConsoleColor.Green;
                    else if (map[i, j] == 'C') Console.ForegroundColor = ConsoleColor.White;
                    Console.Write(map[i, j]);
                }
                Console.WriteLine();
            } 
            Thread.Sleep(10);
            a1();
        }

        static void a2()
        {
            Console.SetCursorPosition(0, 0);
            for (int i = 0; i <= 19; i++)
            {
                for (int j = 0; j <= 19; j++)
                {
                    if (map[i, j] == 'A') Console.ForegroundColor = ConsoleColor.Yellow;
                    else if (map[i, j] == 'B') Console.ForegroundColor = ConsoleColor.Green;
                    else if (map[i, j] == 'C') Console.ForegroundColor = ConsoleColor.White;
                    Console.Write(map[i, j]);
                }
                Console.WriteLine();
            } 
            Thread.Sleep(10);
            a2();
        }
    }
}

Co sprawiło, że w mojej funkcji nic nie miga? Właśnie to:

Console.SetCursorPosition(0, 0);

Zamiast czyścić ekran, po prostu ustawiłem kursor na pozycji 0, 0 i nadpisałem tekst.


"Są dwie drogi tworzenia oprogramowania. Jedną jest tworzenie tak prostego kodu, że, w sposób oczywisty, nie ma w nim żadnych braków. Drugą jest tworzenie tak skomplikowanego kodu, że nie ma w nim żadnych oczywistych braków." - C.A.R. Hoare

Offline

#2 2015-08-29 17:03:05

MSSC
Użytkownik
Dołączył: 2015-08-28
Liczba postów: 7
AndroidSafari 534.30

Odp: [C#] Usuwanie "migania" w konsoli

Te, szprytne to! [dblpt])
Co to jest za język programmingu? C?

Offline

#3 2015-08-29 17:45:51

PolskiSwir345
Administrator
Dołączył: 2015-08-22
Liczba postów: 9
Windows XPFirefox 40.0

Odp: [C#] Usuwanie "migania" w konsoli

Przecież w temacie, zgodnie z regulaminem, w kwadratowych nawiasach jest nazwa języka...


"Są dwie drogi tworzenia oprogramowania. Jedną jest tworzenie tak prostego kodu, że, w sposób oczywisty, nie ma w nim żadnych braków. Drugą jest tworzenie tak skomplikowanego kodu, że nie ma w nim żadnych oczywistych braków." - C.A.R. Hoare

Offline

#4 2015-08-29 20:33:57

MSSC
Użytkownik
Dołączył: 2015-08-28
Liczba postów: 7
AndroidSafari 534.30

Odp: [C#] Usuwanie "migania" w konsoli

Żem nie zwrócił uwagi xD. Podobny do cpp nieco.

Offline

#5 2015-08-31 19:30:04

TheFlashes
Administrator
Skąd: Polska
Dołączył: 2015-08-22
Liczba postów: 5
WindowsChrome 44.0.2403.157

Odp: [C#] Usuwanie "migania" w konsoli

Szprytne i bardzo funkcjonalne, we wszystkich moich gierach tego używam <3

Offline

#6 2015-09-07 18:35:20

qwert
Użytkownik
Dołączył: 2015-09-07
Liczba postów: 3
Windows 7Firefox 40.0

Odp: [C#] Usuwanie "migania" w konsoli

To jest akurat bananalne, ale dobrze o tym wspomnieć [dblpt]) A tak poza tym to siemka [dblpt])

Offline

Użytkowników czytających ten temat: 0, gości: 1
[Bot] ClaudeBot

Stopka

Forum oparte na FluxBB

Darmowe Forum