IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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
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é 27.10.2012 12:20
Odpovedať
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.

 
Odpovedať
27.10.2012 12:40
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;
            }

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

Ok, díky. :)

 
Odpovedať
27.10.2012 13:27
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ť
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
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).

 
Odpovedať
27.10.2012 13:42
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ť
27.10.2012 13:46
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ť
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
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(' ');
 
Odpovedať
27.10.2012 13:57
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ť
27.10.2012 14:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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.

Zatiaľ nikto nevložil komentár - buď prvý!