Files
ArrowBeatTap-Gp/Assets/Editor/LevelDifficultyPreset.cs
T

158 lines
6.4 KiB
C#
Raw Normal View History

using ChillConnect;
namespace ChillConnect.Editor
{
[System.Serializable]
public class LevelDifficultyPreset
{
public int gridRows;
public int gridCols;
public int arrowCount; // 目标箭头数
public int minArrowCount; // 最小接受箭头数
public int minPathLength; // 单箭头最小长度(格数)
public int maxPathLength; // 单箭头最大长度
public int maxTurnCount; // 最大折数
public float turnProbability; // 每步转向概率
public bool isPatternLevel; // 是否图案关
/// <summary>
/// 根据关卡序号(从1开始)获取对应难度预设
/// </summary>
public static LevelDifficultyPreset GetPreset(int levelIndex)
{
LevelDifficultyPreset preset = new LevelDifficultyPreset();
// ===== 第1-2关:起步适应 8x8 =====
if (levelIndex <= 2)
{
preset.gridRows = 8;
preset.gridCols = 8;
preset.arrowCount = 7;
preset.minArrowCount = 5;
preset.minPathLength = 2;
preset.maxPathLength = 4;
preset.maxTurnCount = 0; // 纯直线
preset.turnProbability = 0f;
preset.isPatternLevel = false;
}
// ===== 第3关:难度突变 13x13 =====
else if (levelIndex == 3)
{
preset.gridRows = 13;
preset.gridCols = 13;
preset.arrowCount = 14;
preset.minArrowCount = 10;
preset.minPathLength = 2;
preset.maxPathLength = 5;
preset.maxTurnCount = 0;
preset.turnProbability = 0f;
preset.isPatternLevel = false;
}
// ===== 第4关:第一个图案关 =====
else if (levelIndex == 4)
{
preset.gridRows = 13;
preset.gridCols = 13;
preset.arrowCount = 12;
preset.minArrowCount = 10;
preset.minPathLength = 2;
preset.maxPathLength = 6;
preset.maxTurnCount = 0;
preset.turnProbability = 0f;
preset.isPatternLevel = true;
}
// ===== 第5-10关:快速跃升期 =====
else if (levelIndex <= 10)
{
preset.gridRows = 13;
preset.gridCols = 13;
preset.arrowCount = 14 + (levelIndex - 5) * 1;
preset.minArrowCount = preset.arrowCount - 3;
preset.minPathLength = 2;
preset.maxPathLength = 6;
preset.maxTurnCount = 1;
preset.turnProbability = 0.15f;
preset.isPatternLevel = levelIndex == 8;
}
// ===== 第11-15关:进阶爬坡 =====
else if (levelIndex <= 15)
{
preset.gridRows = 13;
preset.gridCols = 13;
preset.arrowCount = 20 + (levelIndex - 11);
preset.minArrowCount = preset.arrowCount - 3;
preset.minPathLength = 2;
preset.maxPathLength = 7;
preset.maxTurnCount = 1;
preset.turnProbability = 0.2f;
preset.isPatternLevel = levelIndex == 13;
}
// ===== 第15关突变:折数提升 =====
else if (levelIndex <= 25)
{
preset.gridRows = 13;
preset.gridCols = 13;
preset.arrowCount = 22 + (levelIndex - 15);
preset.minArrowCount = preset.arrowCount - 4;
preset.minPathLength = 2;
preset.maxPathLength = 7;
preset.maxTurnCount = 2;
preset.turnProbability = 0.25f;
preset.isPatternLevel = levelIndex == 19;
}
// ===== 第26-35关 =====
else if (levelIndex <= 35)
{
preset.gridRows = 14;
preset.gridCols = 14;
preset.arrowCount = 25 + (levelIndex - 26);
preset.minArrowCount = preset.arrowCount - 4;
preset.minPathLength = 2;
preset.maxPathLength = 8;
preset.maxTurnCount = 2;
preset.turnProbability = 0.28f;
preset.isPatternLevel = levelIndex == 26 || levelIndex == 33;
}
// ===== 第36-50关:高难起步 =====
else if (levelIndex <= 50)
{
preset.gridRows = 14;
preset.gridCols = 14;
preset.arrowCount = 28 + (levelIndex - 36);
preset.minArrowCount = preset.arrowCount - 5;
preset.minPathLength = 2;
preset.maxPathLength = 8;
preset.maxTurnCount = 2;
preset.turnProbability = 0.3f;
preset.isPatternLevel = levelIndex == 41 || levelIndex == 49;
}
// ===== 第50关突变:15x15 =====
else if (levelIndex <= 75)
{
preset.gridRows = 15;
preset.gridCols = 15;
preset.arrowCount = 30 + (levelIndex - 50) / 2;
preset.minArrowCount = preset.arrowCount - 5;
preset.minPathLength = 2;
preset.maxPathLength = 9;
preset.maxTurnCount = 3;
preset.turnProbability = 0.32f;
preset.isPatternLevel = levelIndex == 57 || levelIndex == 65 || levelIndex == 72;
}
// ===== 第76-100关:终极挑战 16x16 =====
else
{
preset.gridRows = 16;
preset.gridCols = 16;
preset.arrowCount = 32 + (levelIndex - 75) / 3;
preset.minArrowCount = preset.arrowCount - 6;
preset.minPathLength = 2;
preset.maxPathLength = 9;
preset.maxTurnCount = 3;
preset.turnProbability = 0.35f;
preset.isPatternLevel = levelIndex == 80 || levelIndex == 87 || levelIndex == 93 || levelIndex == 100;
}
return preset;
}
}
}