猜数字部分
思考预期目标:先理清一下想实现的猜数字游戏为什么样子 1:界面 2:让玩家输入数字选择,来实现 开始/退出游戏 3:在玩家选择开始游戏时,程序随机生成数字,此后让玩家进行输入数字,程序判断是与生成的数字是否相同,不同:继续,相同:程序结束 4:游戏结束后可让玩家再次进行选择是否游玩
界面实现
由于技术力的不够,小白博主只能面对黑乎乎的cmd, 所以界面的设置也就只能从简了。。
结果:
代码实现:
printf("**********************\n");
printf("**********************\n");
printf("**********************\n");
printf("*** 1:开始游戏 ******\n");
printf("*** 0:退出游戏 ******\n");
printf("**********************\n");
printf("**********************\n");
printf("**********************\n");
printf("请选择>:\n");
玩家选择实现
回顾一下预期目标2
让玩家输入数字选择,来实现 开始/退出游戏
由此想到应用C语言中的分支结构(if/switch)
博主用的为switch,觉得可能看起来更美观
代码实现
scanf("%d", &i);
switch (i)
{
case 1:
{
game();
break;
}
case 0:
break;
default:
printf("选择错误,请重新选择\n");
}
游戏部分
由于这个是猜数字的主体部分,所以内容较多
随机数的生成
c语言中有生成随机数的函数——rand 但是单独引用rand有不利之处 实例
```c
#include<stdlib.h>
#include<stdio.h>
int main()
{
int i;
for (int g = 0; g < 3; g++)
{
i = rand();
printf("%d\n", i);
}
return 0;
}
在单用rand代码中,运行结果```
第一次 第二次 由这运行结果可知,rand生成随机数字只有下一次才会随机,已执行生成的随机值不会被内存消除,这种只能玩一次的游戏显然不是我们所预想的
在cpp网站下rand函数描述为 这里可知,若想rand函数生成不同的数需要引用,srand函数
引用后
#include<stdlib.h>
#include<stdio.h>
int main()
{
srand(1);
int i;
for (int g = 0; g < 3; g++)
{
i = rand();
printf("%d\n", i);
}
return 0;
}
当为srand(1)时: 当为srand(2) 这里我们十分戏剧地发现若想要生成不同的数字,就需要在srand函数中放入随机值 为了随机值,却需要随机值去解决,也是十分无奈了,但是天无绝人之路,时间戳完美解决了这个问题 说通俗一点就是加密的表示时间的数字。而时间在不停变化,也就是说无论啥时候引用时间戳都是不同值,这完美解决了我们的问题
随机值代码实现
#include<time.h>
srand((unsigned int)time(NULL));
int c = rand() % 100 + 1;
看到这里可能有些少部分长得比较帅的读者可能就有疑问了——为啥子不直接用time来生成随机数呢,还要用rand,srand呢?
——如果直接用time的话如果时间间隔太短,则数字不会差很多,因为时间变化没这么大,所以会导致游戏不够随机。
游戏输入和判断部分
这部分其实不是特别难了 直接上代码
代码部分
int g;
int i = 1;
int c = rand() % 100 + 1;
while (i <= 5)
{
scanf("%d", &g);
if (g == c)
{
printf("恭喜你猜对了\n");
break;
}
else if (g > c)
printf("猜大了\n");
else
printf("猜小了\n");
printf("还剩%d次机会\n", 5 - i);
i++;
}
if (i == 6)
printf("游戏失败\n");
}
收尾
想到最后的预期4
游戏结束后可让玩家再次进行选择是否游玩
为了这个实现,可以采用while循环的设计 让用户输入1来开始游戏 让用户输入0来结束游戏 正好1为真,0为假
将整个游戏程序套进while中 若输入1,游戏结束后则会重复进行主界面的选择 若输入0,则会直接结束程序
整体代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void meun()
{
printf("**********************\n");
printf("**********************\n");
printf("**********************\n");
printf("*** 1:开始游戏 ******\n");
printf("*** 0:退出游戏 ******\n");
printf("**********************\n");
printf("**********************\n");
printf("**********************\n");
printf("请选择>:\n");
}
void game()
{
printf("游戏开始了\n");
int g;
int i = 1;
int c = rand() % 100 + 1;
while (i <= 5)
{
scanf("%d", &g);
if (g == c)
{
printf("恭喜你猜对了\n");
break;
}
else if (g > c)
printf("猜大了\n");
else
printf("猜小了\n");
printf("还剩%d次机会\n", 5 - i);
i++;
}
if (i == 6)
printf("游戏失败\n");
}
int main()
{
srand((unsigned int)time(NULL));
int i;
do
{
meun();
scanf("%d", &i);
switch (i)
{
case 1:
{
game();
break;
}
case 0:
break;
default:
printf("选择错误,请重新选择\n");
}
} while (i);
}
舍友打断腿版
看完普通版,这时发给舍友,可能会对你的装逼不屑一顾, 这时,可以将游戏稍微改良一下,只要提添两行代码即可让舍友把你腿打断,何乐而不为呢
system("shutdown -a");
system("shutdown -s -t 60");
代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void meun()
{
printf("**********************\n");
printf("**********************\n");
printf("**********************\n");
printf("*** 1:开始游戏 ******\n");
printf("*** 0:退出游戏 ******\n");
printf("**********************\n");
printf("**********************\n");
printf("**********************\n");
printf("请选择>:\n");
}
void game()
{
printf("游戏开始了\n,你的电脑将会在60s后关机");
int g;
int i = 1;
int c = rand() % 100 + 1;
system("shutdown -s -t 60");
while (i <= 5)
{
scanf_s("%d", &g);
if (g == c)
{
printf("恭喜你猜对了\n");
system("shutdown -a");
break;
}
else if (g > c)
printf("猜大了\n");
else
printf("猜小了\n");
printf("还剩%d次机会\n", 5 - i);
i++;
}
if (i == 6)
printf("游戏失败\n");
}
int main()
{
srand((unsigned int)time(NULL));
int i;
do
{
meun();
scanf_s("%d", &i);
switch (i)
{
case 1:
{
game();
break;
}
case 0:
break;
default:
printf("选择错误,请重新选择\n");
}
} while (i);
}
如果为了整舍友,甚至可以将代码打包,变成.exe文件 变得更加真实,能大大提高被打断腿的概率 https://www.bilibili.com/video/BV1nP411J7rC/?spm_id_from=333.337.search-card.all.click 这这里附上教程
尾声
这个是小白的第三篇博客,也算是第一次写这么长的博客,以技术力和经验来说其中代码和知识点避免不了出错,希望大佬能够指正,之后本小白也会不断学习,争取质量和速度都能提高
|