Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – Matrix

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
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 :)

Editované
Odpovedať
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.

Avatar
matesax
Tvůrce
Avatar
Odpovedá 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;
            }

        }
    }
}
Avatar
Eldest
Tvůrce
Avatar
Odpovedá na matesax
Eldest:27.10.2012 13:27

Ok, díky. :)

Avatar
Kit
Tvůrce
Avatar
Odpovedá 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.

Odpovedať
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Eldest
Tvůrce
Avatar
Odpovedá 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).

Avatar
David Hartinger
Vlastník
Avatar
Odpovedá 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ý.

Odpovedať
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovedá 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.

Odpovedať
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Eldest
Tvůrce
Avatar
Odpovedá 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(' ');
Avatar
Kit
Tvůrce
Avatar
Odpovedá na Eldest
Kit:27.10.2012 14:01

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

Odpovedať
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 26.