三角洲行动V2.0.1 正式版本(介于lizexu的升级版本)

leo1009 2026-08-27 16:31:45 2026-08-27 16:45:58

	#include<bits/stdc++.h>
	#include<ctime>
	#include<string>
	#include<conio.h>
	#include<windows.h>
	#include<cstdio>
	#include<cmath> 
	#include<fstream> 
	using namespace std;
	bool fang=false,kai=false;
	string oname="";
	bool flag=false; 
	int loseplayer=0;
	string have;
	int lv=0;
	int cnt=0;
	bool lose=false;
	int gid=0;
	int gun=0;
	string lastlose;
	bool buy_it=false;
	string bullet="";
	string ourname[10]={"","G18","AKM","MP5","AWM","Barrett M82A1","MP7A1","HK416"};
	int gun_kill[10]={0,13,28,18,75,90,20,24};
	int kill[110]={};
	string losename;
	string my_name[5]={"","红狼","骇爪","威龙","蝶"};
	int id=rand()%4;
	int hp[10]={0,100,100,100,100};
	string gun_name[110]={"M16","pp-19","G18","AKS74U"};
	int coin=100,buy_time,bt[1010],cd_=0,buy[1010],kill_=0,player=0,game=0;
	string name[5]={"花似雪","N","N"},gname,shop[10]={"止痛药(10血)","简易注射剂(20血)","强效注射剂(30血)","战地医疗箱(50血)","缩短CD 1秒","缩短CD 2秒","伤害(1血)","伤害(2血)","角色(一只姜)","角色(Macw07)"};
	bool isKeyPressed(int key) {
	    return (GetAsyncKeyState(key)&0x8000)!=0;
	}
	void play_mode(){
		srand(static_cast<unsigned int>(time(0)));
		int n,ox=100,choice,f=0,m_kill=0,f2=0;
		string g;
		double p=0,p1=0,p2=0,p3=0,p4=0;
		system("cls");
		system("cls");
		while(true){
			label2: 
			cout<<"请选择出战角色:\n1.红狼	2.骇爪	3.威龙	4.蝶\n"; 
			cin>>choice;
			gid=choice;
			if(choice==1){
				if(losename=="红狼"){
					cout<<"负伤状态无法选择!\n";
					continue;
				}else{
				cout<<"角色剩余血量: "<<hp[choice]<<"\n";
				cout<<"你要使用什么武器? 1.G18 2.AKM 3.MP5 4.AWM 5.Barrett M82A1 6.MP7A1 7.HK416\n";
				cin>>gun;
				gname="红狼";
				player=0;
				break; 
			}
			}
			else if(choice==2&&name[1]=="骇爪"){
				if(losename=="骇爪"){
					cout<<"负伤状态无法选择!\n";
					continue;
				}else{
				cout<<"角色剩余血量: "<<hp[choice]<<"\n";
				cout<<"你要使用什么武器? 1.G18 2.AKM 3.MP5 4.AWM 5.Barrett M82A1 6.MP7A1 7.HK416\n";
				cin>>gun;
				gname="骇爪";
				player=1;
				break; 
			}
			}
			else if(choice==3&&name[2]=="威龙"){
				if(losename=="威龙"){
					cout<<"负伤状态无法选择!\n";
					continue;
				}else{
				cout<<"角色剩余血量: "<<hp[choice]<<"\n";
				cout<<"你要使用什么武器? 1.G18 2.AKM 3.MP5 4.AWM 5.Barrett M82A1 6.MP7A1 7.HK416\n";
				cin>>gun;
				gname="威龙";
				player=2; 
				break;
			}
			}else if(choice==4 && name[3]=="蝶"){
				if(losename=="蝶"){
					cout<<"负伤状态无法选择!\n";
					continue;
				}else{
				cout<<"角色剩余血量: "<<hp[choice]<<"\n";
				cout<<"你要使用什么武器? 1.G18 2.AKM 3.MP5 4.AWM 5.Barrett M82A1 6.MP7A1 7.HK416\n";
				cin>>gun;
				gname="蝶";
				player=3; 
				break;
			}
			cout<<"你没有这个角色...\n"; 
		}
	}
		cout<<"你的角色为:"<<gname<<endl;
		choice=rand()%2;
		cout<<"敌方的角色为:"; 
		if(choice==0){
			cout<<"阿萨拉士兵\n"; 
			oname="阿萨拉士兵";
		}
		else if(choice==1){
			cout<<"哈夫克士兵\n"; 
			oname="哈夫克士兵";
		}
		else if(choice==2){
			cout<<"阿萨拉盾兵\n"; 
			oname="阿萨拉盾兵";
		}
		system("pause");
		while(true){
			label1:
			if(hp[gid]<=10){
				system("color 40");
				Sleep(1000);
			} 
			Sleep(1000); 
			f++;
			f2++; 
			system("cls");
			cout<<"我方血量:"<<hp[gid]<<endl; 
	    	cout<<"敌方血量:"<<ox<<endl;
	    	cout<<"普攻CD:"<<p<<endl;
	    	cout<<"1技能CD:"<<p1<<endl; 
	    	cout<<"2技能CD:"<<p2<<endl; 
	    	cout<<"大招CD:"<<p3<<endl;
			cout<<"武器CD:"<<p4<<endl; 
			if (isKeyPressed('1')) {
				if(p<=0){
					if(flag){
						cout<<"我方使用北极星,造成了敌方75点伤害"<<endl;
						p=0.7;
						ox-=75;
						flag=false; 
					}else{
			        cout<<"我方使用北极星,造成了敌方37点伤害"<<endl;
			        p=0.7;
					ox-=37;
				}
		    	}
		    }
		    else if (isKeyPressed('2')) {
		    	if(p1<=0){
		    		if(player==0){
		    			int a=1;
						int b=1;
						int c=abs(rand()%1);
		    			cout<<"我方使用一技能 三联装手炮,造成了敌方"<<25*(a+b+c)<<"点伤害"<<endl;
		    			ox-=10*(a+b+c);
					}
					else if(player==1){
						if(flag){
							cout<<"我方使用一技能 数据飞刀,使敌方扣除50滴血"<<endl;
							ox-=50;
							flag=false;
						}else{
		    			cout<<"我方使用一技能 数据飞刀,使敌方扣除40滴血"<<endl;
		    			ox-=40; 
		    		}
					}
					else if(player==2){
		    			cout<<"我方使用一技能 C4炸弹,造成了敌方"<<60<<"点伤害"<<endl;
		    			ox-=60;
					}else if(player==3){
						cout<<"我方使用一技能 纳米医疗粉尘为自己加"<<20<<"点血量"<<endl;
						if(hp[gid]+20>100){
							hp[gid]=100;
						}else{
							hp[gid]+=20; 
						}
					}
		        	p1=5-cd_;
		    	}
		    }
		    else if (isKeyPressed('3')) {
		    	if(p2<=0){
		    		if(player==0){
			        	cout<<"我方使用二技能 烟幕弹,使敌方眩晕2秒"<<endl;
		    			f-=2;
					}
					else if(player==1){
		    			cout<<"我方使用二技能 闪光巡飞器,使敌方眩晕3秒"<<endl;
		    			f-=3; 
					}
					else if(player==2){
		    			cout<<"我方使用二技能 喷气,对敌方造成"<<12<<"精神伤害"<<endl;
		    			ox-=12;
					}else{
						cout<<"我方使用二技能 遥控烟雾,使敌方眩晕3秒"<<endl;
						f-=3; 
					}
		        	p2=8-cd_;
		    	}
		    }
		    else if (isKeyPressed('4')) {
		    	if(p3<=0){
		    		if(player==0){
			        	cout<<"我方使用大招 花来+G18,造成了敌方"<<80<<"点伤害"<<endl;
		    			ox-=80;
					}
					else if(player==1){
		    			cout<<"我方使用大招 信号破译器,下一次攻击会多造成10点伤害"<<endl;
		    			flag=true; 
					}
					else if(player==2){
		    			cout<<"我方使用大招 虎蹲炮,对敌方造成"<<8<<"点伤害,自己获得闪击效果(普攻可以攻击两次)"<<endl;
						flag=true;
		    			ox-=8;
					}else{
						cout<<"我方使用大招 蝶式救援无人机,免疫一次伤害,自己获得向死而生效果(普攻可以攻击两次)"<<endl;
						flag=true;
						fang=true;
						kai=true;
					}
		        	p3=12-cd_;
		    	}
		    }else if(isKeyPressed('5')){
		    	int more=rand()%5;
		    	cout<<"我方使用武器: "<<ourname[gun]<<"造成了 "<<gun_kill[gun]+more<<"点伤害\n";
		    	ox-=gun_kill[gun]+more;
				p4=10-cd_;
			}
		    if(ox<=0){
		    	Sleep(800);
		    	cout<<"胜利!";
		    	have="";
		    	fang=false;
				system("cls");
		    	losename="";
		    	int in=rand()%800;
		    	if(in<150){
		    		in+=100;
				}
		    	cout<<"\n你获得了"<<in<<"哈夫币\n"; 
		    	coin+=in;
		    	system("color 0F");
					return; 
			}
			else if(hp[gid]<=0){
				cnt++;
				if(cnt>=3){
					return ;
				}
				Sleep(700);
				cout<<"呃啊......\n";
				Sleep(2500);
				if(kai){
					kai=false;
					cout<<"滴滴...\n";
					cout<<"正在注射血浆...\n";
					Sleep(3500);
					hp[gid]=10;
					Sleep(500);
					goto label1;
				}
		    	cout<<"撤离失败!\n";
		    	Sleep(1000); 
		    	fang=false; 
		    	cout<<"干员名: "<<gname<<" 倒在了血泊之中...\n击败者: "<<oname<<"\n";
		    	loseplayer=gid;
		    	Sleep(1000);
		    	system("pause");
		    	losename=gname;
		    	lastlose=gname;
		    	system("color 0F");
		    	have="";
		    	int out=rand()%500;
		    	if(out<100){
		    		out+=100;
				}
		    	cout<<"\n你失去了"<<out<<"哈夫币\n"; 
		    	coin-=out;
		    	hp[gid]=10;
				system("pause");
				goto label2;
				return;
			}
		    if(f==5){
		    	kill[1]=rand()%15+5; 
		    	kill[2]=rand()%20+5;
		    	kill[3]=rand()%13+6;
		    	kill[4]=rand()%25+2;
		    	if(fang){
		    		cout<<"成功免疫此次伤害!\n";
		    		f=0;
				}else{
		    	cout<<"敌方使用 "<<gun_name[int(id)]<<",造成了"<<kill[int(id)]<<"点伤害\n"; 
		    	hp[gid]-=kill[int(id)];
		    	Sleep(800); 
		    	cout<<"呃...\n";
		    	f=0;
			}
		}
		    Sleep(100);
		    if(p>0){
		    	p-=0.1;
			}
			if(p1>0){
				p1-=0.1;
			}
			if(p2>0){
				p2-=0.1;
			}
			if(p3>0){
				p3-=0.1;
			}
			if(p4>0){
				p4-=0.1;
			}
}
}
	void shop_mode(int sign){
		int choice;
		system("cls");
		if(sign==1){
			cout<<"哈夫币不够,请重新购买\n";
		}
		else if(sign==2){
			cout<<"输入错误,请重新输入\n";
		}
		else if(sign==3){
			cout<<"已达到购买次数限制,请重新输入\n";
		}
		cout<<"你现在有"<<coin<<"哈夫币\n"; 
		cout<<"当前角色: "<<my_name[gid]<<" "<<"剩余血量: "<<hp[gid]<<"\n";
		cout<<"1.止痛药(10血)    100哈夫币\n2.简易注射剂(20血)180哈夫币\n3.强效注射剂(30血)270哈夫币\n4.战地医疗箱(50血)450哈夫币\n5.缩短CD 1秒        350哈夫币\n6.缩短CD 2秒        500哈夫币\n7.伤害(1血)       400哈夫币\n8.伤害(2血)       500哈夫币\n9.招募角色(骇爪)  600哈夫币\n10.招募角色(威龙) 1000哈夫币\n11.返回主页面\n12.招募角色(蝶)   2500哈夫币\n请问你要购买哪个?";	
		cin>>choice;
		if((choice<=4 && hp[gid]==100)){
			cout<<"你没有受伤!\n";
			return ;
		} 
		if(choice==1){
			if(bt[0]>5) shop_mode(3);
			else if(coin>=100){
				if(hp[gid]+10>100){
					hp[gid]=100;
					coin-=100;
					shop_mode(0);
				}
				coin-=100;
				hp[gid]+=10;
				bt[0]++;
				buy[buy_time]=0;
				shop_mode(0);
			}
			else shop_mode(1);
		}
		else if(choice==2){
			if(hp[gid]+20>100){
					hp[gid]=100;
					coin-=180;
					shop_mode(0);
				}
			if(bt[1]>2) shop_mode(3);
			else if(coin>=180){
				coin-=180;
				hp[gid]+=20;
				bt[1]++;
				buy[buy_time]=1;
				shop_mode(0);
			}
			else shop_mode(1);
		}
		else if(choice==3){
			if(hp[gid]+30>100){
					hp[gid]=100;
					coin-=270;
					shop_mode(0);
				}
			if(bt[2]>2) shop_mode(3);
			else if(coin>=270){
				coin-=270;
				hp[gid]+=30;
				bt[2]++;
				buy[buy_time]=2;
				shop_mode(0);
			}
			else shop_mode(1);
		}
		else if(choice==4){
			if(hp[gid]+50>100){
					hp[gid]=100;
					coin-=450;
					shop_mode(0);
				}
			if(bt[3]>1) shop_mode(3);
			else if(coin>=450){
				coin-=450;
				hp[gid]+=50;
				bt[3]++;
				buy[buy_time]=3;
				shop_mode(0);
			}
			else shop_mode(1);
		}
		else if(choice==5){
			if(bt[4]>3) shop_mode(3);
			else if(coin>=350){
				coin-=350;
				cd_+=1;
				bt[4]++;
				buy[buy_time]=4;
				shop_mode(0);
			}
			else shop_mode(1);
		}
		else if(choice==6){
			if(bt[5]>2) shop_mode(3);
			else if(coin>=500){
				coin-=500;
				cd_+=2;
				bt[5]++;
				buy[buy_time]=5;
				shop_mode(0);
			}
			else shop_mode(1);
		}
		else if(choice==7){
			if(bt[6]>3) shop_mode(3);
			if(coin>=400){
				coin-=400;
				kill_+=1;
				bt[6]++;
				buy[buy_time]=6;
				shop_mode(0);
			}
			else shop_mode(1);
		}
		else if(choice==8){
			if(bt[7]>2) shop_mode(3);
			else if(coin>=500){
				coin-=500;
				kill_+=2;
				bt[7]++;
				buy[buy_time]=7;
				shop_mode(0);
			}
			else shop_mode(1);
		}
		else if(choice==9){
			if(bt[8]>1) shop_mode(3);
			else if(coin>=600){
				coin-=600;
				name[1]="骇爪"; 
				bt[8]++;
				buy[buy_time]=8;
				shop_mode(0);
			}
			else shop_mode(1);
		}
		else if(choice==10){
			if(bt[9]>1) shop_mode(3);
			else if(coin>=1000){
				coin-=1000;
				name[2]="威龙"; 
				bt[9]++;
				buy[buy_time]=9;
				shop_mode(0);
			}
			else shop_mode(1);
		}
		else if(choice==11){
			return;
		}else if(choice==12){
			if(coin>=2500){
				coin-=2500;
			name[3]="蝶";
			shop_mode(0);
		}else{
			shop_mode(1);
		}
		}else{
			shop_mode(2);
		}
	}
	void load_mode(){
		ofstream file("存档.code");  
	    if(file.is_open()) {  
	        file<<name[1]<<" "<<name[2]<<" "<<name[3]<<" "<<coin<<" "<<hp[gid]<<" "<<cd_<<" "<<buy_time<<" "<<kill_; 
			for(int i=0;i<buy_time;i++){
				file<<" "<<buy[i];
			}
	        file.close();  
		}
		return;
	}
	void out_mode(){
		system("cls");
		cout<<"感谢游玩!"; 
	    load_mode();
		exit(0);
	}
	void read_load_mode(){
	    ifstream file("存档.code");  
	    if(file.is_open()) {  
	        file>>name[1]>>name[2]>>name[3]>>coin>>hp[gid]>>cd_>>buy_time>>kill_;
			for(int i=0;i<buy_time;i++){
				file>>buy[i];
			}
	        file.close();  
	    } 
	    for(int i=0;i<buy_time;i++)bt[buy[i]]++;
	}
	void home(){ 
		int n;
		cout<<"欢迎参加 航天之战\n1.竞技模式 2.黑市 3.退出并存档 4.读档\n请输入选择:"; 
		cin>>n;
		switch(n){
			case 1:
				play_mode();
				break;
			case 2:
				shop_mode(0);
				break;
			case 3:
				out_mode();
				break;    
			case 4:
				read_load_mode();
				break;
			default:
				system("cls");
				cout<<"请重新输入\n";
				home();
		}
	}
	int main(){
		for(int i=0;i<1010;i++)bt[i]=0;
		while(true){
			system("cls");
			home();
		}
	}

