本人第一次写文章,如有任何错误,请指出。
在寂静的深夜,我突发奇想自己编写了一个数字炸弹小游戏,那么我们先来介绍一下数字炸弹的规则吧!
游戏规则:在数字范围内,把其中一个数字定为炸弹,谁猜中这个数,谁就要接受惩罚。 比如数字范围是0-100,炸弹为0-100中的任意取一个数(不包含边界),比如炸弹是88,然后第一个人猜是28,28不是炸弹数字,那么现在可以猜的数字范围就缩小到28~100;第二个人就不能猜28以下的数字,比如第二个人猜90,90也不是炸弹,那么现在数字范围又缩小到28-90,第三个人就只能猜28-90之间的数,直到有人猜中88炸弹数字,游戏结束。
是不是很简单,很有意思,那么现在来看下我写的代码吧!(不想看解析的朋友可以直接拉到最后)
#include<iostream>
#include<time.h>
using namespace std;
long long minnumber,maxnumber,bomb,playernumber,guess,tempmin,tempmax;
头文件自不用说,我们来讲讲这些变量的含义吧!
minnumber:初始范围的较小值
maxnumber:初始范围的较大值
bomb:炸弹数字
playernumber:玩家数量
guess:玩家每次猜测的数字
tempmin:猜测过程中的变化范围较小值
tempmax:猜测过程中的变化范围较大值
int main()
{
char esc='Y';
while((esc=='y')||(esc=='Y'))
{
system("cls");
cout<<"欢迎进入小游戏:数字炸弹"<<endl;
start();
process();
cout<<"开始新游戏请按\"Y/y\",退出请按\"N/n\":";
cin>>esc;
if((esc=='n')||(esc=='N'))
{
exit(0);
}
while(esc!='y'&&esc!='Y'&&esc!='n'&&esc!='N')
{
cout<<"请重新输入:";
cin>>esc;
}
}
return 0;
}
在主函数中我加入了是否退出的选项,方便开启新一局游戏。引入开始游戏start()函数,猜测过程函数process(),方便维护。当然这只是简单的划分。
void start()
{
cout<<"请输入数字范围(格式:较小数(空格)较大数):";
while(true)
{
cin>>minnumber>>maxnumber;
if(minnumber<maxnumber)
{
cin.clear();
cin.ignore();
break;
}
cout<<"请输入符合规范的范围,请重新输入:";
cin.clear();
cin.ignore();
}
tempmax=maxnumber;
tempmin=minnumber;
//自设炸弹
/*cout<<"请输入炸弹数字:";
while(true)
{
cin>>bomb;
if(bomb>minnumber&&bomb<maxnumber)
{
cin.clear();
cin.ignore();
break;
}
cout<<"炸弹数字应为范围内数字,请重新输入:";
cin.clear();
cin.ignore();
}
cout<<"数字炸弹为:"<<bomb<<endl;*/
//随机炸弹
time_t time(time_t *tloc);
srand((unsigned int)time(NULL));
bomb=minnumber+rand()%(maxnumber-minnumber+1);
cout<<"数字炸弹已生成"<<endl;
cout<<"请输入玩家数量:";
while(true)
{
cin>>playernumber;
if(playernumber>0)
{
cin.clear();
cin.ignore();
break;
}
cout<<"玩家数量需大于零,请重新输入:";
cin.clear();
cin.ignore();
}
system("cls");
cout<<"游戏开始!"<<endl;
}
我使用cin.clear与cin.ignore来防止使用者输入字符,但在实际测试中我发现只能防止单个字符输入,对于字符串来说,只能识别到一个字符。当我输入一个已数字开头的字符串时,只能识别到数字部分,此时不会报错,这也是令我苦思很久的问题,不过应该不会有哪个使用者没事输那么多字符吧【手动狗头】。
我还贴心的做了随机炸弹和指定炸弹两种模式,上述代码中我默认使用的是随机炸弹,如果想要使用指定炸弹的话,可使用注释中的代码,然后将随机炸弹的四行代码注释掉。
void process()
{
cout<<"请玩家1输入数字,范围"<<minnumber<<"-"<<maxnumber<<":";
long long player=2;
for(long long i=1;;i++)
{
if(player==playernumber+1)
{
player=1;
}
while(true)
{
cin>>guess;
if(guess>tempmin&&guess<tempmax)
{
cin.clear();
cin.ignore();
break;
}
cout<<"超出范围,请重新输入:";
cin.clear();
cin.ignore();
}
if(guess==bomb)
{
if(player==1)
{
player=playernumber+1;
}
cout<<endl<<"恭喜玩家"<<player-1<<"猜中了炸弹!"<<endl<<endl;
break;
}
else if(guess<bomb&&guess>tempmin)
{
tempmin=guess;
cout<<"请玩家"<<player<<"输入数字,范围"<<guess<<"-"<<tempmax<<":";
player++;
}
else if(guess>bomb&&guess<tempmax)
{
tempmax=guess;
cout<<"请玩家"<<player<<"输入数字,范围"<<tempmin<<"-"<<guess<<":";
player++;
}
}
}
这里我设置的player是超前于当前正在猜测的玩家的,所以当此玩家猜中时,player需要减小才能匹配。同时设置了当player的值等于1时的判断,因为正常来说当我的player等于1时,正在猜测的人实际上是最后一个玩家也就是序号等于playernumber的玩家。
下面是完整代码:
#include<iostream>
#include<time.h>
using namespace std;
long long minnumber,maxnumber,bomb,playernumber,guess,tempmin,tempmax;
void start()
{
cout<<"请输入数字范围(格式:较小数(空格)较大数):";
while(true)
{
cin>>minnumber>>maxnumber;
if(minnumber<maxnumber)
{
cin.clear();
cin.ignore();
break;
}
cout<<"请输入符合规范的范围,请重新输入:";
cin.clear();
cin.ignore();
}
tempmax=maxnumber;
tempmin=minnumber;
//自设炸弹
/*cout<<"请输入炸弹数字:";
while(true)
{
cin>>bomb;
if(bomb>minnumber&&bomb<maxnumber)
{
cin.clear();
cin.ignore();
break;
}
cout<<"炸弹数字应为范围内数字,请重新输入:";
cin.clear();
cin.ignore();
}
cout<<"数字炸弹为:"<<bomb<<endl;*/
//随机炸弹
time_t time(time_t *tloc);
srand((unsigned int)time(NULL));
bomb=minnumber+rand()%(maxnumber-minnumber+1);
cout<<"数字炸弹已生成"<<endl;
cout<<"请输入玩家数量:";
while(true)
{
cin>>playernumber;
if(playernumber>0)
{
cin.clear();
cin.ignore();
break;
}
cout<<"玩家数量需大于零,请重新输入:";
cin.clear();
cin.ignore();
}
system("cls");
cout<<"游戏开始!"<<endl;
}
void process()
{
cout<<"请玩家1输入数字,范围"<<minnumber<<"-"<<maxnumber<<":";
long long player=2;
for(long long i=1;;i++)
{
if(player==playernumber+1)
{
player=1;
}
while(true)
{
cin>>guess;
if(guess>tempmin&&guess<tempmax)
{
cin.clear();
cin.ignore();
break;
}
cout<<"超出范围,请重新输入:";
cin.clear();
cin.ignore();
}
if(guess==bomb)
{
if(player==1)
{
player=playernumber+1;
}
cout<<endl<<"恭喜玩家"<<player-1<<"猜中了炸弹!"<<endl<<endl;
break;
}
else if(guess<bomb&&guess>tempmin)
{
tempmin=guess;
cout<<"请玩家"<<player<<"输入数字,范围"<<guess<<"-"<<tempmax<<":";
player++;
}
else if(guess>bomb&&guess<tempmax)
{
tempmax=guess;
cout<<"请玩家"<<player<<"输入数字,范围"<<tempmin<<"-"<<guess<<":";
player++;
}
}
}
int main()
{
char esc='Y';
while((esc=='y')||(esc=='Y'))
{
system("cls");
cout<<"欢迎进入小游戏:数字炸弹"<<endl;
start();
process();
cout<<"开始新游戏请按\"Y/y\",退出请按\"N/n\":";
cin>>esc;
if((esc=='n')||(esc=='N'))
{
exit(0);
}
while(esc!='y'&&esc!='Y'&&esc!='n'&&esc!='N')
{
cout<<"请重新输入:";
cin>>esc;
}
}
return 0;
}
运行结果:
好啦,这就是全部内容了哦,不要忘了点赞哦!