internal TryMovePieceResult TryMovePiece(TetrisState state, int rowDelta, int columnDelta) { lock (PieceMoveLock) { SetState(state); TryMovePieceResult result = new TryMovePieceResult(); bool canMove = CanMovePiece(rowDelta, columnDelta); if (canMove) { MovePiece(CurrentPiece, rowDelta, columnDelta); result.Moved = true; } else { bool tryingToMoveDown = rowDelta > 0; if (tryingToMoveDown) { result.DeletedRows = StickPiece(); MakeNewPiece(); if (CurrentPiece == null) { result.IsGameEnd = true; } } } return(result); } }
public TetrisState MovePieceAllTheWayDown(TetrisState state) { if (State != GameState.Running) { return(state); } TryMovePieceResult result = BoardLogic.MovePieceAllTheWayDownAndStick(state); AfterStickPiece(result.DeletedRows, result.IsGameEnd); TetrisState newState = GetState(); return(newState); }
internal TryMovePieceResult MovePieceAllTheWayDownAndStick(TetrisState state) { lock (PieceMoveLock) { SetState(state); int rowDeltaMoved = MovePieceAllTheWayDown(CurrentPiece); int deletedRows = StickPiece(); MakeNewPiece(); TryMovePieceResult result = new TryMovePieceResult { Moved = rowDeltaMoved > 0, DeletedRows = deletedRows, IsGameEnd = CurrentPiece == null }; return(result); } }
private TetrisState TryMovePiece(TetrisState state, int rowDelta, int columnDelta, bool fireEvent) { if (State != GameState.Running) { return(state); } TryMovePieceResult result = BoardLogic.TryMovePiece(state, rowDelta, columnDelta); AfterStickPiece(result.DeletedRows, result.IsGameEnd); TetrisState newState = GetState(); if (fireEvent && (result.Moved || result.DeletedRows > 0)) { StateChanged?.Invoke(newState); } return(newState); }