分享

从零开始,步入Word宏编程的世界(第三讲)

 hdzgx 2017-12-01

实例三:“猜数游戏”

知识点:
    1、学习变量的类型与转换;
    2、掌握程序的循环与判断;
    3、学习随机数的生成。

 

    通过对前面两个实例的学习,相信您对自己掌握VBA编程已充满了信心。今天,我们将编写一个小小的游戏程序。这个游戏程序中既包含了新的知识点,又要考验您对前两课知识运用的熟练程度,就让我们静下心来克服这个小难关吧。

    游戏内容是这样的:电脑生成一个0到99之间的整数,请您来猜这个数是多少,每猜一次,电脑都给您一个提示,直到您猜中为止。

    程序思路:
1、电脑首先生成一个0到99之间的整数;
2、请您输入您所猜的数;
3、把您输入的数与电脑所生成的数进行比较,并给出“您猜大了”或“您猜小了”的提示;
4、如果您猜对了,则退出程序;如果您没有猜对,则循环回第二步重复运行,让您再次输入自己所猜的数。

 

从零开始,步入Word宏编程的世界(第三讲)

从零开始,步入Word宏编程的世界(第三讲)

 

    请看代码,必要的地方已添加了注释。程序中退格与对齐是为了便于理解。请您先试着自己把代码读一读,看看能不能读懂。)
’ ’=========程序名“您猜”=========
Sub 您猜()
Dim a, b, c, d’申明了四个变量,变量间用英文逗号分开,与前面实例二申明变量的写法不同,结果相同。
a = 0’这个变量用于计算您猜了多少次。
Randomize’准备生成一个随机的数字,先初始化随机数生成器。
b = Int(100 * Rnd) ’生成一个百以内的随机数,“Rnd”就是“随机数生成函数”。
Do’开始循环
a = a + 1’您猜的次数增添一次。当再次循环到这儿时,次数会继续往上加。
c = InputBox("请输入您所猜的数")’将取得的值赋予变量“c”,“c”是字符串!
d = CInt(c) ’将变量“c”转化为整数,再将值赋给“d”。
If b < d Then’进行比较,如果猜大了。
MsgBox ("您猜的数大了")’显示比较的结果。
ElseIf b > d Then’进行比较,如果猜小了。
MsgBox ("您猜的数小了")’显示比较的结果。
Else: b = d’进行比较,如果猜对了。
MsgBox ("哈哈,您猜对了!") ’显示比较的结果。
Exit Do’既然已经猜对了,就跳出循环。
End If’结束比较。
Loop’回到前面的Do,继续循环。
MsgBox ("您猜了" & a & "次!") ’弹出消息框,并使用了字符串连接。
End Sub’结束程序。

 

运行本程序,看看效果。并根据注释,体会循环与判断在本程序中的作用。

代码解说:

    a这个变量,用于计算您所猜的次数。每多猜一次,它就在自身的基础上加1,其相应的代码是:a = 0与a = a + 1两句。程序结尾时,将在消息框中显示“a”的值。

    b这个变量,用于记录一个随机生成的数字。其相应代码为:Randomize与b = Int(100 * Rnd)这两句。其中,Randomize这个语句在本程序中非常重要,如果您去掉这个函数,再多运行本程序几次的话,您就会发现猜测的答案居然是有规律的!!换句话说,只要我知道了电脑所出数字的规律我就可以“百发百中”地一次猜中这个数!所谓“随机数”顾名思义就应该是“随机”产生的数,在没有Randomize语句的情况下,这些产生的数看似很“随机”,其实有规律,这种随机数就是“伪”随机数。所以,Randomize语句的作用就是生成“真正”的随机数。
    Rnd函数是生成一个介于0与1之间的小数,乘以100是让这个小数成为一个介于0到100之间的数;Int函数的作用是将一个数的小数部分去掉,只保留它的整数部分,即“取整”。通过这样一个可能大家觉得有点复杂的过程,我们得到了一个0到99之间的整数(大于99而小于100的小数在取整后即是99,所以前面我们说“乘以100是为了生成一个介于0到100之间的数”,而真正取整之后最大的数只能是99。),并将它的值赋予了变量“b”。
