用Unity实现AR类炉石传说游戏——开发框架(一)

游戏流程图

这里写图片描述


玩家类

每场对战中有两个玩家实例

每个玩家拥有:

  1. 卡组
  2. 牌库
  3. 手牌
  4. 场上的英雄
  5. 生命值,能量值等属性

卡组

vector作为容器存储

vector<Card> CardsCombination;

由玩家自行组合


牌库

使用栈来作为容器,在对局开始时,用洗乱的玩家卡组作为玩家的牌库

stack<Card> CardsStack;

玩家与牌库的交互:

  1. 每个玩家回合开始时,取出牌库顶端的若干张牌放入玩家的手牌中。
  2. 若玩家触发丢弃/获得手牌的效果,依据效果丢弃/获得手牌

手牌

因为需要频繁增删,使用List作为容器存储

List<Card> CardsInHand;

玩家与手牌交互:玩家使用卡牌,根据卡牌类型(效果牌、英雄牌)来决定使用方式

  1. 若是英雄牌:生成英雄实例,并push_back到玩家的Heroes容器中
  2. 若是效果牌:直接造成效果

场上的英雄:

同样地,频繁增删,使用List容器来存储玩家场上的英雄

List<Hero> Heroes(10);

这个容器应实现自动移位:如当前有5个英雄,分别存储在Heroes[0……4]中,英雄Heroes[2]阵亡后,3,4应自动前移;
这里写图片描述
场景中对应的变化是:
这里写图片描述
ps:数字表示英雄存在于场上的槽位,英雄死亡后,在容器中的位置处于死亡英雄后的那些英雄都应向左移一个槽位。此例中,皇子和盖伦都会向左走一个槽位(需要动画)


生命值,能量值等属性

int类型

注意对属性值的修改操作要使用一个public的函数,而不应该直接用运算符更改,并做保证不超过上限/下限的处理

能量

  1. 初始值为1
  2. 使用卡牌时消耗
  3. 通过卡牌效果获得能量

能量上限

  1. 初始值为1
  2. 每个回合增加一点上限
  3. 通过卡牌效果增加上限

生命值

  1. 初始值为30
  2. 受到敌方伤害时减少
  3. 通过卡牌效果增加或减少

玩家类总结

Class Player {
    // 以下为游戏运行就会使用的属性
    private int HP; // 当前生命值
    private int MP; // 当前能量值
    private int MaxMP; // 最大能量值
    private int MaxHP; // 最大生命值
    private vector<Card> CardsCombination; // 自定义的卡组

    // 以下为对局中才会用到的属性
    private stack<Card> CardsStack; // 牌库
    private List<Card> CardsInHand; // 手牌
    private vector<Hero> Heroes(10); // 场上的英雄

    Player() {
        HP = 30;
        MP = 1;
        MaxMP = 1;
        MaxHP = 30;
    }
}

每个玩家打开游戏时便有一个一直存在的玩家实例,主要是为了存储玩家的自定义卡组。
在“对局开始”事件触发时,应对玩家属性进行一定的设定,如补满生命;初始化能量及上限;随机生成牌库;清空手牌,场上英雄等操作。


卡牌类

class Card{
    private string Name; // 卡牌名称
    private enum Type; // 卡牌类型(只有两种:效果牌/英雄)
    private int Cost; // 卡牌耗费
    private enum Effect; // 效果牌专有属性

    // 英雄牌专有属性
    private int HeroHP;
    private int HeroDamage;
    private enum HeroEffect;

    public void CastEffect(); // 施展效果,根据Effect属性施展不同的效果
    // 需要为每一个效果都写一个单独的施展处理段
    // 是否有更好的解决方案?

    public Hero SummonHero(); // 根据卡牌属性实例化一个Hero并返回
 }

英雄类

Class Hero {
    private string Name;
    private int HeroHP;
    private int HeroDamage;
    private enum HeroEffect;

    public void CastEffect();   
}

猜你喜欢

转载自blog.csdn.net/m18718300471/article/details/79964363