2.2 打字练习游戏(随机数与特殊输入)
有了上面的绘制简单动画的技术,现在来看一下简易的打字练习游戏。
【程序2-2】编写一个简易的打字训练游戏:计算机每次随机生成一个小写英文字符,从屏幕一行的左侧开始逐渐地向右移动,走过的位置逐个显示为'-'字符。在行走过程中,如果用户正确地键入这个字符,则该字符就停止在当前位置,输出'*'字符并响铃,表示用户赢了;如果字符从左侧走到几乎接近于右侧边界时(通常的字符窗口为80列,在此设定为第75列为右界),用户仍然没有正确键入这个字符,则该字符停止在右界处不动。用户键入ESC键时可以选择结束游戏。
分析这个游戏中所需的一些操作,有些用前面的知识已经可以写出来了,有些则需要新的知识才能处理。
首先来看动画输出字符。根据上一节中的绘制简单动画的方法,让字符从左向右运动并留下'-'痕迹是很容易的,在循环中可写以下语句:
cout << "b--" << (char)ch;
注意这里因为使用 cout方法,所以不能直接输出ch(那样会把它作为整数输出),需要把它强制转换为char类型再输出。
程序中要求“随机生成一个小写英文字符”。这需要学习使用标准库中与随机数相关的知识。
1、随机数相关函数
计算机程序通常实现的都是确定性的计算:给一个或者一组初始数据,计算出一批确定的结果。然而计算机应用中有时也需要带有随机性的计算,需要用计算机生成随机数。例如以下场合:
(1)在程序调试中需要使用随机性数据作为试验数据;
(2)用计算机模拟某种实际情况或过程,揭示其中的规律性,使用随机数可以较好地反映客观过程的实际情况。
(3)在游戏程序中需要使用随机数展开或控制游戏过程。
计算机实际上无法生成真正的随机数,只能生成所谓的伪随机数:这些数字并不真正的随机,但具有类似于随机数的统计特征,如均匀性、独立性等。如何用计算机生成随机性较好的随机数仍是一个研究问题。最简单的生成方法是定义一种递推关系,通过它生成一个数值序列,设法使这个序列中的数看起来比较具有随机性。
C/C++标准库提供了基本的随机数相关功能。要想使用它们,C++程序头部应包含系统文件cstdlib(而C语言中要求包含头文件stdlib.h),即在文件头部写上如下代码行:
#include <cstdlib>
这个头文件里描述了与随机数相关的两个函数:
1、随机数种子函数srand,它的类型特征说明是:
void srand(unsigned seed)
这个函数用参数 seed 的值重新设置种子值,即为生成下一个随机数而保存的一个整数值(由它出发递推