生成随机数,是很多程序中要用到的功能(特别是游戏,比如游戏中随机生成不同的怪物或不同的宝物等。),上面的内容希望大家能悉心地体会。

    c这个变量,是取得输入框中我们所猜测的数字。其相应代码是“c = InputBox("请输入您所猜的数")”,但计算机并不认为我们所输入的是一个数字(整数),它把我们输入的内容看成是文字(字符串)。显然,文字是没有办法去与数字比较大小的,所以,我们要用到变量d。

    d这个变量,是一个整数。它是利用了“转换函数”——“CInt”,将我们所取得的字符串变量“c”转换成了一个整数。其相应代码是“d = CInt(c)”。也就是说,本程序中最终进行比较的,是两个整数“b”与“d”。这里涉及到VBA数据类型的知识。

对于VBA的数据类型,这里主要为大家介绍两种:
Integer——包含 -32,768 到 32,767 之间的整数。该类型的数值基本上可以满足我们通常使用整数时的需要;
String——包含变长字符串,最大长度可为 20 亿个字符。该类型的值其实就是我们常用的字符串。
我们在程序当中用的CInt函数,就是将一个String类型(字符)的值,转换成了一个Integer类型(整数)的值。所以我们称CInt函数为“转换函数”。
与CInt类似的常用转换函数还有:Clin、CSng、CStr等。可以把VBA帮助文件中的“转换函数”与“数据类型”相互参照进行学习。(相信这个时候您看帮助文件中的这部分内容,将不会再是一件难事。)

 

感觉到困难了吗?如果感觉到了困难,就请将上面的内容再体会体会。准备进入下一个知识点。
程序中的DO、Exit Do以及Loop为一个整体。其中,Do是开始进入循环; Loop是指回到Do语句处,再次进行循环; Exit Do是指当符合某一个条件时就直接退出循环。在本程序中,Exit  Do是指当猜中了(即b=d)时,退出循环;而无论是猜大了(b>d),还是猜小了(b

程序中数字的比较,是利用If语句来实现的。在实例二中,我们已接触过 If 语句,If语句的基本格式是:

If(条件)Then(结果)End If’(结束If判断语句)
在 If 语句判断的过程当中,还可以有子判断语句:Elseif then 。
对于一个具有多重判断的语句,我们大致可以这样理解:如果(If),那么(Then),否则(Elseif),那么(Then),再否则(Elseif),那么(Then)……(ElseIf根据情况可以套嵌很多层)最终(Else),结束判断(End If)。

 

本实例的知识扩展:
    1、试一试自己在程序结尾处再添几句,判断所猜的次数:如果小于六次,给出一个评价“优”;等于六次,给出一个评价“良”;大于六次,给出一个评价“您还需努力!”。
    2、试一试给程序补充部分内容,其功能为:在猜完一次后,询问游戏人“您还愿意再玩一次吗?”,并根据游戏者的响应,再次运行程序或退出程序。
    3、如果在刚开始游戏让我们输入数字时,我们选择了“取消”就会出错,您现在能利用自己已有的知识来解决这个问题吗?

 

好了,到这里,我们再回过头来看一看这个程序,理解起来还有困难吗?本实例可能比前两个实例稍难一点。如果您能顺利完成知识扩展中的问题题,那么祝贺您,您已过了入门的第一个小难关,可以进入下一步的实例四了,如果您还存在疑问,则再请多动手把前三个实例练一练!!

附:完善的猜数游戏——
Sub 您猜()
Dim a, b, c, d, e, f
e=6’该数字用于计算所猜次数是否为优、良等
Do
a = 0
Randomize
b = Int(100 * Rnd)
Do
a = a + 1
c = InputBox("请输入您所猜的数")
d = CInt(c)
If b < d Then
MsgBox ("您猜的数大了")
ElseIf b > d Then
MsgBox ("您猜的数小了")
Else: b = d
MsgBox ("哈哈,您猜对了!")
Exit Do
End If
Loop
MsgBox ("您猜了" & a & "次!")
If a>e
MsgBox ("您还需努力!")
Elseif aMsgBox ("您的猜数能力:优!")
Else a=e
MsgBox ("您的猜数能力:良!")
End if
f=MsgBox ("您还愿意继续玩吗?",4,”继续游戏”)’’注意此处常数的使用
if f=7 then’’注意此处消息框返回值的使用
exit do
else
end if
loop
End Sub

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多