public void Run() { while(true) { _frameBuffer.Clear(); if (Console.KeyAvailable) { ConsoleKeyInfo ki = Console.ReadKey(intercept: true); switch (ki.Key) { case ConsoleKey.UpArrow: _snake.Course = Directions.Up; break; case ConsoleKey.DownArrow: _snake.Course = Directions.Down; break; case ConsoleKey.LeftArrow: _snake.Course = Directions.Left; break; case ConsoleKey.RightArrow: _snake.Course = Directions.Right; break; } } _snake.Update(); _snake.Draw(_frameBuffer); _frameBuffer.Render(); Thread.Sleep(50); } }
public Result Run(ref FrameBuffer fb) { Snake s = new Snake( (byte)(_random.Next() % FrameBuffer.WIDTH), (byte)(_random.Next() % FrameBuffer.HEIGHT), (Snake.Direction)(_random.Next() % 4) ); MakeFood(s, out byte foodX, out byte foodY); long gameTime = Environment.TickCount64; while (true) { fb.Clear(); if (!s.Update()) { s.Draw(ref fb); return(Result.Loss); } s.Draw(ref fb); if (Console.KeyAvailable) { ConsoleKeyInfo ki = Console.ReadKey(intercept: true); switch (ki.Key) { case ConsoleKey.UpArrow: s.Course = Snake.Direction.Up; break; case ConsoleKey.DownArrow: s.Course = Snake.Direction.Down; break; case ConsoleKey.LeftArrow: s.Course = Snake.Direction.Left; break; case ConsoleKey.RightArrow: s.Course = Snake.Direction.Right; break; } } if (s.HitTest(foodX, foodY)) { if (s.Extend()) { MakeFood(s, out foodX, out foodY); } else { return(Result.Win); } } fb.SetPixel(foodX, foodY, '*'); fb.Render(); gameTime += 100; long delay = gameTime - Environment.TickCount64; if (delay >= 0) { Thread.Sleep((int)delay); } else { gameTime = Environment.TickCount64; } } }