diff --git a/Entity/Skill/NormalAttack.cs b/Entity/Skill/NormalAttack.cs
index 0582aaa..de66fae 100644
--- a/Entity/Skill/NormalAttack.cs
+++ b/Entity/Skill/NormalAttack.cs
@@ -194,9 +194,9 @@ namespace Milimoe.FunGame.Core.Entity
public int CanSelectTargetCount { get; set; } = 1;
///
- /// 可选取的作用范围
+ /// 可选取的作用范围 [ 单位:格 ]
///
- public double CanSelectTargetRange { get; set; } = 0;
+ public int CanSelectTargetRange { get; set; } = 0;
///
/// 普通攻击没有魔法消耗
diff --git a/Entity/Skill/Skill.cs b/Entity/Skill/Skill.cs
index 61dde4f..f4bfe72 100644
--- a/Entity/Skill/Skill.cs
+++ b/Entity/Skill/Skill.cs
@@ -68,7 +68,6 @@ namespace Milimoe.FunGame.Core.Entity
///
/// 是否是主动技能 [ 此项为高优先级 ]
///
- [InitRequired]
public bool IsActive => SkillType != SkillType.Passive;
///
@@ -84,15 +83,19 @@ namespace Milimoe.FunGame.Core.Entity
///
/// 是否是爆发技 [ 此项为高优先级 ]
///
- [InitRequired]
public bool IsSuperSkill => SkillType == SkillType.SuperSkill;
///
/// 是否属于魔法 [ 必须为 true ],反之为战技
///
- [InitRequired]
public bool IsMagic => SkillType == SkillType.Magic;
+ ///
+ /// 施法距离 [ 单位:格 ]
+ ///
+ [InitOptional]
+ public int CastRange { get; set; } = 5;
+
///
/// 可选取自身
///
@@ -124,9 +127,9 @@ namespace Milimoe.FunGame.Core.Entity
public virtual int CanSelectTargetCount { get; set; } = 1;
///
- /// 可选取的作用范围
+ /// 可选取的作用范围 [ 单位:格 ]
///
- public virtual double CanSelectTargetRange { get; set; } = 0;
+ public virtual int CanSelectTargetRange { get; set; } = 0;
///
/// 选取角色的条件
diff --git a/Interface/Base/IGamingQueue.cs b/Interface/Base/IGamingQueue.cs
index 925296f..3c6d468 100644
--- a/Interface/Base/IGamingQueue.cs
+++ b/Interface/Base/IGamingQueue.cs
@@ -1,4 +1,5 @@
using Milimoe.FunGame.Core.Entity;
+using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Model;
@@ -60,6 +61,11 @@ namespace Milimoe.FunGame.Core.Interface.Base
///
public int TotalRound { get; }
+ ///
+ /// 使用的地图
+ ///
+ public GameMap? Map { get; }
+
///
/// 显示队列信息
///
diff --git a/Interface/Entity/Typical/ISkill.cs b/Interface/Entity/Typical/ISkill.cs
index 43d4fe1..15e3008 100644
--- a/Interface/Entity/Typical/ISkill.cs
+++ b/Interface/Entity/Typical/ISkill.cs
@@ -1,4 +1,5 @@
-using Milimoe.FunGame.Core.Entity;
+using Milimoe.FunGame.Core.Api.Utility;
+using Milimoe.FunGame.Core.Entity;
namespace Milimoe.FunGame.Core.Interface.Entity
{
@@ -57,9 +58,9 @@ namespace Milimoe.FunGame.Core.Interface.Entity
public int CanSelectTargetCount { get; }
///
- /// 可选取的作用范围
+ /// 可选取的作用范围 [ 单位:格 ]
///
- public double CanSelectTargetRange { get; }
+ public int CanSelectTargetRange { get; }
///
/// 实际魔法消耗 [ 魔法 ]
diff --git a/Library/Common/JsonConverter/SkillConverter.cs b/Library/Common/JsonConverter/SkillConverter.cs
index f1f1ae2..d7b3d26 100644
--- a/Library/Common/JsonConverter/SkillConverter.cs
+++ b/Library/Common/JsonConverter/SkillConverter.cs
@@ -41,6 +41,9 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
case nameof(Skill.Level):
result.Level = reader.GetInt32();
break;
+ case nameof(Skill.CastRange):
+ result.CastRange = reader.GetInt32();
+ break;
case nameof(Skill.CanSelectSelf):
result.CanSelectSelf = reader.GetBoolean();
break;
@@ -125,6 +128,7 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
if (value.GeneralDescription.Length > 0) writer.WriteString(nameof(Skill.GeneralDescription), value.GeneralDescription);
if (value.Slogan.Length > 0) writer.WriteString(nameof(Skill.Slogan), value.Slogan);
if (value.Level > 0) writer.WriteNumber(nameof(Skill.Level), value.Level);
+ writer.WriteNumber(nameof(Skill.CastRange), value.CastRange);
if (value.CanSelectSelf) writer.WriteBoolean(nameof(Skill.CanSelectSelf), value.CanSelectSelf);
if (!value.CanSelectEnemy) writer.WriteBoolean(nameof(Skill.CanSelectEnemy), value.CanSelectEnemy);
if (value.CanSelectTeammate) writer.WriteBoolean(nameof(Skill.CanSelectTeammate), value.CanSelectTeammate);
diff --git a/Library/Constant/TypeEnum.cs b/Library/Constant/TypeEnum.cs
index 41720af..8db44a1 100644
--- a/Library/Constant/TypeEnum.cs
+++ b/Library/Constant/TypeEnum.cs
@@ -740,6 +740,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
public enum CharacterActionType
{
None,
+ Move,
NormalAttack,
PreCastSkill,
CastSkill,
diff --git a/Model/GamingQueue.cs b/Model/GamingQueue.cs
index 27ac7c0..bee9a44 100644
--- a/Model/GamingQueue.cs
+++ b/Model/GamingQueue.cs
@@ -2,6 +2,7 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Interface.Base;
using Milimoe.FunGame.Core.Interface.Entity;
+using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Core.Model
@@ -122,6 +123,11 @@ namespace Milimoe.FunGame.Core.Model
///
public Dictionary EarnedMoney => _earnedMoney;
+ ///
+ /// 使用的地图
+ ///
+ public GameMap? Map => _map;
+
#endregion
#region 保护变量
@@ -241,6 +247,11 @@ namespace Milimoe.FunGame.Core.Model
///
protected bool _isInRound = false;
+ ///
+ /// 使用的地图
+ ///
+ protected GameMap? _map = null;
+
#endregion
#region 构造函数
@@ -249,13 +260,18 @@ namespace Milimoe.FunGame.Core.Model
/// 新建一个基础回合制游戏队列
///
/// 用于文本输出
- public GamingQueue(Action? writer = null)
+ /// 游戏地图
+ public GamingQueue(Action? writer = null, GameMap? map = null)
{
if (writer != null)
{
WriteLine = writer;
}
WriteLine ??= new Action(Console.WriteLine);
+ if (map != null)
+ {
+ LoadGameMap(map);
+ }
}
///
@@ -263,18 +279,36 @@ namespace Milimoe.FunGame.Core.Model
///
/// 参与本次游戏的角色列表
/// 用于文本输出
- public GamingQueue(List characters, Action? writer = null)
+ /// 游戏地图
+ public GamingQueue(List characters, Action? writer = null, GameMap? map = null)
{
if (writer != null)
{
WriteLine = writer;
}
WriteLine ??= new Action(Console.WriteLine);
+ if (map != null)
+ {
+ LoadGameMap(map);
+ }
InitCharacters(characters);
}
#endregion
+ #region 战棋地图(#TODO)
+
+ ///
+ /// 加载地图
+ ///
+ ///
+ public void LoadGameMap(GameMap map)
+ {
+ _map = map;
+ }
+
+ #endregion
+
#region 队列框架
///
@@ -800,6 +834,10 @@ namespace Milimoe.FunGame.Core.Model
effect.AlterSelectListBeforeAction(character, enemys, teammates, skills, continuousKillingTemp, earnedMoneyTemp);
}
+ // 这里筛掉重复角色
+ enemys = [.. enemys.Distinct()];
+ teammates = [.. teammates.Distinct()];
+
// 作出了什么行动
CharacterActionType type = CharacterActionType.None;
@@ -1209,6 +1247,13 @@ namespace Milimoe.FunGame.Core.Model
WriteLine($"[ {character} ] 结束了回合!");
await OnCharacterDoNothingAsync(character);
}
+ else if (type == CharacterActionType.Move)
+ {
+ baseTime = 3;
+ decided = true;
+ WriteLine($"[ {character} ] 进行了移动,并结束了回合!");
+ await OnCharacterMoveAsync(character);
+ }
else
{
decided = true;
@@ -3498,6 +3543,21 @@ namespace Milimoe.FunGame.Core.Model
await (CharacterGiveUp?.Invoke(this, actor) ?? Task.CompletedTask);
}
+ public delegate Task CharacterMoveEventHandler(GamingQueue queue, Character actor);
+ ///
+ /// 角色移动事件
+ ///
+ public event CharacterMoveEventHandler? CharacterMove;
+ ///
+ /// 角色移动事件
+ ///
+ ///
+ ///
+ protected async Task OnCharacterMoveAsync(Character actor)
+ {
+ await (CharacterMove?.Invoke(this, actor) ?? Task.CompletedTask);
+ }
+
public delegate Task GameEndEventHandler(GamingQueue queue, Character winner);
///
/// 游戏结束事件