/// <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に到達しなかった }
/// <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に到達しなかった }