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);
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
 public void CreateNextFigure()
 {
     NextFigure = new Figure(blockTypes[rnd.Next(0, blockTypes.Length)]);
 }