public static void Main() { ScoreManager scoreManager = new ScoreManager("scores.txt"); var musicPlayer = new MusicPlayer(); musicPlayer.Play(); var tetrisConsoleWriter = new TetrisConsoleWriter(TetrisRows, TetrisCols); var random = new Random(); State.CurrentFigure = TetrisFigures[random.Next(0, TetrisFigures.Count)]; while (true) { State.Frame++; State.UpdateLevel(scoreManager.Score); // Read user input if (Console.KeyAvailable) { var key = Console.ReadKey(); if (key.Key == ConsoleKey.Escape) { // Environment.Exit(0); return; // Becase of Main() } if (key.Key == ConsoleKey.LeftArrow || key.Key == ConsoleKey.A) { if (State.CurrentFigureCol >= 1) { State.CurrentFigureCol--; } } if (key.Key == ConsoleKey.RightArrow || key.Key == ConsoleKey.D) { if (State.CurrentFigureCol < TetrisCols - State.CurrentFigure.Height) { State.CurrentFigureCol++; } } if (key.Key == ConsoleKey.DownArrow || key.Key == ConsoleKey.S) { State.Frame = 1; scoreManager.AddToScore(State.Level); State.CurrentFigureRow++; } if (key.Key == ConsoleKey.Spacebar || key.Key == ConsoleKey.UpArrow || key.Key == ConsoleKey.W) { var newFigure = State.CurrentFigure.GetRotate(); if (!Collision(newFigure)) { State.CurrentFigure = newFigure; } } } // Update the game state if (State.Frame % (State.FramesToMoveFigure - State.Level) == 0) { State.CurrentFigureRow++; State.Frame = 0; } if (Collision(State.CurrentFigure)) { AddCurrentFigureToTetrisField(); int lines = CheckForFullLines(); scoreManager.AddToScore(ScorePerLines[lines] * State.Level); State.CurrentFigure = TetrisFigures[random.Next(0, TetrisFigures.Count)]; State.CurrentFigureRow = 0; State.CurrentFigureCol = 0; if (Collision(State.CurrentFigure)) // game is over { scoreManager.AddToHighScore(); tetrisConsoleWriter.DrawAll(State, scoreManager); tetrisConsoleWriter.WriteGameOver(scoreManager.Score); Thread.Sleep(100000); return; } } // Redraw UI tetrisConsoleWriter.DrawAll(State, scoreManager); Thread.Sleep(40); } }
static void Main(string[] args) { var musicPlayer = new MusicPlayer(); musicPlayer.Play(); var scoreManager = new ScoreManager("scores.txt"); State.HighScore = scoreManager.GetHighScore(); Console.ForegroundColor = ConsoleColor.DarkYellow; Console.Title = "Tetris v1.0"; Console.CursorVisible = false; Console.WindowHeight = ConsoleRows + 1; Console.WindowWidth = ConsoleCols; Console.BufferHeight = ConsoleRows + 1; Console.BufferWidth = ConsoleCols; State.CurrentFigure = TetrisFigures[Random.Next(0, TetrisFigures.Count)]; while (true) { State.Frame++; State.UpdateLevel(); // Read user input if (Console.KeyAvailable) { var key = Console.ReadKey(); if (key.Key == ConsoleKey.Escape) { // Environment.Exit(0); return; // Becase of Main() } if (key.Key == ConsoleKey.LeftArrow || key.Key == ConsoleKey.A) { if (State.CurrentFigureCol >= 1) { State.CurrentFigureCol--; } } if (key.Key == ConsoleKey.RightArrow || key.Key == ConsoleKey.D) { if (State.CurrentFigureCol < TetrisCols - State.CurrentFigure.GetLength(1)) { State.CurrentFigureCol++; } } if (key.Key == ConsoleKey.DownArrow || key.Key == ConsoleKey.S) { State.Frame = 1; State.Score += State.Level; State.CurrentFigureRow++; } if (key.Key == ConsoleKey.Spacebar || key.Key == ConsoleKey.UpArrow || key.Key == ConsoleKey.W) { RotateCurrentFigure(); } } // Update the game state if (State.Frame % (State.FramesToMoveFigure - State.Level) == 0) { State.CurrentFigureRow++; State.Frame = 0; } if (Collision(State.CurrentFigure)) { AddCurrentFigureToTetrisField(); int lines = CheckForFullLines(); State.Score += ScorePerLines[lines] * State.Level; State.CurrentFigure = TetrisFigures[Random.Next(0, TetrisFigures.Count)]; State.CurrentFigureRow = 0; State.CurrentFigureCol = 0; if (Collision(State.CurrentFigure)) // game is over { scoreManager.Add(State.Score); var scoreAsString = State.Score.ToString(); scoreAsString += new string(' ', 7 - scoreAsString.Length); Write("╔═════════╗", 5, 5); Write("║ Game ║", 6, 5); Write("║ over! ║", 7, 5); Write($"║ {scoreAsString} ║", 8, 5); Write("╚═════════╝", 9, 5); Thread.Sleep(100000); return; } } // Redraw UI DrawBorder(); DrawInfo(); DrawTetrisField(); DrawCurrentFigure(); Thread.Sleep(40); } }