csdn湿布原创
#include<iostream>
#include<iomanip>
#include<conio.h>
#include<windows.h>
#include<stdlib.h>
using namespace std;
short q,w,e,r,t; //循环数
const short map_x=21,map_y=71; //地图大小
char map[(map_x)][(map_y)]; //地图
short map_xue[(map_x)][(map_y)]; //地图血量
short x=10,y=2,X=10,Y=2;string fx="down "; //坐标(真假),方向
short dj=1,djq=dj;bool LWR=true;
short sh[100];short shs;//当前道具伤害(原本,后)
short sc[100];
string name[100]; //道具名称
string gamemode="home";
short Tc=0;short Ta[1000];short Tb[1000];
short ys=1;
short box=1;
short bjd[10][2];
short set_max=7,line_max=9;bool b_set[100];
string set[100]=
{
{"名称 "},{"游戏模式 "},
{"尚未完工 "},{"尚未完工 "},
{"尚未完工 "},{"尚未完工 "},
{"尚未完工 "},{"尚未完工 "},
{"尚未完工 "},{"尚未完工 "},
{"尚未完工 "},{"尚未完工 "},
{"尚未完工 "},{"尚未完工 "},
{"尚未完工 "},{"尚未完工 "},
};
class map_work//地图
{
public:
static void pd(); //判断
static void shuchu();//输出
static void chushi();//初始化
static void ZDY(); //自定义
};
void mp(short x,short y) {map_xue[x][y]=100;}
class TZ
{
public:
static void tz(short a);//拓展
static void kg(short a);//拓展的空格
static void gb(bool sdf);//游戏基础
static void gbyd(int x, int y); // 提供xy值来移动光标
static void jc();
};
void yd_work(short a);
class kd_work//键盘
{
public:
static void panduan();//判断
static void yidong(short a);//移动
};
class mx
{
public:
static void AR();//出现
static void DR();//消失
};
class qt
{
public:
static void setup();//设置
static void zhiling();//指令
static void xbb(short a);//小本本
};
class daoju
{
public:
static void shiyong();
static void shk();//伤害库
};
class zl
{
public:
static void Track(short a,short b);
static void spawn(short a,short b,short c);
};
/
int main()
{
TZ::gb(false);
map_work::chushi();
daoju::shk();
while(1)
{
kd_work::panduan();
map_work::shuchu();
}
}
///地/
///图
void map_work::pd()
{
if(map_xue[x][y]==0){X=x;Y=y;}
for(q=0;q<=map_x-1;q++)
{
for(w=0;w<=map_y-1;w++)
{
if(map_xue[q][w]<0)//负数归零(生命为负数)
{map_xue[q][w]=0;}
if(map_xue[q][w]==0)//空气(生命为0)
{map[q][w]=' ';}
if(map_xue[q][w]==100)//墙体
{map[q][w]='#';}
}
}
}
void map_work::shuchu()//输出
{
map_work::pd();
system("color 00");//隐藏
mx::AR();
cout<<bjd[1][0]<<" "<<bjd[1][1]<<endl;
for(q=0;q<map_x;q++)
{
TZ::tz(1);
for(w=0;w<map_y;w++)
{
cout<<map[q][w];
}
TZ::tz(2);cout<<endl;
}
system("color 07");//显示(完整)
Sleep(20);//等待(否则无法看清下方部分)
system("CLS");//清屏(到下一帧)
mx::DR();
}
void map_work::chushi()//围墙
{
for(q=0;q<=map_y-1;q++){map_xue[0][q]=100; map_xue[map_x-1][q]=100;}
for(q=0;q<=map_x-1;q++){map_xue[q][0]=100; map_xue[q][map_y-1]=100;}
for(q=1;q<=map_x-1;q++){map_xue[q][w]=100;}
for(q=2;q<=map_x-2;q++){for(w=2;w<=map_y-2;w++){map_xue[q][w]=0;}}
map_work::ZDY();
}
void map_work::ZDY()//自定义地形
{
//****复制在这下面↓****//
if(gamemode=="game")
{
for(q=1;q<=3;q++){mp(7,q);mp(13,q);}for(q=7;q<=9;q++){mp(7,q);mp(13,q);}
for(q=3;q<=7;q++){mp(3,q);mp(4,q);mp(16,q);mp(17,q);}mp(8,9);mp(12,9);
for(q=13;q<=17;q++){mp(9,q);mp(10,q);mp(11,q);}
for(q=1;q<=3;q++){mp(0+q,22);mp(4+q,22);mp(0+q,35);mp(4+q,35);}
for(q=22,w=31;q<=26,w<=35;q++,w++){mp(7,q);mp(7,w);}
for(q=61;q<=63;q++){mp(7,q);mp(13,q);}for(q=67;q<=69;q++){mp(7,q);mp(13,q);}
for(q=63;q<=67;q++){mp(3,q);mp(4,q);mp(16,q);mp(17,q);}mp(8,61);mp(12,61);
for(q=53;q<=57;q++){mp(9,q);mp(10,q);mp(11,q);}
for(q=0;q<2;q++){mp(16,25+q);mp(16,29+q);mp(17,25+q);mp(17,29+q);}
for(q=0;q<10;q++){mp(18,12+q);}
mp(18,34);mp(18,35);mp(18,39);mp(18,39);mp(18,40);mp(18,41);mp(16,39);mp(17,39);
for(q=14;q<=17;q++){mp(q,21);mp(q,34);}
for(q=22;q<=33;q++){mp(14,q);}
}
}
///map_work//
///拓展/
void TZ::tz(short a)//拓展
{
if(a==1&&LWR)
{
if(q==0){cout<<"###############";}
if(q==1){
cout<<"当前坐标:"<<X<<" "<<Y;
//有空位要补齐
e=0;
if(X>=10){e++;}if(Y>=10){e++;}
w=2;w-=e;for(e=1;e<=w;e++){cout<<" ";}
}
if(q==2){cout<<"当前方向:"<<fx;}
if(q==3){cout<<"#名称:大帅哥 ";}
if(q==4){cout<<"#ID:31415926535";}
if(q==5){cout<<"###############";}
if(q==6){cout<<"# "<<name[dj-1]<<" ";}
if(q==7){cout<<"#->"<<name[ dj ]<<" 当前";}
if(q==8){cout<<"# "<<name[dj+1]<<" ";}
if(q==9){cout<<"###############";}
for(w=10;w<map_x-1;w++){if(q==w){cout<<"# ";}}
if(q==map_x-1){cout<<"###############";}
}
if(a==2&&LWR)
{
if(q==0){cout<<"##################";}
if(q==1){cout<<"当前武器:"<<name[dj]<<" #";}
if(q==2){cout<<"武器类型:"<<name[dj]<<" #";}
if(q==3){cout<<"武器伤害:";e=sh[dj];TZ::kg(e);cout<<"#";}
if(q==4){cout<<"当前射程:";w=sc[dj];TZ::kg(w);cout<<"#";}
if(q==5){cout<<"当前移速:";TZ::kg(ys);cout<<"#";}
if(q==6){cout<<"当前血量:";e=map_xue[X][Y];TZ::kg(e);cout<<"#";}
if(q==7){cout<<"( 按下V键关闭 ) #";}
if(q==8){cout<<"##################";}
for(w=9;w<map_x-1;w++){if(q==w){cout<<" #";}}
if(q==map_x-1){cout<<"##################";}
}
}
void TZ::kg(short a)//空格
{cout<<a;
if(a>=0&&a<10){cout<<setw(7);}if(a>=10&&a<100){cout<<setw(6);}if(a>=100){cout<<setw(5);}
}
void TZ::gb(bool sdf)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息
if(sdf==false){CursorInfo.bVisible = false;}//隐藏控制台光标
if(sdf==true){CursorInfo.bVisible = true;}//显示控制台光标
SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态
}
void TZ::gbyd(int x,int y)
{COORD coord; coord.X = x; coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);}
void TZ::jc(){system("CLS");cout<<"湿布永远的神";Sleep(1000);system("CLS");}
//键///
//盘///
void kd_work::panduan()
{
if(_kbhit())
{
short *kd=new short;
*kd=getch();
kd_work::yidong(*kd); //移动
if(*kd==13){daoju::shiyong();}//使用道具
if(*kd>=49&&*kd<=57){q=*kd-=48;djq=dj;dj=q;shs=sh[dj];}//切换道具
if(*kd==27){qt::setup();}
if(*kd==86){LWR=!LWR;}//任务栏
if(*kd==90){qt::xbb(1);}//日记
if(*kd==81){q=dj;dj=djq;djq=q;}//Q道具上下换
if(*kd==47){qt::zhiling();}//‘/’指令
delete kd;
}
}
void kd_work::yidong(short a)
{
if(a==87)
{
w=x;w-=ys;fx="up ";
for(e=x-1;e>=w;e--){x=e;if(map_xue[e][y]!=0){x=e+1;break;}}
}
if(a==83)
{
w=x;w+=ys;fx="down ";
for(e=x+1;e<=w;e++){x=e;if(map_xue[e][y]!=0){x=e-1;break;}}
}
if(a==65)
{
w=y;w-=ys;fx="left ";
for(e=y-1;e>=w;e--){y=e;if(map_xue[x][e]!=0){y=e+1;break;}}
}
if(a==68)
{
w=y;w+=ys;fx="right";
for(e=y+1;e<=w;e++){y=e;if(map_xue[x][e]!=0){y=e-1;break;}}
}
if(map[x][y]=='#'){x=X;y=Y;}//有障碍
if(map[x][y]!='#'){X=x;Y=y;}//无障碍
}
///模///
///型//
void mx::AR()
{
map[X][Y]='O';
}
void mx::DR()
{
map[X][Y]=' ';
}
///道//
///具/
void jx(short a,short b,short c)//减血(方便)
{
shs=sh[dj];
if(c==1)//单减血
{
map_xue[a][b]-=shs;
}
if(c==2)
{
jx(a-1,b-1,1);jx(a-1,b,1);jx(a-1,b+1,1);
jx(a,b-1,1);jx(a,b,1);jx(a,b+1,1);
jx(a+1,b-1,1);jx(a+1,b,1);jx(a+1,b+1,1);
}
if(c==3)
{
map_xue[a][b]+=shs; zl::Track(a,b);
}
if(c==4)
{
if(b==1){ for(q=1;q<=sc[dj];q++){if(X-q>=0){jx(X-q,Y,1); }}}
if(b==2){ for(q=1;q<=sc[dj];q++){if(X+q<map_x){jx(X+q,Y,1);}}}
if(b==3){ for(q=1;q<=sc[dj];q++){if(Y-q>=0){jx(X,Y-q,1); }}}
if(b==4){ for(q=1;q<=sc[dj];q++){if(Y+q<map_y){jx(X,Y+q,1);}}}
}
}
void daoju::shiyong()//远程道具判断
{
if(fx=="up ")
{
e=sc[dj];
for(w=1;w<=e;w++)
{
if(map_xue[q-w][Y]!=0)//减血
{
if(dj==1||dj==2){jx(X-w,Y,1);}
if(dj==3){jx(X-w,Y,2);}
break;
}else{//加血
if(dj==4){r=(box-1)/2;t=x-w; for(q=y-r;q<=y+r;q++){jx(t,q,3);}}
}
}
if(dj==5){jx(1,1,4);}
}
if(fx=="down ")
{
e=sc[dj];
for(w=1;w<=e;w++)
{
if(map_xue[q+w][Y]!=0)//减血
{
if(dj==1||dj==2){jx(X+w,Y,1);}
if(dj==3){jx(X+w,Y,2);}
break;
}else{//加血
if(dj==4){r=(box-1)/2;t=X+w;for(q=Y-r;q<=Y+r;q++){jx(t,q,3);}}
}
}
if(dj==5){jx(1,2,4);}
}
if(fx=="left ")
{
e=sc[dj];
for(w=1;w<=e;w++)
{
if(map_xue[X][Y-w]!=0)//减血
{
if(dj==1||dj==2){jx(X,Y-w,1);}
if(dj==3){jx(X,Y-w,2);}
break;
}else{//加血
if(dj==4){r=(box-1)/2;t=Y-w;for(q=X-r;q<=X+r;q++){jx(q,t,3);}}
}
}
if(dj==5){jx(1,3,4);}
}
if(fx=="right")
{
e=sc[dj];
for(w=1;w<=e;w++)
{
if(map_xue[X][Y+w]!=0)//加血
{
if(dj==1||dj==2){jx(X,Y+w,1);}
if(dj==3){jx(X,Y+w,2);}
break;
}else{//减血
if(dj==4){r=(box-1)/2;t=Y+w;for(q=X-r;q<=X+r;q++){jx(q,t,3);}}
}
}
if(dj==5){jx(1,4,4);}
}
}
void daoju::shk()//道具库
{
for(q=0;q<100;q++){sh[q]=0;name[q]=" ";sc[q]=0;}
sh[1]=10; name[1]=" 拳头 "; sc[1]=1;
sh[2]=30; name[2]=" 手枪 "; sc[2]=5;
sh[3]=100; name[3]=" RPG "; sc[3]=10;
sh[4]=100; name[4]=" 方块 "; sc[4]=1;
sh[5]=100; name[5]="激光枪"; sc[5]=20;
}
/其他
void qt::zhiling()//指令
{
map_work::shuchu();
system("CLS");
for(q=1;q<=5;q++){cout<<endl;}
cout<<" ————————————————————————————————————————————"<<endl;
cout<<" |'help'for help|/ |"<<endl;
cout<<" |------------------------------------------|"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" |------------------------------------------|"<<endl;
cout<<" | |"<<endl;
cout<<" |——————————————————————————————————————————|"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" ————————————————————————————————————————————"<<endl;
TZ::gbyd(39,6);//移动光标位置
TZ::gb(true);//显示光标
string *str_zl=new string;
getline(cin,*str_zl);
//****帮助****//
if(*str_zl=="HELP"||*str_zl=="help")
{TZ::gb(false);qt::xbb(1);}
//****坐标类****//
if(*str_zl=="TP"||*str_zl=="tp"){TZ::gbyd(42,6);cin>>e>>r;x=e;y=r; }//更改坐标
if(*str_zl=="SPAWN"||*str_zl=="spawn"){x=10;y=2;}//回到最初出生点
if(*str_zl=="SPAWNPOINT"||*str_zl=="spawnpoint")//设置坐标
{ TZ::gbyd(23,8); cout<<"1."<<bjd[1][0]<<" "<<bjd[1][1];
TZ::gbyd(23,9); cout<<"2."<<bjd[2][0]<<" "<<bjd[2][1];
TZ::gbyd(23,10);cout<<"3."<<bjd[3][0]<<" "<<bjd[3][1];
TZ::gbyd(23,11);cout<<"4."<<bjd[4][0]<<" "<<bjd[4][1];
TZ::gbyd(23,16);cout<<"请选择:";e=getch();e-=48;
if(e>=1&&e<10){q=X;r=Y; zl::spawn(q,r,e);}
}
if(*str_zl=="TP SPAWN"||*str_zl=="tp spawn")//前往标记点
{
TZ::gbyd(23,8); cout<<"1."<<bjd[1][0]<<" "<<bjd[1][1];
TZ::gbyd(23,9); cout<<"2."<<bjd[2][0]<<" "<<bjd[2][1];
TZ::gbyd(23,10);cout<<"3."<<bjd[3][0]<<" "<<bjd[3][1];
TZ::gbyd(23,11);cout<<"4."<<bjd[4][0]<<" "<<bjd[4][1];
TZ::gbyd(23,16);cout<<"请选择:";
e=getch();e-=48;
if(e>=1&&e<=4){x=bjd[e][0];y=bjd[e][1];}
}
//****清除****/
if(*str_zl=="CLEAR"||*str_zl=="clear"){map_work::chushi();}
//****填充****//
if(*str_zl=="FILL"||*str_zl=="fill")
{
map_work::chushi();X=2;Y=2;
for(q=1;q<map_x-1;q++) {for(w=1;w<=map_y-2;w++){map_xue[q][w]= 0 ; } }
for(q=4;q<map_x-4;q++) {for(w=4;w<=map_y-6;w++){map_xue[q][w]=100; } }
}
if(*str_zl=="GAMEMODE"||*str_zl=="gamemode")
{
TZ::gbyd(23,8);cout<<"1.home";
TZ::gbyd(23,9);cout<<"2.game";
TZ::gbyd(23,16);cout<<"请选择:";
e=getch();e-=48;
if(e==1){gamemode="home";}
if(e==2){gamemode="game";}
map_work::chushi();
}
//****buff****//
if(*str_zl=="BUFF"||*str_zl=="buff")
{
TZ::gbyd(23,8);cout<<"1.fast";
TZ::gbyd(23,9);cout<<"1.slow";
TZ::gbyd(23,16);cout<<"请选择:";
e=getch();e-=48;
TZ::gbyd(23,16);cout<<"请输入:";cin>>q;
if(e==1){ys+=q;}
if(e==2){ys-=q;}
}
//****更改****//
if(*str_zl=="CHANGE"||*str_zl=="change")
{
TZ::gbyd(45,6);cout<<" the";
TZ::gbyd(23,8);cout<<"1.the speed to:";
TZ::gbyd(23,9);cout<<"2.the box to:";
TZ::gbyd(23,10);cout<<"3.damage:";
TZ::gbyd(23,16);cout<<"请选择:";
e=getch();e-=48;
TZ::gbyd(23,16);cout<<"请输入:";cin>>q;
if(e==1){ys=q;}
if(e==2){if(q%2==1) {box=q;}}
if(e==3){cin>>sh[dj];}
}
if(*str_zl=="OPEN"||*str_zl=="open")
{
TZ::gbyd(23,8);cout<<"1.track:";
TZ::gbyd(23,9);cout<<"2.:";
TZ::gbyd(23,10);cout<<"3.:";
TZ::gbyd(23,16);cout<<"请选择:";
e=getch();e-=48;
if(e==1)
{
TZ::gbyd(23,8); for(q=1;q<=42;q++){cout<<" ";}TZ::gbyd(23,8); cout<<"1.box";
TZ::gbyd(23,9); for(q=1;q<=42;q++){cout<<" ";}TZ::gbyd(23,9); cout<<"2.";
TZ::gbyd(23,10);for(q=1;q<=42;q++){cout<<" ";}TZ::gbyd(23,10);cout<<"3.";
TZ::gbyd(23,11);for(q=1;q<=42;q++){cout<<" ";}TZ::gbyd(23,11);cout<<"4.";
TZ::gbyd(23,16);cout<<"请选择:";
q=getch();q-=48;
if(q==1)
{
system("CLS");
int Taa[1000];int Tbb[1000];int Tcc=0;
for(q=0;q<Tc;q++)
{if(map_xue[Ta[q]][Tb[q]]==100){Taa[Tcc]=Ta[Tcc];Tbb[Tcc]=Tb[Tcc];Tcc++;}}
cout<<endl<<endl<<"您放置所有方块的坐标:\n";
for(int q=0;q<Tcc;q++)
{cout<<Taa[q]<<" "<<Tbb[q]<<endl;w=q+1;if(w%3==0){cout<<"\n";}}
q=getch();
}
}
}
system("CLS");TZ::gb(false);//隐藏光标
}
void qt::setup()
{
short q,w,e,r,t=0;
short set_max=7,line_max=9;bool b_set[100];
string set[100]=
{
{"名称 "},{"游戏模式 "},
{"尚未完工 "},{"尚未完工 "},
{"尚未完工 "},{"尚未完工 "},
{"尚未完工 "},{"尚未完工 "},
{"尚未完工 "},{"尚未完工 "},
{"尚未完工 "},{"尚未完工 "},
{"尚未完工 "},{"尚未完工 "},
{"尚未完工 "},{"尚未完工 "},
};
system("CLS");r=0;w=0;
while(1)
{
cout<<r<<" "<<"键值:"<<t<<endl;
cout<<"#######################"<<endl;
for(q=0;q<line_max;q++)
{w=r+q+1;
cout<<"#"<<w<<"."<<set[(r+q)];
if(q==0){cout<<"<--";}
else{
if(w<10){cout<<setw(4);}
if(w>=10&&w<100){cout<<setw(3);}
}
cout<<"#"<<endl;
}
cout<<"#######################"<<endl;
cout<<"# (上翻) # "<<endl;
cout<<"# ↑ #"<<endl;
cout<<"# 丨(W) #"<<endl;
cout<<"# 丨 #"<<endl;
cout<<"# #"<<endl;
cout<<"#(关闭) (打开)#"<<endl;
cout<<"#←—— ——→#"<<endl;
cout<<"# (A) (D) #"<<endl;
cout<<"# 丨 #"<<endl;
cout<<"# 丨(S) #"<<endl;
cout<<"# ↓ #"<<endl;
cout<<"# (下翻) #"<<endl;
cout<<"#######################"<<endl;
t=getch();
switch(t)
{
case 87:r--;
case 83:r++;
case 65:b_set[r]!=b_set[r];
}
if(r<=0){r=0;}if(r==set_max){r=set_max-1;}
system("CLS");
}
system("CLS");
}
void qt::xbb(short a)//日记
{
while(1)
{
system("CLS");
if(a==1)
{
cout<<"##################################"<<endl;
cout<<"# 指令使用大全 #"<<endl;
cout<<"#1./tp (位移)#"<<endl;
cout<<"#(1)/tp x,y (任意位移)#"<<endl;
cout<<"#(2)spawn (默认游戏标记点)#"<<endl;
cout<<"#(3)/spawnpoint (设置标记点)#"<<endl;
cout<<"#(4)/tp spawn (传送至标记点)#"<<endl;
cout<<"#2./clear (清除)#"<<endl;
cout<<"#3./fill (填充)#"<<endl;
cout<<"#4./buff: #"<<endl;
cout<<"#(1):fast: (移动速度加快)#"<<endl;
cout<<"#(2):slow: (移动速度减慢)#"<<endl;
cout<<"#5./change (更改)#"<<endl;
cout<<"#(1):the speed to (更改速度)#"<<endl;
cout<<"#(2):the box to (更改箱子)#"<<endl;
cout<<"#(3):damage (更改伤害)#"<<endl;
cout<<"#5./open (打开)#"<<endl;
cout<<"#(1):track (追踪)#"<<endl;
cout<<"# (1)box (箱子)#"<<endl;
cout<<"# #"<<endl;
cout<<"#←←← →→→#"<<endl;
cout<<"#上一页 退出 下一页#"<<endl;
cout<<"#( A ) (空格) ( D )#"<<endl;
cout<<"##################################"<<endl;
}
if(a==2)
{
cout<<"###################################"<<endl;
cout<<"#csdn湿布原创 #"<<endl;
cout<<"#https://blog.csdn.net/m0_54672684#"<<endl;
cout<<"#本文是作者独立完成,请勿盗码 #"<<endl;
cout<<"###################################"<<endl;
}
e=getch();
if(e==65){a--;}if(e==68){a++;}
if(e==32){break;}
}system("CLS");
}
void zl::Track(short a,short b)
{
Ta[Tc]=a;Tb[Tc]=b;
Tc++;
}
void zl::spawn(short a,short b,short c)
{
bjd[0][0]=2;bjd[0][1]=2;
bjd[c][0]=a;bjd[c][1]=b;
}
谢谢!
qq:912244690
|