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; } } }
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); } } } }
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); } }
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; } } }