static void Start() { // Initialisera spelet const int frameRate = 10; int updateCounter = 0; GameWorld world = new GameWorld(50, 20); ConsoleRenderer renderer = new ConsoleRenderer(world); Player player = new Player(world, Direction.Right); world.CreateFood(); // Huvudloopen bool running = true; while (running) { if (world.foodTimer == 0) { Console.Clear(); string endString1 = "Game over"; string endString2 = $"Your score was {world.Score}"; Console.SetCursorPosition((world.Width / 2) - (endString1.Length / 2), world.Height / 3); Console.Write(endString1); Console.SetCursorPosition((world.Width / 2) - (endString2.Length / 2), world.Height / 2); Console.Write(endString2); break; } // Kom ihåg vad klockan var i början DateTime before = DateTime.Now; // Hantera knapptryckningar från användaren ConsoleKey key = ReadKeyIfExists(); switch (key) { case ConsoleKey.Q: running = false; break; case ConsoleKey.UpArrow: player.Direction = Direction.Up; break; case ConsoleKey.DownArrow: player.Direction = Direction.Down; break; case ConsoleKey.LeftArrow: player.Direction = Direction.Left; break; case ConsoleKey.RightArrow: player.Direction = Direction.Right; break; } // Uppdatera världen och rendera om renderer.RenderBlank(); world.Update(); renderer.Render(); // Vi kollar om det har gått en sekund. if (updateCounter == frameRate - 1) { // Om det har det, uppdatera dessa timers så att de uppdateras varje sekund. world.foodTimer--; world.randomCounter++; updateCounter = 0; } // Mät hur lång tid det tog double frameTime = Math.Ceiling((1000.0 / frameRate) - (DateTime.Now - before).TotalMilliseconds); if (frameTime > 0) { // Vänta rätt antal millisekunder innan loopens nästa varv Thread.Sleep((int)frameTime); } updateCounter++; } }
static void Loop() { // Initialisera spelet const int frameRate = 15; List <GameObject> items = new List <GameObject>(); List <Tail> svans = new List <Tail>(); Player play = new Player(Direction.right, 'O', svans, 7, 4); Food fodd = new Food('©', 6, 8); GameWorld world = new GameWorld(0, items, play, fodd); ConsoleRenderer renderer = new ConsoleRenderer(world, 120, 60, play, fodd); // TODO Skapa spelare och andra objekt etc. genom korrekta anrop till vår GameWorld-instans // ... items.Add(play); items.Add(fodd); // Huvudloopen bool running = true; while (running) { // Kom ihåg vad klockan var i början DateTime before = DateTime.Now; // Hantera knapptryckningar från användaren // Använder piltangenterna för förflyttning. Förflyttar spelaren med hjälp av enum. Går ej flytta spelaren om spelaren trycker motsatt håll. Q körs gameover metod. ConsoleKey key = ReadKeyIfExists(); switch (key) { case ConsoleKey.Q: running = world.GameOver(false); break; case ConsoleKey.UpArrow: if (play._direction == Direction.down) { break; } else { play._direction = Direction.up; break; } case ConsoleKey.DownArrow: if (play._direction == Direction.up) { break; } else { play._direction = Direction.down; break; } case ConsoleKey.LeftArrow: if (play._direction == Direction.right) { break; } else { play._direction = Direction.left; break; } case ConsoleKey.RightArrow: if (play._direction == Direction.left) { break; } else { play._direction = Direction.right; break; } // TODO Lägg till logik för andra knapptryckningar // ... } // Uppdatera världen och rendera om renderer.RenderBlank(); world.Update(); renderer.Render(); running = world.GameOver(running); // Mät hur lång tid det tog double frameTime = Math.Ceiling((1000.0 / frameRate) - (DateTime.Now - before).TotalMilliseconds); if (frameTime > 0) { // Vänta rätt antal millisekunder innan loopens nästa varv Thread.Sleep((int)frameTime); } } }