AC荣耀(优化版)
2024-08-22 22:34:27
发布于:广东
优化版已完成!共节省约3000字符!同时让代码更美观,修改了一些bug!
在机制上做了一点小改动,可以玩玩看
有bug请指出!
#define curcundangma "018/E/3/CCCCCBK/JB/" //cjdst的存档
#include <bits/stdc++.h>//初学者游戏作品,过于粗糙,勿喷 制作者:Blown sand 改编者:cjdst
using namespace std;
int money = 0;//钱数
int lifebottle = 0, TNT = 0;//道具数量
int ucha[105] = {1, 1, 0, 0, 0, 0};//表示解锁的英雄,1表示解锁,0表示没解锁
int work[105] = {1, 2, 3, 4, 5, 6, 7, 8, 9};//表示任务,每个数表示一种任务
string name[105] = {"张斌老师", "大黄", "黄金矿工", "星辰", "张天境", "杨凡"};//名称
int healths[105] = {100, 140, 90, 100, 120, 100};//各个角色的生命值
string enemy[105] = {"皮卡丘", "@哥", "美西螈"};//敌人名称
string work_name[105] = {
"初战告捷:赢得匹配模式胜利1次。\n奖励:100钱",
"回光返照:使用血瓶1次。\n奖励:100钱",
"战场老手:累计赢得匹配模式胜利3次。\n奖励:200钱",
"闪电战:在4轮内赢得匹配模式胜利1次。\n奖励:200钱",
"运动狂人:使用张斌老师使用1次技能-跑一圈。\n奖励:道具<血瓶>*4",
"核爆大佬:使用大黄或星辰造成1次60点以上的总伤害。\n奖励:道具<炸弹>*2",
"无期徒刑:使用黄金矿工造成1次60点以上的伤害。\n奖励:300钱",
"青云疾现切:使用星辰在1回合内使用7次技能-切!\n奖励:英雄<张天境>",
"白昼爆炎破:使用张天境使用1次技能-绝技:徒手开火同时引爆三个弱点\n奖励:道具<炸弹>*2"
};//任务名
struct pro{
int price, cha;
}products[105] = {{500, 2}, {1000, 3}, {1200, 5}, {50, 0}, {80, 0}};//商品价格及角色编号
int w_win = 0, w_qing = 0, all_damage;//各项杂项
double atk1;//大黄
string FIL(){//获取存档码
string s = "";
int x = money;
while(x > 0){
s += x % 10 + 48, x /= 10;
}
s += '/', s += lifebottle + 48, s += '/', s += TNT + 48, s += '/';
for(int i = 0; i < 6; i++) s += ucha[i] + 66;
for(int i = 0; work[i] !=0 ; i++) s += work[i] + 66;
s += '/', s += w_win + 66, s += w_qing + 66;
if(ucha[4] == 1) s += '/';
return s;
}
void LOA(string s){//读取存档码(请不要乱输入,因为会出现钱数变成负数等等一系列奇怪东西)
int i, j;
memset(work, 0, sizeof(work));
money = 0;
for(i = 0, j = 1; s[i] != '/'; i++, j *= 10){
money += (s[i] - 48) * j;
}
lifebottle = s[i + 1] - 48;
TNT = s[i + 3] - 48;
for(int ii = i + 5; ii <= i + 10; ii++){
ucha[ii - i - 5] = s[ii] - 66;
}
for(int ii = i + 11; s[ii] != '/'; ii++){
work[ii - i - 11] = s[ii] - 66;
}
if(s[s.length() - 1] == '/'){
w_win = s[s.length() - 3] - 66, w_qing=s[s.length() - 2] - 66;
ucha[4]=1;
}else{
w_win = s[s.length() - 2] - 66, w_qing=s[s.length() - 1] - 66;
}
}
void dework(int n){//清除第n个任务
for(int i = n - 1; i < 100; i++){
work[i] = work[i + 1];
}
}
int ask(string s, int l, int r){//询问直到得到满意的结果
int n;
while(1){
cout << s;
cin >> n;
if(n >= l && n <= r) return n;
cout << "范围有误!\n";
}
}
void game(){
int cha = 0;//选择的角色
cout << "欢迎来到AC荣耀,请选择你的英雄。\n";
for(int i = 0; i < 6; i++) if(ucha[i]) cout << i + 1 << "." << name[i] << ' ';
cout << endl;
do{//输入角色
cin >> cha;
if(cha >= 1 && cha <= 6 && !ucha[cha - 1]) cout << "你没有这个英雄。请重新输入。\n", cha = 0;
}while(cha < 1 || cha > 6);
system("cls");//清除全屏
cout << "你选择了" << name[cha - 1] << "作为你的英雄,初始生命值为" << healths[cha - 1] << ".\n";//这也精简成一行
cout << "正在为你匹配对手...\n";
int p2=rand() % 3;
cout << "匹配成功,你的对手是" << enemy[p2] << endl;
int life1 = healths[cha - 1], life2 = 100,
gold = 0, boom = 2,//黄金矿工
spirit = 0,//星辰
bullet = 0, weakness = 0,//张天境
heart = 0, feel = 0,//杨凡
power9999 = 0, steal = 0,//美西螈
xiang = 0;//投降
double atk1 = 21;//大黄
if(p2 == 1) life2 = 120;//@哥
int turn = 0;//计轮器
while(life1 > 0 && life2 > 0){//一直互殴直到有一方血量不大于0
int o = 0;
start:
cout << "————————————————————————\n";
cout << "请选择你的行动。输入:1.技能 2.道具 3.投降 4.查看\n";
cout << "————————————————————————\n";
o = ask("\n", 1, 4);
system("cls");
int cho2;
if(o == 2){//道具
cho2 = ask("请输出要使用的道具编号。\n1.血瓶 2.炸弹\n", 1, 2);
if(cho2 == 1){
if(lifebottle > 0){
cout << "你使用1个血瓶,回复了30点生命值。\n";
life1 += 30, lifebottle--;
for(int i = 1; i <= 2; i++){
if(work[i - 1] == 2){
cout << endl << "您完成了任务:回光反照,奖励100钱。\n";
money += 100;
dework(i);
}
}
}else{
cout << "你的血瓶不足,使用失败。\n";
o = 0;
goto start;
}
}
else{
if(TNT > 0){
cout << "你使用1个炸弹,对手受到了" << int(atk1 * 1.5) << "点伤害。\n";
life2 -= int(atk1 * 1.5), TNT--;
}else{
cout << "你的炸弹不足,使用失败。\n";
o = 0;
goto start;
}
}
}
if(o == 3){//投降
cout << "你投降了。\n";
life1 = 0, xiang = 1;
break;
}
if(o == 4){//查看
cout << "你的英雄是:" << name[cha - 1] << endl;
cout << "对手的英雄是:" << enemy[p2] << endl;
cout << "你的攻击力为" << (cha == 1 ? 30 : (cha == 2 ? atk1 : (cha == 3 ? gold * 9 : (cha == 4 ? spirit * spirit / 2 : (cha == 5 ? weakness * 10 + 15 : 10 + feel)))));
cout << "你的生命值为" << life1 << ",对手的生命值为" << life2 << endl;
if(cha == 3) cout << "你当前拥有的炸药数为" << boom;
if(cha == 4) cout << "你当前的精神力为" << spirit << endl;
if(cha == 5) cout << "你当前的子弹数为" << bullet << endl;
if(cha == 6) cout << "你当前的激动值为" << heart << ",感受力为" << feel << endl;
cout << "你当前拥有的血瓶数为" << lifebottle << endl;
cout << "你当前拥有的炸弹数为" << TNT << endl;
cout << "当前游戏轮数为" << turn + 1 << endl;
goto start;
}
//技能
if(o == 1){
cout << "使用哪个技能?" << endl;
if(cha == 1){//张斌老师
o = ask("输入:1.大喊一声老师真帅 2.跑一圈\n", 1, 2);
if(o == 1){
cout << "你:\"老师真帅\"对手被恶心到,失去了30点生命值。\n";
life2 -= 30;
}
if(o == 2){
cout << "你跑了一圈,但是没有任何用。\n";//这是这个游戏的一个笑点所在,绝对不能改(?)。
for(int i = 1; i <= 2; i++){
if(work[i - 1] == 5){
cout << "\n您完成了任务:运动狂人,奖励道具<血瓶>*4。\n";
lifebottle += 4;
dework(i);
}
}
}
}
if(cha == 2){//大黄
o = ask("输入:1.做题 2.放狗咬对面\n", 1, 2);
if(o == 1){
cout << "你做了一道题,提升了大黄百分之30的攻击力。\n";
atk1 *= 1.3;
}
if(o == 2){
cout << "冲刺,葱!对手受到了来自大黄" << int(atk1) << "点的伤害。\n";
life2 -= int(atk1);
for(int i = 1; i <= 2; i++){
if(work[i - 1] == 6 && atk1 >= 60){
cout << "\n您完成了任务:核爆大佬,奖励道具<炸弹>*2。\n";
TNT += 2;
dework(i);
}
}
}
}
if(cha == 3){//黄金矿工
boom_:
o = ask("输入:1.淘金 2.扔炸药 3.贿赂这个游戏\n", 1, 3);
if(o == 1){
gold += 3;
cout << "你淘到3块金矿,你现在有" << gold << "块金矿。\n";
}
if(o == 2){
if(boom){
cout << "你扔出1个炸药,炸掉了2块金矿,对手也被炸到,受到了24点伤害\n";
gold += 2, boom--, life2 -= 24;
}
else{
cout << "你的炸药用完了,不能再扔炸药。\n";
goto boom_;
}
}
if(o == 3){
cout << "你用所有的金矿贿赂了程序,程序对对手造成了" << gold * 9 << "点伤害,又回复了你" << gold * 5 << "点生命值\n";
for(int i = 1; i <= 2; i++){
if(work[i - 1] == 7 && gold >= 7){
cout << "\n您完成了任务:顶级行贿,奖励300钱。\n";
money += 300;
dework(i);
}
}
gold = 0, life2 -= gold * 9, life1 += gold * 5;
}
}
if(cha == 4){//星辰(刮痧师傅
time:
o = ask("输入:1.集中精神 2.切!3.跳过回合\n", 1, 3);
if(o == 1){
if(turn % 4 != 3){
w_qing = 0;
if(spirit <= 15){
spirit += 5;
cout << "你成功集中了5点精神,你当前的精神力为" << spirit << "。\n";
}
else if(spirit >= 20){
cout << "当前精神力已达最大值20,不能再集中精神。\n";
goto time;
}else{
cout << "你集中了5点精神,但是你的精神力达到了最大值,溢出的精神力已经丢失。你当前的精神力为20。\n";
spirit = 20;
}
}else{
cout << "屑星辰不能在游戏的每四轮的最后一轮集中精神。当前轮数为" << turn + 1 << "。\n";
goto time;
}
}
if(o == 2){
w_qing++;
system("cls");
for(int i = 1; i <= w_qing; i++){
cout << "切!";
}
cout << "星辰凝聚精神在青龙匕首上,并使用其切断了对手的节奏线,对手受到了" << (all_damage = all_damage + spirit / 0.8 + 3) << "点伤害。\n";
life2 -= int(spirit * 0.8 + 3);
for(int i = 1; i <= 2; i++){
if(work[i - 1] == 6 && all_damage >= 60){
cout << "\n您完成了任务:核爆大佬,奖励道具<炸弹>*2。\n";
TNT += 2;
dework(i);
}
}
if(spirit >= 3){
cout << "星辰通过散失3点精神力,停滞了时间,本回合星辰会再次行动。\n";
spirit -= 3;
goto time;
}
all_damage = 0;
for(int i = 1;i <= 2; i++){
if(work[i - 1] == 8 && w_qing == 7){
cout << "\n您完成了任务:青云疾现切,奖励英雄<张天境>。\n";
ucha[4] = 1;
dework(i);
}
}
}
}
if(cha == 5){//张天境
bullet_:
if(bullet == 0){
o = ask("输入:1.绝技:徒手开火 2.子弹装填\n", 1, 2);
if(o == 1){
cout << "张天境在子弹中充入气息,使子弹从手中迸裂而出,烧焦的子弹对对手造成了15点伤害。\n";
cout << "对手的所有弱点都被引爆,受到的伤害增加" << weakness * 15 << ",为" << weakness * 15 + 15 << "点。\n";
life2 -= weakness * 15 + 15;
for(int i = 1; i <= 2; i++){
if(work[i - 1] == 9 && weakness >= 3){
dework(i);
cout << endl << "您完成了任务:白虎爆炎破,奖励道具<炸弹>*2。";
TNT += 2;
}
}
weakness = 0;
}else{
cout << "张天境在空的弹匣中流畅地连续填入2颗子弹,当前子弹数为2。\n";
bullet += 2;
}
}else{
o = ask("输入:1.发射子弹 2.子弹装填", 1, 2);
if(o == 1){
cout << "张天境举起浅蓝手枪瞄准对手,看准时机扣下扳机,对手的弱点被击中,受到了" << weakness * 5 + 20 << "点伤害。\n张天境从对手身上发现了新的弱点。";
life2 -= weakness * 5 + 20, bullet--, weakness++;
}else{
if(bullet++ == 6){
cout << "弹夹已满。\n";
goto bullet_;
}
cout << "张天境填入1颗子弹,当前子弹数为" << bullet << "。\n";
if(bullet == 6){
cout << "弹夹已满,无法再填入更多子弹。\n";
}
}
}
}
if(cha == 6){//杨凡
string ask_ = "输入:1.船桨打击 ";
if(heart < 25) ask_ += "2.稍作观察\n";
else ask_ += "2.开始“科学推理”\n";
o = ask(ask_, 1, 2);
int R = rand() % 2 + 1;
if(o == 1){
cout << "杨凡手持祖传多功能铲形船桨挥击对手,对手受到了25点钝器造成的伤害。\n\n";
life2 -= 25;
}else{
if(heart < 25){
cout << "杨凡试图对对手进行观察。\n";
if(R == 1){
cout << "可惜他只是个普通人,并没有发现什么。\n不过,对于刚才那小小的失败,他似乎更加激动了。\n";
heart += 5;
}else{
cout << "不小心被对手察觉到了。\n";
cout << "对手果断地打断了人如其名的杨凡的观察。杨凡受到了10点来自对手的伤害。\n";
cout << "不过,杨凡发现了对手刻意隐藏而又不小心显露的特质,他仍然更加激动了。\n";
life1 -= 10, heart += 25;
}
}else{
cout << "杨凡使用了科学推理,平静了自己的情绪,回复了10点生命值。对手心绪被扰乱,受到了20点伤害。\n";
heart -= 10, life1 += 10, life2 -= 20, feel += 5;
}
}
if(heart > 0){
if(heart >= 10){
cout << "“有一股热血涌动着。”\n杨凡异常兴奋,回复了" << (heart + feel) / 2 << "点生命值。\n";
life1 += (heart + feel) / 2;
}else{
cout << "杨凡有种“推理”的欲望。\n";
}
}
}
}
int v = 0;
if(p2 == 0){//皮卡丘
if(turn %4 == 3 || turn % 6 == 1){
v = (100 - life2) / 4 + 20;
cout << "对手皮卡丘使用了拳击,对你造成了" << v << "点伤害。\n";
life1 -= v;
}else{
v = 20;
cout << "对手皮卡丘使用了电击,对你造成了20点伤害。\n";
life1 -= v;
}
}else if(p2 == 1){//@哥
if(turn % 4 == 2 || turn % 7 == 5){
v = 17;
system("cls");
cout << "对手@哥使用了清屏,对你造成了17点伤害。\n";
life1 -= v;
}else{
int random = rand() % 11 + 20;
v = random;
cout << "对手@哥使用了随机弹幕轰击,对你造成了" << random << "点伤害。\n";
for(int i = 1; i <= random; i++){
cout << "@\n";
}
life1 -= random;
}
}else if(p2 == 2){//美西螈
if(turn % 4 == 0 || turn % 9 == 7){
v = 15;
cout << "对手美西螈大喊\"给我9999金币\",对你造成了15点伤害,";
if(money >= 10){
cout << "并偷取了你10钱。";
money -= 10, steal += 10, power9999 += 10;
}
else cout << "但是你太穷了,没有足够的钱给美西螈。";
cout << endl;
life1 -= v;
}else{
if(power9999 > 2){
power9999 -= 2, v = power9999 + 14;
cout << "对手美西螈使用了谢谢你!扔出2钱并对你造成了" << v << "点伤害。";
if(v > 29) cout << "美西螈偷取的钱太多了,造成的伤害很高。";
}else{
cout << "美西螈使用唔唔唔,获得5钱。";
power9999 += 5, steal += 5;
}
cout << endl;
life1 -= v;
}
}
if(spirit >= 2 && v >= 1){
cout << "但是星辰的精神力正盛,减少了受到的伤害,实际只受到" << v - int(spirit * 0.7 - 1) << "伤害\n";
life1 += spirit * 0.7 - 1;
}
if(feel > 0 && v >= 1){
cout << "但是对手心神不宁,产生了恐惧,也受到" << feel << "伤害\n";
life2 -= feel;
}
turn++;
}
if(life1 > 0){
cout << "你赢了。你的钱数增加200。\n";
money += 200;
if(p2 == 2){
cout << "同时,美西螈也爆了" << steal + 30 << "钱。\n";
money += steal + 30;
}
w_win++;
for(int i = 1; i <= 2; i++){
if(work[i - 1] == 1){
dework(i);
cout << "您完成了任务:初战告捷,奖励100钱。";
money += 100;
}else if(work[i - 1] == 3 && w_win >= 3){
dework(i);
cout << "您完成了任务:战场老手,奖励200钱。";
money += 200;
}else if(work[i - 1] == 4 && turn <= 4){
dework(i);
cout << "您完成了任务:闪电战,奖励200钱。";
money += 200;
}
}
}else if(life2 > 0){
if(xiang) cout << "你输了。投降不会得到任何战后奖励。";
else{
cout << "你输了。你的钱数增加20。";
money += 20;
}
}else{
cout << "你和对手的血量同时归零,平局。你的钱数增加100。";
money += 100;
}
}
void work_(){
system("cls");
cout << "————————————————————————\n";
cout << "| 任务 列表 |\n";
cout << "————————————————————————\n";
if(work[0]){
cout << "当前任务:\n" << work_name[work[0]] << "\n\n";
if(work[1]) cout << work_name[work[1]];
}
else cout << "无新任务!\n";
cout << "输入任意数字退出任务列表。" << endl;
string vo;
cin >> vo;
system("cls");
}
void living(){
menu:
cout << "————————————————————————\n";
cout << "| 大厅 |\n";
cout << "————————————————————————\n";
cout << "输入:1.匹配 2.商城 3.任务 4.查看存档码 5.读取存档 6.退出游戏\n";
int cho = ask("", 1, 6);
system("cls");
if(cho == 1){
game();
cout << "是否退出?\n是:0 否:其他\n";
string s;
cin >> s;
if(s == "0") goto quit;
else goto menu;
}
if(cho == 2){
//商城
cout << "————————————————————————\n";
cout << "| 商城 |\n";
cout << "————————————————————————\n";
cout << "你的钱数:" << money << "。\n";
cout << "请输入要购买的商品的编号。\n";
cout << "1.英雄<黄金矿工>(价格:500)2.英雄<星辰>(价格:1000) 3. 英雄<杨凡>(价格:1200)\n4.道具<血瓶>*3(价格:50) 5.道具<炸弹>*1(价格:80) 6.退出商城\n";
cho = ask("", 1, 6);
system("cls");
if(cho == 6) goto menu;
else{
if(products[cho - 1].price > money){
cout << "价格不够!\n";
}else if(products[cho - 1].cha && ucha[products[cho - 1].cha]){
cout << "已经买过了!\n";
}else{
money -= products[cho - 1].price;
if(cho == 4) lifebottle += 3;
else if(cho == 5) TNT++;
else ucha[products[cho - 1].cha] = 1;
cout << "购买成功!\n";
}
}
goto menu;
}
if(cho == 3){
//任务
work_();
goto menu;
}
if(cho == 4){
cout << "你的存档码:" << FIL() << endl;
cout << "输入任意数字退出。" << endl;
int bac;
cin >> bac;
system("cls");
goto menu;
}
if(cho == 5){
cout << "请输入存档码(需要退出请输入0):";
string s1;
cin >> s1;
if(s1 != "0"){
LOA(s1);
system("cls");
cout << "读档成功。" << endl;
}else{
system("cls");
}
goto menu;
}
if(cho == 6){
quit:
cout << "已退出。\n";
}
}
int main(){
srand(time(NULL));
living();
return 0;
}
全部评论 7
怎么说呢,张斌老师无敌了
2024-08-20 来自 浙江
3考古
1周前 来自 广东
0才三个月(
1周前 来自 广东
0三个月也不是不行
1周前 来自 广东
0
张斌老师天目山X01笔记
本蒟蒻7月就在这个班,见证zzy做了这游戏2024-11-06 来自 浙江
0我也一样(blown sand真名叫 张*瑜)
1周前 来自 黑龙江
0但我是8月的
1周前 来自 黑龙江
0张哲瑜
1周前 来自 浙江
0
无敌了
2024-08-22 来自 广东
0顶
2024-08-22 来自 广东
0肝帝
2024-08-19 来自 北京
09
2024-08-19 来自 广东
0
好
2024-08-19 来自 广东
0
有帮助,赞一个