从零开始写C++打怪小游戏(1)
大家好呀,我是yanxinchenji
最近开学了,作业有点多,停更了一段时间
当然,就算是开学,也抵挡不住我更新的激情!!
所以,我想教大家写一个c++的打怪游戏!!无缝剪辑
话不多说,我们开始吧!
第一部分:游戏架构
作为一个打怪小游戏,必不可少的就是主角的各类属性与功能啦~
所以,我们要先定义亿些主角的属性,比如血量、攻击力、防御力
long long things[10000];//先定义10000个,后面再加
/*
1HP 2ATK 3DEF ......
//这里可以根据需要来自行添加
*/
定义完,我们需要思考一下这个游戏需要什么功能,比如商店,刷怪区等等
我这里给大家一个模板,不想动脑子的直接复制
void mianban();//定义干什么(省流)
void welcome();//欢迎
int main();//主函数
string where[10000];//1武器店2药店3家4状态
void home(); //家
string guaiwu[123];//1小怪物2大怪物3boss4凋零风暴
void fight();//战斗
void diaolingfengbao();//最终boss:凋零风暴
void daguai();//大怪物
void xiaoguai();//小怪物
void boss();//boss
按照我的这个模板,接下来需要编写第二主函数:''mianban()''
第二部分:第二主函数
2.1:实现界面
我们在这里要思考,该如何去实现我们的界面?
我们可以用printf函数来输出这样一个界面:
printf("-----------------------------------------------------\n");
printf(" 选择行动 \n");
printf("1、与NPC战斗 2、行径 3、干活 \n");
printf("4、末日新生(第四章开放) 5、查看状态\n");
printf("6、公告 7、睡觉\n");
printf("-----------------------------------------------------\n");
printf("请选择>");
int l;
cin>>l;
2.2:函数的跳转
那么,界面也实现了,我们该怎么去跳转到功能函数呢?
说人话,就是把第二主函数当作一个桥梁,让玩家根据需要走到不同的地方
这个桥梁需要不同的分支,那我们如何去实现这种分支呢?
答案就是:switch语句!
具体switch的用法点这里
看了上面的百科,我们发现需要case语句来形成这座桥梁的分支
我们不妨先用伪代码来做一个模板:
switch(l)
{
case 1:
表达式1;
break;
case 2:
表达式2;
break;
.....
case n;
表达式n;
break;
}
当然,每个游戏都有防熊机制,免得游戏混乱
我们这时可以用defualt语句来避免这种情况:
default:
cout<<"请不要乱输!!";
Sleep(1000);
break;
我们已经学会了switch,接下来就要实现跳转了
把上述的表达式1、2换成类似于daguai();xiaoguai();这样的函数就可以啦!
2.3:功能的实现
我们声明了函数,那我们怎么去定义函数呢?
你可以照着这样做:
void daguai()
{
if(things[1]<=0)
{
return daguai();
}
things[7]-=20;
int i=1,n=0,l=1,taopao,cg;
int lengque=0;
char r,w;
srand(static_cast<unsigned int >(time(0))) ;
int randomNumber=rand();
int ddj=(randomNumber% 5)+6;
int dhp=ddj*100;
int dsh=ddj*20;
int djb=ddj*10;
int dfy=ddj*5;
switch(episodes)
{
case 1:
break;
case 2:
dhp*=2;
dsh*=2;
dfy*=2;
break;
case 3:
dhp*=5;
dsh*=5;
dfy*=5;
break;
case 4:
dhp*=10;
dsh*=10;
dfy*=10;
break;
}
cout<<"你面对的是"<<ddj<<"级大怪,是否迎战(y/n)"<<endl;
cin>>r;
if(r=='y')
{
int f=0;
while(things[1]>0&&dhp>0&&l!=123&&i<=20)
{
cout<<"第"<<i<<"回合"<<endl;
cout<<"你的生命:"<<things[1]<<endl;
cout<<"大怪生命:"<<dhp<<endl;
cout<<"输入1攻击(造成攻击(你的伤害-怪的伤害),防御减半)"<<endl;
cout<<"输入2防御(不造成攻击,防御*2)"<<endl;
cout<<"输入3使用技能(无敌,造成敌方等级*20伤害,boss:500点伤害)"<<endl;
cout<<"输入4逃跑(20%几率,逃跑失败也要减少血(无视防御),实在打不过撑过20回合自动结束)"<<endl;
cout<<"输入5使用战斗急救包!!!"<<endl;
taopao=(randomNumber% 5)+1;
if (things[158]==10||things[158]==8||things[159]==1)
{
cout<<"输入6使用武器或防具技能!\n";
}
cin>>l;
if(lengque>0&&f==1)
{
lengque--;
}
switch(l)
{
case 1:
if((things[11]/2)<dsh)
{
things[1]-=dsh-things[11]/2;
}
if(things[3]>dfy )
{
dhp-=things[3]-dfy;
}
i++;
f=1;
break;
case 2:
if(things[11]*2<dsh)
{
things[1]-=dsh-things[11]*2;
}
i++;
f=1;
break;
case 3:
if(lengque==0)
{
dhp-=ddj*20;
lengque=5;
i++;
break;
}
cout<<"冷却中剩余"<<lengque<<"回合"<<endl;
f=0;
break;
case 4:
if(taopao=3)
{
cout<<"逃跑成功!!!"<<endl;
l=123;
}
f=1;
break;
case 5:
f=1;
if(things[12]>0)
{
cout<<"使用成功!!!"<<endl;
things[12]--;
things[1]+=50;
i++;
}
break;
case 6:
if(things[158]==10)
{
dhp-=1000;
cout<<"你使用了技能:横扫一切\n怪物受到1000点伤害!!!";
gs();
i++;
}
if(things[158]==8)
{
dhp-=200;
cout<<"你使用了技能:降维打击\n怪物受到200点伤害!!!";
gs();
i++;
}
if(things[159]==1)
{
things[11]=things[11]*5;
cout<<"你使用了技能:绝对防御\n防御力提升五倍!!!";
gs();
i++;
}
break;
}
}
if(things[1]<=0)
{
cout<<"你死了"<<endl;
Sleep(1000);
return daguai();
}
if(dhp<=0)
{
cout<<"你打败了"<<ddj<<"级大怪"<<endl;
cout<<"奖励金币"<<djb<<"$"<<endl;
cout<<"奖励经验"<<ddj*10<<endl;
money+=djb;
things[2]+=ddj*10;
}
}
else
{
cout<<"你已逃跑"<<endl;
}
}
上述的是我写的《末日新生》里的打大怪函数,你可以把它修改一下,变得更加美观
我们不能只有这一个功能,所以我们需要更多的开发、研究
因篇幅限制,目前只能写这么多
所以更多的内容请看后续更新的2、3、4!
我是yanxinchenji,我们下次再见!
版权声明:本文为yanxinchenji原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。