示例#1
0
        static void Main(string[] args)
        {
            game_width  = 80;
            game_height = 40;
            Console.SetBufferSize(game_width, game_height + 1);
            Console.SetWindowSize(game_width, game_height + 1);

            game_over = false;
            wall      = new Wall();
            food      = new Food();
            rnd       = new Random();
            score     = 0;
            snake     = new Snake();
            snake.AddNewPoint(GetEmptyPosition());
            for (int i = 0; i < 10; i++)
            {
                wall.AddNewPoint(GetEmptyPosition());
            }
            food.SetNewPosition(GetEmptyPosition());


            drawer = new Thread(Draw);

            drawer.Start();

            while (game_over == false)
            {
                Console.CursorVisible = false;

                ConsoleKeyInfo pressedKey = Console.ReadKey();
                switch (pressedKey.Key)
                {
                case ConsoleKey.UpArrow:
                    snake.direction_x = 0;
                    snake.direction_y = -1;
                    break;

                case ConsoleKey.DownArrow:
                    snake.direction_x = 0;
                    snake.direction_y = +1;
                    break;

                case ConsoleKey.LeftArrow:
                    snake.direction_x = -1;
                    snake.direction_y = 0;
                    break;

                case ConsoleKey.RightArrow:
                    snake.direction_x = +1;
                    snake.direction_y = 0;
                    break;

                case ConsoleKey.F1:
                    Save();
                    break;

                case ConsoleKey.F2:
                    drawer.Abort();
                    Load();
                    drawer = new Thread(Draw);
                    drawer.Start();
                    break;

                default:
                    break;
                }
            }
        }
