protected virtual void OnLinesCleared(LinesEventArgs e) { if (LinesCleared != null) { LinesCleared.Invoke(this, e); } }
/// <summary> /// Method to be called when a line of bricks stack is cleared. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GameBoard_LineCleared(object sender, EventArgs e) { LinesCleared += 1; Score += Level * 10; UpdateInfo(0, Score.ToString()); UpdateInfo(2, LinesCleared.ToString()); if (LinesCleared % 10 == 0) { Level += 1; UpdateInfo(1, Level.ToString()); } }
/// <summary> /// Game constructor. /// </summary> public Game() { Level = 1; Score = 0; LinesCleared = 0; GameBoard = new Board(new int[] { 10, 20 }, new int[] { 2, 1 }); GameBoard.LineCleared += GameBoard_LineCleared; UpdateInfo(0, Score.ToString()); UpdateInfo(1, Level.ToString()); UpdateInfo(2, LinesCleared.ToString()); IsOver = false; }
private void ClearLinesFromDeadGrid() { var oldGrid = (ShapeEnum[, ])deadGrid.Clone(); List <int> yLinesToClear = new List <int>(); for (int y = 0; y < deadGrid.GetLength(1); y++) { bool fullLine = true; for (int x = 0; x < deadGrid.GetLength(0); x++) { if (deadGrid[x, y] == ShapeEnum.Empty) { fullLine = false; break; } } if (fullLine) { yLinesToClear.Add(y); for (int ytoClear = y; ytoClear > 0; ytoClear--) { for (int x = 0; x < deadGrid.GetLength(0); x++) { deadGrid[x, ytoClear] = deadGrid[x, ytoClear - 1]; } } } } if (yLinesToClear.Any()) { totalLinesCleared += yLinesToClear.Count(); LinesAboutToClear.Invoke(this, oldGrid); LinesCleared.Invoke(this, yLinesToClear.ToArray()); } }