예제 #1
0
 private void button_Click(object sender, RoutedEventArgs e)
 {
     Master.Children.Clear();
     Master.Children.Add(new BlocksControl(blocksShape, blocksStatus));
     if (++blocksStatus > BlocksStatus.Rotation270)
     {
         blocksStatus = BlocksStatus.RotationZero;
         blocksShape++;
         if (blocksShape > BlocksShape.TType)
         {
             blocksShape = BlocksShape.OType;
         }
     }
 }
        /// <summary>
        /// 判断是否可以变形
        /// </summary>
        /// <returns></returns>
        private bool isCheckTransformation()
        {
            BlocksShape  blocksShapeTemp  = Game.CurrentBlocks.BlocksShape;
            BlocksStatus blocksStatusTemp = Game.CurrentBlocks.BlocksStatus;

            if (blocksStatusTemp + 1 > BlocksStatus.Rotation270)
            {
                blocksStatusTemp = BlocksStatus.RotationZero;
            }
            else
            {
                blocksStatusTemp = blocksStatusTemp + 1;
            }
            for (int y = 0; y < 4; y++)
            {
                for (int x = 0; x < 4; x++)
                {
                    if (BlocksControl.blockArray[(int)blocksShapeTemp - 1, (int)blocksStatusTemp, y, x] == 1)
                    {
                        if (Game.currentY < 0)
                        {
                            return(false);
                        }
                        // 判断右边
                        if (x + Game.currentX >= Game.backGroundX)
                        {
                            return(false);
                        }
                        // 判断左边
                        if (x + Game.currentX < 0)
                        {
                            return(false);
                        }
                        // 判断下边
                        if (y + Game.currentY >= Game.backGroundY - 1)
                        {
                            return(false);
                        }
                        // 判断四周是否有砖,需要放在最后一个,不然可能出险数组超界的情况
                        if (Game.backGround[y + Game.currentY, x + Game.currentX] != 0)
                        {
                            return(false);
                        }
                    }
                }
            }
            return(true);
        }
예제 #3
0
        public static FallingBlock Generate(BlocksShape shape, Point origin)
        {
            FallingBlock result;

            switch (shape)
            {
            case BlocksShape.I:
                result = new FallingBlockI(origin, BlockColor.Red);
                break;

            case BlocksShape.J:
                result = new FallingBlockJ(origin, BlockColor.Blue);
                break;

            case BlocksShape.L:
                result = new FallingBlockL(origin, BlockColor.Orange);
                break;

            case BlocksShape.O:
                result = new FallingBlockO(origin, BlockColor.Yellow);
                break;

            case BlocksShape.S:
                result = new FallingBlockS(origin, BlockColor.Violet);
                break;

            case BlocksShape.T:
                result = new FallingBlockT(origin, BlockColor.Azure);
                break;

            case BlocksShape.Z:
                result = new FallingBlockZ(origin, BlockColor.Green);
                break;

            default:
                throw new Exception("unknown block shape");
            }

            return(result);
        }
예제 #4
0
 public BlockControl(BlocksShape blocksShape) : this()
 {
     BlocksShape = blocksShape;
 }
예제 #5
0
 public BlocksControl(BlocksShape blocksShape, BlocksStatus blockStatus) : this()
 {
     BlocksShape  = blocksShape;
     BlocksStatus = blockStatus;
     DrawBlocks();
 }