猜数字游戏程序是一个基于控制台界面的交互程序,游戏运行时,须要玩家输入一些内容交给计算机处理,计算机根据游戏设计流程判定玩家是成功还是失败。游戏设计非常简单,计算机随机生成一个数字,用户最多可以推测10次结果,假若10次之内无法猜中计算机给出的数值,这么判断玩家失败,否则判断玩家成功。
程序启动时提示用户选择游戏的难易程度,支持三种:1.简单;2.通常;3.困难。用户输入对应的数字值作为难易程度级别,计算机会按照难易程度生成对应的数值,简单级别计算机生成的随机数范围为0-10,通常级别估算生成的随机数范围为0-100,困难级别计算机生成的随机数范围为0-1000,缺省情况下,随机数的范围为通常级别。右图为菜单函数displayMenu和获取随机数范围函数getRangeFromLevel的代码。
图1
函数displayMenu用以显示菜单内容,函数getRangeFromLevel用以将level值(1,2或3)转换为随机数所在范围的上限值,即[0,range],后续代码使用这个值生成一个随机数。
随机数生成函数generateRandomNumber调用了标准库中的srand、time和rand三个函数,函数srand和rand的申明坐落头文件stdlib.h中简单小游戏c语言源程序,函数time的申明坐落time.h中,分别须要在源代码上将它们包含进来。怎样生成指定范围的随机数呢?rand函数返回值是一个伪随机数,范围为0-32767之间的一个整数简单小游戏c语言源程序,为了将伪随机数的范围转换为玩家设定的数值范围,根据下边的公式进行换算。
rand/rand_max*range
rand:为0-32767之间的一个伪随机数
rand_max:为rand函数的伪随机数最大值
range:期望的随机数范围最大值,最小值预设为0
图2
图2中第36行代码展示转换代码对应的表达式,须要注意的是rand函数返回值和RAND_MAX宏都表示为一个整数,我们须要显示地将一个操作数转换为浮点值,第32行代码中使用了类型转换符(double),获取伪随机数与最大伪随机数的比值以后,除以期望的范围最大值range变量,就可以得到游戏中特定级别的数值范围,而且这个数值类型为浮点数,函数generateRandomNumber的返回值为整型值,故在第32行代码显示地将表达式的数值转换为整型数值。
图2中第34行代码调用了函数srand为rand函数设置了伪随机数起始种子值,假如起始种子值相同,这么rand所返回的数值序列也是一致的。因此,我们通过调用时间函数time,将当前时间所对应的秒数(自1970/1/1日开始估算)作为起始种子值,这样在每次启动这个游戏时就可以获取不同的随机数值了。
以上的三个函数实现了菜单显示、随机数范围值和生成伪随机数功能,程序的main函数对这种函数进行了调用,首先是displayMenu函数调用,用以显示菜单;以后通过玩家的输入内容来世成随机数范围,最后步入一个循环猜数流程,假如猜想次数小于10,这么程序将退出。
图3
图3代码第14行显示菜单,第16行按照玩家输入内容设定随机数范围,第17行代码生成一个随机数,第20-28行为一个循环句子,每一次玩家输入猜想的数值后,就会与计算机生成的随机数target进行比较,假如两者相同,则给出欢迎提示语,假如玩家的推测次数超过10次,这么程序将会手动退出。