/// <summary>
 /// 生成新的砖块,并重新设定坐标
 /// </summary>
 private void NextBlockStart()
 {
     // 清除当前砖块
     if (gameSurface.Children.Contains(Game.CurrentBlocks))
     {
         gameSurface.Children.Remove(Game.CurrentBlocks);
     }
     // 将当前砖块散装装入背景
     foreach (BlockControl blockControl in Game.CurrentBlocks.GetBlocksList())
     {
         Point blockPoint = blockControl.TranslatePoint(new Point(0, 0), Game.CurrentBlocks.blockShowGrid);
         if (Game.currentY < 0)
         {
             continue;
         }
         Game.backGround[(int)(blockPoint.Y / 16) + Game.currentY, (int)(blockPoint.X / 16) + Game.currentX] = (int)(blockControl.BlocksShape);
         BlockControl newBlockControl = new BlockControl(blockControl.BlocksShape);
         newBlockControl.Margin = new Thickness(blockPoint.X + Game.currentX * 16, blockPoint.Y + Game.currentY * 16, 0, 0);
         newBlockControl.HorizontalAlignment = HorizontalAlignment.Left;
         newBlockControl.VerticalAlignment   = VerticalAlignment.Top;
         gameSurface.Children.Add(newBlockControl);
     }
     Game.currentX      = 5;
     Game.currentY      = -4;
     Game.CurrentBlocks = Game.GetCurrentBlocks();
     Game.NextBlocks    = Game.GetNextBlocks();
 }
Ejemplo n.º 2
0
        private void DrawBlocks()
        {
            List <BlockControl> blockList = new List <BlockControl>();

            blocksArray = new int[4, 4];
            for (int y = 0; y < 4; y++)
            {
                for (int x = 0; x < 4; x++)
                {
                    if (blockArray[(int)(BlocksShape - 1), (int)BlocksStatus, y, x] == 1)
                    {
                        blocksArray[y, x] = 1;
                        BlockControl blockControl = new BlockControl(BlocksShape);
                        blockControl.Margin = new Thickness(x * 16, y * 16, 0, 0);
                        blockControl.HorizontalAlignment = HorizontalAlignment.Left;
                        blockControl.VerticalAlignment   = VerticalAlignment.Top;
                        blockList.Add(blockControl);
                    }
                }
            }
            blockList.ForEach(x => blockShowGrid.Children.Add(x));
        }
        /// <summary>
        /// 消除得分
        /// </summary>
        public void Eliminate()
        {
            bool isEliminate = false;

            int[,] backGroundTemp;
            for (int y = 0; y < Game.backGroundY; y++)
            {
                for (int x = 0; x < Game.backGroundX; x++)
                {
                    if (Game.backGround[y, x] != 0)
                    {
                        isEliminate = true;
                    }
                    else
                    {
                        isEliminate = false;
                        break;
                    }
                }
                if (isEliminate)
                {
                    backGroundTemp = new int[Game.backGroundY, Game.backGroundX];
                    Game.Score    += 10;
                    if (Game.Level < 9 && Game.Score % 100 == 0)
                    {
                        Game.Level += 1;
                    }
                    gameSurface.Children.Clear();
                    for (int staticY = Game.backGroundY - 1; staticY > y; staticY--)
                    {
                        for (int staticX = 0; staticX < Game.backGroundX; staticX++)
                        {
                            if (Game.backGround[staticY, staticX] != 0)
                            {
                                backGroundTemp[staticY, staticX] = Game.backGround[staticY, staticX];
                                BlockControl newBlockControl = new BlockControl((BlocksShape)Game.backGround[staticY, staticX]);
                                newBlockControl.Margin              = new Thickness(staticX * 16, staticY * 16, 0, 0);
                                newBlockControl.VerticalAlignment   = VerticalAlignment.Top;
                                newBlockControl.HorizontalAlignment = HorizontalAlignment.Left;
                                gameSurface.Children.Add(newBlockControl);
                            }
                        }
                    }
                    for (int moveY = 1; moveY <= y; moveY++)
                    {
                        for (int moveX = 0; moveX < Game.backGroundX; moveX++)
                        {
                            if (Game.backGround[moveY - 1, moveX] != 0)
                            {
                                backGroundTemp[moveY, moveX] = Game.backGround[moveY - 1, moveX];
                                BlockControl newBlockControl = new BlockControl((BlocksShape)Game.backGround[moveY - 1, moveX]);
                                newBlockControl.Margin              = new Thickness(moveX * 16, moveY * 16, 0, 0);
                                newBlockControl.VerticalAlignment   = VerticalAlignment.Top;
                                newBlockControl.HorizontalAlignment = HorizontalAlignment.Left;
                                gameSurface.Children.Add(newBlockControl);
                            }
                        }
                    }
                    Game.backGround = backGroundTemp;
                }
            }
        }