示例#2
0
        static void MainMenu()
        {
            Console.Clear();
            Console.SetWindowSize(66, 20);
            Console.SetBufferSize(66, 20);
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.SetCursorPosition(0, 0);
            Console.WriteLine(" _______ _______ _______ _______ _______ _______ _______ _______ \n|\\     /|\\     /|\\     /|\\     /|\\     /|\\     /|\\     /|\\     /|\n| +---+ | +---+ | +---+ | +---+ | +---+ | +---+ | +---+ | +---+ |\n| |H  | | |a  | | |c  | | |k  | | |L  | | |i  | | |f  | | |e  | |\n| +---+ | +---+ | +---+ | +---+ | +---+ | +---+ | +---+ | +---+ |\n|/_____\\|/_____\\|/_____\\|/_____\\|/_____\\|/_____\\|/_____\\|/_____\\|");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.SetCursorPosition(15, 7);
            Console.Write("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
            Console.SetCursorPosition(15, 8);
            Console.Write("\u2551            HackLife             \u2551");
            Console.SetCursorPosition(15, 9);
            Console.Write("\u2551                                 \u2551");
            Console.SetCursorPosition(15, 10);
            Console.Write("\u2551                                 \u2551");
            Console.SetCursorPosition(15, 11);
            Console.Write("\u2551   Play                          \u2551");
            Console.SetCursorPosition(15, 12);
            Console.Write("\u2551                                 \u2551");
            Console.SetCursorPosition(15, 13);
            Console.Write("\u2551   Settings                      \u2551");
            Console.SetCursorPosition(15, 14);
            Console.Write("\u2551                                 \u2551");
            Console.SetCursorPosition(15, 15);
            Console.Write("\u2551   Exit                          \u2551");
            Console.SetCursorPosition(15, 16);
            Console.Write("\u2551                                 \u2551");
            Console.SetCursorPosition(15, 17);
            Console.Write("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
            int ci = 0;

            for (; ;)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                for (int i = 0; i < 6; i++)
                {
                    Console.SetCursorPosition(17, i + 11);
                    Console.Write(" ");
                }
                Console.SetCursorPosition(17, ci * 2 + 11);
                Console.Write("\u00BB");
                ConsoleKey k = Console.ReadKey(true).Key;
                if (k == ConsoleKey.DownArrow)
                {
                    ci += 1;
                    if (ci == 3)
                    {
                        ci = 0;
                    }
                }
                else if (k == ConsoleKey.UpArrow)
                {
                    ci -= 1;
                    if (ci == -1)
                    {
                        ci = 2;
                    }
                }
                else if (k == ConsoleKey.Enter)
                {
                    if (ci == 0)
                    {
                        SelectWorld();
                        return;
                    }
                    else if (ci == 1)
                    {
                        return;
                    }
                    else if (ci == 2)
                    {
                        Console.Clear();
                        Environment.Exit(0);
                    }
                }
            }
        }
示例#3
0
        static async Task Main()
        {
            Console.SetWindowSize(ScreenWidth, ScreenHeight);
            Console.SetBufferSize(ScreenWidth, ScreenHeight);
            Console.CursorVisible = false;

            InitMap();

            var screen = new char[ScreenWidth * ScreenHeight];

            DateTime dateTimeFrom = DateTime.Now;

            while (true)
            {
                //elapsed time
                var    dateTimeTo  = DateTime.Now;
                double elapsedTime = (dateTimeTo - dateTimeFrom).TotalSeconds;
                dateTimeFrom = dateTimeTo;

                if (Console.KeyAvailable)
                {
                    InitMap();

                    ConsoleKey consoleKey = Console.ReadKey(true).Key;

                    switch (consoleKey)
                    {
                    case ConsoleKey.A:
                        _playerA += elapsedTime * 2;
                        break;

                    case ConsoleKey.D:
                        _playerA -= elapsedTime * 2;
                        break;

                    case ConsoleKey.W:
                    {
                        _playerX += Math.Sin(_playerA) * 5 * elapsedTime;
                        _playerY += Math.Cos(_playerA) * 5 * elapsedTime;

                        if (Map[(int)_playerY * MapWidth + (int)_playerX] == '#')
                        {
                            _playerX -= Math.Sin(_playerA) * 5 * elapsedTime;
                            _playerY -= Math.Cos(_playerA) * 5 * elapsedTime;
                        }

                        break;
                    }

                    case ConsoleKey.S:
                    {
                        _playerX -= Math.Sin(_playerA) * 5 * elapsedTime;
                        _playerY -= Math.Cos(_playerA) * 5 * elapsedTime;

                        if (Map[(int)_playerY * MapWidth + (int)_playerX] == '#')
                        {
                            _playerX += Math.Sin(_playerA) * 5 * elapsedTime;
                            _playerY += Math.Cos(_playerA) * 5 * elapsedTime;
                        }

                        break;
                    }
                    }

                    if (consoleKey == ConsoleKey.Escape)
                    {
                        break;
                    }
                }

                //Ray Casting
                var rayCastingTasks = new List <Task <Dictionary <int, char> > >();
                for (int x = 0; x < ScreenWidth; x++)
                {
                    var x1 = x;
                    rayCastingTasks.Add(Task.Run(() => CastRay(x1)));
                }
                foreach (Dictionary <int, char> dictionary in await Task.WhenAll(rayCastingTasks))
                {
                    foreach (var key in dictionary.Keys)
                    {
                        screen[key] = dictionary[key];
                    }
                }

                //Stats
                char[] stats = $"X: {_playerX}, Y: {_playerY}, A: {_playerA}, FPS: {(int)(1 / elapsedTime)}"
                               .ToCharArray();
                stats.CopyTo(screen, 0);

                //Map
                for (int x = 0; x < MapWidth; x++)
                {
                    for (int y = 0; y < MapHeight; y++)
                    {
                        screen[(y + 1) * ScreenWidth + x] = Map[y * MapWidth + x];
                    }
                }

                screen[(int)(_playerY + 1) * ScreenWidth + (int)_playerX] = 'P';

                Console.SetCursorPosition(0, 0);
                Console.Write(screen, 0, ScreenWidth * ScreenHeight);
            }
        }
示例#4
0
        static void SelectWorld()
        {
            Console.Clear();
            string[] sf = MapUtil.GetSaves();
            Console.SetWindowSize(66, sf.Length + 7);
            Console.SetBufferSize(66, sf.Length + 7);
            Console.SetCursorPosition(15, 1);
            Console.Write("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
            Console.SetCursorPosition(15, 2);
            Console.Write("\u2551           Select world          \u2551");
            Console.SetCursorPosition(15, 3);
            Console.Write("\u2551                                 \u2551");
            for (int i = 0; i < sf.Length; i++)
            {
                Console.SetCursorPosition(15, 4 + i);
                Console.Write("\u2551                                 \u2551");
                Console.SetCursorPosition(19, 4 + i);
                if (sf[i] != "new")
                {
                    Console.Write(sf[i]);
                }
                else
                {
                    Console.Write("Create new world");
                }
            }
            Console.SetCursorPosition(15, 4 + sf.Length);
            Console.Write("\u2551                                 \u2551");
            Console.SetCursorPosition(15, 5 + sf.Length);
            Console.Write("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
            int ci = 0;

            for (; ;)
            {
                for (int i = 0; i < sf.Length; i++)
                {
                    Console.SetCursorPosition(17, 4 + i);
                    Console.Write(" ");
                }
                Console.SetCursorPosition(17, 4 + ci);
                Console.Write("\u00BB");;
                ConsoleKey ck = Console.ReadKey(true).Key;
                if (ck == ConsoleKey.DownArrow)
                {
                    ci++;
                    if (ci == sf.Length)
                    {
                        ci = 0;
                    }
                }
                else if (ck == ConsoleKey.UpArrow)
                {
                    ci--;
                    if (ci == -1)
                    {
                        ci = sf.Length - 1;
                    }
                }
                else if (ck == ConsoleKey.Enter)
                {
                    if (sf[ci] != "new")
                    {
                        Game.Start(sf[ci]);
                    }
                    else
                    {
                        NewWorld();
                    }
                    return;
                }
                else if (ck == ConsoleKey.Escape)
                {
                    return;
                }
            }
        }