前言
在嵌入式系统开发中,基础编程能力的夯实与趣味实践的结合,是提升开发效率与学习积极性的关键。猜大小游戏作为经典的互动类程序,不仅涵盖了 C 语言核心语法的应用,更融合了随机数生成、用户交互、逻辑判断等嵌入式开发中高频使用的技术点。本次实践以 "最小可行产品" 为设计理念,从 V1.0 能跑版入手,基于time()时间戳实现随机数种子初始化,借助srand()与rand()函数构建伪随机数生成机制,最终完成一款逻辑清晰、交互简洁的猜大小游戏。通过本项目的开发,可深入理解伪随机数在嵌入式场景中的应用原理,熟练掌握输入输出处理、条件判断等基础编程技能,为后续更复杂的嵌入式应用开发奠定坚实基础。
能跑版
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
void menu();
void game();
void mode_handle();
int main()
{
srand((unsigned int)time(NULL)); // 设置随机数种子
while ( 1 ) {
menu();
mode_handle();
}
return 0;
}
// 显示菜单
void menu()
{
printf("+---------------+\n");
printf(" Guess (1 ~ 100)\n");
printf("[p] 开玩\n");
printf("[Q] 退出 \n");
printf("+---------------+\n");
}
// 模式处理
void mode_handle()
{
int key = 0;
printf("请选择>:");
key = getch();
printf("\n");
switch (key) {
case 'p':
game(); // 开始游戏
break;
case 'q':
printf("Bye Bye!\n");
break;
default:
printf("输入有误!\n");
break;
}
}
// 猜大小游戏
void game()
{
int random_num = rand() % 100 + 1; // 生成 1 到 100 之间的随机数
int input = 0;
while (1) {
printf("Guess Guess>: ");
scanf("%d", &input);
if (input > random_num) {
printf("// ----猜大了!---- //\n");
} else if (input < random_num) {
printf("// ----猜小了!---- //\n");
} else {
system("cls");
printf(" ^_^ 有脑子! \n");
break; // 猜对后跳出循环
}
}
}
time() 时间戳
time_t time(time_t *timer);
// @timer
NULL: 返回自 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)以来经过的秒数,
通常被称为时间戳。
不为NULL:将当前时间存储在这个指针所指向的内存位置;
// @返回值
time_t类型的值,表示自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的秒数。
使用示例:
#include <stdio.h>
#include <time.h>
int main()
{
time_t cur_sec; // 当前秒数
cur_sec = time(NULL);
printf("当前时间戳:%ld\n", currentTime);
return 0;
}
srand() / rand()
// randomly
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
//设置伪随机数生成器的种子
srand((unsigned int)time(NULL));
for (int i = 0; i < 5; i++) {
printf("%d ", rand() % 100);
}
printf("\n");
return 0;
}
// srand
void srand(unsigned int seed);
// @seed
这个值将决定随机数生成器的起始状态,不同的种子会产生不同的随机数序列。
如果不调用srand()设置种子,
每次运行程序时,rand()函数生成的随机数序列将是相同的。
通过调用srand(设置不同的种子),可以使得每次程序运行时生成不同的随机数序列,增加随机性。
// rand
int rand(void);
// @返回值
返回一个伪随机整数。
所谓伪随机,是指在给定相同的种子(通过srand函数设置)的情况下,
每次调用rand()都会生成相同的随机数序列。
通常在使用rand()之前,
会先调用srand()函数设置随机数生成器的种子,
以确保每次运行程序时生成不同的随机数序列;
结尾
本次嵌入式 C 语言猜大小游戏 V1.0 版本的设计与实现,成功将基础语法知识与实际应用场景相结合,完成了从随机数生成到用户交互的全流程开发。项目通过time()函数获取系统时间戳作为种子,确保了每次程序运行时随机数序列的唯一性,再经srand()与rand()函数的协同工作,实现了游戏核心的随机数生成功能,最终达成了 "能跑、好用" 的核心目标。
通过本次实践,不仅巩固了嵌入式 C 语言的基础语法应用,更深入理解了伪随机数的生成原理及在嵌入式开发中的实践要点。后续可基于该版本进行功能扩展,例如增加游戏难度分级、积分统计、历史记录查询等功能,进一步提升程序的交互性与实用性。本项目的开发过程充分体现了 "从简到繁、逐步迭代" 的嵌入式开发思路,为后续更复杂的嵌入式应用开发提供了可参考的实践范式。