public bool BottomedOut(TetrisGrid tetris) { int[][] grid = tetris.GetGrid(); int lowestpointofgrid = grid.Length - 1; if (LowestPoint == lowestpointofgrid || this.IsBottomedOut) { this.IsBottomedOut = true; return(true); } else if (LowestPoint < lowestpointofgrid) { List <Block> BottomBlocks = new List <Block>(); List <int> BlockColumns = new List <int>(); foreach (Block block in AllBlocks) { BlockColumns.Add(block.Y); } foreach (Block block in AllBlocks) { if (block.X == LowestPoint) { BottomBlocks.Add(block); } if (block.X != LowestPoint) { List <Block> listofthiscolumnsblock = new List <Block>(); foreach (Block b in AllBlocks) { if (b.Y == block.Y) { listofthiscolumnsblock.Add(b); } } if (block.X == listofthiscolumnsblock.Max(Block => Block.X)) { BottomBlocks.Add(block); } } } foreach (Block block in BottomBlocks) { if ((block.X + 1 <= 17) && grid[block.X + 1][block.Y] != 0) { this.IsBottomedOut = true; return(true); } } } return(false); }
public void UnDraw(TetrisGrid tetris) { int[][] grid = tetris.GetGrid(); foreach (Block block in AllBlocks) { if (block.X > 17 || block.X < 0) { tetris.SetGrid(grid); return; } if (block.Y > 9 || block.Y < 0) { tetris.SetGrid(grid); return; } grid[block.X][block.Y] = 0; } tetris.SetGrid(grid); }
public void ShiftLeft(TetrisGrid tetris) { int[][] grid = tetris.GetGrid(); int min = AllBlocks.Min(Block => Block.Y); int minleft = 0; if (min <= minleft) { return; } foreach (Block block in AllBlocks) { if (min > 0 && (grid[block.X][min - 1] != 0)) { return; } } UnDraw(tetris); foreach (Block block in AllBlocks) { block.Y--; } Draw(tetris); }
public void ShiftRight(TetrisGrid tetris) { int[][] grid = tetris.GetGrid(); int right = AllBlocks.Max(Block => Block.Y); int maxright = 9; if (right >= maxright) { return; } foreach (Block block in AllBlocks) { if (right < 9 && (grid[block.X][right + 1] != 0)) { return; } } UnDraw(tetris); foreach (Block block in AllBlocks) { block.Y++; } Draw(tetris); }
public override void Rotate(TetrisGrid tetris) { int[][] grid = tetris.GetGrid(); int maxRight = grid[0].Length - 1, maxTop = grid.Length - 1; if (BottomedOut(tetris)) { return; } UnDraw(tetris); switch (DegreesRotated) { case 0: if (PivotBlock.X + 1 > maxTop) { PivotBlock.X -= 3; } else if (PivotBlock.X + 2 > maxTop) { PivotBlock.X -= 2; } else if (PivotBlock.X + 3 > maxTop) { PivotBlock.X -= 1; } AllBlocks.Clear(); AllBlocks.Add(PivotBlock); AllBlocks.Add(new Block(PivotBlock.X + 1, PivotBlock.Y)); AllBlocks.Add(new Block(PivotBlock.X + 2, PivotBlock.Y)); AllBlocks.Add(new Block(PivotBlock.X + 3, PivotBlock.Y)); LowestPoint = PivotBlock.X + 3; this.DegreesRotated += 90; break; case 90: if (PivotBlock.Y - 1 < 0) { PivotBlock.Y += 3; } else if (PivotBlock.Y - 2 < 0) { PivotBlock.Y += 2; } else if (PivotBlock.Y - 3 < 0) { PivotBlock.Y += 1; } AllBlocks.Clear(); AllBlocks.Add(PivotBlock); AllBlocks.Add(new Block(PivotBlock.X, PivotBlock.Y - 1)); AllBlocks.Add(new Block(PivotBlock.X, PivotBlock.Y - 2)); AllBlocks.Add(new Block(PivotBlock.X, PivotBlock.Y - 3)); LowestPoint = PivotBlock.X; this.DegreesRotated += 90; break; case 180: if (PivotBlock.X - 1 < 0) { PivotBlock.X += 3; } else if (PivotBlock.X - 2 < 0) { PivotBlock.X += 2; } else if (PivotBlock.X - 3 < 0) { PivotBlock.X += 1; } AllBlocks.Clear(); AllBlocks.Add(PivotBlock); AllBlocks.Add(new Block(PivotBlock.X - 1, PivotBlock.Y)); AllBlocks.Add(new Block(PivotBlock.X - 2, PivotBlock.Y)); AllBlocks.Add(new Block(PivotBlock.X - 3, PivotBlock.Y)); LowestPoint = PivotBlock.X; this.DegreesRotated += 90; break; case 270: if (PivotBlock.Y + 1 > maxRight) { PivotBlock.Y -= 3; } else if (PivotBlock.Y + 2 > maxRight) { PivotBlock.Y -= 2; } else if (PivotBlock.Y + 3 > maxRight) { PivotBlock.Y -= 1; } AllBlocks.Clear(); AllBlocks.Add(PivotBlock); AllBlocks.Add(new Block(PivotBlock.X, PivotBlock.Y + 1)); AllBlocks.Add(new Block(PivotBlock.X, PivotBlock.Y + 2)); AllBlocks.Add(new Block(PivotBlock.X, PivotBlock.Y + 3)); LowestPoint = PivotBlock.X; this.DegreesRotated = 0; break; } Draw(tetris); }