VS version 1.0.2[新版本!!!]

前言

本人第一次发的游戏。

使用DevC++编译

不建议在性能较低的电脑上运行,风扇声音会特别大。

以后我可能会发一个VSWiki,用于给你们解答什么东西是干什么用的。

更新记录

消息:正式版!!!

7,8月份可能天天更新(得看审核)

VS更新记录

V0.0.1 标题
V0.0.2 具体的游戏说明
V0.0.3 玩家移动
V0.0.4 生成地图
    bug VS0001-生成世界时会卡住,必须再次按下任意键。
        状态:不予修复
V0.0.5 完善功能,增加了使用武器、退出。
    使用武器功能目前无法使用,因为代码部分是空的。
V0.0.6 添加了电脑决策提示。
    此时的电脑还是个空壳,无法进行决策。
V0.1.10 重新规定了地图,并增加了武器拾取功能。
    此时的地图大小为3*10.
    然而,即使你有武器,仍然不能使用。
V0.1.11 退出游戏时会弹出提醒“欢迎下次游玩”。
    以后可能会添加一个确认选项。
2024/7/24 开发者Cpp_King透露说他可能会添加一个毁灭性武器。
V0.1.12 现在可以使用手枪,但还没有攻击判定。
V0.1.13 把手枪部分代码增加了限制坐标功能。
V0.1.14 为了维持统一性,更改了部分语言描述。
V0.1.15 完善了使用武器功能。
    bug VS0002-可以无限使用武器。
        状态:已修复
V1.0.0 完成了电脑决策的AI。
    这是第一个正式版。不确定以后是否会进行重大更新,但是会推出一些补丁包更新。
    药包在这个版本中没有用。
    bug VS0003-每次生成的地图都是一样的。
        状态:报告有误,并无此漏洞。
V1.0.1 药包可以使用了。调整了道具出现的频率。
    bug VS0004P-电脑似乎不能使用武器。
        状态:未知 
V1.0.2 对电脑进行了一些改动。


那么话不多说,点赞关注收藏,上代码!

代码部分

