卡牌游戏源代码(原创)(控制台)游戏预览:
完成度90%,约3000⾏,过年这⼏天全⽤在这上⾯了
由于尚未学到QT等,因此只能在⿊窗⼝下⾯制作了
未完成的部分:
①战⽃代码未优化(800⾏,精简后应该能降到200⾏左右)
②关卡掉落预留位置了,但是没有加⼊(加⼊掉落很简单)
③可以通过程序来⼿动添加关卡,但未加⼊这个功能。
④⼤概这样吧。
完成的部分:
①⽀持卡牌查询,卡牌仓库查询,装备仓库查询。
②通关,选择地图,然后从地图选择关卡。⽀持我⽅5⼈和地⽅6⼈的战⽃模式,有简单的战⽃描述(但没有动画),每回合更新⼀次战⽃实况(可以通过修改源代码来变更为每次⾏动,但感觉这种情况不是很完美),通关可以获得经验,⾦钱等奖励
③购买卡牌,装备(分⾦币和钻⽯,钻⽯可以购买的东西更多)
④抽奖
⑤卡牌和装备的整理
⑥存档、读档,建⽴新⼈物
⑦给卡牌装备新装备,卸除装备,更换装备,将仓库中的卡牌装备到出站中,将出战的卡牌放到仓库中。
游戏资源:
依靠txt格式。
card:卡牌资源,dltr:某地图,dltr1:地图的某关卡(包含剧情和怪物),dunpai(等):装备属性,maplist:地图列表(指向各地图,如),player:玩家存档格式说明,wd:玩家存档名
扩展性个⼈觉得还可以,只需要修改这些资源⽂件即可。
①可添加新地图,新关卡,新剧情,新怪物;
②可添加新装备,新卡牌
以下是资源⽂件:
download.csdn/detail/qq20004604/9431348
//卡牌
//卡牌.h
#pragma once
#include<string>
#include<iostream>
using std::string;
void check(char&ch);
struct combat //结构,战⽃⽤,因为不考虑技能,所以⽤结构挺简单的,如果考虑技能的话,有点⿇烦,⽬前想法是,做⼀个技能类,内置多种技能,然后根据输⼊参{
string name = " "; //名字
int hp = 0;  //⽣命
int atk = 0; //攻击
int def = 0; //防御
int lv = 0;
};
class Equip
{
string name; //装备名
int id;  //装备id
int quality; //装备品质,1⽩2绿3蓝4紫5橙6史诗
int lv;  //装备级别
int atk; //装备带来的攻击
int def; //装备带来的防御
int hp;  //装备带来的⽣命值
int side; //装备位置
public:
Equip() { name = "", id = lv = atk = def = hp = quality = side = 0; }
void set(int i, int l); //根据ID和级别初始化装备
bool buyEq(int i); //根据ID购买装备
int getATK() { return atk*lv*lv; } //返回攻击⼒
int getDEF() { return def*lv*lv; } //返回防御⼒
int getHP() { return hp*lv*lv; }
int getside() { return side; }
int getLv() { return lv; }
int getQu() { return quality; }
string getNANME() { return name; }
void setSide(int s) { side = s; } //设置装备位置,移除卡牌的装备时使⽤
bool show(); //显⽰装备属性
int getLvLimit(); //装备级别限制
void operator=(int i) { side = i + 1; }
friend std::ostream& operator<<(std::ostream& os, const Equip& eq);
friend std::istream& operator>>(std::istream& is, Equip& eq);
bool isHere(); //装备是否存在
};
class Card //卡牌类
{
string name; //卡牌名
int id;
int quality; //品质,1⽩2绿3蓝4紫5橙6神话
int lv;  //级别
double base_atk; //基础攻击系数
double base_def; //基础防御系数
double base_hp;  //基础⽣命值系数
long exp;  //经验值
int atk;  //攻击⼒(实际的,不算⼊装备加成等)
int def;  //防御⼒(实际的,不算⼊装备加成等)
int hp;  //⽣命值(实际的,不算⼊装备加成等)
int hp;  //⽣命值(实际的,不算⼊装备加成等)
void setATK() { atk = int(sqrt(lv*lv*lv)*sqrt(base_atk)*(quality*quality)); } //=等级三次⽅再开⽅乘以基础攻击系数的开⽅乘以品质的平⽅ void setDEF() { def = int(lv*sqrt(base_def)*quality*quality); } //=等级乘以基础防御系数的开⽅乘以品质的平⽅
void setHP() { hp = int(base_hp*quality*quality*sqrt(lv*lv*lv)); }  //=⽣命值系数*品质的平⽅*等级三次⽅的开⽅
Equip eq[6]; //0头盔,1盔甲,2⼿套,3武器,4盾牌,5戒指
public:
Card();
Card(const Card& ca);  //复制构造函数
void addCard(int i); //新建⼀张卡牌,先声明,然后初始化,抽卡时使⽤
bool buyCard(int i); //新建⼀张卡牌,⽤于购买指定卡牌时使⽤
bool show(); //显⽰卡牌所有属性
bool isHere(); //卡牌存在返回true,否则false
bool addEquip(Equip& eq); //装备装备
int getATK(); //得到最终攻击⼒,计算装备加成
int getDEF(); //得到最终防御⼒,计算装备加成
int getHP(); //得到最终⽣命值,计算装备加成
int getLV() { return lv; } //得到级别
int getQU() { return quality; } //得到品质
const string& getName() { return name; }
string getPinZhi();  //得到品质,中⽂版
void setLV(); //级别更新
void addEXP(int ex); //经验更新
int GiveEXP(); //打败后给予的经验值
bool isEquipHere(int num); //检查卡牌某件装备是否存在
Equip& lookforEQ(int s); //根据参数,返回某位置装备的引⽤,⽤于修改该位置装备
void setSide();  //重置卡牌的各个装备的位置,移除装备时使⽤
friend std::ostream& operator<<(std::ostream& os, const Card& ca);
friend std::istream& operator>>(std::istream& is, Card& ca);
};
class Player //玩家
{
string name; //玩家名
Card card[5]; //主⼒卡牌五张
Card caBank[40]; //后备卡牌40张,由于不会数据库,因此这⾥使⽤的是数组
int gold; //⾦币
int diamond; //钻⽯
int lv;  //玩家战⽃次数
int stars; //星星(拆解卡牌后获得)
Equip eqBank[40]; //存放装备的仓库
int MAP = 11; //地图进度,个位数表⽰关卡,除以10表⽰地图
public:
Player(); //默认构造函数
int getGold()const { return gold; }
int getDiamond()const { return diamond; }
int getLv()const { return lv; }
int getStars()const { return stars; }
int getMAP()const { return MAP; } //返回地图进度
string& getName() { return name; }
void addMAP(int m) { MAP = m; } //将新的进度赋值给MAP(如果之后没地图了,赋值和上⼀个关卡维持⼀致即可)
源代码剧情概括
void addGold(int g) { gold += g; } //增加⾦钱
void addDiamond(int d) { diamond += d; } //增加钻⽯
void addLv() { lv += 1; } //战⽃次数+1
void addStars(int s) { stars += s; } //增加拆解碎⽚
void save()const; //存档
void load(std::istream& is, const string&na); //读档
void operator=(const string& na); //创建新⼈物时使⽤
void show(int num = 0);  //显⽰详细信息函数,默认0为全部显⽰,1为显⽰装备中的卡牌,2为显⽰仓库中的卡牌,3为显⽰仓库中的装备 void goodLuck(); //抽奖
bool isCaBankFull(); //返回仓库中卡牌是否满了
bool isEqBankFull(); //返回仓库中装备是否满了
Card& lookfor(); //返回仓库中遇见的第⼀个空位置的卡牌,注意,需要⽤isCaBankFull()函数检测不满的时候才能使⽤
Equip& lookforEquip(); //返回第⼀个没装备的位置
void caBankLvHtoL(); //整理仓库中的卡牌,把级别⾼的放前⾯

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。