Esempio n. 1
0
        /// <summary>
        /// 2点間の通路チェック3
        /// </summary>
        /// <param name="no1">始点</param>
        /// <param name="no2">終点</param>
        /// <returns>
        /// 到達判定結果
        /// true = 終点まで到達した
        /// false= 終点まで到達できなかった
        /// </returns>
        /// <remarks>
        /// 2点の内側を判定する。
        /// 縦→横→縦の順でチェックを行う。
        /// </remarks>
        private bool CheckPattern3(int no1, int no2)
        {
            Debug.WriteLine("CheckPattern3(" + no1.ToString() + "," + no2.ToString() + ")");

            MoveOne moveOne;

            int y1 = field.GetCellY(no1);
            int y2 = field.GetCellY(no2);
            int dy = 0;

            if (y1 < y2)
            {
                dy      = 1;            // 上方向
                moveOne = new MoveOne(field.GetCellUp);
            }
            else if (y1 > y2)
            {
                dy      = -1;           // 下方向
                moveOne = new MoveOne(field.GetCellDown);
            }
            else
            {
                y2      = 0;
                dy      = -1;           // 下方向
                moveOne = new MoveOne(field.GetCellDown);
            }

            int no = no1;

            for (int y = y1 + dy; y != y2 + dy; y += dy)
            {
                // 縦へ移動
                no = moveOne(no);
                if (no == no2)
                {
                    return(true);        // no2に到達
                }
                if (pictCell[no].Enabled == true)
                {
                    return(false);          // 行き止まり
                }
                if (CheckPattern0(no, no2)) // 水平→垂直チェック
                {
                    return(true);           // no2に到達
                }
            }

            return(false);               // no2に到達しなかった
        }
Esempio n. 2
0
        /// <summary>
        /// 2点間の通路チェック2
        /// </summary>
        /// <param name="no1">始点</param>
        /// <param name="no2">終点</param>
        /// <returns>
        /// 到達判定結果
        /// true = 終点まで到達した
        /// false= 終点まで到達できなかった
        /// </returns>
        /// <remarks>
        /// 2点の内側を判定する。
        /// 横→縦→横の順でチェックを行う。
        /// </remarks>
        private bool CheckPattern2(int no1, int no2)
        {
            Debug.WriteLine("CheckPattern2(" + no1.ToString() + "," + no2.ToString() + ")");

            MoveOne moveOne;

            int x1 = field.GetCellX(no1);
            int x2 = field.GetCellX(no2);
            int dx = 0;

            if (x1 < x2)
            {
                dx      = 1;            // 左方向
                moveOne = new MoveOne(field.GetCellLeft);
            }
            else if (x1 > x2)
            {
                dx      = -1;           // 右方向
                moveOne = new MoveOne(field.GetCellRight);
            }
            else
            {
                x2      = 0;
                dx      = -1;           // 右方向
                moveOne = new MoveOne(field.GetCellRight);
            }

            int no = no1;

            for (int x = x1 + dx; x != x2; x += dx)
            {
                // 横へ移動
                no = moveOne(no);
                if (no == no2)
                {
                    return(true);        // no2に到達
                }
                if (pictCell[no].Enabled == true)
                {
                    return(false);          // 行き止まり
                }
                if (CheckPattern1(no, no2)) // 垂直→水平チェック
                {
                    return(true);           // no2に到達
                }
            }

            return(false);               // no2に到達しなかった
        }