/// <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(); }
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; } } }