Beispiel #1
0
        public void CheckAndOverBlock() //检查砖块是否到底,如果到底的话则把它当做固定的砖块coorarr,产生新的砖块
        {
            bool over = false;          //设置一个当前运行砖块是否到底的标志

            for (int i = 0; i < runBlock.Length; i++)
            {
                int x = runBlock.XPos + runBlock[i].X;
                int y = runBlock.YPos - runBlock[i].Y;
                if (y == _heihgt - 1)//如果到底,则当前砖块结束
                {
                    over = true;
                    break;
                }
                if (!coorArr[x, y + 1].IsEmpty)//如果下面有其它砖块,则当前砖块结束
                {
                    over = true;
                    break;
                }
            }
            if (over)
            {
                for (int i = 0; i < runBlock.Length; i++)//把当前砖块归入coordinateArr
                {
                    coorArr[runBlock.XPos + runBlock[i].X, runBlock.YPos - runBlock[i].Y] = runBlock.BlockColor;
                }
                //检查是否有满行的情况,如果有,则去掉满行
                CheckAndDelFullRow();
                //产生新的砖块
                runBlock      = readyBlock; //新的砖块为准备好的砖块
                runBlock.XPos = _width / 2; //确定当前运行砖块的出生位置
                int y = 0;
                for (int i = 0; i < runBlock.Length; i++)
                {
                    if (runBlock[i].Y > y)
                    {
                        y = runBlock[i].Y;
                    }
                }
                runBlock.YPos = y;
                //检查新产生的砖块所占用的地方是否已经有砖块,如果有,则游戏结束
                for (int i = 1; i < runBlock.Length; i++)
                {
                    if (!coorArr[runBlock.XPos + runBlock[i].X, runBlock.YPos - runBlock[i].Y].IsEmpty)
                    {
                        //游戏结束
                        StringFormat drawFormat = new StringFormat();
                        drawFormat.Alignment = StringAlignment.Center;
                        gpPalette.DrawString("GAME OVER", new Font("Arial Black", 25f), new SolidBrush(Color.White), new RectangleF(0, _heihgt * recPix / 2 - 100, _width * recPix, 100), drawFormat);
                        timerBlock.Stop();//关闭定时器
                        return;
                    }
                }
                runBlock.Paint(gpPalette);
                //获取新的准备砖块
                BlockGroup bGroup = new BlockGroup();
                readyBlock      = bGroup.GetABlock();
                readyBlock.XPos = 2;
                readyBlock.YPos = 2;
                gpReady.Clear(Color.Black);
                readyBlock.Paint(gpReady);
            }
        }