Ejemplo n.º 1
0
        //定时器  砖块定时下降或无法下降时生成新的砖块
        public bool Run()
        {
            //判断是否为空

            //、lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。

            lock (m_arr)
            {
                if (flog == 1)
                {
                    m_nextBrick = Bricks.GetSpecialBrick();
                }
                //当前块为空,且下一块为空——新局
                if (m_curBrick == null && m_nextBrick == null)
                {
                    m_curBrick  = Bricks.GetBrick();
                    m_nextBrick = Bricks.GetBrick();
                    m_nextBrick.RandomShape();
                    m_curBrick.SetCenterPos(m_curBrick.Appear(), m_columns / 2 - 1);
                    SetArrayValue();
                }
                //当前块为空——下落成功
                else if (m_curBrick == null)
                {
                    flog        = 0;
                    m_curBrick  = m_nextBrick;
                    m_nextBrick = Bricks.GetBrick();
                    m_nextBrick.RandomShape();
                    m_curBrick.SetCenterPos(m_curBrick.Appear(), m_columns / 2 - 1);
                    SetArrayValue();
                }
                else
                {
                    //如果能下落,清楚当前值,然后移动坐标,赋值
                    if (m_curBrick.CanDropMove(m_arr, m_rows, m_columns) == true)
                    {
                        ClearCurBrick();
                        m_curBrick.DropMove();
                        SetArrayValue();
                    }
                    //如果不能下落,清楚当前块,重新计算当前高度,判断是否需要清楚行(后面俩项应该顺序换一下)
                    else
                    {
                        m_curBrick = null;
                        SetCurHeight();
                        ClearRow();
                        //SetCurHeight();
                    }
                }
                //没到顶就继续
                if (m_height < m_rows)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Ejemplo n.º 2
0
 //定时器  砖块定时下降或无法下降时生成新的砖块
 public bool Run()
 {
     //判断是否为空
     lock (m_arr)
     {
         if (m_curBrick == null && m_nextBrick == null)
         {
             m_curBrick  = Bricks.GetBrick();
             m_nextBrick = Bricks.GetBrick();
             m_nextBrick.RandomShape();
             m_curBrick.SetCenterPos(m_curBrick.Appear(), m_columns / 2 - 1);
             SetArrayValue();
         }
         else if (m_curBrick == null)
         {
             m_curBrick  = m_nextBrick;
             m_nextBrick = Bricks.GetBrick();
             m_nextBrick.RandomShape();
             m_curBrick.SetCenterPos(m_curBrick.Appear(), m_columns / 2 - 1);
             SetArrayValue();
         }
         else
         {
             if (m_curBrick.CanDropMove(m_arr, m_rows, m_columns) == true)
             {
                 ClearCurBrick();
                 m_curBrick.DropMove();
                 SetArrayValue();
             }
             else
             {
                 m_curBrick = null;
                 SetCurHeight();
                 ClearRow();
             }
         }
         if (m_score >= 100)
         {
             return(false);
         }
         if (m_height < m_rows)
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }
 }