NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Matrix

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:27.10.2012 12:18

Opravdu pěkné :) Opravil jsem ti to pípání, stačí do poslední větvě podmínky pro znak vyndat z výběru znak #183:

/* vrátíme znak (nahodne cislo) */
int i = rnd.Next(32, 255);
if (i == 183)
    i = 200;
return (char)i;

Tak to kdyžtak pak uprav v kódu, nechci ti do toho hrabat :)

Editováno 27.10.2012 12:20
Odpovědět
27.10.2012 12:18
New kid back on the block with a R.I.P
Avatar
Eldest
Tvůrce
Avatar
Eldest:27.10.2012 12:40

Díky, nemohl jsem na to přijít.

 
Odpovědět
27.10.2012 12:40
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Eldest
matesax:27.10.2012 13:21

Mírně bych to upravil:

using System;

namespace Matrix
{
    class Program
    {
        private static Random random = new Random();
        private static bool time = false;

        static void Main(string[] args)
        {
            Console.Title = "Matrix";
            Console.CursorVisible = false;
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            Console.WindowLeft = Console.WindowTop = 0;
            Console.WindowHeight = Console.BufferHeight = Console.LargestWindowHeight;
            Console.WindowWidth = Console.BufferWidth = Console.LargestWindowWidth;

            int width, height;

            int[] a, b;

            Initialize(out width, out height, out a, out b);

            while (true)
            {
                MatrixSteep(width, height, a, b);

                System.Threading.Thread.Sleep(10);

                if (Console.KeyAvailable && Console.ReadKey().Key == ConsoleKey.F5)
                    Initialize(out width, out height, out a, out b);
            }
        }

        private static void Initialize(out int width, out int height, out int[] a, out int[] b)
        {
            int height1, height2;

            height = Console.WindowHeight;

            height1 = height / 2;

            height2 = height1 / 2;

            width = Console.WindowWidth - 1;

            a = new int[width];

            b = new int[width];

            Console.Clear();

            for (int x = 0; x < width; x++)
            {
                a[x] = random.Next(height);

                b[x] = random.Next(height2 * (x % 11 != 10 ? 2 : 1), height1 * (x % 11 != 10 ? 2 : 1));
            }
        }

        private static void MatrixSteep(int width, int height, int[] a, int[] b)
        {
            time = !time;

            for (int x = 0; x < width; x++)
            {
                if (x % 11 == 10)
                {
                    if (!time)
                        continue;

                    Console.ForegroundColor = ConsoleColor.White;
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.DarkGreen;

                    Console.SetCursorPosition(x, InBoxY(a[x] - 2 - (b[x] / 40 * 2), height));

                    Console.Write(RandomChar());

                    Console.ForegroundColor = ConsoleColor.Green;
                }

                Console.SetCursorPosition(x, a[x]);

                Console.Write(RandomChar());

                a[x] = InBoxY(a[x] + 1, height);

                Console.SetCursorPosition(x, InBoxY(a[x] - b[x], height));

                Console.Write(' ');
            }
        }

        private static int InBoxY(int n, int height)
        {
            n = n % height;

            return n < 0 ? n + height : n;
        }

        private static char RandomChar()
        {
            switch (random.Next(5))
            {

                case 0:

                    return (char)('0' + random.Next(10));

                case 2:

                    return (char)('a' + random.Next(27));

                case 4:

                    return (char)('A' + random.Next(27));

                default:

                    int i = random.Next(32, 255);

                    if (i == 183)
                        i = 200;

                    return (char)i;
            }

        }
    }
}
 
Odpovědět
27.10.2012 13:21
Avatar
Eldest
Tvůrce
Avatar
Odpovídá na matesax
Eldest:27.10.2012 13:27

Ok, díky. :)

 
Odpovědět
27.10.2012 13:27
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Eldest
Kit:27.10.2012 13:36
/* height2 = height1 (děleno) 2 */
height2 = height1 / 2;

Takhle se komentáře určitě nedělají. V komentáři by mělo být spíš uvedeno proč dělíš dvěma. Například že v této výšce přepneš barvu nebo tak nějak. Už ze zápisu je patrné, že se dělí dvěma, tato informace v komentáři být nemusí.

Zkus si představit, že by sis to rozmyslel a chtěl dělit třemi. Musel bys to upravovat na dvou místech a to je častým zdrojem chyb.

Odpovědět
27.10.2012 13:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Eldest
Tvůrce
Avatar
Odpovídá na Kit
Eldest:27.10.2012 13:42

Ok, díky příště se určitě budu snažit toto napravit. :) Důvod proč jsem psal ty vysvětlivky jako pro první třídu základní školy, byl ten, protože jsem to psal pro spolužáky SŠ, kteří C# skoro vůbec neumí (i když z něho asi budou maturovat :D).

 
Odpovědět
27.10.2012 13:42
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Eldest
David Hartinger:27.10.2012 13:46

Mě se tam moc nezamlouvají ty modifikátory out, je jich tam nějak moc. Jak vlastně děláš ty mezery? Je to fakt dobrý.

Odpovědět
27.10.2012 13:46
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:27.10.2012 13:55

Potřeba modifikátorů out vznikla při vytvoření nevhodné konstrukce cyklu while (true). Jednoduchou úpravou je možné se tohoto nešvaru zbavit.

Odpovědět
27.10.2012 13:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Eldest
Tvůrce
Avatar
Odpovídá na David Hartinger
Eldest:27.10.2012 13:57

Ok, říkám dělal jsem to i trochu pro spolužáky, tak jsem použil out, protože to znají ze školy. Jinak hodně jsem používal i Google :D Jinak je to řádek 156. (ty mezery)

/* vypsání mezery */
Console.Write(' ');
 
Odpovědět
27.10.2012 13:57
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Eldest
Kit:27.10.2012 14:01

Měli jsme na mysli out mezi formálními parametry metody Initialize(). Zbav se jich.

Odpovědět
27.10.2012 14:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 26.