C/C++——文字RPG游戏:MINERPG

更新版本

更新内容

新机制:护盾,回合外反击,限定技能;
战士:新增限定技能无尽之血;
法师:相位转移调整;嗜法重做;风暴盾、暴风雪、心灵震爆、法力燃烧调整;删除技能附魔武器;冰枪术重做;新增技能法力塑盾、限定技能洞悉未来;
刺客:潜行调整,潜行后不触发伺机待发;淬毒匕首、虚弱药剂调整;新增限定技能绝命时刻;
咒术师:咒刃契约,恶毒,宁静结界调整;增幅咒重做;新增技能凝滞咒;万咒覆灭引改为限定技能;
神枪手:精准射击、死亡标记调整;新增限定技能灰烬四部曲;
影武士:影缚调整;影剑阵重做;新增限定技能万剑暴风式;
系统:提高装备爆率;降低战败损失;新增敌人奥法虚灵、噬心魔;调整敌人出现顺序;平衡敌人强度;
其他:修复些BUG,更新了些音效,新增特殊技能BGM;

新技能演示

C++自制控制台RPG游戏——MINERPG

附件

备注:win10的新版控制台只显示一半的制表符,会导致画面显示出问题,可以右键控制台标题→属性→勾选使用旧版控制台并重启控制台解决。此外开启输入法也会导致画面显示出现问题。
链接:https://pan.baidu.com/s/1oXk9NWw96te7b9_mVTGZcw
提取码:ut38

游戏附件(旧版本)

(附带几个测试存档)(更新了无BGM版本,运行不了BGM版本的可以试试)
链接: https://pan.baidu.com/s/1VeddYdi81F7811BxKRyleg
提取码: zkw6
源代码: https://github.com/Eyizoha/MINERPG
视频: https://www.bilibili.com/video/av75651754/

游戏画面

1.界面

界面

2.战斗

在这里插入图片描述

3.对战

在这里插入图片描述

4.新职业

在这里插入图片描述

5.其他截图

123
备注:
进度条:如何在控制台中绘制进度条

声音

背景音乐:
《英雄联盟》:登录界面背景音乐
《家庭教师》:ツナ覚醒
《云和山的彼端》:欧洲战斗曲、阿拉伯战斗曲、中国战斗曲
《天之痕》:少年行
音效:
《魔兽争霸3》:导出音效
备注:
如何使用playsound()同时播放背景音乐和音效:如何使用PlaySound()同时播放两个声音

基本信息

各职业基础属性:

    switch(classes)
    {
    case 0://战士
        strength=vitality=8;
        wit=spirit=5;
        agility=insight=5;
        break;
    case 1://法师
        strength=vitality=5;
        wit=spirit=8;
        agility=insight=5;
        break;
    case 2://刺客
        strength=vitality=5;
        wit=spirit=5;
        agility=insight=8;
        break;
    case 3://咒术师
        strength=vitality=6;
        wit=spirit=6;
        agility=insight=6;
        break;
    case 4://神枪手
        strength=vitality=5;
        wit=spirit=5;
        agility=6;
        insight=10;
        break;
    case 5://影武士 
        vitality=wit=5;
        strength=spirit=8;
        agility=insight=5;
        break;
    }

装备类型以及稀有度:

string classesname[6]= {"战士","法师","刺客","咒术师","神枪手","影武士"};
//
const int rarecolor[6]= {WHITE,GREEN,CYAN,PURPLE,YELLOW,RED};
const string rarelist[6]= {"普通","精良","稀有","史诗","传说","神器"};
const string metal[5]= {"铁制","钢制","秘银","星陨","战争之影"};
const string nonmetal[5]= {"木制","骨制","石英","钢玉","远古之心"};
const string cloth[5]= {"布制","皮制","凤羽","逆鳞","风暴之息"};
const string gem[5]= {"青金","水晶","钻石","黑耀","恒星之眼"};
//
const string positionlist[6]= {"武器","头部","颈部","躯干","手部","足部"};
const string weapon[6]= {"长剑","法杖","匕首","咒刃","左轮","太刀"};
const string head[3]= {"头盔","兜帽","目镜"};
const string neck[3]= {"护符","项链","吊坠"};
const string trunk[3]= {"铠甲","斗篷","法袍"};
const string hand[3]= {"手套","手镯","戒指"};
const string foot[3]= {"长靴","战靴","短靴"};

