/// <summary> /// 開始位置と終了位置を設定する /// </summary> private void SetPos() { // カーソルがなければ、何もしない if (cursorPos == null) { return; } // カーソル位置のセルを取得する var cell = map[cursorPos.X, cursorPos.Y]; // 立ち入り禁止の場合、何もしない if (!cell.Steppable) { return; } // 次が開始位置の場合 if (nextStart) { // ルートをクリア ClearRoute(); // 開始位置をセット startPos = new Position(cursorPos.X, cursorPos.Y); // 終了位置はクリア endPos = null; // マップを再描画 DrawMap(); } // 次が終了位置の場合 else { // 終了位置をセット endPos = new Position(cursorPos.X, cursorPos.Y); // ルートを計算 CalcRoute(); CalcTerritory(); // マップを再描画 DrawMap(); // 自動再生 PlayRoute(); } // 次を切り替える nextStart = !nextStart; }
/// <summary> /// カーソル位置を設定する /// </summary> /// <param name="viewX">ビュー座標 X</param> /// <param name="viewY">ビュー座標 Y</param> /// <returns>変更された場合 true, それ以外の場合 false</returns> private bool SetMapCursor(int viewX, int viewY) { // ビュー座標からマップ座標に変換 var x = viewX / (TILE_SIZE + TILE_MARGIN * 2); var y = viewY / (TILE_SIZE + TILE_MARGIN * 2); // 範囲外の場合、何もしない if (!map.InRange(x, y)) { return false; } // 戻り値 var ret = false; // 現在位置がなければ if (cursorPos == null) { // 生成する cursorPos = new Position(x, y); ret = true; } // 現在位置があれば else { // 座標値が変更されていれば if (cursorPos.X != x || cursorPos.Y != y) { // セット cursorPos.X = x; cursorPos.Y = y; ret = true; } } // 結果を返す return ret; }
/// <summary> /// セルマップを初期化する /// </summary> /// <param name="map">セルマップ</param> private void Init(CellMap<Cell> map) { // 保持 this.map = map; // 開始位置、終了位置は未設定 startPos = null; endPos = null; // セルマップサイズのラベルを設定 toolStripLabelSize.Text = $"(W, H)=({map.Width}, {map.Height})"; // ルートをクリア ClearRoute(); // キャンバスを初期化 InitCanvas(); }
/// <summary> /// カーソルをクリアする /// </summary> private void ClearMapCursor() { cursorPos = null; }
private void InitData_Type2() { var str = "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10" + ",10,10,10,10,10,10,-1,-1,10,-1,10,10,10,10,10,10,10,10,10,10" + ",10,10,10,10,10,-1,10,10,10,-1,-1,10,10,10,-1,10,10,10,-1,10" + ",10,10,10,10,10,-1,10,10,-1,-1,10,-1,10,10,10,-1,10,-1,10,10" + ",10,10,-1,-1,10,10,-1,10,10,-1,10,10,10,10,10,10,-1,10,10,10" + ",10,10,10,10,10,10,-1,-1,10,10,10,-1,-1,10,-1,10,10,10,10,10" + ",10,-1,10,-1,-1,-1,10,10,10,10,10,10,10,10,10,-1,10,10,10,10" + ",10,10,10,10,10,10,10,10,-1,-1,-1,10,10,-1,10,10,10,10,10,10" + ",10,10,10,10,10,10,10,-1,10,10,10,10,-1,10,10,10,-1,10,-1,10" + ",10,10,10,10,10,10,10,10,10,10,10,10,10,10,-1,10,10,-1,10,10" + ",10,10,10,10,-1,10,-1,10,-1,-1,-1,-1,10,10,10,10,10,-1,10,-1" + ",10,10,10,10,10,10,10,10,10,10,10,-1,10,10,-1,-1,-1,10,10,10" + ",10,10,10,10,-1,10,-1,10,10,10,10,10,10,10,-1,10,10,10,-1,10" + ",10,10,-1,-1,10,10,-1,-1,10,10,-1,10,-1,-1,10,10,10,-1,10,10" + ",10,10,10,10,-1,10,10,10,10,10,-1,10,10,-1,10,-1,-1,-1,10,10" + ",10,-1,10,10,10,10,10,10,10,-1,-1,-1,10,-1,10,10,10,10,10,10" + ",10,-1,10,-1,10,10,-1,-1,10,10,10,10,10,10,-1,10,10,10,10,10" + ",10,10,10,-1,-1,10,-1,10,10,10,10,-1,-1,-1,10,10,-1,10,10,10" + ",10,10,10,10,-1,10,10,10,-1,10,10,10,10,10,-1,-1,10,10,10,10" + ",10,10,10,10,10,10,-1,10,10,10,10,10,10,10,10,10,10,10,10,10" ; var cells = new List<Cell>(); foreach (var s in str.Split(',')) { cells.Add(new Cell(int.Parse(s))); } CellMap = new CellMap<Cell>(20, 20, cells); StartPos = new Position(3, 3); EndPos = new Position(16, 16); }
private void InitData_Type1() { var str = "10,10,10, 7, 7, 7, 7,10,10" + ",10,10,10,10,10,10,10,10,10" + ",10,10,10,10,10,-1,10,10,10" + ",10,10,10,10,-1,10,10,-1,-1" + ",10,-1,-1,-1,-1,20,-1,-1,10" + ",10,10,-1,10,10,10,15,15,15" + ",10,10,-1,10,10,-1,15,15,15" + ",10,10,10,-1,-1,15,15,10,15" + ",10,10,10,10,10,10,15,15,15" ; var cells = new List<Cell>(); foreach (var s in str.Split(',')) { cells.Add(new Cell(int.Parse(s))); } CellMap = new CellMap<Cell>(9, 9, cells); StartPos = new Position(1, 1); EndPos = new Position(7, 7); }