游戏流程图
玩家类
每场对战中有两个玩家实例
每个玩家拥有:
- 卡组
- 牌库
- 手牌
- 场上的英雄
- 生命值,能量值等属性
卡组
vector作为容器存储
vector<Card> CardsCombination;
由玩家自行组合
牌库
使用栈来作为容器,在对局开始时,用洗乱的玩家卡组作为玩家的牌库
stack<Card> CardsStack;
玩家与牌库的交互:
- 每个玩家回合开始时,取出牌库顶端的若干张牌放入玩家的手牌中。
- 若玩家触发丢弃/获得手牌的效果,依据效果丢弃/获得手牌
手牌
因为需要频繁增删,使用List作为容器存储
List<Card> CardsInHand;
玩家与手牌交互:玩家使用卡牌,根据卡牌类型(效果牌、英雄牌)来决定使用方式
- 若是英雄牌:生成英雄实例,并push_back到玩家的Heroes容器中
- 若是效果牌:直接造成效果
场上的英雄:
同样地,频繁增删,使用List容器来存储玩家场上的英雄
List<Hero> Heroes(10);
这个容器应实现自动移位:如当前有5个英雄,分别存储在Heroes[0……4]中,英雄Heroes[2]阵亡后,3,4应自动前移;
场景中对应的变化是:
ps:数字表示英雄存在于场上的槽位,英雄死亡后,在容器中的位置处于死亡英雄后的那些英雄都应向左移一个槽位。此例中,皇子和盖伦都会向左走一个槽位(需要动画)
生命值,能量值等属性
int类型
注意对属性值的修改操作要使用一个public的函数,而不应该直接用运算符更改,并做保证不超过上限/下限的处理
能量
- 初始值为1
- 使用卡牌时消耗
- 通过卡牌效果获得能量
能量上限
- 初始值为1
- 每个回合增加一点上限
- 通过卡牌效果增加上限
生命值
- 初始值为30
- 受到敌方伤害时减少
- 通过卡牌效果增加或减少
玩家类总结
using System;
using System.Collections.Generic;
public class Player
{
/// <summary>
/// 当前生命值
/// </summary>
private int HP;
/// <summary>
/// 当前能量值
/// </summary>
private int MP;
/// <summary>
/// 最大生命值
/// </summary>
private int MaxHP;
/// <summary>
/// 最大能量值
/// </summary>
private int MaxMP;
/// <summary>
/// 卡组,由玩家在对局外自行组合
/// </summary>
private List<Card> CardsCombination;
/// <summary>
/// 牌库,对局开始时打乱卡组获得
/// </summary>
private Stack<Card> CardStack;
/// <summary>
/// 手牌,玩家从牌库中获得
/// </summary>