#include<iostream>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#include<vector>
using namespace std;
const int N=1e9;
char map[3][10];//r 被放置的地雷 
char ch[]={'G','G','B','B','B','M','M','M','M','q','w','e','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};//q 小药包  w 中药包  e 大药包 
struct player{
	int hp;
	int x; //横坐标 
	int y; //纵坐标 
	vector<char> things;
}p1;
struct computer{
	int hp;
	int x; //横坐标 
	int y; //纵坐标 
	vector<char> things;
}com;
void crafting(){
	for(int i=0;i<3;i++){
		for(int j=0;j<10;j++){
			int syc=rand()%27;
			map[i][j]=ch[syc];
		}
	}
}
void start(){
	int gunx,guny,gunf=0,win=0;
	cout<<"生成地图...\n\n";
	crafting();
	p1.x=0;
	p1.y=0;
	p1.hp=10;
	p1.things.clear(); 
	com.x=2;
	com.y=9;
	com.hp=10;
	com.things.clear();
	int op;
	while(true){
		cin.clear(); //清除错误状态 
		cin.ignore(); //跳过无效数据
		//如果没有上面的代码就会无法输入 
		cout<<"你现在在"<<p1.x<<p1.y<<"位置,你要? 1.使用武器 2.移动 3.退出游戏(不会保存)";
		cin>>op;
		if(op==2){
			while(true){
				cout<<"你要到哪?格式:横坐标 纵坐标 ";
				cin>>p1.x>>p1.y;
				if(p1.x==com.x&&p1.y==com.y){
					cout<<"电脑在这里!请重新选择!";
					continue;
				}else if(p1.x>2||p1.y>9||p1.x<0||p1.y<0){
					cout<<"位置越界!只能在00~29!\n";
					continue;
				}else{
					cout<<"你现在在"<<p1.x<<p1.y<<"位置!\n";
					break;
				}
			}
			if(map[p1.x][p1.y]=='G'){
				cout<<"恭喜!得到了1把手枪!\n";
				p1.things.push_back('G');
				map[p1.x][p1.y]='0';
			}else if(map[p1.x][p1.y]=='B'){
				cout<<"恭喜!得到了1个炸弹!\n";
				p1.things.push_back('B');
				map[p1.x][p1.y]='0';
			}else if(map[p1.x][p1.y]=='M'){
				cout<<"恭喜!得到了1个地雷!\n";
				p1.things.push_back('M');
				map[p1.x][p1.y]='0';
			}else if(map[p1.x][p1.y]=='q'){
				cout<<"恭喜!得到了1个药包!hp+5\n";
				p1.hp+=5;
				map[p1.x][p1.y]='0';
			}else if(map[p1.x][p1.y]=='w'){
				cout<<"恭喜!得到了1个大药包!hp*2\n";
				p1.hp*=2;
				map[p1.x][p1.y]='0';
			}else if(map[p1.x][p1.y]=='e'){
				cout<<"恭喜!得到了1个巨型药包!hp*20!\n";
				p1.hp*=20;//美汁汁 
				map[p1.x][p1.y]='0';
			}else if(map[p1.x][p1.y]=='r'){
				cout<<"BOOOOOOOOOM!踩到了地雷!\n";
				p1.hp-=9;
				if(p1.hp<=0){
					cout<<"GAME OVER\n若要重新玩,请重新运行。";
					exit(0);
				}
				map[p1.x][p1.y]='0';
			}
		}else if(op==1){
			while(1){
				cout<<"要使用什么武器?1.手枪 2.炸弹 3.地雷 ";
				int cs;
				cin>>cs;
				if(cs==1){
					int flag=0;
					vector<char>::iterator it = p1.things.begin();
					for(it;it!=p1.things.end();it++){
						if(*it=='G'){
							flag=1;
							break;
						}
					}
					if(flag){
						int x,y;
						cout<<"要射哪里?格式:横坐标 纵坐标 ";
						cin>>x>>y;
						if(x>2||y>9||x<0||y<0){
							cout<<"位置越界!只能在00~29!\n";
							continue;
						}else if(x==p1.x&&y==p1.y){
							cout<<"你认真的?射自己???\n";
							continue;
						}else{
							cout<<"砰!!!枪声来自"<<p1.x<<p1.y<<"\n";
							gunx=x;
							guny=y;
							gunf=1;
							if(x==com.x&&y==com.y){
								cout<<"打中电脑了!\n";
								com.hp-=3;
								if(com.hp<=0){
									cout<<"你赢了!电脑崩殂死亡die了!\n若要继续玩,请重新运行。";
									exit(0);
								}
							}
							p1.things.erase(it,it);
							break;
						}
					}else{
						cout<<"你没有手枪。\n";
						continue;
					}
				}
				else if(cs==2){
					int flag2=0;
					vector<char>::iterator it = p1.things.begin();
					for(it;it!=p1.things.end();it++){
						if(*it=='B'){
							flag2=1;
							break;
						}
					}
					if(flag2){
						int yb;
						cout<<"要放在1行的哪里?格式:纵坐标 ";
						cin>>yb;
						if(yb>9||yb<0){
							cout<<"位置越界!只能在0~9!\n";
							continue;
						}
						if(yb==p1.y){
							cout<<"你认真的?炸自己???\n";
							continue;
						}else{
							if(com.x==1&&yb==com.y){
								cout<<"炸到电脑了!\n";
								com.hp-=6;
								if(com.hp<=0){
									cout<<"你赢了!电脑崩殂死亡die了!\n若要继续玩,请重新运行。";
									exit(0);
								}
							}
							p1.things.erase(it,it);
							break;
						}
					}else{
						cout<<"你没有炸弹。\n";
						continue;
					}
				}
				else if(cs==3){
					int flag3=0;
					vector<char>::iterator it = p1.things.begin();
					for(it;it!=p1.things.end();it++){
						if(*it=='M'){
							flag3=1;
							break;
						}
					}
					if(flag3){
						map[p1.x][p1.y]='r'; 
						int xm,ym;
						p1.things.erase(it,it);
						cout<<"已放置!现在将要传送。\n";
						srand(time(0));
						while(true){
							xm=rand()%10;
							if(xm==p1.x||xm>2||xm<0) continue;
							else break;
						}
						while(true){
							ym=rand()%3;
							if(ym==p1.y||ym>9||ym<0) continue;
							else break;
						}
						p1.x=xm;
						p1.y=ym;
						break;
					}else{
						cout<<"你没有地雷。\n";
						continue;
					}
				}else if(cs==4) break;
				else{
					cout<<"输入错误!\n";
					continue;
				}
			}
		}else if(op==3){
			cout<<"欢迎下次游玩!\n";
			exit(0);
		}else{
			cout<<"输入有误!\n";
			continue;
		}
		int comop;
		cout<<"电脑决定中...\n";
		while(true){
			srand(time(0));
			int con;
			if(com.things.empty()==false) con=rand()%2;
			if(com.things.empty()==false&&con==1){
				if(gunf){
					vector<char>::iterator it = com.things.begin();
					for(it;it!=com.things.end();it++){
						if(*it=='G'){
							com.things.erase(it,it);
							cout<<"砰!!!!枪声来自"<<com.x<<com.y<<"\n";
							p1.hp-=3;
							if(p1.hp<=0){
								cout<<"GAME OVER\n若要重新玩,请重新运行。";
								exit(0);
							} 
						}else if(*it=='B'){
							com.things.erase(it,it);
							p1.hp-=6;
							cout<<"BOOOOM!电脑向你扔了炸弹!\n";
							if(p1.hp<=0){
								cout<<"GAME OVER\n若要重新玩,请重新运行。";
								exit(0);
							} 
						}
					}
				}else{
					vector<char>::iterator it = com.things.begin();
					for(it;it!=com.things.end();it++){
						if(*it=='G'){
							int gx,gy;
							while(1){
								gx=rand()%3;
								gy=rand()%10;
								if(gx!=com.x&&gx!=com.y) break;
								else continue;
							}
							com.things.erase(it,it);
							cout<<"砰!!!!枪声来自"<<com.x<<com.y<<"\n";
							if(gx==p1.x&&gy==p1.y){
								p1.hp-=3;
								if(p1.hp<=0){
									cout<<"GAME OVER\n若要重新玩,请重新运行。";
									exit(0);
								} 
							}
						}else if(*it=='M'){
							com.things.erase(it,it);
							map[com.x][com.y]='r';
						}
					}
				}
			}
			else{
				int rx,ry;
				while(1){
					rx=rand()%3;
					ry=rand()%10;
					if(rx!=p1.x&&rx!=p1.y){
						com.x=rx;
						com.y=ry;
						break;
					}else continue;
				}
				if(map[com.x][com.y]=='G'){
					com.things.push_back('G');
					map[com.x][com.y]='0';
				}else if(map[com.x][com.y]=='B'){
					com.things.push_back('B');
					map[com.x][com.y]='0';
				}else if(map[com.x][com.y]=='M'){
					com.things.push_back('M');
					map[com.x][com.y]='0';
				}else if(map[com.x][com.y]=='r'){
					cout<<"BOOOOOOOOOM!电脑踩到了地雷!\n";
					com.hp-=9;
					if(com.hp<=0){
						cout<<"你赢了!电脑崩殂死亡die了!\n若要继续玩,请重新运行。";
						exit(0);
					}
					map[p1.x][p1.y]='0';
				}
			}
			break;
		}
		cout<<"回合结束!\n\n";
		Sleep(2000);
	}
}
namespace Text{
	void Title(){
		cout<<"██    ██    ██████\n"
			<<"██    ██  ██\n"
			<<"██    ██    ████\n"
			<<"██    ██        ██\n"
			<<"  █  █    ██████\n"
			<<"   ██   __Version 1.0.2  Cpp\nFIRST!!!\n";
		system("pause");
	}
	void Book(){
		cout<<"游戏说明:\n\n";
		Sleep(750);
		cout<<"地图\n";
		Sleep(250);
		cout<<"3*10的平面地图\n"
			<<"| 00 01 02 03 04 05 06 07 08 09 |\n"
			<<"| 10 11 12 13 14 15 16 17 18 19 |\n" 
			<<"| 20 21 22 23 24 25 26 27 28 29 |\n\n";
		Sleep(1000);
		cout<<"武器\n";
		Sleep(250);
		cout<<" - 枪(G) *暴露位置\n"
			<<"   使用后会射出一颗子弹,然后此枪报废。\n"
			<<"   若命中目标,会对目标造成3点伤害。\n";
		Sleep(500);
		cout<<" - 炸弹(B) *有投放位置限制\n"
			<<"   使用后会在指定位置立马爆炸。只能在1x行使用。\n"
			<<"   若命中目标,会对目标造成6点伤害。\n";
		Sleep(500);
		cout<<" - 地雷(M) *它可不认人!\n"
			<<"   使用后在原地放置地雷,然后传送至非电脑所在的位置。\n"
			<<"   若被踩中,会对目标造成9点伤害。\n\n";
		Sleep(1000);
		cout<<"道具\n";
		Sleep(250);
		cout<<" - 药包(r) *立即使用\n"
			<<"   当你发现此药包时,自动将你的生命值+5。\n";
		Sleep(500);
		cout<<" - 大药包(d) *立即使用\n"
			<<"   当你发现此药包时,自动将你的生命值*2。\n";
		Sleep(500);
		cout<<" - 巨型药包(s) *立即使用\n"
			<<"   当你发现此药包时,自动将你的生命值*20。\n\n";
		Sleep(2000);
		cout<<"先介绍到这,剩下的到游戏中你就知道了!按下任意键开始...\n\n";
	} 
}

int main(){
	Text::Title();
	system("cls");
	Text::Book();
	start();
	return 0;
}

已知漏洞

VS-0001 生成世界时需要按下回车才能继续。

        不予修复。

VS-0002 可以无限使用武器,即使你没有那么多。

        已修复。

VS-0003 地图每次生成时都是一样的。

        报告有误,并无此漏洞。

VS-0004P 电脑似乎无法使用武器。

        未知。

若有其他,请在评论区发送。

有解决方法的请发在评论区。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值