public Tetromino GetRandomTetromino() { int index = random.Next(7); Tetromino nextTetromino = defaultTetromonos[index]; return(nextTetromino.GetCopy()); }
public Tetromino GetCopy() { Tetromino copy = new Tetromino(); copy.Kind = this.Kind; for (int i = 0; i < units.Length; i++) { copy.units[i] = this.units[i]; } return(copy); }
private Tetromino RotateByMatrix(Tetromino tetromino) { Tetromino rotated = new Tetromino(); for (int i = 0; i < rotated.units.Length; i++) { rotated.units[i] = Rotate(tetromino.units[i], tetromino.units[2]); } rotated.Kind = tetromino.Kind; return(rotated); }
public void MoveTetromino(MoveDirection direction) { HideTetromino(); switch (direction) { case MoveDirection.Down: if (!CanMoveDown(1)) { PlaceTetramino(instantly: false); } else { for (int i = 0; i < currentTetramino.units.Length; i++) { currentTetramino.units[i].Row += 1; } } break; case MoveDirection.InstantlyDown: PlaceTetramino(instantly: true); break; case MoveDirection.Right: case MoveDirection.Left: bool right = direction == MoveDirection.Right; int offset = right ? 1 : -1; if (ClashWithBloskOrBorders(currentTetramino, offset)) { break; } for (int i = 0; i < currentTetramino.units.Length; i++) { currentTetramino.units[i].Column = currentTetramino.units[i].Column + offset; } break; case MoveDirection.Rotate: if (currentTetramino.Kind == TetrominoKind.O) { break; } Tetromino rotated = manager.Rotate(currentTetramino); if (!ClashWithBloskOrBorders(rotated)) { currentTetramino = rotated; } break; } AddTetraminoToBoard(); }
public Board() { boardHeight = 24; boardWidth = 10; cells = new Cell[boardHeight][]; InitFreeSpaces(); InitBoarders(); manager = new TetrominoManager(); currentTetramino = manager.GetRandomTetromino(); ShowLines(); ShowPoints(); AddTetraminoToBoard(); }
private bool ClashWithBloskOrBorders(Tetromino tetromino, int offset = 0) { foreach (Unit i in tetromino.units) { if (i.Column + offset < 0) { return(true); } if (i.Column + offset > 9) { return(true); } if (cells[i.Row][i.Column + offset].IsblockOrBorder) { return(true); } } return(false); }
private void PlaceTetramino(bool instantly) { if (instantly) { MoveDownInstantly(); } foreach (Unit i in currentTetramino.units) { cells[i.Row][i.Column].TransformToBlock(); } if (EndGame()) { Game.EndGame(); return; } RemoveBlocks(); currentTetramino = manager.GetRandomTetromino(); }
public Tetromino Rotate(Tetromino tetromino) { return(RotateByMatrix(tetromino)); }
private void InitDefaultTetrominos() { Tetromino tetrominoI = new Tetromino(); tetrominoI.Kind = TetrominoKind.I; tetrominoI.units[0] = new Unit(0, 4); tetrominoI.units[1] = new Unit(1, 4); tetrominoI.units[2] = new Unit(2, 4); tetrominoI.units[3] = new Unit(3, 4); defaultTetromonos[0] = tetrominoI; Tetromino tetrominoO = new Tetromino(); tetrominoO.Kind = TetrominoKind.O; tetrominoO.units[0] = new Unit(0, 4); tetrominoO.units[1] = new Unit(1, 4); tetrominoO.units[2] = new Unit(0, 5); tetrominoO.units[3] = new Unit(1, 5); defaultTetromonos[1] = tetrominoO; Tetromino tetrominoT = new Tetromino(); tetrominoT.Kind = TetrominoKind.T; tetrominoT.units[2] = new Unit(0, 4); tetrominoT.units[1] = new Unit(1, 4); tetrominoT.units[0] = new Unit(0, 5); tetrominoT.units[3] = new Unit(0, 3); defaultTetromonos[2] = tetrominoT; Tetromino tetrominoZ = new Tetromino(); tetrominoZ.Kind = TetrominoKind.Z; tetrominoZ.units[0] = new Unit(0, 4); tetrominoZ.units[1] = new Unit(1, 4); tetrominoZ.units[2] = new Unit(0, 3); tetrominoZ.units[3] = new Unit(1, 5); defaultTetromonos[3] = tetrominoZ; Tetromino tetrominoS = new Tetromino(); tetrominoS.Kind = TetrominoKind.S; tetrominoS.units[0] = new Unit(0, 4); tetrominoS.units[1] = new Unit(1, 4); tetrominoS.units[2] = new Unit(1, 3); tetrominoS.units[3] = new Unit(0, 5); defaultTetromonos[4] = tetrominoS; Tetromino tetrominoJ = new Tetromino(); tetrominoJ.Kind = TetrominoKind.J; tetrominoJ.units[0] = new Unit(0, 4); tetrominoJ.units[1] = new Unit(1, 5); tetrominoJ.units[2] = new Unit(0, 5); tetrominoJ.units[3] = new Unit(0, 3); defaultTetromonos[5] = tetrominoJ; Tetromino tetrominoL = new Tetromino(); tetrominoL.Kind = TetrominoKind.L; tetrominoL.units[0] = new Unit(0, 4); tetrominoL.units[1] = new Unit(1, 3); tetrominoL.units[2] = new Unit(0, 5); tetrominoL.units[3] = new Unit(0, 3); defaultTetromonos[6] = tetrominoL; }