目录:
一:对猜数字游戏的介绍及对程序的预期
二:程序设计思路:
1.总体思路
2.菜单部分函数
3.游戏部分函数
4.主函数部分
5.代码主体
三.总结
前言:本文主要讲解以c语言编写猜数字游戏,目的是介绍C语言中的循环和分支的具体用法。
<!--以下为正文部分-->
一:猜数字游戏基本介绍&对程序预期
.猜数字游戏,顾名思义,就是系统随机给出一个数字,玩家对这个数字进行猜测,如果玩家猜测的数字大于给出的数字,则系统会提示猜大了,如果玩家猜测的数字小于给出的数字,则系统会提示猜小了,这样逐步缩小猜测范围,直到玩家猜对为止。
2.程序预期:猜数字结束后,玩家如果猜对了的话可以继续游戏,也可以退出游戏
二:程序设计思路
1.总体思路:
首先,实现游戏功能必须要有一个菜单来提示玩家如何进行操作。其次,为了代码具有可读性,可以将游戏部分函数和菜单部分函数作为两个子函数,然后在主函数调用他们。然后我们为了实现玩家可以多次游戏可以使用循环。
综上所述,我们应该设计两个子函数:菜单函数和游戏函数。一个主函数
2.菜单部分函数:
菜单部分函数
void menu() { printf("***********************************************\n"); printf("*************************1play*****************\n"); printf("*************************0exit*****************\n"); printf("***********************************************\n"); }
菜单函数设计相对简单,只是为了提示玩家如何操作
3.游戏部分函数
1 void game() 2 { 3 srand((unsigned int)time(NULL)); 4 int ret = rand() % 100 + 1; 5 while (1) 6 { 7 printf("猜数字\n"); 8 int guess = 0; 9 scanf("%d", &guess); 10 if (guess > ret) 11 { 12 printf("猜大了\n"); 13 } 14 else if (guess < ret) 15 { 16 printf("猜小了\n"); 17 } 18 else 19 { 20 printf("猜对了\n"); 21 break; 22 } 23 } 24 25 26 }
①在游戏函数部分,首先要生成随机数,生成随机数的方法如下:
C语言中提供了生成随机数的函数rand函数
rand函数会返回一个0到RAND-MAX的随机整数,使用这个函数需要包含头文件<stdlib.h>
但是rand函数每次生成的随机数相同,所以只用rand函数不够,所以要使用srand()函数增加随机性
后一句中说明在使用rand函数前要定义一个srand()函数
如画线句所示,srand函数的作用就是一个随机数的生成的种子。
而且需要一个无符号整型,在srand函数中括号输入一个随机数字即可生成随机数,时间正是一个一直在变化的数字。
在这里提出一个时间戳的概念:时间戳是指格林威治时间1970年01月01日00时00分00秒 (北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
因为srand需要的参数是无符号类型,所以对time进行强制类型转换。time后不需要参数,所以给他一个空指针。
使用srand((unsigned int)time(NULL))
输入time返回一个时间戳
需要一个头文件<time.h>
因为给出的随机数范围太大,所以需要限定随机数范围
如下:int ret = rand()%100+1,将随机数限定在0-100区间,便于猜测
②:猜数字环节
利用while循环来逐步缩小猜测范围,当猜测的数字等于随机数时提示”猜对了“。
4.主函数部分
int main() { int input = 0; do { menu(); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: break; default: printf("输入错误,请重新输入"); } } while (input); return 0; }
主函数中使用了switch语句,和do-while语句
主要目的是为了玩家选择是否进入游戏
5.代码主体
1 #include<stdio.h> 2 #include<time.h> 3 void menu() 4 { 5 printf("***********************************************\n"); 6 printf("*************************1play*****************\n"); 7 printf("*************************0exit*****************\n"); 8 printf("***********************************************\n"); 9 } 10 void game() 11 { srand((unsigned int)time(NULL)); 12 int ret = rand() % 100 + 1; 13 while (1) 14 { printf("猜数字\n"); 15 int guess = 0; 16 scanf("%d", &guess); 17 if (guess > ret) 18 { 19 printf("猜大了\n"); 20 } 21 else if 22 (guess < ret) 23 { 24 printf("猜小了\n"); 25 } 26 else 27 { 28 printf("猜对了\n"); break; 29 } 30 31 } 32 } 33 int main() 34 { 35 int input = 0; 36 37 do 38 { 39 menu(); 40 scanf("%d", &input); 41 switch (input) 42 { 43 case 1: 44 game(); 45 break; 46 case 0: 47 break; 48 default: 49 printf("输入错误,请重新输入"); 50 } 51 } while (input); 52 return 0; 53 }
三:总结
此程序主要为了熟悉循环和分支的具体用法,并且学会利用时间戳和rand函数生成随机数。
希望大家多多关注,每周会持续输出文章