C# 如何设计一款具有多种技能的可伸缩纸牌游戏
现在我想写一个像《三国演义》这样的中国游戏。 玩家可以玩可以伤害其他人的牌,一个简单的例子是,如果你对敌人玩一张“杀死”的牌,如果敌人不玩像“错过”这样的牌,他将失去生命点。 如果我装备了一个名为“强化”的技能,其功能是如果你让敌人失去生命,你就有可能让敌人多失去一点生命, 如果我装备了名为“龙林道”的武器,其功能是如果你用“杀”牌让敌人丧命,你可以选择移除敌人的两张牌,而不是让他丧命。 有很多技能和武器像上面两种,技能不是卡和绑定用的角色,武器是相同的,手牌有不同的功能,大多数武器都可以增加攻击距离 我不确定你是否能理解游戏的玩法,更多细节你可以阅读维基 我的问题是如何以可扩展的方式设计技能、武器和卡? 我的目标是使技能可以像武器一样被任何角色装备,随着时间的推移,我可以轻松地创造出许多新技能和武器 例如,我想制作一个新技能,其功能是,如果你通过“杀死”牌使敌人失去一点生命,你可以增加一点生命。 我想做一个新的技能,它的功能是,如果我玩一张“错过”牌,我可以得到一张新牌,等等 我对设计有一个简单的想法。 接口:C# 如何设计一款具有多种技能的可伸缩纸牌游戏,c#,unity3d,C#,Unity3d,现在我想写一个像《三国演义》这样的中国游戏。 玩家可以玩可以伤害其他人的牌,一个简单的例子是,如果你对敌人玩一张“杀死”的牌,如果敌人不玩像“错过”这样的牌,他将失去生命点。 如果我装备了一个名为“强化”的技能,其功能是如果你让敌人失去生命,你就有可能让敌人多失去一点生命, 如果我装备了名为“龙林道”的武器,其功能是如果你用“杀”牌让敌人丧命,你可以选择移除敌人的两张牌,而不是让他丧命。 有很多技能和武器像上面两种,技能不是卡和绑定用的角色,武器是相同的,手牌有不同的功能,大多数武器都可以增加攻
public interface ICommonProperties
{
string Name { get; set; }
int AttackDistance { get; set; }
}
public interface ICommonEvents
{
/// <summary>
/// Before player plays card "Kill"
/// </summary>
void OnBeforeKill();
/// <summary>
/// After player plays card "Kill"
/// </summary>
void OnAfterKill();
/// <summary>
/// Before player plays card "Miss"
/// </summary>
void OnBeforeMiss();
/// <summary>
/// After player plays card "Miss"
/// </summary>
void OnAfterMiss();
/// <summary>
/// Trigger if lose life or increase life
/// </summary>
void OnLifeChange();
/// <summary>
/// Tigger if role is dying
/// </summary>
void OnDying();
}
public interface IRole : ICommonProperties, ICommonEvents
{
int CurrentLife { get; set; }
int MaxLife { get; set; }
List<Card> CardsInHand { get; set; }
List<IWeapon> BaseWeapons { get; set; }
List<ISkill> BaseSkills { get; set; }
}
public interface IWeapon : ICommonProperties, ICommonEvents
{
int AttackDistance { get; set; }
}
public interface ISkill : ICommonProperties, ICommonEvents
{
}
public class BaseRole : IRole
{
public BaseRole()
{
this.CurrentLife = 3;
this.MaxLife = 3;
this.Name = "BaseRole";
}
#region Fileds
public int CurrentLife
{
get;
set;
}
public int MaxLife
{
get;
set;
}
public string Name
{
get;
set;
}
public List<Card> CardsInHand
{
get;
set;
}
public List<IWeapon> BaseWeapons
{
get;
set;
}
public List<ISkill> BaseSkills
{
get;
set;
}
public int AttackDistance
{
get;
set;
}
#endregion
public virtual void OnBeforeKill()
{
}
public virtual void OnAfterKill()
{
}
public virtual void OnBeforeMiss()
{
}
public virtual void OnAfterMiss()
{
}
public virtual void OnLifeChange()
{
}
public virtual void OnDying()
{
//If role is dying, he can ask medicine called "Yao" to gain one more life point.
}
}
public class BaseWeapon : IWeapon
{
public BaseWeapon()
{
this.AttackDistance = 1;
this.Name = "BaseWeapon";
}
public int AttackDistance
{
get;
set;
}
public string Name
{
get;
set;
}
public virtual void OnBeforeKill()
{
}
public virtual void OnAfterKill()
{
}
public virtual void OnBeforeMiss()
{
}
public virtual void OnAfterMiss()
{
}
public virtual void OnLifeChange()
{
}
public virtual void OnDying()
{
}
}
public class BaseSkill : ISkill
{
public BaseSkill()
{
this.Name = "BaseSkill";
}
public string Name
{
get;
set;
}
public int AttackDistance
{
get;
set;
}
public virtual void OnBeforeKill()
{
}
public virtual void OnAfterKill()
{
}
public virtual void OnBeforeMiss()
{
}
public virtual void OnAfterMiss()
{
}
public virtual void OnLifeChange()
{
}
public virtual void OnDying()
{
}
}
public class Card
{
public string Name { get; set; }
public string Type { get; set; }
/// <summary>
/// Whether it can be used to attack others, such as "Kill" card CanAttack=true, card "Miss" CanAttack=false
/// </summary>
public bool CanAttack { get; set; }
}
公共接口属性
{
字符串名称{get;set;}
int攻击距离{get;set;}
}
公共接口事件
{
///
///在玩家玩扑克牌“杀死”之前
///
void OnBeforeKill();
///
///玩家玩“杀死”牌后
///
void OnAfterKill();
///
///在玩家玩“小姐”牌之前
///
void OnBeforeMiss();
///
///在玩家玩“小姐”牌之后
///
无效,无效();
///
///如果失去生命或增加生命则触发
///
void onlyfechange();
///
///如果角色正在消亡,跳跳虎
///
空位();
}
公共接口IRole:ICommonProperties、ICommonEvents
{
int CurrentLife{get;set;}
int MaxLife{get;set;}
列表CardsInHand{get;set;}
列出基本武器{get;set;}
列出基本技能{get;set;}
}
公共接口IWeapon:ICommonProperties、ICommonEvents
{
int攻击距离{get;set;}
}
公共接口ISkill:ICommonProperties、ICommonEvents
{
}
实现接口:
public interface ICommonProperties
{
string Name { get; set; }
int AttackDistance { get; set; }
}
public interface ICommonEvents
{
/// <summary>
/// Before player plays card "Kill"
/// </summary>
void OnBeforeKill();
/// <summary>
/// After player plays card "Kill"
/// </summary>
void OnAfterKill();
/// <summary>
/// Before player plays card "Miss"
/// </summary>
void OnBeforeMiss();
/// <summary>
/// After player plays card "Miss"
/// </summary>
void OnAfterMiss();
/// <summary>
/// Trigger if lose life or increase life
/// </summary>
void OnLifeChange();
/// <summary>
/// Tigger if role is dying
/// </summary>
void OnDying();
}
public interface IRole : ICommonProperties, ICommonEvents
{
int CurrentLife { get; set; }
int MaxLife { get; set; }
List<Card> CardsInHand { get; set; }
List<IWeapon> BaseWeapons { get; set; }
List<ISkill> BaseSkills { get; set; }
}
public interface IWeapon : ICommonProperties, ICommonEvents
{
int AttackDistance { get; set; }
}
public interface ISkill : ICommonProperties, ICommonEvents
{
}
public class BaseRole : IRole
{
public BaseRole()
{
this.CurrentLife = 3;
this.MaxLife = 3;
this.Name = "BaseRole";
}
#region Fileds
public int CurrentLife
{
get;
set;
}
public int MaxLife
{
get;
set;
}
public string Name
{
get;
set;
}
public List<Card> CardsInHand
{
get;
set;
}
public List<IWeapon> BaseWeapons
{
get;
set;
}
public List<ISkill> BaseSkills
{
get;
set;
}
public int AttackDistance
{
get;
set;
}
#endregion
public virtual void OnBeforeKill()
{
}
public virtual void OnAfterKill()
{
}
public virtual void OnBeforeMiss()
{
}
public virtual void OnAfterMiss()
{
}
public virtual void OnLifeChange()
{
}
public virtual void OnDying()
{
//If role is dying, he can ask medicine called "Yao" to gain one more life point.
}
}
public class BaseWeapon : IWeapon
{
public BaseWeapon()
{
this.AttackDistance = 1;
this.Name = "BaseWeapon";
}
public int AttackDistance
{
get;
set;
}
public string Name
{
get;
set;
}
public virtual void OnBeforeKill()
{
}
public virtual void OnAfterKill()
{
}
public virtual void OnBeforeMiss()
{
}
public virtual void OnAfterMiss()
{
}
public virtual void OnLifeChange()
{
}
public virtual void OnDying()
{
}
}
public class BaseSkill : ISkill
{
public BaseSkill()
{
this.Name = "BaseSkill";
}
public string Name
{
get;
set;
}
public int AttackDistance
{
get;
set;
}
public virtual void OnBeforeKill()
{
}
public virtual void OnAfterKill()
{
}
public virtual void OnBeforeMiss()
{
}
public virtual void OnAfterMiss()
{
}
public virtual void OnLifeChange()
{
}
public virtual void OnDying()
{
}
}
public class Card
{
public string Name { get; set; }
public string Type { get; set; }
/// <summary>
/// Whether it can be used to attack others, such as "Kill" card CanAttack=true, card "Miss" CanAttack=false
/// </summary>
public bool CanAttack { get; set; }
}
公共类基类角色:IRole
{
公共基本角色()
{
这是1.CurrentLife=3;
这是MaxLife=3;
this.Name=“BaseRole”;
}
#区域文件
公共生活
{
得到;
设置
}
公共int MaxLife
{
得到;
设置
}
公共字符串名
{
得到;
设置
}
公开名单
{
得到;
设置
}
公开清单基本武器
{
得到;
设置
}
基本技能公开列表
{
得到;
设置
}
公共攻击距离
{
得到;
设置
}
#端区
公共虚拟void OnBeforeKill()
{
}
Afterkill()上的公共虚拟无效
{
}
公共虚拟void OnBeforeMiss()
{
}
AfterMiss()上的公共虚拟无效
{
}
公共虚拟void OnLifeChange()
{
}
公共虚拟空间()
{
//若角色即将死亡,他可以要求名为“姚”的医生再获得一个生命点。
}
}
公共类基本武器:IWeapon
{
公共基础武器()
{
此参数为.AttackDistance=1;
this.Name=“basenearm”;
}
公共攻击距离
{
得到;
设置
}
公共字符串名
{
得到;
设置
}
公共虚拟void OnBeforeKill()
{
}
Afterkill()上的公共虚拟无效
{
}
公共虚拟void OnBeforeMiss()
{
}
AfterMiss()上的公共虚拟无效
{
}
公共虚拟void OnLifeChange()
{
}
公共虚拟空间()
{
}
}
公共类基本技能:ISkill
{
公共基本技能()
{
this.Name=“BaseSkill”;
}
公共字符串名
{
得到;
设置
}
公共攻击距离
{
得到;
设置
}
公共虚拟void OnBeforeKill()
{
}
Afterkill()上的公共虚拟无效
{
}
公共虚拟void OnBeforeMiss()
{
}
AfterMiss()上的公共虚拟无效
{
}
公共虚拟void OnLifeChange()
{
}
公共虚拟空间()
{
}
}
公务舱卡
{
公共字符串名称{get;set;}
公共字符串类型{get;set;}
///
///是否可以用来攻击其他人,如“杀死”牌CanAttack=true,牌“未命中”CanAttack=false
///
公共布尔攻击{get;set;}
}
真正的角色、武器和技能:
public class XiangyuRole : BaseRole
{
public XiangyuRole()
{
this.Name = "Xiangyu";
this.MaxLife = 4;
this.CurrentLife = 4;
// The role equip skill QinglingSkill by default.
this.BaseSkills = new List<ISkill>();
this.BaseSkills.Add(new QinglingSkill());
this.BaseWeapons = new List<IWeapon>();
this.BaseWeapons.Add(new RemoveCardsWeapon());
}
}
public class RemoveCardsWeapon : BaseWeapon
{
public RemoveCardsWeapon()
{
this.Name = "RemoveCardsAfterWeapon";
this.AttackDistance = 1;
}
public override void OnAfterKill()
{
//If you make the enemy lose life, you can remove two cards of the enemy instead of losing life.
}
}
public class QinglingSkill : BaseSkill
{
public QinglingSkill()
{
this.Name = "GetACardAfterMiss";
}
public override void OnAfterMiss()
{
//if you play a "Miss" card, get a new card
}
}
公共类香玉角色:BaseRole
{
公众角色()
{
这个。Name=“项羽”;
这是MaxLife=4;
这是当前寿命=4;
//德法尔的角色装备技能清灵技能