From fd552b142912e391adebb5925a8dfd5b6ce7a6e8 Mon Sep 17 00:00:00 2001 From: morpha Date: Mon, 27 Mar 2023 08:35:35 +0200 Subject: [PATCH] Fixed PlayArea tracking and rendering Fixed logical errors (particularly in variable/iterator naming) Added "frame timing" for a more consistent feel --- ConsoleSnake/Program.cs | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/ConsoleSnake/Program.cs b/ConsoleSnake/Program.cs index d63397a..5997de3 100644 --- a/ConsoleSnake/Program.cs +++ b/ConsoleSnake/Program.cs @@ -34,7 +34,7 @@ namespace ConsoleSnake public Int32 Y { get; set; } } - private static PlayArea _playArea; + private static PlayArea _playArea = new PlayArea(1, 4, Console.WindowWidth - 2, Console.WindowHeight - 2); private static bool _running = true; private static bool _growing = false; private static Direction _direction = Direction.Up; @@ -44,8 +44,7 @@ namespace ConsoleSnake static void Main(string[] args) { Console.ReadKey(); - Console.WindowWidth -= Console.WindowWidth % 2; - Console.WindowHeight -= Console.WindowHeight % 2; + Console.SetBufferSize(Console.WindowWidth, Console.WindowHeight); DrawPlayArea(); @@ -57,9 +56,13 @@ namespace ConsoleSnake while (_running) { + DateTime beginFrame = DateTime.Now; HandleInput(); AllSnakeThings(); - Thread.Sleep(50); + TimeSpan frameTime = DateTime.Now.Subtract(beginFrame); + + if(50 - frameTime.Milliseconds > 0) + Thread.Sleep(50 - frameTime.Milliseconds); } } @@ -70,14 +73,19 @@ namespace ConsoleSnake { Console.CursorTop = top; Console.CursorLeft = 0; - if (top == 0 || top == Console.WindowHeight - 1) - for (Int32 row = 0; row < Console.WindowWidth; ++row) + if (top < _playArea.TopEdge || top > _playArea.BottomEdge) + for (Int32 left = 0; left < Console.WindowWidth; ++left) Console.Write(' '); else { - Console.Write(' '); + for (Int32 left = 0; left < _playArea.LeftEdge; ++left) + Console.Write(' '); + //Console.CursorLeft = _playArea.RightEdge+1; + for (Int32 left = Console.CursorLeft = _playArea.RightEdge + 1; left < Console.WindowWidth; ++left) + Console.Write(' '); + /*Console.Write(' '); Console.CursorLeft = Console.WindowWidth-1; - Console.Write(' '); + Console.Write(' ');*/ } } /*for (Int32 top = _playArea.Top; top < _playArea.Height; ++top) @@ -93,7 +101,7 @@ namespace ConsoleSnake } private static void Reset() { - _playArea = new PlayArea(1, 1, Console.WindowWidth - 2, Console.WindowHeight - 2); + _playArea = new PlayArea(1, 4, Console.WindowWidth - 2, Console.WindowHeight - 2); _running = true; _growing = false; _direction = Direction.Up; @@ -111,7 +119,7 @@ namespace ConsoleSnake Position2D oldCursorPos = new Position2D(Console.CursorLeft, Console.CursorTop); do { - _food = new Position2D(rng.Next(3, Console.WindowWidth - 10), rng.Next(3, Console.WindowHeight - 3)); + _food = new Position2D(rng.Next(_playArea.LeftEdge+1, _playArea.RightEdge), rng.Next(_playArea.TopEdge, _playArea.BottomEdge)); } while (_snakeSegments.Contains(_food)); MoveCursor(_food); Console.ForegroundColor = ConsoleColor.Red;