各职业技能组(新版本):

void initialize()
{
    sl[0][0].name="攻击";
    sl[0][0].explain="无消耗,无冷却,命中80%,暴击20%:对敌方进行普通攻击,造成100%攻击力的物理伤害。";
    sl[0][0].spend=0;
    sl[0][0].cd=0;
    sl[0][0].sp=w_0attack;

    sl[0][1].name="冲锋预备";
    sl[0][1].explain="消耗30MP,冷却2回合:准备进行冲锋,提升200%的攻击2回合、清除减速效果并增加80%行动条。";
    sl[0][1].spend=30;
    sl[0][1].cd=2;
    sl[0][1].sp=w_1charge;

    sl[0][2].name="缴械";
    sl[0][2].explain="消耗40MP,冷却3回合,命中100%:破坏敌方的武器与护甲,降低敌方60%的攻击与护甲4回合。";
    sl[0][2].spend=40;
    sl[0][2].cd=3;
    sl[0][2].sp=w_2disarm;

    sl[0][3].name="磐石之力";
    sl[0][3].explain="消耗20MP,冷却6回合:以坚如磐石的意志强化自身,提升200%护甲与魔抗6回合并清除所有减益状态。";
    sl[0][3].spend=20;
    sl[0][3].cd=6;
    sl[0][3].sp=w_3stone;

    sl[0][4].name="致残打击";
    sl[0][4].explain="消耗50MP,冷却3回合,命中80%,暴击20%:攻击敌方弱点来重创敌方的行动能力,造成160%攻击力的物理伤害,施加4(暴击:6)回合减速40%和4(暴击:6)回合伤害为25%攻击力的流血。";
    sl[0][4].spend=50;
    sl[0][4].cd=3;
    sl[0][4].sp=w_4cripple;

    sl[0][5].name="盾牌猛击";
    sl[0][5].explain="消耗40MP,冷却5回合,命中100%,暴击50%:使用盾牌猛击敌方,对敌方造成400%护甲的物理伤害并击退50%(暴击:75%)的行动条,若敌方行动条触底则眩晕其1回合。";
    sl[0][5].spend=40;
    sl[0][5].cd=5;
    sl[0][5].sp=w_5shieldhit;

    sl[0][6].name="血气唤醒";
    sl[0][6].explain="无消耗,冷却5回合:通过古老的法术唤醒血气强化并治愈自身,每损失1%的生命值便提高2%的攻击4回合,随后每有1点法强便恢复2%的已损失生命值。";
    sl[0][6].spend=0;
    sl[0][6].cd=5;
    sl[0][6].sp=w_6bloodwake;

    sl[0][7].name="雷霆毁灭";
    sl[0][7].explain="消耗20%HP,冷却1回合,命中80%,暴击40%:消耗自身生命值来释放雷霆毁灭之力重创敌方,对敌方造成200%消耗生命值的真实伤害,未命中时返还消耗生命值。";
    sl[0][7].spend=0;
    sl[0][7].cd=1;
    sl[0][7].sp=w_7rage;
    
    sl[0][8].name="无尽之血";
    sl[0][8].explain="消耗100%MP(至少100MP),限定技能:获得无尽的生命之力,本次战斗中翻倍当前的生命值,生命值上限,生命恢复。";
    sl[0][8].spend=100;
    sl[0][8].cd=0;
    sl[0][8].sp=w_8infiniteblood;
    //
    sl[1][0].name="攻击";
    sl[1][0].explain="无消耗,无冷却,命中80%,暴击20%:对敌方进行普通攻击,造成100%攻击力的物理伤害。";
    sl[1][0].spend=0;
    sl[1][0].cd=0;
    sl[1][0].sp=m_0attack;

    sl[1][1].name="冰枪术";
    sl[1][1].explain="消耗20%MP,冷却1回合,命中80%,暴击20%:向敌方发射一支法力凝结的冰枪,造成100%消耗法力值的魔法伤害,每点法强都会提升该技能1%的伤害,若目标被减速则伤害翻倍。";
    sl[1][1].spend=0;
    sl[1][1].cd=1;
    sl[1][1].sp=m_1icelance;

    sl[1][2].name="风暴盾";
    sl[1][2].explain="消耗40MP,冷却4回合:用风暴笼罩自身形成护盾,提高50%的速度同时每有1点法强便提高1%的护甲,持续5回合。";
    sl[1][2].spend=40;
    sl[1][2].cd=4;
    sl[1][2].sp=m_2stormshield;

    sl[1][3].name="暴风雪";
    sl[1][3].explain="消耗80MP,冷却4回合,命中50%,暴击20%:召唤暴风雪攻击敌方,造成6次40%法强的魔法伤害,每次伤害独立计算命中与暴击,每次命中还会施加1回合的冰冻效果(降低50%速度和50%闪避)。";
    sl[1][3].spend=80;
    sl[1][3].cd=4;
    sl[1][3].sp=m_3snowstorm;

    sl[1][4].name="法力塑盾";
    sl[1][4].explain="消耗50%MP,冷却6回合:消耗法力凝成护盾,获得200%消耗法力值的护盾值,护盾不计算护甲和魔抗直接抵挡即将受到的非真实伤害。";
    sl[1][4].spend=0;
    sl[1][4].cd=6;
    sl[1][4].sp=m_4manashield;

    sl[1][5].name="心灵震爆";
    sl[1][5].explain="消耗40MP,冷却5回合,命中200%,暴击50%:用魔法直击敌方心灵,造成120%法强的真实伤害,并降低敌方40%的法强与魔抗4回合,该技能暴击时将眩晕敌方1回合。";
    sl[1][5].spend=40;
    sl[1][5].cd=5;
    sl[1][5].sp=m_5mindblast;

    sl[1][6].name="冥想";
    sl[1][6].explain="消耗100MP,冷却4回合:进行一次冥想,每有2点法强便恢复1%的最大生命值同时减少所有技能1回合的冷却时间。";
    sl[1][6].spend=100;
    sl[1][6].cd=4;
    sl[1][6].sp=m_6muse;

    sl[1][7].name="法力燃烧";
    sl[1][7].explain="消耗25%MP,冷却4回合,命中100%:消耗自身法力值引燃敌方法力,燃烧敌方200%消耗法力值的法力并造成100%消耗法力值的魔法伤害,同时施加4回合伤害为25%消耗法力值燃烧。";
    sl[1][7].spend=0;
    sl[1][7].cd=4;
    sl[1][7].sp=m_7manaburn;
    
    sl[1][8].name="洞悉未来";
    sl[1][8].explain="消耗500MP,限定技能:窥探未来之法,本次战斗中翻倍法力值上限、恢复所有法力值并额外进行一个回合。";
    sl[1][8].spend=500;
    sl[1][8].cd=0;
    sl[1][8].sp=m_8discernfuture;
    //
    sl[2][0].name="攻击";
    sl[2][0].explain="无消耗,无冷却,命中80%,暴击20%:对敌方进行普通攻击,造成100%攻击力的物理伤害。";
    sl[2][0].spend=0;
    sl[2][0].cd=0;
    sl[2][0].sp=a_0attack;

    sl[2][1].name="刺杀";
    sl[2][1].explain="消耗30MP,冷却3回合,命中100%,暴击40%:对敌方进行一次致命攻击,造成160%攻击力的物理伤害,敌方每损失1%生命值都会提升该技能3%的伤害。";
    sl[2][1].spend=30;
    sl[2][1].cd=3;
    sl[2][1].sp=a_1assassinate;

    sl[2][2].name="致盲粉";
    sl[2][2].explain="消耗40MP,冷却6回合,命中200%:向敌方投掷致盲粉雾弹使敌方致盲,降低敌方50%的命中和暴击4回合。";
    sl[2][2].spend=40;
    sl[2][2].cd=6;
    sl[2][2].sp=a_2blindingpowder;

    sl[2][3].name="潜行";
    sl[2][3].explain="无消耗,冷却5回合:进入潜行状态,提升300%的闪避1回合、提高100%暴击2回合并清除所有症状。";
    sl[2][3].spend=0;
    sl[2][3].cd=5;
    sl[2][3].sp=a_3sneak;

    sl[2][4].name="淬毒匕首";
    sl[2][4].explain="消耗50MP,冷却4回合,命中80%,暴击30%:向敌方投掷一把淬毒匕首,造成相当于敌方当前生命值20%的物理伤害并施加4回合伤害为其最大生命值10%(每点法强额外提升0.2%)的中毒。";
    sl[2][4].spend=50;
    sl[2][4].cd=4;
    sl[2][4].sp=a_4poisondagger;

    sl[2][5].name="闷棍";
    sl[2][5].explain="消耗20MP,冷却8回合,命中100%,暴击25%:出其不意地重击敌方弱点,降低敌方30%的护甲3回合并使其眩晕1(暴击:2)回合。";
    sl[2][5].spend=20;
    sl[2][5].cd=8;
    sl[2][5].sp=a_5stickstrike;

    sl[2][6].name="虚弱药剂";
    sl[2][6].explain="消耗40MP,冷却6回合,命中100%:向敌方投掷一瓶虚弱药剂使得敌方虚弱5回合,虚弱状态时降低50%的攻击与法强。";
    sl[2][6].spend=40;
    sl[2][6].cd=6;
    sl[2][6].sp=a_6weakagent;

    sl[2][7].name="致命节奏";
    sl[2][7].explain="消耗40MP,冷却2回合:对敌方进行一次攻击,本回合内所有的攻击结束后都进行一次50%概率的连击判定,判定成功时追加一次攻击,判定失败时重新进行判定直到累计判定失败3次。";
    sl[2][7].spend=40;
    sl[2][7].cd=2;
    sl[2][7].sp=a_7fatalrhythm;
    
    sl[2][8].name="绝命时刻";
    sl[2][8].explain="消耗99%HP,限定技能:放弃恢复能力背水一战,本次战斗中生命恢复和法力恢复变为0,恢复所有法力值并提高300%速度4回合。";
    sl[2][8].spend=0;
    sl[2][8].cd=0;
    sl[2][8].sp=a_8winordie;
    //
    sl[3][0].name="攻击";
    sl[3][0].explain="无消耗,无冷却,命中80%,暴击20%:对敌方进行普通攻击,造成100%攻击力的物理伤害。";
    sl[3][0].spend=0;
    sl[3][0].cd=0;
    sl[3][0].sp=c_0attack;

    sl[3][1].name="神锋咒";
    sl[3][1].explain="消耗50MP,冷却3回合,命中150%,暴击25%:咒语召唤无形的利刃瞬间切割敌方,施加4(暴击:6)回合伤害为100%攻击的流血。";
    sl[3][1].spend=50;
    sl[3][1].cd=3;
    sl[3][1].sp=c_1sectumsempra;

    sl[3][2].name="烈火咒";
    sl[3][2].explain="消耗50MP,冷却3回合,命中150%,暴击25%:咒语召唤炽热的火焰猛烈席卷敌方,施加4(暴击:6)回合伤害为100%法强的燃烧。";
    sl[3][2].spend=50;
    sl[3][2].cd=3;
    sl[3][2].sp=c_2blaze;

    sl[3][3].name="五毒咒";
    sl[3][3].explain="消耗50MP,冷却3回合,命中150%,暴击25%:咒语召唤恐怖的剧毒缓慢侵蚀敌方,施加4(暴击:6)回合伤害为50%攻击+50%法强的中毒。";
    sl[3][3].spend=50;
    sl[3][3].cd=3;
    sl[3][3].sp=c_3fivepoisons;

    sl[3][4].name="守护咒";
    sl[3][4].explain="消耗30MP,冷却4回合:咒语守护自身,提升200%速度1回合,同时根据敌方攻击与法强的比例,每有1点法强便自适应地提升5%的护甲或魔抗,持续6回合。";
    sl[3][4].spend=30;
    sl[3][4].cd=4;
    sl[3][4].sp=c_4daemon;

    sl[3][5].name="增幅双生咒";
    sl[3][5].explain="消耗120MP,冷却8回合:咒语强化自身,提升100%命中与暴击1回合,并从神锋咒、烈火咒和五毒咒中随机选择两个释放。";
    sl[3][5].spend=20;
    sl[3][5].cd=8;
    sl[3][5].sp=c_5increase;

    sl[3][6].name="夺魂咒";
    sl[3][6].explain="无消耗,冷却6回合,命中150%:咒语侵夺敌方灵魂,造成其最大生命值20%的真实伤害并为自身恢复等于该值的生命值,同时消耗其最大法力值20%的法力并为自身恢复等于该值的法力值。";
    sl[3][6].spend=0;
    sl[3][6].cd=6;
    sl[3][6].sp=c_6imperio;

    sl[3][7].name="凝滞咒";
    sl[3][7].explain="消耗20MP,冷却8回合:咒语凝滞双方行动,眩晕敌方4回合并眩晕自身3回合,同时调整自身速度等于敌方速度4回合。";
    sl[3][7].spend=20;
    sl[3][7].cd=8;
    sl[3][7].sp=c_7stagnant;
    
    sl[3][8].name="万咒覆灭引";
    sl[3][8].explain="消耗100MP,限定技能:引导施加在敌方身上的所有咒语效果,清除敌方所有症状并将所有症状将产生伤害瞬间施加于敌方。";
    sl[3][8].spend=100;
    sl[3][8].cd=0;
    sl[3][8].sp=c_8summarycurse;
    //
    sl[4][0].name="攻击/填装";
    sl[4][0].explain="无消耗,无冷却,命中80%,暴击20%:向敌方发射一发子弹,造成100%攻击力的物理伤害。弹轮中无子弹时将进行填装,将弹轮填满。";
    sl[4][0].spend=0;
    sl[4][0].cd=0;
    sl[4][0].sp=s_0attack;
    bulletspend[0]=0;

    sl[4][1].name="快速拔枪";
    sl[4][1].explain="消耗30MP,冷却3回合:快速拔枪对敌方进行一次攻击,随后进行一个额外回合。";
    sl[4][1].spend=30;
    sl[4][1].cd=3;
    sl[4][1].sp=s_1quickfire;
    bulletspend[1]=1;

    sl[4][2].name="精准射击";
    sl[4][2].explain="消耗40MP,冷却4回合,命中100%,暴击20%:向敌方要害进行一次精准射击,造成160%攻击力的物理伤害,每点命中都会提升该技能1%的伤害。";
    sl[4][2].spend=40;
    sl[4][2].cd=4;
    sl[4][2].sp=s_2deadeyeshoot;
    bulletspend[2]=1;

    sl[4][3].name="战术反制";
    sl[4][3].explain="无消耗,冷却6回合,命中80%:对敌方进行一次战术反制,清空敌方的行动条并为己方增加清空值相等数值的行动条。";
    sl[4][3].spend=0;
    sl[4][3].cd=6;
    sl[4][3].sp=s_3tacticalcounter;
    bulletspend[3]=0;

    sl[4][4].name="拦截射击";
    sl[4][4].explain="消耗60MP,冷却6回合,命中80%,暴击20%:向敌方连续发射三发子弹,造成3次100%攻击力的物理伤害,每发子弹独立计算命中与暴击,若三发子弹全部命中则眩晕敌方1回合。";
    sl[4][4].spend=60;
    sl[4][4].cd=6;
    sl[4][4].sp=s_4interceptingshoot;
    bulletspend[4]=3;

    sl[4][5].name="快速填装";
    sl[4][5].explain="消耗20MP,冷却6回合:进行一次快速填装,将弹轮填满,随后进行一个额外回合。";
    sl[4][5].spend=20;
    sl[4][5].cd=6;
    sl[4][5].sp=s_5quickreload;
    bulletspend[5]=0;

    sl[4][6].name="死亡标记";
    sl[4][6].explain="消耗40MP,冷却10回合,命中100%:对敌方施加一个死亡标记,降低其80%的护甲与魔抗1回合,随后进行一个额外回合。";
    sl[4][6].spend=40;
    sl[4][6].cd=10;
    sl[4][6].sp=s_6deathmarker;
    bulletspend[6]=0;

    sl[4][7].name="暴雨疾射";
    sl[4][7].explain="消耗60MP,冷却6回合,命中60%,暴击10%:快速向敌方发射出弹轮中所有的子弹,每发子弹造成150%攻击力的物理伤害,每发子弹独立计算命中与暴击。";
    sl[4][7].spend=60;
    sl[4][7].cd=6;
    sl[4][7].sp=s_7stormshoot;
    bulletspend[7]=1;
    
    sl[4][8].name="灰烬四部曲";
    sl[4][8].explain="消耗200MP,限定技能:架起威力巨大的狙击枪\"灰烬\",\"灰烬\"拥有4发特殊子弹,\"灰烬\"的子弹不触发被动效果,\"灰烬\"的子弹用尽之前无法使用其他技能。";
    sl[4][8].spend=200;
    sl[4][8].cd=0;
    sl[4][8].sp=s_8snipeashes;
    bulletspend[8]=0;
    //
    sl[5][0].name="攻击";
    sl[5][0].explain="无消耗,无冷却,命中80%,暴击10%:对敌方进行普通攻击,造成100%攻击力的物理伤害。";
    sl[5][0].spend=0;
    sl[5][0].cd=0;
    sl[5][0].sp=d_0attack;
    
    sl[5][1].name="影刃";
    sl[5][1].explain="消耗50MP,冷却4回合:以暗影缠绕太刀,提高150%的攻击和命中5回合。";
    sl[5][1].spend=50;
    sl[5][1].cd=4;
    sl[5][1].sp=d_1shadowblade;
    
    sl[5][2].name="诅咒之影";
    sl[5][2].explain="消耗20MP,冷却4回合,命中80%:随机转移自身两个减益状态到暗影中并以暗影捕捉敌方影子,命中时将翻倍持续回合的相同减益状态转移给敌方。";
    sl[5][2].spend=20;
    sl[5][2].cd=4;
    sl[5][2].sp=d_2curseshadow;
    
    sl[5][3].name="三段斩";
    sl[5][3].explain="消耗30MP,冷却3回合:快速对敌方进行连续三次攻击。";
    sl[5][3].spend=30;
    sl[5][3].cd=3;
    sl[5][3].sp=d_3triplechop;
    
    sl[5][4].name="遁入暗影";
    sl[5][4].explain="消耗50%MP,冷却4回合:消耗大量法力值形成暗影笼罩自身,提高400%闪避1回合并恢复200%消耗法力值的生命值。";
    sl[5][4].spend=0;
    sl[5][4].cd=4;
    sl[5][4].sp=d_4intoshadow;
    
    sl[5][5].name="影缚";
    sl[5][5].explain="消耗40MP,冷却4回合,命中100%:以影子缠绕敌方阻碍敌方施法,使其攻击以外的所有技能冷却计时+2。";
    sl[5][5].spend=40;
    sl[5][5].cd=4;
    sl[5][5].sp=d_5shadowdurance;
    
    sl[5][6].name="暗影血祭";
    sl[5][6].explain="消耗50%HP,冷却7回合:消耗大量生命值献祭暗影强化自身,提高40%消耗生命值的护甲和魔抗以及60%消耗生命值的法强,持续7回合。";
    sl[5][6].spend=0;
    sl[5][6].cd=7;
    sl[5][6].sp=d_6bloodsacrifice;
    
    sl[5][7].name="影剑阵";
    sl[5][7].explain="消耗120MP,冷却4回合:召唤8把暗影之剑环绕自身,每次受到敌方攻击和技能伤害时消耗一把暗影之剑回击(命中100%、造成其最大生命值10%的魔法伤害)。";
    sl[5][7].spend=120;
    sl[5][7].cd=4;
    sl[5][7].sp=d_7shadowswordcircle;
    
    sl[5][8].name="万剑暴风式";
    sl[5][8].explain="无消耗,限定技能:召唤8把暗影之剑,随后激活并消耗所有暗影之剑攻击敌方(命中100%、造成其最大生命值10%的魔法伤害),每把暗影之剑独立计算命中。";
    sl[5][8].spend=0;
    sl[5][8].cd=0;
    sl[5][8].sp=d_8swordstorm;
}
  • 26
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
以下是一个简单的C++文字RPG游戏的示例代码,其中包括了基本的角色、战斗和物品系统: ```c++ #include <iostream> #include <string> #include <cstdlib> #include <ctime> using namespace std; // 角色类 class Character { public: string name; int hp; int atk; int def; int gold; Character(string n, int h, int a, int d, int g) { name = n; hp = h; atk = a; def = d; gold = g; } // 攻击函数 void attack(Character& other) { int damage = atk - other.def; if (damage < 0) { damage = 0; } other.hp -= damage; cout << name << "攻击了" << other.name << ",造成了" << damage << "点伤害。" << endl; } // 是否死亡 bool isDead() { return hp <= 0; } }; // 物品类 class Item { public: string name; int price; int hp; int atk; int def; Item(string n, int p, int h, int a, int d) { name = n; price = p; hp = h; atk = a; def = d; } }; // 商店类 class Shop { public: Item items[3]; Shop() { items[0] = Item("草药", 10, 20, 0, 0); items[1] = Item("铁剑", 50, 0, 10, 0); items[2] = Item("铁甲", 100, 0, 0, 10); } // 显示商店物品 void showItems() { cout << "欢迎光临!以下是本店的物品:" << endl; for (int i = 0; i < 3; i++) { cout << i + 1 << ". " << items[i].name << " - " << items[i].price << "金币" << endl; } } // 购买物品 bool buy(Character& c, int choice) { if (c.gold < items[choice - 1].price) { cout << "金币不足,法购买!" << endl; return false; } c.gold -= items[choice - 1].price; c.hp += items[choice - 1].hp; c.atk += items[choice - 1].atk; c.def += items[choice - 1].def; cout << "购买成功!" << endl; return true; } }; // 战斗函数 void battle(Character& player, Character& enemy) { cout << "你遇到了一只" << enemy.name << ",准备战斗!" << endl; while (!player.isDead() && !enemy.isDead()) { player.attack(enemy); if (enemy.isDead()) { cout << enemy.name << "被你打败了!" << endl; player.gold += enemy.gold; return; } enemy.attack(player); if (player.isDead()) { cout << "你被" << enemy.name << "打败了!" << endl; return; } } } int main() { srand(time(NULL)); // 初始化随机数种子 // 初始化角色和商店 Character player("勇者", 100, 10, 5, 50); Character enemies[3] = { Character("史莱姆", 30, 5, 2, 10), Character("骷髅兵", 50, 10, 5, 20), Character("巨龙", 100, 20, 10, 50) }; Shop shop; // 游戏循环 while (true) { cout << "你的状态 - HP:" << player.hp << " ATK:" << player.atk << " DEF:" << player.def << " 金币:" << player.gold << endl; cout << "请选择操作:" << endl; cout << "1. 进入商店" << endl; cout << "2. 进行战斗" << endl; cout << "3. 离开游戏" << endl; int choice; cin >> choice; switch (choice) { case 1: shop.showItems(); cout << "请选择要购买的物品(输入编号):" << endl; cin >> choice; shop.buy(player, choice); break; case 2: battle(player, enemies[rand() % 3]); break; case 3: cout << "游戏结束,欢迎再次光临!" << endl; return 0; default: cout << "无效的操作!" << endl; break; } } return 0; } ```
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值