蒟蒻自写小游戏
  • 板块灌水区
  • 楼主ETO_Xormnerx
  • 当前回复8
  • 已保存回复8
  • 发布时间2024/8/25 18:30
  • 上次更新2024/8/25 21:13:35
查看原帖
蒟蒻自写小游戏
1356572
ETO_Xormnerx楼主2024/8/25 18:30

有没有大佬看看写的怎么样

游戏名:AC荣耀

#include <bits/stdc++.h>//初学者游戏作品,过于粗糙,勿喷  制作者:fzq2012
using namespace std;
int money=0;//钱数
int lifebottle=0,TNT=0;//道具数量 
int ucha[105]={1,1,0,0,0};//表示解锁的英雄,1表示解锁,0表示没解锁 
int work[105]={1,2,3,4,5,6,7,8,9};//表示任务,每个数表示一种任务 
int w_win=0,w_qing=0;//统计各项杂项 
//在此处定义变量,就算没有初始化值,它们的值也为0。这里给它们初始化值只是为了看起来直观。
void living();//函数的声明
void dework(int n){//清除第n个任务 
	for(int i=n-1;i<100;i++){
		work[i]=work[i+1];
	}
}
void game(){
	int cha=0;//选择的角色
	cout << "欢迎来到AC荣耀,请选择你的英雄。" << endl;
	cout << "输入:1.张斌老师 2.大黄";
	if(ucha[2]==1){
		cout << " 3.黄金矿工";
	}
	if(ucha[3]==1){
		cout << " 4.星辰";
	}
	if(ucha[4]==1){
		cout << " 5.张天境";
	}
	cout << endl;
	do{//这里的do-while循环是为了让玩家在输入错误时能够再次执行输入的代码,输入正确才继续。
		int o1;
		cin >> o1;
		switch(o1){
			case 1:cha=1;break;
			case 2:cha=2;break;
			case 3:if(ucha[2]==1){cha=3;}else{cha=0;cout << "你没有这个英雄。请重新输入。"<< endl;}break;
			case 4:if(ucha[3]==1){cha=4;}else{cha=0;cout << "你没有这个英雄。请重新输入。"<< endl;}break;
			case 5:if(ucha[4]==1){cha=5;}else{cha=0;cout << "你没有这个英雄。请重新输入。"<< endl;}break;
			default:cout << "你没有这个英雄。请重新输入。"<< endl;break;
		}
	}while(cha!=1&&cha!=2&&cha!=3&&cha!=4&&cha!=5);
	system("cls");//这个东西是我从书上学的黑科技,它可以清除全屏
	if(cha==1){
		cout << "你选择了张斌老师作为你的英雄,初始生命值为100。"<< endl; 
	}else if(cha==2){
		cout << "你选择了大黄作为你的英雄,初始生命值为140。"<< endl;
	}else if(cha==3){
		cout << "你选择了黄金矿工作为你的英雄,初始生命值为90。"<< endl;
	}else if(cha==4){
		cout << "你选择了星辰作为你的英雄,初始生命值为100。"<< endl;
	}else if(cha==5){
		cout << "你选择了张天境作为你的英雄,初始生命值为120。"<< endl;
	}
	cout << "正在为你匹配对手..." << endl;
	int p2=0;
	srand(time(NULL));//生成随机序列
	p2=rand()%2;
	if(p2==0){
		cout << "匹配成功,你的对手是皮卡丘。" << endl;
	}else if(p2==1){
		cout << "匹配成功,你的对手是@哥。" << endl;
	}
    int life1=100,life2=100,
	atk1=100,//大黄 
	gold=0,boom=2,//黄金矿工
	spirit=0,//星辰 
	bullet=0,weakness=0,//张天境 
	wait=0,
	xiang=0;//投降不会得到任何奖励 
    if(cha==2)life1=140;
    if(cha==3)life1=90;
    if(cha==5)life1=120;
    if(p2==1)life2=120;
    int turn=0;//这是一个计轮器 
	while(life1>0&&life2>0){//一直互殴直到有一方血量不大于0
		int o=0; 
		wait=0;
		do{
			cout << "————————————————————————" << endl;
			cout << "请选择你的行动。输入:1.技能 2.道具 3.投降 4.查看" << endl;
			cout << "————————————————————————" << endl;
			cin >> o;
			system("cls");
			int cho2=0; 
			int o2=0;
			switch(o){
				case 1:cout << "使用哪个技能?" <<endl;break;
				case 2:
					cho2=0;
					cout << "请输出要使用的道具编号。" << endl << "1.血瓶 2.炸弹" << endl;
					do{
			        	cin >> o2;
						switch(o2){
							case 1:cho2=1;break;
							case 2:cho2=2;break;
							default:cout << "你输入的数字应该是1或者2才对。给我重输。"<< endl;break;
						}
					}while(cho2!=1&&cho2!=2);
				if(cho2==1){
					if(lifebottle>0){
						cout << "你使用1个血瓶,回复了25点生命值。" <<endl;life1+=25;lifebottle--;
						for(int i=1;i<=2;i++){
							if(work[i-1]==2){
								dework(i);
								cout << endl << "您完成了任务:回光反照,奖励100钱。" << endl;
								money+=100;
							}
						}
					}else{
						cout << "你的血瓶不足,使用失败。" << endl;o=0;
					}
				}else if(cho2==2){
					if(TNT>0){
						cout << "你使用1个炸弹,对手受到了" << (int)(atk1*0.32) << "点伤害。" <<endl;life2-=(int)(atk1*0.32);TNT--;
					}else{
						cout << "你的炸弹不足,使用失败。" << endl;o=0;
					}
				}
				break;
				case 3:cout << "你投降了。" <<endl;life1=0;xiang=1;break;
				case 4:
					if(cha==1){
						cout << "你的英雄是:张斌老师 ";
					}else if(cha==2){
						cout << "你的英雄是:大黄 ";
					}else if(cha==3){
						cout << "你的英雄是:黄金矿工 ";
					}else if(cha==4){
						cout << "你的英雄是:星辰 ";
					}else if(cha==5){
						cout << "你的英雄是:张天境 ";
					}
					if(p2==0){
						cout << "对手的英雄是:皮卡丘" << endl;
					}else if(p2==1){
						cout << "对手的英雄是:@哥" << endl;
					}
					cout << "你的生命值为" << life1 << " " << "对手的生命值为" << life2 << endl;
					cout << "你拥有的血瓶数量为" << lifebottle << endl;
					cout << "你拥有的炸弹数量为" << TNT << endl;
					cout << "当前游戏轮数为" << turn+1 << endl;
				break;
				default:cout << "你输入的数字应该是1~4之间的整数才对。"<< endl;break;
			}
		}while(o!=1&&o!=2&&o!=3&&o!=4);
		if(o==3||o==4){
			wait=1;//如果选择 投降 或者 查看 选项,就不会跳过这一回合。
		}
		if(o==1){
			if(cha==1){
				//张斌老师的技能 
				do{
					cout << "输入:1.大喊一声老师真帅 2.跑一圈" <<endl;
		        	cin >> o;
					switch(o){
						case 1:cout << "你:\"老师真帅\"对手被恶心到,失去了30点生命值。" <<endl;life2-=30;break;
						case 2:cout << "你跑了一圈,但是没有任何用。" <<endl;//这是这个游戏的一个笑点所在,绝对不能改(?)。
						for(int i=1;i<=2;i++){
							if(work[i-1]==5){
								dework(i);
								cout << endl << "您完成了任务:运动狂人,奖励道具<血瓶>*4。";
								lifebottle+=4;
							}
						}
						break;
						default:cout << "你输入的数字应该是1或者2才对。给我重输。"<< endl;break;
					}
				}while(o!=1&&o!=2);
				
			}else if(cha==2){
				//大黄的技能 
				do{
					cout << "输入:1.做题 2.放狗咬对面" <<endl;
		        	cin >> o;
					switch(o){
						case 1:cout << "你做了一道题,提升了大黄百分之30的攻击力。" <<endl;atk1*=1.3;break;
						case 2:cout << "冲刺,葱!对手受到了来自大黄" << (int)(atk1*0.21) << "点的伤害。" << endl;life2-=(int)(atk1*0.21);
						for(int i=1;i<=2;i++){
							if(work[i-1]==6&&(int)(atk1*0.21)>=60){
								dework(i);
								cout << endl << "您完成了任务:核爆大佬,奖励道具<炸弹>*2。";
								TNT+=2;
							}
						}
						break;
						default:cout << "你输入的数字应该是1或者2才对。给我重输。"<< endl;break;
					}
				}while(o!=1&&o!=2);
				
			}else if(cha==3){
				//黄金矿工的技能 
				do{
					cout << "输入:1.淘金 2.扔炸药 3.贿赂这个游戏" <<endl;
		        	cin >> o;
					switch(o){
						case 1:gold+=2;cout << "你淘到2块金矿,你现在有" << gold << "块金矿,你的生命值增加了4点。" <<endl;life1+=4;break;
						case 2:if(gold==0){
								cout << "你没有金矿,用不了炸药。" << endl;o=0;
							}else{
								if(boom>0){
									cout << "你扔出1个炸药,炸掉了金矿,对手也被炸到,受到了32点伤害" << endl;
									boom--;
									life2-=32; 
								}else{
									cout << "你的炸药用完了,不能再扔炸药。" << endl;
									o=0;
								}
							}
						break;
						case 3:if(gold>0){
							cout << "你用所有的金矿贿赂了程序,程序对对手造成了" << gold * 9 << "点伤害,又回复了你" << gold * 5 << "点生命值" <<endl;
							life2-=gold*9;
							for(int i=1;i<=2;i++){
								if(work[i-1]==7&&gold*9>=60){
									dework(i);
									cout << endl << "您完成了任务:顶级行贿,奖励300钱。";
									money+=200;
								}
							}
							life1+=gold*5;
							gold=0;
						}else{
							cout << "你没有金矿,不能贿赂。" << endl;
							o=0;
						}
						break;
						default:cout << "你输入的数字应该是1、2或者3才对。给我重输。"<< endl;break;
					}
				}while(o!=1&&o!=2&&o!=3);
			}else if(cha==4){
				//星辰的技能 
				do{
					cout << "输入:1.集中精神 2.切!" <<endl;
//星辰的二技能复刻我小时候写的小说,里面我第二个人格的大招名字是青云疾现切,这个大招可以快速挥刀很多次,实在是太帅了(
		        	cin >> o;
					switch(o){
							case 1:if(turn%4!=3){
								if(spirit<=5){
								spirit+=5;
								cout << "你成功集中了5点精神,你当前的精神力为" << spirit << "。" <<endl;
								}else if(spirit==10){
									cout << "当前精神力已达最大值10,不能再集中精神。" <<endl;
									o=0; 
								}else{
									cout << "你集中了5点精神,但是你的精神力达到了最大值,溢出的精神力已经丢失。你当前的精神力为10。" <<endl;
								}
							}else{
								cout << "屑星辰不能在游戏的每四轮的最后一轮集中精神。当前轮数为" << turn+1 << "。" <<endl;
								o=0;
							}
						break;
						case 2:cout << "星辰凝聚精神在青龙匕首上,并使用其切断了对手的节奏线,对手受到了" << spirit+15 << "点伤害。" << endl;life2-=spirit+15;
						if(spirit>=4){
							cout << "星辰通过散失3点精神力,停滞了时间,本回合星辰会再次行动。" << endl;spirit-=3;wait=1;
						}
						w_qing++;
						for(int i=1;i<=2;i++){
							if(work[i-1]==8&&w_qing>=4){
								dework(i);
								cout << endl << "您完成了任务:青云疾现切,奖励英雄<张天境>。";
								ucha[4]=1;
							}
						}
						break;
						default:cout << "你输入的数字应该是1或者2才对。给我重输。"<< endl;break;
					}
				}while(o!=1&&o!=2);
			}else if(cha==5){
				//张天境的技能
				if(bullet==0){
					cout << "输入:1.绝技:徒手开火 2.子弹装填" <<endl;
					do{
				       	cin >> o;
						switch(o){
							case 1:cout << "张天境在子弹中充入气息,使子弹从手中迸裂而出,烧焦的子弹对对手造成了15点伤害。" << endl;life2-=15;
								if(weakness>=1){
									cout << "对手被击中弱点,受到的伤害增加" << weakness*15 << ",为" << weakness*15+15 << "点。" << endl;
									life2-=weakness*15;
								}
							for(int i=1;i<=2;i++){
								if(work[i-1]==9&&weakness*15+15>=60){
									dework(i);
									cout << endl << "您完成了任务:白虎爆炎破,奖励道具<炸弹>*2。";
									TNT+=2;
								}
							}
							break;
							case 2:cout << "张天境在空的弹匣中流畅地连续填入2颗子弹,当前子弹数为2。" << endl;bullet+=2;break;
							default:cout << "你输入的数字应该是1或者2才对。给我重输。"<< endl;break;
						}
					}while(o!=1&&o!=2);
				}else{
					cout << "输入:1.破! 2.子弹装填" <<endl;
					do{
				       	cin >> o;
						switch(o){
							case 1:cout << "张天境举起浅蓝手枪瞄准对手,看准时机扣下扳机,对手被击中,受到了" << weakness*5+20 << "点伤害。" << endl;life2-=weakness*5+20;bullet--;
								cout << "张天境从对手身上发现了新的弱点。" << endl;weakness++;break;
							case 2:if(bullet<=4){
								bullet++;
								cout << "张天境填入1颗子弹,当前子弹数为" << bullet << "。" << endl;
							}else if(bullet==5){
								cout << "张天境填入1颗子弹,当前子弹数为6,无法再填入更多子弹。" << endl;bullet++;
							}else{
								cout << "无法再填入更多子弹。" << endl;o=0;
							}
							break;
							default:cout << "你输入的数字应该是1或者2才对。给我重输。"<< endl;break;
						}
					}while(o!=1&&o!=2);
				}
			}
		}
		if(wait==0){
			int v=0;
			if(p2==0){ 
			//皮卡丘的技能 
				if(turn%4==3||turn%6==1){
					v=(100-life2)/4+20;
					cout << "对手皮卡丘使用了拳击,对你造成了" << v << "点伤害。" << endl;
					life1-=v;
				}else{
					v=20;
					cout << "对手皮卡丘使用了电击,对你造成了20点伤害。" <<endl;
					life1-=v;
				}
			}else if(p2==1){
				if(turn%4==2||turn%7==5){
					v=17;
					system("cls"); 
					cout << "对手@哥使用了清屏,对你造成了17点伤害。" << endl;
					life1-=v;
				}else{
					srand(time(NULL));
					int random=rand()%11+20;
					v=random;
					cout << "对手@哥使用了随机弹幕轰击,对你造成了" << random << "点伤害。" <<endl;
					for(int i=1;i<=random;i++){
						cout << "@" << endl;
					} 
					life1-=random;
				}
			}
			if(spirit>=2&&v>=1){
				cout << "但是星辰的精神力正盛,减少了受到的伤害,实际只受到" << v-(spirit-1) << "伤害" << endl;
				life1+=spirit-1;
			}
			w_qing=0;
			turn++;
		}
	}
	if(life1>0){
		cout << "你赢了。你的钱数增加200。";
		money += 200;
		w_win++;
		for(int i=1;i<=2;i++){
			if(work[i-1]==1){
				dework(i);
				cout << endl << "您完成了任务:初战告捷,奖励100钱。";
				money+=100;
			}else if(work[i-1]==3){
				if(w_win>=3){
					dework(i);
					cout << endl << "您完成了任务:战场老手,奖励200钱。";
					money+=200;
				}
			}else if(work[i-1]==4){
				if(turn<=4){
					dework(i);
					cout << endl << "您完成了任务:闪电战,奖励200钱。";
					money+=200;
				}
			}
		}
	}else if(life2>0){
		if(xiang==0){
			cout << "你输了。你的钱数增加20。";
			money += 20;
		}else{
			cout << "你输了。投降不会得到任何战后奖励。";
		}
	}else{
		cout << "你和对手的血量同时归零,平局。你的钱数增加100。";
		money += 100;
	}
}
void work_(){
	system("cls");
	cout << "————————————————————————" << endl;
	cout << "|                   任务 列表                   |" << endl;
	cout << "————————————————————————" << endl;
	for(int i=1;i<=2;i++){
		cout << "任务" << i << ":" << endl; 
		switch(work[i-1]){
			case 1:cout << "初战告捷:赢得匹配模式胜利1次。" << endl << "奖励:100钱" << endl;break;
			case 2:cout << "回光返照:使用血瓶1次。" << endl << "奖励:100钱" << endl;break;
			case 3:cout << "战场老手:累计赢得匹配模式胜利3次。" << endl << "奖励:200钱" << endl;break;
			case 4:cout << "闪电战:在5轮内赢得匹配模式胜利1次。" << endl << "奖励:200钱" << endl;break;
			case 5:cout << "运动狂人:使用张斌老师使用1次技能-跑一圈" << endl << "奖励:道具<血瓶>*4" << endl;break;
			case 6:cout << "核爆大佬:使用大黄造成1次60点以上的伤害。" << endl << "奖励:道具<炸弹>*2" << endl;break;
			case 7:cout << "顶级行贿:使用黄金矿工造成1次60点以上的伤害。" << endl << "奖励:300钱" << endl;break;
			case 8:cout << "青云疾现切:使用星辰在1回合内使用4次技能-切!" << endl << "奖励:英雄<张天境>" << endl;break;
			case 9:cout << "白昼爆炎破:使用张天境使用1次技能-绝技:徒手开火造成一次60点以上的伤害" << endl << "奖励:道具<炸弹>*2" << endl;break;
			default:cout << "无新任务" << endl;break;
		}
	}
	cout << "输入任意数字退出任务列表。" << endl;
	int vo;
	cin >> vo;
	system("cls");
	living();
}
void living(){
	cout << "————————————————————————" << endl;
	cout << "|                     大厅                     |" << endl;
	cout << "————————————————————————" << endl;
	cout << "输入:1.匹配 2.商城 3.任务" << endl;
	int cho=0;
	do{
		int o;
		cin >> o;
		switch(o){
			case 1:cho=1;break;
			case 2:cho=2;break;
			case 3:cho=3;break;
			default:cout << "输入错了,你要输入1、2或3。再输入一次。"<< endl;break;
		}
	}while(cho!=1&&cho!=2&&cho!=3);
	system("cls");
	if(cho==2){
		//商城 
		cout << "————————————————————————" << endl;
		cout << "|                     商城                     |" << endl;
		cout << "————————————————————————" << endl;
		cout << "你的钱数:" << money << "。" << endl;
		cout << "请输入要购买的商品的编号。" << endl;
		cout << "1.英雄<黄金矿工>(价格:500)2.英雄<星辰>(价格:1000) 3.道具<血瓶>*3(价格:50) " << endl << "4.道具<炸弹>*1(价格:80) 5.退出商城" << endl;
		cho=0;
		do{
			int o;
			cin >> o;
			switch(o){
				case 1:cho=1;break;
				case 2:cho=2;break;
				case 3:cho=3;break;
				case 4:cho=4;break;
				case 5:cho=5;break;
				default:cout << "输入错了,再输入一次。"<< endl;break;
			}
		}while(cho!=1&&cho!=2&&cho!=3&&cho!=4&&cho!=5);
		system("cls");
		if(cho==1){
			if(ucha[2]==0){
				if(money>=500){
					cout << "购买成功" << endl;
					ucha[2]=1;
					money-=500;
				}else{
					cout << "你的钱数不够500,买不起 英雄<黄金矿工>。" << endl;
				}
			}else{
				cout << "这件商品你已经买过了。" << endl;
			}
			living();
		}else if(cho==2){
			if(ucha[3]==0){
				if(money>=1000){
					cout << "购买成功" << endl;
					ucha[3]=1;
					money-=1000;
				}else{
					cout << "你的钱数不够1000,买不起 英雄<星辰>。" << endl;
				}
			}else{
				cout << "这件商品你已经买过了。" << endl;
			}
			living();
		}else if(cho==3){
			if(money>=50){
				cout << "购买成功" << endl;
				lifebottle+=3;
				money-=50;
			}else{
				cout << "你的钱数不够50,买不起 道具<血瓶>*3。" << endl;
			}
			living();
		}else if(cho==4){
			if(money>=80){
				cout << "购买成功" << endl;
				TNT+=1;
				money-=80;
			}else{
				cout << "你的钱数不够80,买不起 道具<炸弹>*1。" << endl;
			}
			living();
		}else{
			living(); 
		}
	}else if(cho==3){
		//任务
		work_();
	}else{
		//匹配 
	}
}
int main(){
	living();
	int back=1;
	while(back!=0){ 
		game();
		cout << endl << "是否退出整个游戏?(是:0/否:其他)" << endl;
		cin >> back;
		if(back==0){
			cout << "已退出。" << endl;
		}else{
			system("cls");
			living();
		}
	}
	return 0;
}

2024/8/25 18:30
加载中...