一、游戏介绍
游戏内容
该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。例如玩家输入四位数5678,计算机会按照正确答案5720给出1A1B的提示内容,玩家根据此提示继续猜测数字。
游戏玩法
1、游戏软件随机产生4个数字,但不显示,给用户提供输入提示符,让用户猜4个数字的值和位置顺序。如果数字值和位置顺序均正确,则猜数字成功。
2、玩家有8次猜数字的机会,如果在8次之内仍末猜出正确的数字值和数字位置顺序,则提示用户游戏失败。
3、 一旦玩家在8次的次数限制内猜出正确的数字值和位置顺序,则赢得游戏。
二、游戏实现思路
1、首先设计一个menu函数,生成游戏菜单 ——>1.开始游戏 2.帮助 3.退出
2、设计一个help函数,说明游戏规则。
3、设计一个same函数,判断产生的随机数各个位置上有没有重复的函数。
4、设计一个game函数,比较用户输入数据和随机数,并产生提示信息。
5、利用生成随机数的函数产生随机数。
三、游戏实现过程
1、游戏菜单menu函数
void menu()//函数声明 { printf("\t\t\t\t猜数字游戏\n\n\n\n"); printf("\t\t\t\t1.开始游戏\n\n"); printf("\t\t\t\t2.帮助\n\n"); printf("\t\t\t\t3.退出\n\n"); printf("\t\t\t请输入(1-3):"); }
效果展示:
2、help函数
void help()//游戏规则说明函数 { printf("\t\t\t欢迎使用本程序\n\n\n"); printf("游戏说明:输入四位数字,输入后有提示XAYB,X表示有几个数字与答案数字相同且位置相同。\n"); printf("Y表示有几位数字与答案数字相同且位置不正确。\n"); printf("按任意键继续............\n"); }
3、same函数
这里的u是全局变量
int same(int num[])//判断产生的随机数各个位置上有没有重复的函数 { int i, j; u = 0; for (i = 0; i < 3; i++) for (j = i + 1; j < 4; j++) if (num[i] == num[j]) u = 1; return u; }
4、game函数
此函数没有返回值,它是分配空间将随机生产的数存储到这个函数的int a[]参数中并且在这个函数里定义一串其他的参数,来实现玩家对数据的输入和提示信息的输出,与此同时再实现对游戏成功与否的判断,若游戏成功在主屏幕上打印“恭喜,游戏成功!”,若是游戏失败就打印“游戏失败!”。
void game(int a[])//比较用户输入数据和随机数,并产生提示信息 { int b[4] = {0}; int i = 0, j = 0; while (1) { //生成4个随机数 do { for (i = 0; i < 4; i++) a[i] = rand() % 10; same(a); } while (u); if (a[0] != 0) break; } int k = 1, A = 0, B = 0, N = 8 ,pick = 0; printf("请输入要猜想的四位数\n"); while (A != 4 && k <= N) { A = 0, B = 0; printf("第%d次:", k); scanf("%d", &pick);//玩家从键盘输入数据 while (pick < 999 || pick>10000) { printf("输入不合法!\n"); scanf("%d", &pick); } for (i = 3; i >= 0; i--) { b[i] = pick % 10; pick = pick/ 10; } //比较对应位置上的数 for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) if (a[i] == b[j]) if (i == j) A++; else B++; printf("%dA%dB\n", A, B); if (A == 4) { printf("恭喜,游戏成功!\n"); } k++; } if (A != 4 && k > 8) { printf("游戏失败!\n"); printf("正确答案是:"); for (i = 0; i < 4; i++) printf("%d", a[i]); printf("\n"); } printf("输入 1 继续游戏,输入 2 返回菜单,输入 0 退出游戏:"); while (1) { scanf("%d", &pick); if (pick == 2) { system("cls"); menu(); int select=0; while (select != 3) { switch (select) { case 1: {system("cls"); game(a); break; } case 2: {system("cls"); help(); _getch(); system("cls"); menu(); break; } default:printf("输入不合法,请重新输入!"); break; } scanf("%d", &select); } exit(0); } else if (pick == 1) { system("cls"); game(a); } else if (pick == 0) exit(0); else printf("输入错误,请重新输入!\n"); } }
5、构建主函数
利用while()循环,确保玩家输入1—3的数字选择菜单选项。利用swich语句选择开始游戏还是获得游戏介绍或是选择退出游戏。
//主函数 int main() { void help();//函数声明 void game(int a[]);//函数声明 int k = 0, select=0; int a[4] = { 0 }; srand((unsigned)time(NULL));//随机数种,只调用一次即可 menu(); scanf("%d", &select); while (select!= 3) { switch (select) { case 1: {system("cls"); game(a); break; } case 2: {system("cls"); help(); _getch(); system("cls"); menu(); break; } default:printf("输入不合法,请重新输入!"); break; } scanf("%d", &select); } return 0; }
四、主函数内的其他函数的调用
1、产生随机数函数
scrand函数是随机数发生器的初始化函数。原型:void srand(unsigned seed);
随机的起点:srand((unsigned) int time(NULL)
上述代码用到了两个库函数void srand(unsigned int seed)和 longlong time(NULL),分别对应的头文件是<stdio.h>和<time.h>
用法:它初始化随机种子,会提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数,如: srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复,常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即:srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的数据。
srand((unsigned)time(NULL));//随机数种,只调用一次即可
生成四个随机数储存到数组a中。
2、清屏函数
头文件:stdlib.h
函数:system(“cls”);
3、 _getch()函数
所在头文件:conio.h
函数用途:从控制台读取一个字符,但不显示在屏幕上
函数原型:int getch(void)
返回值:读取的字符
用_getch();会等待你按下任意键,再继续执行下面的语句
五、终极代码+游戏效果展示
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> int u; //全局变量 int same(int num[]);//函数声明 void menu()//函数声明 { printf("\t\t\t\t猜数字游戏\n\n\n\n"); printf("\t\t\t\t1.开始游戏\n\n"); printf("\t\t\t\t2.帮助\n\n"); printf("\t\t\t\t3.退出\n\n"); printf("\t\t\t请输入(1-3):"); } //主函数 int main() { void help();//函数声明 void game(int a[]);//函数声明 int k = 0, select=0; int a[4] = { 0 }; srand((unsigned)time(NULL));//随机数种,只调用一次即可 menu(); scanf("%d", &select); while (select!= 3) { switch (select) { case 1: {system("cls"); game(a); break; } case 2: {system("cls"); help(); _getch(); system("cls"); menu(); break; } default:printf("输入不合法,请重新输入!"); break; } scanf("%d", &select); } return 0; } void help()//游戏规则说明函数 { printf("\t\t\t欢迎使用本程序\n\n\n"); printf("游戏说明:输入四位数字,输入后有提示XAYB,X表示有几个数字与答案数字相同且位置相同。\n"); printf("Y表示有几位数字与答案数字相同且位置不正确。\n"); printf("按任意键继续............\n"); } void game(int a[])//比较用户输入数据和随机数,并产生提示信息 { int b[4] = {0}; int i = 0, j = 0; while (1) { //生成4个随机数 do { for (i = 0; i < 4; i++) a[i] = rand() % 10; same(a); } while (u);//此处用到全局变量u if (a[0] != 0) break; } int k = 1, A = 0, B = 0, N = 8 ,pick = 0; printf("请输入要猜想的四位数\n"); while (A != 4 && k <= N) { A = 0, B = 0; printf("第%d次:", k); scanf("%d", &pick);//玩家从键盘输入数据 while (pick < 999 || pick>10000) { printf("输入不合法!\n"); scanf("%d", &pick); } for (i = 3; i >= 0; i--) { b[i] = pick % 10; pick = pick/ 10; } //比较对应位置上的数 for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) if (a[i] == b[j]) if (i == j) A++; else B++; printf("%dA%dB\n", A, B); if (A == 4) { printf("恭喜,游戏成功!\n"); } k++; } if (A != 4 && k > 8) { printf("游戏失败!\n"); printf("正确答案是:"); for (i = 0; i < 4; i++) printf("%d", a[i]); printf("\n"); } printf("输入 1 继续游戏,输入 2 返回菜单,输入 0 退出游戏:"); while (1) { scanf("%d", &pick); if (pick == 2) { system("cls"); menu(); int select=0; while (select != 3) { switch (select) { case 1: {system("cls"); game(a); break; } case 2: {system("cls"); help(); _getch(); system("cls"); menu(); break; } default:printf("输入不合法,请重新输入!"); break; } scanf("%d", &select); } exit(0); } else if (pick == 1) { system("cls"); game(a); } else if (pick == 0) exit(0); else printf("输入错误,请重新输入!\n"); } } int same(int num[])//判断产生的随机数各个位置上有没有重复的函数 { u = 0;//注意u是全局变量 for (int i = 0; i < 3; i++) for (int j = i + 1; j < 4; j++) if (num[i] == num[j]) u = 1; return u; }
效果展示:
Last
🔥 这是博主大一时期的课程设计,目前刚结束大一,实力有限,内容仅供参考,如果有不足之处,请多多指教。🤞