前言
本人第一次发的游戏。
使用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 电脑似乎无法使用武器。
未知。
若有其他,请在评论区发送。
有解决方法的请发在评论区。