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); } }
public void MainLoop() { while (true) { tetrisConsoleWriter.Frame++; this.tetrisGame.UpdateLevel(scoreManager.Score); var input = this.consoleInputHandler.GetInput(); switch (input) { case TetrisGameInput.Left: if (this.tetrisGame.CanMoveToLeft()) { this.tetrisGame.CurrentFigureCol--; } break; case TetrisGameInput.Right: if (this.tetrisGame.CanMoveToRight()) { this.tetrisGame.CurrentFigureCol++; } break; case TetrisGameInput.Down: tetrisConsoleWriter.Frame = 1; scoreManager.AddToScore(this.tetrisGame.Level, 0); this.tetrisGame.CurrentFigureRow++; break; case TetrisGameInput.Rotate: var newFigure = this.tetrisGame.CurrentFigure.GetRotate(); if (!this.tetrisGame.Collision(newFigure)) { this.tetrisGame.CurrentFigure = newFigure; } break; case TetrisGameInput.Exit: return; } // Update the game state if (tetrisConsoleWriter.Frame % (tetrisConsoleWriter.FramesToMoveFigure - this.tetrisGame.Level) == 0) { this.tetrisGame.CurrentFigureRow++; tetrisConsoleWriter.Frame = 0; } if (this.tetrisGame.Collision(this.tetrisGame.CurrentFigure)) { this.tetrisGame.AddCurrentFigureToTetrisField(); int lines = this.tetrisGame.CheckForFullLines(); scoreManager.AddToScore(this.tetrisGame.Level, lines); this.tetrisGame.NewRandomFigure(); if (this.tetrisGame.Collision(this.tetrisGame.CurrentFigure)) // game is over { scoreManager.AddToHighScore(); tetrisConsoleWriter.DrawAll(this.tetrisGame, scoreManager); tetrisConsoleWriter.WriteGameOver(scoreManager.Score); Thread.Sleep(100000); return; } } // Redraw UI tetrisConsoleWriter.DrawAll(this.tetrisGame, scoreManager); Thread.Sleep(40); } }