/// <summary> /// 非好戦的な移動を行います /// </summary> /// <returns>移動量</returns> /// <param name="useSkill">使用するスキル</param> private int recession(MoveSkill useSkill) { Debug.Log("reacession"); //エリア危険性レベルを取得 Dictionary <FieldPosition, int> areaDangerLevelTable = BattleManager.getInstance().getAreaDangerLevelTableInRange(user, useSkill.getMove(user)); Dictionary <int, int> dangerLevelIntegerTable = new Dictionary <int, int>(); var keys = areaDangerLevelTable.Keys; int sumDangerLevel = 0; foreach (FieldPosition pos in keys) { sumDangerLevel += areaDangerLevelTable[pos]; dangerLevelIntegerTable.Add((int)pos, areaDangerLevelTable[pos]); } //最終判定:レベルが低いところへ FieldPosition nowPos = BattleManager.getInstance().searchCharacter(user); int move = MathHelper.getRandomKeyLowerOrderProbality(dangerLevelIntegerTable) - (int)nowPos; //move = move = BattleManager.getInstance().restructionPositionValue(nowPos, move); return(move); }
/// <summary> /// 好戦的な移動を行います /// </summary> /// <returns>移動量</returns> /// <param name="useSkill">使用するスキル</param> private int advance(MoveSkill useSkill) { //エリア危険性レベルを取得 Dictionary <FieldPosition, int> areaDangerLevelTable = BattleManager.getInstance().getAreaDangerLevelTableInRange(user, useSkill.getMove(user)); var keys = areaDangerLevelTable.Keys; int sumDangerLevel = 0; foreach (FieldPosition pos in keys) { sumDangerLevel += areaDangerLevelTable[pos]; } //最終判定:レベルが高いところへ int rand = UnityEngine.Random.Range(0, sumDangerLevel) + 1; foreach (FieldPosition pos in keys) { if (areaDangerLevelTable[pos] >= rand) { FieldPosition nowPos = BattleManager.getInstance().searchCharacter(user); int move = pos - nowPos; return(move); } else { rand -= areaDangerLevelTable[pos]; } } throw new InvalidOperationException("cannot dicide advance move"); }