private bool CheckBounds(Direction direction, Figure figure = null) { if (Board.ActiveFigure == null && figure == null) { return(false); } if (figure == null) { figure = Board.ActiveFigure; } switch (direction) { case Direction.Down: if (figure.Tiles.Any(tile => figure.Y + tile.Y - 1 < 0)) { return(false); } if (figure.Tiles.Any(tile => Board.Tiles.Any(tile1 => figure.X + tile.X == tile1.X && figure.Y + tile.Y - 1 == tile1.Y))) { return(false); } break; case Direction.Up: if (figure.Tiles.Any(tile => figure.Y + tile.Y + 1 >= Board.Height)) { return(false); } if (figure.Tiles.Any(tile => Board.Tiles.Any(tile1 => figure.X + tile.X == tile1.X && figure.Y + tile.Y + 1 == tile1.Y))) { return(false); } break; case Direction.Left: if (figure.Tiles.Any(tile => figure.X + tile.X - 1 < 0)) { return(false); } if (figure.Tiles.Any(tile => Board.Tiles.Any(tile1 => figure.X + tile.X - 1 == tile1.X && figure.Y + tile.Y == tile1.Y))) { return(false); } break; case Direction.Right: if (figure.Tiles.Any(tile => figure.X + tile.X + 1 >= Board.Width)) { return(false); } if (figure.Tiles.Any(tile => Board.Tiles.Any(tile1 => figure.X + tile.X + 1 == tile1.X && figure.Y + tile.Y == tile1.Y))) { return(false); } break; } return(true); }
public static Figure GetFigure(Figures f) { switch (f) { case Figures.Cube: return(new Figure { Tiles = new List <Tile>(new Tile[] { new Tile(-1, -1), new Tile(-1, 0), new Tile(0, 0), new Tile(0, -1) }) }); case Figures.Stick: return(new Figure { Tiles = new List <Tile>(new Tile[] { new Tile(-1, 0), new Tile(0, 0), new Tile(1, 0), new Tile(2, 0) }) }); case Figures.Left: return(new Figure { Tiles = new List <Tile>(new Tile[] { new Tile(-1, 0), new Tile(0, 0), new Tile(1, 0), new Tile(1, 1) }) }); case Figures.Rigth: return(new Figure { Tiles = new List <Tile>(new Tile[] { new Tile(-1, 0), new Tile(-1, 1), new Tile(0, 0), new Tile(1, 0) }) }); case Figures.RigthS: return(new Figure { Tiles = new List <Tile>(new Tile[] { new Tile(-1, -1), new Tile(-1, 0), new Tile(0, 0), new Tile(0, 1) }) }); case Figures.LeftS: return(new Figure { Tiles = new List <Tile>(new Tile[] { new Tile(0, -1), new Tile(0, 0), new Tile(-1, 0), new Tile(-1, 1) }) }); } return(Figure.GetFigure(Figures.Cube)); }
public void CreateNextFigure() { NextFigure = new Figure(blockTypes[rnd.Next(0, blockTypes.Length)]); }