扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
visual basic继承了basic语言易学易用的特点,特别适合于初学者学习windows系统编程。随着21世纪信息社会的到来,计算机在人们的工作和生活中的深入,要求我们越来越多地与计算机打交道,为了使用户在繁忙的日程工作中得到放松,于是出现了各种各样的休闲软件,如聊天工具,游戏等等。于是我们小组着手设计开始一个这样的游戏软件。通过这学期来Visual Basic的学习,我初步掌握了Visual Basic语言的最基本的知识,于是在牛荣和李鹏等老师的指导下动手用Visual Basic编写俄罗斯方块游戏。
创新互联建站-专业网站定制、快速模板网站建设、高性价比桑日网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式桑日网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖桑日地区。费用合理售后完善,10多年实体公司更值得信赖。
我们之所以选择开发俄罗斯方块游戏,无可争议,《俄罗斯方块》是有史以来最伟大的游戏之一。 在曾经发布过的所有游戏中,《俄罗斯方块》还被认为是仅有的一个能够真正吸引广泛人群的作品。谁能说清楚,迄今为止人们究竟花了多少万个小时在这个游戏上?也许这些时间本来可以被花在更具生产力的活动上。某些批评家也许会声称,《俄罗斯方块》要比过去二十年间出现的任何东西都要浪费人们的时间。至于我们,则要欣然提名它为GameSpot评选出的历史上最伟大游戏之一。
为了怀念经典,也为了能够给大多的计算机用户在工作之余找到一个休闲、娱乐的一个方式,我们小组开始着手用VB语言开发一个经典的俄罗斯方块游戏。
工程概况
2.1 项目名称
俄罗斯方块游戏
2.2 设计平台
VB 全称Visual Basic,它是以Basic语言作为其基本语言的一种可视化编程工具。
Vb是microsoft公司于1991年退出的windows应用程序开发工具visual意思是“可视化的”。在它刚推出来时,自身还存在一些缺陷,功能也相对少一些。但是经过多年的开发研究。最近microsoft公司又推出了VB6.0版本
VB6.0运行环境:硬件,要求486以上的处理器、16MB以上内存,50MB 以上的硬盘,cd-rom驱动器,鼠标。软件:要求windows 95以上版本。
2.3程序设计思想
游戏是用来给大家娱乐的,所以要能在使用的过程中给大家带来快乐,消除大家的疲劳,所以我们在游戏中添加了漂亮的场景和动听的音乐,设置了过关升级的功能,激发大家的娱乐激情。
从游戏的基本玩法出发,主要就是俄罗斯方块的形状和旋转,我们在设计中在一个图片框中构造了一个4*4的网状小块,由这些小块组合成新的形状,每四个小块连接在一起就可以构造出一种造型,因此我们总共设计了7中造型,每种造型又可以通过旋转而变化出2到4种形状,利用随机函数在一个欲览窗体中提前展示形状供用户参考,然后将展示的形状复制到游戏窗体中进行摆放,在游戏窗体中用户就可以使用键盘的方向键来控制方块的运动,然后利用递归语句对每一行进行判断,如果有某行的方块是满的,则消除这行的方块,并且使上面的方块自由下落,其中,方块向下的速度是有时钟控件控制的,在游戏中,用户也可以使用向下键加快下落速度,定义一个变量,对消除的函数进行记录,最后就可以得出用户的分数,用if 语句对分数判断,达到一定的积分就可以升级到下一个档次。
俄罗斯方块游戏设计的主要步骤为以下10个方面:
(1)游戏界面的设计。
(2)俄罗斯方块的造型。
(3)俄罗斯方块的旋转。
(4)俄罗斯方块的运动情况(包括向左,向右和向下)。
(5)俄罗斯方块的自动消行功能。
(6)游戏级别的自由选择。
(7)游戏速度的自由选择。
(8)游戏得分的计算。
(9)游戏菜单选项的设计及功能实现。
(10)游戏的背景音乐及特效。
2.4运用的控件和主要对象
我们在设计过程中主要用到的控件有:command控件,image控件,picture控件,label控件,timer控件,text控件,windows media player控件等等。
2.5主要实现的功能
我们开发的俄罗斯方块游戏,主要实现了以下几种功能:
1.可以灵活控制方块在图形框中运动。
2.游戏过程中方块可以自由旋转。
3.当某一行的方块排列满时,将自动将这一行方块消除,然后将上面所有方块向下移动,可以支持连续消行。
4.游戏前可以选择游戏的速度和游戏的等级,游戏速度既为方块下落速度,游戏等级为初始游戏时在基层随机生成一定行数的无规律方块,生成的行数由你来选择,每行至少产生5个以上的无规律方块,这样增加了游戏难度,对于游戏高手来说,无疑不是一个新的挑战。
5.游戏的得分支持积分,并且按照公式:
得分 = 原来分数+ 100 * (2 ^ 同时消除的行数-1)
这样,你同一时间消除的行数越多,你的得分也就越高,当游戏积分到了一定时可以自动升级,这个升级指速度升级。
6.游戏中提供了一个漂亮的场景和动听的音乐,给你带来无限激情。
2.6开发人员
由于这次课程设计所选的题目太复杂,而时间又比较紧张,指导老师建议和同学分工完成。我们小组成员包括组长孙磊周,副组长邹海星,此游戏由我们两个人共同开发而成。
正文
3.1游戏设计的具体实现
在我们两个人共同努力下,此次设计,终于能够圆满完成。由于时间的紧促,在设计中,也许会有一些考虑不周之处,但其功能已经能够满足大多用户的需求,相信假以时日,一定能做出一个更经典,更完美的俄罗斯方块游戏,下面我们将对每一步的具体如何实现展示给大家。
3.1.1游戏界面的设计和背景音乐及特效的实现
俄罗斯方块游戏主要由两个界面构成,登陆界面和开始游戏界面,在登陆界面中我们可以首先看到圣诞节的晚上飘梅花的场景,梅花从窗体顶部做函数曲线的下落运动,在窗体中定义一个Image控件组,在通用中定义梅花X坐标变量动态数组,Y坐标变量动态数组,步距X的变量动态数组,步距Y的变量动态数组,以及振幅变量动态数组。然后在窗体form_load中可以定义梅花的数量,利用随机函数产生随机的梅花坐标,步距和振幅,Image控件在运行时候就调用梅花图片,Image控件就可以由时钟控件控制下落速度,可以自由调节,梅花按snow(i).Left = xp(i) + am(i) * Sin(dx(i))函数在做纵向的正玄函数轨迹运动,竖直方向上为自由下落运动,,有am(i)来控制梅花的左右移动振幅。因此,我们就可以看到一个梅花在空中自由飘舞的画面了。
背景画面是用photoshop软件处理的漂亮图案,原本画面中的动画效果都是由Image控件制作的,还有点击进入游戏的按钮是由Label控件实现的,因为Image控件没有置前置后功能,不能将下雪的场景体现完整性,所以将这些图案全部放在背景上,不影响雪花飘落的效果,当点击画面的时候一样可以进入游戏界面。
游戏的背景音乐是由一段代码调用系统播放器Windows Player播放背景音乐,由于本次设计主要是针对游戏如何设计的,所以在这里就不对播放背景音乐的功能做介绍了。
3.1.2俄罗斯方块的造型
相信朋友们都玩过俄罗斯方块,对这个游戏的玩法和方块形状都比较熟悉。我们这个游戏只选择了最基本的7中造型,包括长条型,正方型,正S型,反S型,正7型,反7型,T型。如果需要我们可以添加更多的造型。将游戏界面的游戏区图片框分割成10*20的小块,每个小块放置一个command控件,预览区图片框按同样比例分割成4*4的小块,同样有command控件构成,我们可以把预览区图片框看作是从游戏区图片框中选取的一个部分,游戏区的小方块编号和欲览区编号如下图:
0 1 2 3 4 5 6 7 8 9
… … … … … … … … … …
… … … … … … … … … …
90 91 92 93 94 95 96 97 98 99
3 4 5 6
13 14 15 16
23 24 25 26
33 34 35 36
游戏区编号 欲览区编号
利用Select将方块的7中造型列出,比如长条型的设计,在欲览区中分别有3.4.5.6和5.15.25.35四个方块构成两中形态,用数组为:
m(0) = 3: m(1) = 4: m(2) = 5: m(3) = 6: situation2 = 0
m(0) = 5: m(1) = 15: m(2) = 25: m(3) = 35: situation2 = 1
将它的形状编号为0和1,在后面方便调用,其他的方块造型同样的方法。
3.1.3俄罗斯方块的旋转
俄罗斯方块的旋转主要将方块的位置加以变换得到的,例如上述范例,长条型有两中样式,根据小方块的编号变动来实现整个造型的旋转,比如:
If n(0) - 18 = 2 And n(3) + 9 = 198 Then
If cmdfang(n(0) - 18).Visible = False And _
cmdfang(n(1) - 9).Visible = False And _
cmdfang(n(3) + 9).Visible = False Then
hidefang 0
n(0) = n(0) - 18
n(1) = n(1) - 9
n(3) = n(3) + 9
showfang 0
situation = 1
End If
End If
方块的造型在旋转的时候存在一个公式,当然首先要判断是否满足旋转的要求,以上是一个长条型由横着变成竖立状态的旋转,我们以它的造型中的第三个小方块n(3)为中心旋转,这样,在开始运动的时候,长条形要发生旋转最少要运动到第三行,才能由横着变成竖立状态,游戏区图形框中第三行的第一个方块的编号为20,所以长条造型的第一个小方块的编号n(0)必须要大于20。同样,长条型方块在下落到底部的时候也有限制。如果长条下落到最后一行也将无法由横着变成竖立状态。
3.1.4如何实现方块的运动和自动消除满行的方块
我们的这个俄罗斯方块游戏主要是利用command控件的visible属性完成效果的,其实在游戏区图形框可以看成是由许多的command小方块组成,方块运动的过程就是造型里方块显示或者隐藏,就像现在的霓虹灯效果一样,由时钟控件控制visible属性改变的速度,上一层的消失,下一层的显示,这样,从视觉效果可以看到方块的下落运动效果。
方块在下落的过程中会自动判断每一行方块的visible属性,如果全部为true时,就会将这一行小方块的visible属性全部变成false,在将上面的小方块向下移动,利用for语句进行循环判断,将所有这样情况的行改变小方块visible属性。当有多行同时出现这样情况时使用递归调用,实现连续消行。具体程序代码如下:
For i = 190 To 10 Step -10
If cmdfang(i).Visible = True And _
cmdfang(i + 1).Visible = True And _
cmdfang(i + 2).Visible = True And _
cmdfang(i + 3).Visible = True And _
cmdfang(i + 4).Visible = True And _
cmdfang(i + 5).Visible = True And _
cmdfang(i + 6).Visible = True And _
cmdfang(i + 7).Visible = True And _
cmdfang(i + 8).Visible = True And _
cmdfang(i + 9).Visible = True Then
For j = i + 4 To i Step -1
t = 1
cmdfang(j).Visible = False
cmdfang(2 * i + 9 - j).Visible = False
For k = 1 To 4000
DoEvents
Next
t = 0
Next
linenum = linenum + 1
For j = i - 1 To 0 Step -1
If cmdfang(j).Visible = True Then
cmdfang(j).Visible = False
cmdfang(j + 10).Visible = True
End If
Next
clearline '为了实现连消数行,这里使用递归调用
End If
Next
3.1.5游戏速度和游戏级别自由选择
游戏速度的自由选择无非就是改变时钟控件的频率,我们在菜单中添加了选择速度的功能,还有添加了考验功能,将欲览窗中的方块造型隐藏,给玩家提高了难度,如果你不愿意接受考验也可以点击显示还原成原来状态。
游戏级别的自由选择是让用户选择游戏开始时候,游戏区底部出现一定行数的随机方块,同样给玩家增加了难度,功能代码如下:
For i = 19 To 20 - Val(txthard.Text) Step -1
For j = i * 10 To i * 10 + 9
If Rnd = 0.5 Then cmdfang(j).Visible = True
Next
Next
可以根据你选择的难度系数在底层的每一行随机产生超过半数(即5个以上)以上的小方块,这样适合喜欢高难度的玩家。
3.1.6游戏得分的计算和游戏菜单的编辑
游戏得分的计算主要是根据消除的行数来决定的,当然每一次同时消除的行数不一样,每一行的得分也不一样,如果你每次消除的行数为1,则最后得分是100分,如果同时消除2行,则最后得分是300分,同时消除3行,得分为700分,同时消除4行,得分为1500分,这由公式:得分 = 原来分数+ 100 * (2 ^ 同时消除的行数-1)。
游戏的编辑,读者可以参照下面的功能介绍。
3.2 游戏功能的介绍
文件-------开始:开始游戏。
继续:继续游戏。
暂停:暂时停止游戏,点击继续的时候可以继续游戏。
退出:退出游戏。
设置-------选择游戏级别。
选择游戏速度。
考验-------显示:显示欲览去方块。
隐藏:隐藏欲览去方块。
帮助-------操作提示以及版本信息和作者资料。
用户界面具体如图:
图—登陆界面 图—游戏界面
图—菜单编辑界面 图—游戏帮助界面
有关说明
经过两个多星期的设计和开发,俄罗斯方块游戏已经成功。其功能基本符合用户需求,能够完成游戏的控制,方块的变换以及消层等功能。并提供游戏设置,对于一些技术性比较过硬的玩家,可以调游戏级别、以及游戏速度,使得玩家能够充分的发挥竞技游戏的特色,可以不断的挑战自我,挑战极限。
4.1游戏设计中的不足之处
但是由于课程设计时间较短,所以该游戏还有许多不尽如人意的地方,比如方块类型太少,退出游戏不能存储进度等多方面问题。这些都有待进一步改善,我们在游戏中还可以更换背景音乐,以适合不同的玩家,在每通过一关可以给玩家播放一段flash,吸引玩家去挑战极限,不断提高玩家的兴趣,相信在以后的制作过程中我们将给大家带来一个更新功能更全面的游戏。
4.2VB与C语言之间的不同之处
我们这个小游戏也可以用C语言来实现,在程序的编程上没有VB语言方便实用,C语言和VB语言之间存在很多的共同点,虽然语法方面有点差异,但是在编程思路上完全一样,VB能够实现很多C#不能做到的功能,如When语句、Optional参数、局部Static变量、对象实例访问静态方法、Handles绑定事件、On Error处理异常、Object直接后期绑定等等。VB和C#语言,编译出来的是同样的CIL,但为什么VB支持很多有趣的特性呢。我们一起来探究一下。
4.21局部静态变量
VB支持用Static关键字声明局部变量,这样在过程结束的时候可以保持变量的数值:
Public Sub Test1()
Static i As Integer
i += 1 '实现一个过程调用计数器
End Sub
我们实现了一个简单的过程计数器。每调用一次Test,计数器的数值就增加1。其实还有很多情况我们希望保持变量的数值。而C#的static是不能用在过程内部的。因此要实现过程计数器,我们必须声明一个类级别的变量。这样做明显不如VB好。因为无法防止其他过程修改计数器变量。这就和对象封装一个道理,本来应该是一个方法的局部变量,现在我要被迫把它独立出来,显然是不好的设计。那么VB是怎么生成局部静态变量的呢?将上述代码返汇编,我们可以清楚地看到在VB生成的CIL中,i不是作为局部变量,而是作为类的Field出现的: .field private specialname int32 $STATIC$Test1$2001$i
也就是说,i被改名作为一个类的字段,但被冠以specialname。在代码中试图访问$STATIC$Test1$2001$i是不可能的,因为它不是一个有效的标识符。但是在IL中,将这个变量加一的代码却与一般的类字段完全一样,是通过ldfld加载的。我觉得这个方法十分聪明,把静态变量变成生命周期一样的类字段,但是又由编译器来控制访问的权限,让它成为一个局部变量。同时也解释了VB为什么要用两个不同的关键字来声明静态变量——Static和Shared。由于局部静态变量的实质是类的字段,所以它和真正的局部变量还是有所不同的。比如在多线程条件下,对局部静态变量的访问就和访问字段相同。
4.2.2Handles和WithEvents
VB除了可以用C#那样的方法来处理事件响应以外,还有从VB5继承下来的独特的事件处理方式——WithEvents。
我喜欢称这种事件处理方式为静态的事件处理,书写响应事件的方法时就已经决定该方法响应的是哪一个事件,而C#则是在代码中绑定事件的。VB中WithEvents静态方法是非常有用的,它可以显著增强代码可读性,同时也让VB.net中的事件处理非常方便,不像C#那样离开了窗体设计器就必须手工绑定事件。
4.2.3类型转换运算符
在Visual Basic 2005中将加入一个新的运算符——TryCast,相当于C#的as运算符。我一直希望VB有这样一个运算符。VB目前的类型转换运算符主要有CType和DirectCast。他们的用法几乎一样。我详细比较了一下这两个运算符,得出以下结论:
1.在转换成引用类型时,两者没有什么区别,都是直接调用castclass指令,除非重载了类型转换运算符CType。DirectCast运算符是不能重载的。
2.转换成值类型时,CType会调用VB指定的类型转换函数(如果有的话),比如将String转换为Int32时,就会自动调用。
4.2.4默认属性和属性参数
在原先的VB6里,有一项奇特的功能——默认属性。在VB6中,对象的名称可以直接表示该对象的默认属性。
4.2.5可选参数和按名传递
VB从4.0开始支持“可选参数”这一特性。就是说,函数或子程序的参数有些是可选的,调用的时候可以不输入。其实VB从1.0开始就有一些函数带有可选参数,只不过到了4.0才让用户自己开发这样的过程。在VB4里,可选参数可以不带默认值,而在VB里,如果使用可选参数,则必须带有默认值。在调用的时候,VB若发现参数被省略,则自动读取.param部分的默认值,并显式传递给过程。这一部分完全由编译器处理,而且没有任何性能损失,和手工传递所有参数是完全一样的。至于按名传递,VB会自动调整参数的顺序,其结果与传统方式的传递也没有任何的不同。这说明我们可以放心地使用这项便利。而且带有可选参数的过程拿到C#中,顶多变成不可选参数,也不会造成什么其他的麻烦。
PS.很多COM组件都使用了默认参数,而且有些过程的参数列表非常长,在VB里可以轻松地处理它们,而在C#中经常让开发者传参数传到吐血。
4.2.6在经过对比之后可得以下一个结论:
1.目前的主流编程语言没有简单的,如果你想学精通的话。
2.VB的门槛比较低,编程思想较容易接受。
3.学习C不能短期内见到成效。
4.据用户调查69%的考生觉得VB更容易接受
致谢
在本次课程设计中,我从指导老师牛荣和李鹏身上学到了很多东西。老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感谢他耐心的辅导。
另外,在游戏开发过程中化希耀老师和杜义君老师也给于我们很大的帮助,帮助解决了不少的难点,使得游戏能及时开发完成,还有所有的同学同样给与我不少帮助,这里一并表示感。
参考文献:
[1]Vsual Basic 程序设计教程 作者:龚沛曾,陆慰民,杨志强 高等教育出版社出版
[2]Vsual Basic 6.0程序设计 作者:刘新民,蔡琼,白糠生 清华大学出版社出版
[3]80例上手 VB6 编程 作者:唐凯军,汤惠莉 山东电子音像出版社
[4]Vsual Basic 实例教程 作者:卢毅 科学出版社出版
[5]Vsual Basic 经典范例50讲 作者:赵欣胜,亢慧娟,刘晟宏 科学出版社出版
习题一
答案在教材上找。
习题二
1.对象指现实世界中的实体。每个对象有自己的特征(属性)、行为(方法)和发生在该对象上的活动(事件)。
类是对同一种对象的集合与抽象。类包含所创建对象的属性数据,以及对这些数据进行操作的方法。封装和隐藏是类的重要特性,将数据结构和对数据的操作封装在一起,类的内部实现细节对用户来说是透明的。
VB工具箱中的可视图标是VB系统设计好的标准控件类。通过将控件类实例化,得到真正的控件对象。在窗体上画一个控件,就将类转换为对象,创建了一个控件对象。
VB中常用的对象是控件。此外,VB还提供了系统对象。窗体是个特例,它既是类也是对象。当向一个工程添加一个新窗体时,实质就由窗体类创建了一个窗体对象。
对象的三要素:属性、事件和方法。
属性:存放对象的数据(决定对象外观及功能)对象属性的设置方法:在设计阶段,利用属性窗口直接设置属性值;程序运行时,通过语句[对象名.]属性名=属性值。若属性只能在设计阶段设置,在程序运行阶段不可改变,称为只读属性。
事件:发生在对象上的事情。同一事件,对不同的对象,会引发不同的反应。
事件过程:应用程序处理事件的步骤。应用程序设计的主要工作就是为对象编写事件过程的代码。
方法:面向对象的程序设计语言,为程序设计人员提供了一种特殊的过程和函数。方法是面向对象的,调用时一定要指明对象。
2.窗体和控件具有的基本属性“
(1) Name属性:名称
所创建的对象名称,在程序中引用。
(2) Caption属性:标题
该属性决定了对象上显示的内容。
(3) Height、Width、Top和Left属性
决定对象的大小和位置。
(4) Enabled 属性:对象是否允许操作
(5) Visible 属性:对象是否可见
(6) Font 属性组:文本的外观
FontName字体、FontSize大小
FontBold粗体、FontItalic斜体
FontStrikethru 删除线
FontUnderline 下划线
(7) ForeColor属性:前景颜色
(8) BackColor属性:背景颜色
(9) MousePointer属性:鼠标指针类型, 设置值范围0~15,由系统指定 。若为99,由用户提供的图形文件定义鼠标指针形状。
(10) MouseIcon属性:在MousePointer属性值为99时,存放自定义的鼠标图标文件(.ico或.cur)。图标库在Graphics目录下。
3.窗体的事件:Load事件是在窗体被装入工作区时触发的事件。当应用程序启动,自动执行该事件,该事件通常用来在启动应用程序时对属性和变量进行初始化。
窗体的方法:(1)Print方法
用来显示文本内容,格式:[对象.]print 表达式
(2)Cls方法
清除运行时在窗体或图形框中产生的文本或图形, Cls方法不能清除窗体在设计时的文本和图形。
格式:[对象.]cls
(3)Move方法
可移动窗体或控件,并可改变其大小。
语法格式如下:
[对象.]Move 左边距离[,上边距离[,宽度[,高度]]]
4.标签作用:用于显示文本(输出)信息,不能作为输入信息的界面。其内容只能通过Caption属性设置或修改,不能直接编辑。
5.文本框是一个文本编辑区域,可以在该区域输入、编辑、修改和显示正文内容。在VB中字符长度以字为单位,也就是一个西文字符与一个汉字都是一个字,长度为1。
重要属性(1) Text 显示或输入的正文内容。
(2) Maxlength 设置文本框可输入的文字最大长度。默认值为0,表示可以输入任意长字符串。
(3) MultiLine 多行属性
设置为True时,文本框可以输入或显示多行正文,同时具有文字处理器的自动换行功能,按Enter键可插入一空行。
(4) ScrollBars 滚动条属性
0-None 无滚动条
1-Horizontal 水平滚动条
2-Vertical 垂直滚动条
3-Both 同时加水平和垂直滚动条
注意:当MultiLine为True时,ScrollBars才有效
(5) PassWordChar 设置显示文本的替代符。例如,当设置为“*”,则在文本框输入的内容均以“*”显示,而存储的值是用户输入的原文。一般用于设置口令的输入。
当MultiLine为True时,该属性不起作用,密码不允许多行。
(6) Locked 指定文本控件是否可被编辑,默认值为False(可编辑),当设置为True时,文本控件相当于标签控件的作用。
注意:Locked与Enabled的区别。
(7)文本内容进行选择操作的三个属性
SelStart 选定的正文开始位置
SelLength 选定的正文长度
SelText 选定的正文内容
这3个属性互相关联,例如设置SelStart、SelLength后,SelText 自动存放指定的文本。
注意:属性窗口中没有这三个属性,只能在程序代码中使用。
6.文本框的事件:(1) Change事件:当Text属性值发生改变时引发该事件
(2) KeyPress事件:按下并且释放键盘上的一个键时,引发焦点所在控件的KeyPress事件,所按键的值存放在参数KeyAscii中。对回车的判断 KeyAscii=13
7.文本框最有用的方法是SetFocus,把光标移到指定的文本框中。
8.命令按钮 Picture属性:按钮可显示图片文件(.bmp和.Ico),当Style为1时有效。
10. 启动窗体时将命令按钮定位在窗体中央的代码
Private Sub Form_Load()
Command1.Left = Form1.ScaleWidth / 2 - Command1.Width / 2
Command1.Top = Form1.ScaleHeight / 2 - Command1.Height / 2
End Sub
11.vb图片文件在 C:\Program Files\Microsoft Visual Studio\Common\Graphics 文件夹。
安装VB时可选择是否安装这些图片文件。
习题三
1. 合法常量:
(1) Double
(2) 错误
(3) Double
(4) Double
(5) 错误
(6) Integer
(7) String
(8) String
(9) Date
(10) Double
(11) 错误(汉字字符)
(12)Integer(八进制)
(13) 错误(八进制无数码8)
(14) Integer
(15) Boolean
(16) 错误
(17) 错误(十六进制无数码g)
(18) Single
说明:浮点型变量默认为Double类型而非Single。
2. 合法变量名:
(1) √
(2) √
(3) 误:数字开头
(4) 误:含空格
(5) 误:关键字
(6) √
(7) 误:关键字
(8) 误:有括号
(9) √
(10) √
(11) √
(12) √(汉字字符可作为变量名,但不常用,且此名称易误解)
变量命名规则见P.41-42。
字母(汉字)开头,字母(汉字)、数字、下划线组成,长度为1-255个字符;关键字不可作为变量名,但可在变量名中嵌入关键字;不区分大小写。
常量、数组、类型、函数、过程、对象命名规则与此相同。常量名通常全用大写。
3. 写VB表达式
(1) Abs(x + y) + z ^ 5
(2) (1 + x * y) ^ 6
(3) (10 * x + Sqr(3 * y)) / (x * y)
(4) (-b + Sqr(b ^ 2 - 4 * a * c)) / (2 * a)
(5) 1 / (1 / r1 + 1 / r2 + 1 / r3)
(6) Sin(45 * 3.14159 / 180) + (Exp(10) + Log(10)) / Sqr(x + y + 1)
4. 根据条件写表达式
(1) 随机产生大写字母 Chr(Int(Rnd * (Asc("L") - Asc("C") + 1) + Asc("C")))
(2) [100,200]内的随机数 Int(Rnd * 101) + 100
(3) 点(x,y)位于第一或第三象限 x 0 And y 0 Or x 0 And y 0 或 x * y 0
(4) x是5或7的整数倍 x Mod 5 = 0 Or Int(x / 7) = x / 7
(5) 将两位整数x的个位与十位对换 x \ 10 + (x Mod 10) * 10
(6) 四舍五入取两位小数 Round(x, 2)
(7) 字符变量C是字母字符(不区分大小写)——准确地说是:字符变量C的第一个字符是字母
C = "A" And C = "Z" Or C = "a" And C "z"
或 UCase(C) = "A" And UCase(C) = "Z"
或 LCase(C) = "a" And LCase(C) = "z"
(8) 字符变量S第5个字符起取6个字符 Mid(S, 5, 6)
(9) 10≤x<20 10 = x And x 20
(10) x,y至少有一个小于z x z Or y z
(11)x,y都大于z x z And y z
5. 写表达式的值
(1) 188 ——注意运算的优先级顺序,以及整除运算“\”的计算
(2) 200100 —— 计算100 + "100"时,由于两个操作数类型不同,在可能的情况下自动采用精度较高的类型,即把字符型转换为数值型,100 +100 得到200;然后进行字符串连接运算200 100 ,再自动将两个数值转换为字符串,得200100。
(3) 68.56 ——在四舍五入函数产生之前,这就是四舍五入的计算方法
(4) 876554 ——先进行字符串的“+”运算,再转换成数值。在变量名和函数名后可加上类型符,以强调其类型,但不是必须的。
(5) 2000-2-29
(6) 6
6.Shell函数调用
i = Shell("mspaint.exe", 1) '启动画图
i = Shell("C:\Program Files\Microsoft Office\OFFICE11\winword.exe", 1) '启动Word
说明:“画图”是Windows本身提供的程序,可以省略路径。
8. 答:单精度浮点型
第7,9题答案在教材中找。
习题四
第1,3,5,8题答案在教材中找。
2. 赋值语句的错误
(1)10x 不能做变量名。
上机验证结果:VB将10识别为行号,x = Sin(x) + y是为变量x赋值。故无语法错误。
(2)Sqr函数的参数为负数。
上机验证结果:“无效的过程调用或参数”
(3)赋值号左边不是变量名。
上机验证结果:“缺少子程序、函数或属性”
(4)除数为0
上机验证结果:“溢出”。
4. [答案略]
说明:小数位可以使用四舍五入函数Round或输出格式函数Format。例如Round(x, 2)和Format(x, “0.00”)均可使结果只保留两位小数。但如果四舍五入后要进行数值运算,则使用Round函数,例如z=Round(x,2)+Round(y,2)。而Format函数通常只用于输出格式设置。
6.指出错误
(1)“≥”应改为“=”,前者是中文字符,不具有运算功能。
(2)“10x20”应改为“10x And x20”,否则运行结果错误。
7.写条件语句
(1)
Dim c As String
c = InputBox("c=")
If Mid(c, 3, 1) = "C" Then
MsgBox "Yes"
Else
MsgBox "No"
End If
(2)
# 使用If语句
Dim x As Single, y As Single
x = Val(InputBox("x="))
If x 20 Then
y = x ^ 2 + 3 * x + 2
ElseIf x = 10 Then
y = Sqr(3 * x) - 2
ElseIf x 0 Then
y = 1 / x + Abs(x)
End If
Print "y="; y
# 使用Select Case语句
Dim x As Single, y As Single
x = Val(InputBox("x="))
Select Case x
Case Is 20
y = x ^ 2 + 3 * x + 2
Case Is = 10
y = Sqr(3 * x) - 2
Case Is 0
y = 1 / x + Abs(x)
End Select
Print "y="; y
(3)
# 使用If语句
Dim x As Single, y As Single, z As Single, Max As Single
x = Val(InputBox("x="))
y = Val(InputBox("y="))
z = Val(InputBox("z="))
Max = x
If y Max Then Max = y
If z Max Then Max = z
Print "Max="; Max
# 使用IIF函数
x = Val(InputBox("x="))
y = Val(InputBox("y="))
z = Val(InputBox("z="))
Max = IIf(x y, x, y)
Max = IIf(z Max, z, Max)
Print "Max="; Max
9. 计算循环次数
(1) 6
(2)19
(3)0
(4)死循环直至溢出
10. 40号语句执行 4次;第50 号语句执行12次;
执行第90号语句输出的结果是: 13,0,2
说明:该程序为嵌套循环,其中外循环由j值变化(1,4,7,10)控制执行4次,当j值为13时结束循环;内循环由k值变化(6,4,2)控制执行3次,当k值为0时结束循环。第40 行是外循环的循环体,故执行4次;第50 行是内循环的循环体,故执行4*3=12次。
11. 可以定一个较大的循环次数,在循环体中根据条件用Exit For退出。
但这种情况通常用Do While循环控制。
12. 编程(并非唯一正确答案)
(1)
Dim i As Integer, s As Integer
For i = 1 To 10
s = s + (i + 1) * (2 * i + 1)
Next i
Print "s="; s
(2)
Dim i As Integer, n3 As Integer, n7 As Integer
For i = 1 To 100
If i Mod 3 = 0 Then n3 = n3 + 1
If Int(i / 7) = i / 7 Then n7 = n7 + 1
Next i
Print "1-100中3的倍数有"; n3; "个"
Print "1-100中7的倍数有"; n7; "个"
(3)
Dim s1 As String, s2 As String, i As Integer
s1 = InputBox("Input String")
s2 = ""
For i = 1 To Len(s1)
s2 = Mid(s1, i, 1) + s2
Next i
Print "原序:"; s1
Print "反序:"; s2
或
For i = Len(s1) To 1 Step -1
s2 = s2 + Mid(s1, i, 1)
Next i
13. 输出字符串“10100”。该程序功能是将十进制数转化为二进制。
说明:要理解该程序需要了解数制转换的计算方法(有兴趣者参看百度百科)。48是字符"0"的ASCII码。
14. 运行时输出 22 484
该程序功能是求x和y最大公约数和最小公倍数。
说明:此算法称为“辗转相减法”。可对照例4.17的辗转相除(辗转求余)法。
15.[50,100]间的20个随机数,求最大值、最小值、平均值。
Dim x As Integer, sum As Integer, aver As Single
Dim n%, i%, max%, min%
Randomize
max = 50: min = 100: n = 20
For i = 1 To n
x = Int(Rnd * 51 + 50)
List1.AddItem x
sum = sum + x
If x max Then max = x
If x min Then min = x
Next i
aver = sum / n
Print "最大值:"; max, "最小值:"; min, "平均值:"; aver
习题五
1. 指定数组的默认下界 Option Base 1
2.合理的数组声明
(1)错。定义数组不可用变量(教材99页)。
(2)正确。该数组下标为0-11。
(3)错。VB中数组下标用圆括号。
(4)正确。三维数组三个下标分别为0-1,0-1,0-2,共12个元素。
(5)错误。非动态数组,不可重定义。
(6)错误。动态数组重定义时不可改变数据类型。
(7)正确。二维数组两个下标分别为0-2,0-3,共12个元素。
(8)语法错误,二维数组定义中漏写逗号——可能是印刷错误,加上此逗号则正确。
3.当引用数组元素时下标值小于定义的最小下标,或大于最大下标时,会发生“下标越界”错误。
4.数组名:a ;数组类型:Single(单精度浮点型);维数:二维;
各维的上下界:第一维下界(最小下标)为 -1,上界(最大下标)为2,
第二维下界(最小下标)为 0,上界(最大下标)为3;
数组的大小:4行4列共16个元素
以矩阵的格式输出二维数组:
For i = -1 To 2
For j = 0 To 3
Print a(i, j);
Next j
Next i
或写成更加通用的代码形式:
For i = LBound(a, 1) To UBound(a, 1)
For j = LBound(a, 2) To UBound(a, 2)
Print Tab(j * 8); a(i, j);
Next j
Next i
6.一维字符数组
Dim a(1 To 20) As String
Private Sub Command1_Click() '(1)随机产生字符串
Dim i As Integer, j As Integer, n As Integer, c As String * 1
Randomize
For i = 1 To 20
a(i) = "" '将第i个元素清空
n = Int(Rnd * 10 + 1) '产生[1,10]的随机数
For j = 1 To n 'a(i)中有n个字符
c = Chr(Int(Rnd * 26 + 97)) '随机产生字母97是字母a的ASCII码
a(i) = a(i) + c
Next j
Next i
End Sub
Private Sub Command2_Click() '(2)输出字符串
Dim i As Integer
For i = 1 To 20
Print Tab(((i - 1) Mod 5) * 11); a(i);
If i Mod 5 = 0 Then Print
Next i
End Sub
Private Sub Command3_Click() '(3)最长的字符串
Dim i As Integer, imax As Integer
imax = 1
For i = 2 To 20
If Len(a(i)) Len(a(imax)) Then
imax = i
End If
Next i
Print "最长的字符串:"; a(imax)
End Sub
第7,8题答案在教材中找。
第9题“自定义变量”含义不明,暂时无法回答。
第5,10 题 [暂略]
习题六
第1,2,6-8题答案可在教材中找到。
3.指出过程说明中的错误
(1)Sub子过程不应该定义类型
(2)函数与形式参数不应该同名
(3)数组作为形式参数时,应使用传地址方式,不可使用传值(ByVal)
(4)形式参数应该是变量或数组名,不可以是一个数组元素
4.指出调用过程语句的错误
(1)无语法错误,但因形参sum所对应的实参是常量3,故计算结果无法传递给主调程序。
(2)实参变量c与形参sum的类型不一致。
(3)类似于(1),形参sum所对应的实参是表达式a+b,故计算结果无法传递给主调程序。
(4)类似于(1)和(2),形参sum所对应的实参是表达式Sqr(c),故计算结果无法传递给主调程序。另外srq(a)存在语法错误(拼写错)。
(5)与(2)相同,实参c与形参sum的类型不一致。
5.迭代法求平方根
(1)自定义函数的定义及调用
Function FSqr1(a As Single) As Single
Dim x0 As Single, x As Single
x = a
Do
x0 = x
x = (x0 + a / x0) / 2
Loop While Abs(x - x0) 0.00001
FSqr1 = x
End Function
Private Sub Command1_Click()
Dim x!, y!
x = Val(InputBox("x="))
If x = 0 Then
y = FSqr1(x)
Print y
End If
End Sub
(2)自定义子过程的定义及调用
Sub FSqr2(a As Single, x As Single)
Dim x0 As Single
x = a
Do
x0 = x
x = (x0 + a / x0) / 2
Loop While Abs(x - x0) 0.00001
End Sub
Private Sub Command2_Click()
Dim x!, y!
x = Val(InputBox("x="))
If x = 0 Then
Call FSqr2(x, y)
Print y
End If
End Sub
(3)递归函数及调用 [略]
习题七
第1-9题,答案在教材上找;第10,12-14题,略。
11.检测Ctrl和F3同时按下的代码:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = 2 And KeyCode = 114 Then MsgBox "HAHA"
End Sub
习题八
第1,2,6,7,9题答案可阅读教材找到。
3.写Open语句
(1) Open "Seqnew.dat" For Output As #1 '重写
或 Open "Seqnew.dat" For Append As #1 '添加
(2)Open "Seqold.dat" For Input As #2
(3)Open "Seqappend.dat" For Append As FreeFile
4.编程,将文件Text.dat 读入变量strTest。
Dim strTest As String
Open "Text.dat" For Input As #2
Do While Not EOF(2)
strTest = strTest + Input(1, #2)
Loop
8.本课程不涉及二进制文件。故此处以顺序文件读写方式编程。另外合并的结果可以是合并到其中某一个文件,也可以是合并到一个新的文件,此处代码是合并到其中一个文件F1.txt。
'方法一,在2号文件一次读一个字符并写入1号文件
Dim strTemp As String * 1
Open "d:\F1.txt" For Append As #1
Open "d:\F2.txt" For Input As #2
Do While Not EOF(2)
strTemp = Input(1, #2)
Print #1, strTemp; '注意结尾有分号,否则每个字符一行
Loop
Close
'方法二,在2号文件一次读一个字符并累加,最后将累加结果写入1号文件
Dim strTemp As String '注意方法一变量定义的区别
Open "d:\F1.txt" For Append As #1
Open "d:\F2.txt" For Input As #2
strTemp = ""
Do While Not EOF(2)
strTemp = strTemp + Input(1, #2)
Loop
Print #1, strTemp
Close
习题九
答案在教材上找。
习题十
答案在教材上找
Wrox红皮的《Visual Basic 2010 入门经典》还是不错的,毕竟是比较权威的书。不过这个还是要靠兴趣和编程量的。我觉得作为教材的书基础一点就可以了,有深度的可以作为课下资料或者上网查。个人觉得多编一些实际一点的有意思的程序比较好吧
你以前若是 一点都没学过,确实有困难,有很多名词是你以前没有见过的。
有困难的时候必须有人解答才行!!!
想系统学习编程(高深),那就去学习C
若只是编写一些小程序,那就去学VB
现在所用到中小型应用程序,VB编写的占多数!!
WOrd字处理软件就是用VB编的 系统是用C编写的
VB程序设计简明教程 高等教育出版社
这本书编写的相当好!!!!
Visual Basic程序设计简明教程(第二版)
ISBN:7-04-011549,P334
龚沛曾等,已出版,定价:25.60元
本书是为将Visual Basic作为程序设计第一语言课程的学校编写的。在第一版的基础上,本书针对初学者的特点,在内容编排、叙述严谨、实验题选择等方面做了进一步修改,力图便于教与学。
本书分为教学篇和实验篇。教学篇从两个方面即程序设计语言和可视化界面设计进行介绍,重点在第一方面。对程序设计的基本知识、基本语法、编程方法和常用算法进行了较为系统、详细的介绍,让学生学会分析问题、掌握简单问题编程的能力;而可视化界面设计是实际应用当中不可缺少的。本书将两者有机地结合,既可提高学生学习积极性又可提高编程效率和教学效果,真正达到学以致用的目的。
实验篇根据教学篇的布局,安排了相应的十一个实验,每个实验有若干个题目。根据教学规律和读者的建议,凡奇数号的实验给出了解答,偶数号实验答案则在配套的《Visual Basic实验指导与测试》(第二版)一书中给出,以培养学生独立解题的能力。返回
作者介绍:
龚沛曾(GONG PEIZENG),女,1953年8月生,1969年1月参加工作,1982年1月毕业于华东理工大学。现任同济大学计算机系教授,基础学科组主任,全国高校计算机教育研究会常务理事,上海市计算机基础教育协会秘书长。
长期从事计算机基础教学和科研工作。主讲《高级程序设计语言(C、VB、FORTRAN、PASCAL、COBOL)》、《计算机文化》、《实用软件技术》、《数据结构》、《Web技术》等课程。研究方向计算机辅助教育。
主编教材10余本、发表论文20余篇。主要教材有:《计算机文化基础》、《Visual Basic程序设计教程》、《Visual Basic计算机绘图》、《C语言程序设计》等系列教材;发表的主要论文有:"通用学分制智能教务管理系统的研究与实践"、"研究集教学、实验、考试于一体化的CAI课件的有效途径"、"多媒体CAI课件开发的技术和方法"等。承担了教育部《基于网络环境的计算机基础教学改革与实践》等教改项目。
主要成果有:负责的《面向21世纪计算机基础教学改革与实践》项目2001年获国家级教学成果二等奖、上海市教学成果一等奖;主编的《计算机文化基础》、《Visual Basic程序设计教程》教材2000年分别获上海市优秀教材二、三等奖,其中《计算机文化基础》教材列入国家十五规划教材,《Visual Basic程序设计教程》列入教育部面向21世纪教材;参加的国家七?五攻关项目"城市环境噪声防治系统"1992年获上海市科技进步三等奖;承担的《通用学分制智能智能教务管理系统》、《计算机文化CAI课件》两项目1997年分别获教育部、全国工科协作组优秀CAI软件三等奖。返回
专家书评:
探索 创新 实用--评《Visual Basic程序设计简明教程》
同济大学 吴启迪
由龚沛曾编著的《Visual Basic程序设计简明教程》已由高等教育出版社出版。从一些使用高校反馈的信息看,这是一本适用于计算机第二层次教学的优秀教材,它有以下特色。
一、 体现时代特征,选材超前
教育部关于计算机基础教育三个层次的课程体系中的第一层次--计算机文化教育的重要性,已成为广大教育工作者的共识。探索改革第二层次中程序设计语言课程教学,体现21世纪的时代特征,是深入教育改革的研究内容。为此,作者提出了将传统的程序设计语言教学转向反映21世纪潮流的面向对象的程序设计技术,并以VB为环境进行实施。VB不仅具有面向对象、可视化、事件驱动等特点,而且继承了 Basic简单易学的优点,尤其适合于非计算机专业学生的学习。教材的出版对探索和推广面向21世纪的程序设计语言教学改革有着重要的意义。
二、 结构合理,层次清楚,适用性强
该书兼顾到读者的不同程度,从打好基础和培养学生应用计算机的能力角度出发,分为基础篇、提高篇和实验篇。 基础篇分为8章。针对程序设计的初学者,注重VB的基础知识。对VB的程序设计语言基础做了较详细的介绍,列举了一般程序设计语言教学中必须掌握的常用算法,同时介绍了VB的控件、菜单、文件、图形设计等。此篇可作为大学生的程序设计语言的必修课教学内容。
提高篇分四章。对已掌握了程序设计的学生,注重VB与当前新技术应用的结合,包括与数据库、OLE、API函数、WEB等相结合,这些可作为选修课或自学内容。
实验篇提供了15个单元的实验和自我测试题。通过针对性的上机实践,使读者掌握程序设计与调试的方法,提高动手能力,巩固所学的知识。
三、 两个结合,注重应用
教材始终贯穿了两个结合,即将面向对象程序设计方法和结构化程序设计方法有机结合,计算机文化基础和计算机技术基础两个层次有机结合。
面向对象的程序设计方法还是要以结构化程序设计为基础。因此,该书与其他同类VB教材不同之处在于加强了结构化程序设计和常用算法的训练,并与VB中的对象属性和方法相联系,使读者既掌握了程序设计的基本方法,更加深了对面向对象概念的理解。例如,在分析数组排序算法的同时,也介绍了利用VB列表框的SORT属性可实现数据的有序,同时指出两者的特点和利弊。
利用学生已在计算机文化基础课程中对Windows图形界面及软件熟练使用的基础,在该书中,大量的实例都围绕着第一层次中已学过的软进行剖析,如对计算器、图形浏览器、文本编辑器、数据库管理等的分析。通过实例分析,并加以编程实现,使学生既掌握了VB内容的学习,进行了开发实用软件的训练,更激发了探索VB奥妙的兴趣,达到事半功倍的效果。
四、 在精字上下功夫,有创新
为了解决内容多、学时少的矛盾,作者花费了大量的创造性劳动,在精字上下功夫。表现在:精练的文笔简述基本语法的使用规则,淡化繁琐的语法规则。短小精悍的实例引路,通过问题的展开导出对象属性和方法,加深读者对新知识的理解。精心设置了思考题并留有余地,给学生提供较多的独立思考的机会,巩固学习内容。精选了与实际生活密切相关的问题作为实例或实验内容,既调动了学生的学习积极性,又使得学与用密切结合,增强了学生运用知识的能力。提供了与教材配套的CAI课件,构成了立体化教材,利用大屏幕投影,真正贯彻精讲多练的原则,提高了教学的质量和效率。提供了与教材配套的教学网站,并提供了网络化VB考试与评分系统,随时可进行相关测评。教材结构紧凑,层次清楚、图文并茂、好教易学。
这些特色在同类计算机基础教材改革中具有一定的创新意义,使学生通过该书的学习,提高获取知识的能力、分析问题和解决问题的能力以及开发实用软件的能力。这在一般程序设计语言课程教学中难以完全兼顾到。
我已经买了你说的这本书,好像就从亚马逊买的,现在已经看得差不多了。这本书的例子不太好,用图片查看器开发作为例子。整本书讲得比较浅,不过写书的比较有经验,翻译比较口语化,比vb.net入门经典第6版容易懂一些。
vb.net入门经典第6版是必看书,建议你买一本
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流