你们好呀!这里是@小梁coding~欢迎你们来到我的博客,这是我的第一篇文章,很高兴能够与大家在CSDN上进行学术交流(有问题欢迎在我的评论区下留言,嘿嘿),要想掌握一样技能,就一定要动手动脑实践,并要求我们要将输入输 出相结合,好了话不多数,开始我们的游戏吧!
游戏简介:该游戏可以由程序随机产生四个0到9之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。当A为4时,即四个数字都猜对即为挑战成功。
输入输出要求:玩家一次性输入四个(0~9)不重复的数字,输出A,B个数判断的结果,若成功则提前输出游戏成功,若八次机会用完还未猜出,则游戏失败,并显示正确答。
(利用数组解题) 我们所需要思考的问题是:1.如何让系统产生随机数2.如何实现一次性输入四个数并将其分开存入数组3.如何实现A.B的计数
1.利用srand()函数及rand()函数实现四个随机数的产生time(NULL)
{srand(time(NULL));
int i,x[4]/*x为随机数*/;
while(1)
{for(i=0; i<4; i++)
x[i]=rand()%10; /*当while括号里为真时取随机数0~9中的一个赋给x*/
if((x[0]!=x[1])&&(x[0]!=x[2])&&(x[0]!=x[3])&&(x[1]!=x[2])
&&(x[1]!=x[3])&&(x[2]!=x[3])) /*不能重复,四个数字都要不同*/
break;}
2.利用取余%实现一次性输入四个0~9的数并将四个数字分开存入数组
scanf("%d",&num);
for(i=0;i<4;i++)
{
guess[i]=num%10;
num=num/10;
}
是不是发现解决这个问题很简单呢!有许多同学的输入方式都不是一次性输入四个数(但是题目要求我们一次输入4个数),有的打一个数字按一下空格,接着再打一个数字按一下空格最后回车才对AB进行判断,还有的要打一个数字按一次回车,按5次后才进行AB判断
3.利用for循环语句if条件判断语句实现八次循环输入判断与AB计数
A=0;
for(i=0; i<4; i++)
{
if(guess[i]==x[i])
A++; //数字正确且位置正确,A加1
}
B=0;
for(i=0; i<4; i++)
for(j=0; j<4; j++)
{
if((guess[j]==x[i])&&(i!=j)) //数字正确而位置不正确,B加1
B++;
}
4.源代码如下
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int main()
{
srand(time(NULL));
int i,h,j/*控制输入循环*/,x[4]/*x为随机数*/,guess[4],A,B,num;
while(1)
{for(i=0; i<4; i++)
x[i]=rand()%10;/*当while括号里为真时取随机数0~9中的一个赋给x*/
if((x[0]!=x[1])&&(x[0]!=x[2])&&(x[0]!=x[3])&&(x[1]!=x[2])&&(x[1]!=x[3])&&(x[2]!=x[3]))
break;
}
printf("正确答案为:%d%d%d%d\n",x[3],x[2],x[1],x[0]);
printf("游戏规则:\n\n该游戏可以由程序随机产生四个不重复的数字\n要求一次性输入这四个数\n玩家可通过提示A.B提示进行八次猜测\nA表示位置正确且数字正确\nB表示数字正确而位置不正确\n");
printf("只要A为4个则游戏挑战成功\n违反游戏规则游戏提前结束\n");
printf("祝你顺利!!游戏开始!!\n\n");
for(h=0; h<8; h++)
{
printf("第%d次输入(每输入一次回车):\n",h+1);
scanf("%d",&num);
for(i=0;i<4;i++)
{
guess[i]=num%10;
num=num/10;
}
if((guess[0]==guess[1])&&(guess[0]==guess[2])&&(guess[0]==guess[3])&&(guess[1]==guess[2])
&&(guess[1]==guess[3])&&(guess[2]==guess[3])){h--;break;}
A=0;
for(i=0; i<4; i++)
{
if(guess[i]==x[i])
A++;
}
B=0;
for(i=0; i<4; i++)
for(j=0; j<4; j++)
{
if((guess[j]==x[i])&&(i!=j))
B++;
}
printf("%dA%dB\n",A,B);
if(A==4)
{
printf("恭喜您!游戏成功!!\ngame over\n");
h--;
break;
}
}
if(h==8)
{
printf("八次机会已用完,游戏失败\ngame over\n");
printf("正确答案为:%d%d%d%d\n",x[3],x[2],x[1],x[0]);
}
printf("违反游戏规则,游戏结束!\n");
return 0;
}
5.运行结果如下
成功
失败
重复提前结束程序(若有更好的解决方法评论区留言)
解题方式如上,可供参考,有很好方法,欢迎评论区留言,这里是@小梁coding,一个励志要将输入与输出相结合的成长型学生!!