从零开始写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 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>