共 5 条回复

leo1009

你/AI说的很有道理,我现在改一下

lizexu

不过有点问题 1.商店扣钱Bug(致命):在 shop_mode 中,如果血量加上药品后超过100,代码执行了扣钱和递归调用 shop_mode(0),但没有 return,导致程序会继续往下执行,再次扣除一次钱,造成严重逻辑错误。

2.递归导致栈溢出:shop_mode 使用递归调用自身来刷新界面,如果玩家一直购买,会导致调用栈越来越深,最终程序崩溃。

3.输入流崩溃:当程序提示 cin >> choice 时,如果玩家不小心输入了字母,cin 会进入错误状态,导致后续所有输入失效,游戏陷入死循环。 goto 语句滥用:play_mode 中使用了 goto label1 和 goto label2,导致变量状态(如CD、buff)在复活或重开时无法正确重置。

4.敌方角色生成Bug:choice=rand()%2 只能生成 0 和 1,但后面有 choice==2 的判断,导致“阿萨拉盾兵”永远不会出现。

lizexu

特别好!!!

lizexu

这是一次巨大的升级

leo1009

本次升级不仅添加了新元素,还增加了代码的可靠性

·新增加干员 蝶

·优化了代码

·添加巴雷特、MP7、HK416等强力武器重磅来袭!!!

更有限时特惠:付费武器限免!!!等你来玩!!!