Exemplo n.º 1
0
        void Draw()
        {
            ConsoleScreen.Clear();
            var pixelList = new List <IPixel>();

            // Mario
            pixelList.Add(new CharSprite(ASCII.Mario, xc + 150, yc + 200, 0, ConsoleColor.Green)
            {
                ShowLabel = show_label
            });
            pixelList.Last().Draw(painter);

            // STARS
            var asteriks = new Sprite(null, angle, ConsoleColor.Yellow)
            {
                ShowLabel = show_label
            };

            for (var i = 0; i < asteriks_count; i++)
            {
                asteriks.Add(new CharPixel('*', xc + random_numbers[2 * i], yc + random_numbers[2 * i + 1]));
            }
            if (asteriks_count != 0)
            {
                asteriks.Draw(painter);
                pixelList.Add(asteriks);
            }

            // center of the universe
            pixelList.Add(new CharPixel('@', xc, yc, ConsoleColor.Yellow));
            pixelList.Last().Draw(pixel_painter);

            // andy kras
            pixelList.Add(new CharSprite(ASCII.Andy, xc + 152, yc + 23, 0, ConsoleColor.DarkRed)
            {
                ShowLabel = show_label
            });
            pixelList.Last().Draw(painter);
            pixelList.Add(new CharSprite(ASCII.Kras, xc + 202, yc + 3, 0, ConsoleColor.DarkRed)
            {
                ShowLabel = show_label
            });
            pixelList.Last().Draw(painter);

            // C# is CooL
            pixelList.Add(new CharSprite(ASCII.Sharp, xc, yc - 33, 0, ConsoleColor.DarkBlue)
            {
                ShowLabel = show_label
            });
            pixelList.Last().Draw(painter);

            // Skull
            var ang = Math.PI / 512;

            for (var i = 0; i < 10; i++)
            {
                pixelList.Add(new CharSprite(ASCII.Skull, xc + 200 * Math.Cos((skull_index + 20 * random_numbers[2 * i]) * ang), yc + 200 * Math.Sin((skull_index + 20 * random_numbers[2 * i + 1]) * 2 * ang), 0, ConsoleColor.DarkGray)
                {
                    ShowLabel = show_label
                });
                pixelList.Last().Draw(painter);
            }

            if (show_intel)
            {
                // INTEL LOGO
                var intel = new CharSprite(ASCII.IntelLogo, xc - 35, yc + 15, angle, ConsoleColor.DarkBlue)
                {
                    ShowLabel = false
                };
                intel.Draw(painter);
                pixelList.Add(intel);
            }
            else
            {
                // CIRCLE
                if (show_circle)
                {
                    var alpha = Math.PI * 2.0 / count;
                    for (var i = 0; i < count; i++)
                    {
                        var x = xc + R * Math.Cos(i * alpha);
                        var y = yc + R * Math.Sin(i * alpha);
                        pixelList.Add(new CharPixel('█', x, y, (ConsoleColor)rnd.Next(1, 15)));
                        pixelList.Last().Draw(pixel_painter);
                    }

                    var tet = new CharSprite(new [] {
                        " █ ",
                        "███",
                        "   "
                    }, xc - 3, yc + 3, angle)
                    {
                        ShowLabel = show_label
                    };
                    tet.Draw(painter);
                    pixelList.Add(tet);
                }

                if (show_dollar)
                {
                    var dollars = new CharSprite(ASCII.Dollar, xc - 135, yc + 15, angle, ConsoleColor.DarkBlue)
                    {
                        ShowLabel = show_label
                    };
                    dollars.Draw(painter);
                    pixelList.Add(dollars);
                }

                // ship
                var ship = new Sprite(new List <IPixel> {
                    new CharPixel('█', offsetX + 4, offsetY - 0, ConsoleColor.Red),
                    new CharPixel('█', offsetX + 3, offsetY - 1, ConsoleColor.Red),
                    new CharPixel('█', offsetX + 2, offsetY - 2, ConsoleColor.Red),
                    new CharPixel('█', offsetX + 1, offsetY - 3, ConsoleColor.Red),
                    new CharPixel('█', offsetX + 0, offsetY - 4, ConsoleColor.Green),
                    new CharPixel('█', offsetX + 1, offsetY - 4, ConsoleColor.Green),
                    new CharPixel('█', offsetX + 2, offsetY - 4, ConsoleColor.Green),
                    new CharPixel('█', offsetX + 3, offsetY - 4, ConsoleColor.Green),
                    new CharPixel('█', offsetX + 4, offsetY - 4, ConsoleColor.Green),
                    new CharPixel('█', offsetX + 5, offsetY - 4, ConsoleColor.Green),
                    new CharPixel('█', offsetX + 6, offsetY - 4, ConsoleColor.Green),
                    new CharPixel('█', offsetX + 7, offsetY - 4, ConsoleColor.Green),
                    new CharPixel('█', offsetX + 5, offsetY - 1, ConsoleColor.Blue),
                    new CharPixel('█', offsetX + 6, offsetY - 2, ConsoleColor.Blue),
                    new CharPixel('█', offsetX + 7, offsetY - 3, ConsoleColor.Blue),
                    new CharPixel('█', offsetX + 8, offsetY - 4, ConsoleColor.Blue),
                }, angle_ship, ConsoleColor.Yellow)
                {
                    ShowLabel = show_label
                };

                // ArchUser
                var up = new CharSprite(ASCII.ArchUserUp, -10, 0, angle_ship, ship_color)
                {
                    ShowLabel = show_label
                };
                var down = new CharSprite(ASCII.ArchUserDown, -10, 0, angle_ship, ship_color - 8)
                {
                    ShowLabel = show_label
                };

                pixelList.Add(new Sprite(new List <IPixel> {
                    up, down, ship
                }, angle_ship)
                {
                    ShowLabel = false
                });
                pixelList.Last().Draw(painter);
            }

            var counter = new PixelCounter();

            pixelList.ForEach(p => p.Accept(counter));

            Console.ForegroundColor = ConsoleColor.Red;
            if (show_stat)
            {
                ConsoleScreen.Print(string.Format("Zoom: {0:F2} angle: {1} stars: {2} C=[{3:F2}:{4:F2}]", ConsoleScreen.Zoom, (int)(angle / Math.PI * 180), asteriks_count, xc, yc), 3);
                ConsoleScreen.Print(string.Format("d1={0:F2} d2={1:F2} t1={2} t2={3} t3={4}", d1, d2, timer1, timer2, timer3), 2);
                ConsoleScreen.Print(string.Format("Total pixels: {0}, Total sprites: {1}, User Input: {2}", counter.TotalCharPixels, counter.TotalCharSprites + counter.TotalSprites, gameEvent), 1);
            }
            if (show_help)
            {
                var text = new [] {
                    "H - Toggle HELP",
                    "E,S,D,F - Ship Movement",
                    "1-8 - Change Ship Color",
                    "-----------------------", " ", " ",
                    "L - Show/Hide sprite Labels",
                    "Num* (KP_Multiply) - Add 1 Star (Alt+* - Add 10 Stars)",
                    "Num +/-, Num_Enter (KP_Enter) - Zoom, Reset Zoom",
                    "Num/ (KP_Device) - Reset all to Defaults",
                    "Alt + any_key - Speed Up",
                    "C - Show/Hide Circle",
                    "Insert/Delete - Add/Remove points to Circle",
                    "Shift+4 ($) - Show/Hide Dollar",
                    "W,R - miniShip Strafe",
                    "Num8,Num5,Num4,Num6 - Scene Movement",
                    "Num7,Num9 - Scene Rotation",
                    "o,p,[,] - Timers",
                    "Enter - Change Painters",
                    "I - Show/Hide Intel Logo",
                    "F1 - Toggle Stat",
                };
                ConsoleScreen.Print(text, true);
            }
            if (show_task)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                var task = "Find the Center (@) of the Universe";
                var len  = Console.WindowWidth / 2 - task.Length / 2;
                task = new string(' ', len > 0 ? len : 0) + task;
                ConsoleScreen.Print(task, Console.WindowHeight / 2);
            }
        }