VB课程设计报告书

上传人:hs****ma 文档编号:432870362 上传时间:2022-08-19 格式:DOC 页数:23 大小:281.50KB
返回 下载 相关 举报
VB课程设计报告书_第1页
第1页 / 共23页
VB课程设计报告书_第2页
第2页 / 共23页
VB课程设计报告书_第3页
第3页 / 共23页
VB课程设计报告书_第4页
第4页 / 共23页
VB课程设计报告书_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《VB课程设计报告书》由会员分享,可在线阅读,更多相关《VB课程设计报告书(23页珍藏版)》请在金锄头文库上搜索。

1、 . . . Visual Basic课程设计报告书: 学院:机电工程学院 _11机自A4班_指导实训时间:2013.7实训地点:14号楼目 录一、题目简介二、设计思路与总体方案三、设计过程中遇到的主要问题与解决方案四、设计存的不足之处五、参考文献六、课程设计小结一、题目简介本题目旨在设计与一个可进行人机互动的小游戏,其名字为井字棋。对于这个小游戏,相信大家也并不陌生,其规则是:在一个3*3的棋盘上轮流落子,当有三个相同颜色的棋子连成一行时,那方胜利。这个小程序可以加深我们对这学期的vb基础知识的印象,使理论升华为实际操作,同时有助于我们培养我们的逻辑思维能力和解决问题的能力。题目的难度相对不

2、高,但牵涉到众多的知识点。而且有些知识课堂上并没有讲过,这就让我们不得不自己去查询资料,进行设计,所以,还是有一定的难度的。课程设计步骤与计划如下:确定设计题目:井字棋游戏的设计与开发。需求分析:分析系统需要实现什么样的功能。程序设计:根据需求分析的结果,进行界面及编程设计。程序检验:对编好的程序进行测试,校对。程序改进:对校正后的程序进行改正,试行。编写报告:编写设计报告书。程序主要要现以下几个功能:1. 可以进行人机相互博弈;2. 每次只能走一步棋,且落子的地方不可以继续落子;3. 可以判断出输赢,并且当判断出输赢后,程序停止,未满的棋盘不可以继续落子;4. 可以选择是电脑先走还是人先走;

3、为了实现以上几点可以设计程序主界面如图1所示 图1.程序主界面 这个主界面已经可以大体上实现上述要求,它包括一个Command1控件数组,一个Option1控件数组,一个Label1控件,一个Command2控件和一个form1控件。二、设计思路与总体方案 用到哪些控件、难点分析、所使用的模块、过程、变量、数组、自定义数据类型及其相互关系􀈷必要时给出系统结构图等图表。根据功能和系统分析,可以设计出系统的主流程图,如图2所示。2.1 主要程序流程图NoYesYesNo结束是否满足胜利条件双方轮流落子是否选择谁先开始初始化开始对话框提示 图2.程序主流程图 由程序主流程图,可以看

4、出,程序刚启动时,需要对程序进始化处理。随后,判断有没有选择谁先开始落子,是人还是计算机先。若果没有选择谁先开始下棋,系统则弹出对话框,如图3所示 图3.提示对话框当选择了某一方先下棋后,程序运行,按照每人一步的原则进行下去,直至一方获得胜利,程序停止.下面具体分析每个控件的作用功能。2.2 窗体form1这是启动窗体,用到属性主要有Activate、Load。下面我配合图和文字讲述下这两个属性在程序中的主要作用。由图1.程序主界面可以看出,我设计的井字棋游戏的棋盘是由一个Command控件数组来实现的。通过改变控件Command的Caption来达到人和计算机下棋的结果。但是我们知道,只通过

5、Caption属性是不能实现这个目的的,通过查阅资料知道,Command有一个Tag属性,它本身没有具体属性,需要通过程序赋予具体的数值。这个发现让我很兴奋,这代表我们可以给Tag赋予不同的值0、1、-1,当Tag的值为0是,Command的Click事件将会使Caption的值变为,而电脑下棋时则是先将Caption的值变为,与此同时将所在Command的Tag值变为1,这样人就无法在电脑落子的地点继续下棋。所以在程序运行之前,必须将所有Command的Tag值变为0,这样人才能子在棋盘上落子,而这个事件触发的必须很早,所以用到了form的Activate属性,在Form_Activate事

6、件下编写程序使得Command的属性Tag的值全部变为0。程序如下:For i = 1 To 9 a.Caption = a.Tag = 0 设置一个表达式用来存储程序中需要的额外数据,0代表人 Next i a为数组,主要是为了方便后面的程序编写,它的具体属性,在Form的Load事件中编写,程序如下:Private Sub Form_Load For i = 1 To 9 Set a = Command1 给a赋值使其有具体含义 Next iEnd Sub棋子的效果我们可以从图4和图5看到。图4.电脑持的白子图5,人持黑子2.3 按钮Comamnd控件数组在上面窗体的介绍中,我们已经知道,

7、棋盘是由按钮控件Command来实现的。它的Tag属性这里上面已经详细介绍了,这里就不再多提。首先,为什么棋盘是由数组来实现,而不是九个独立的Command按钮?第一, 创建方便。数组的创建是通过先绘制一个Command控件,调整大小后荣国复制粘贴来得到的。这样出来的其余八个按钮的大小形状都相同,方便排版。第二, 程序设计方便。在窗体的介绍中,我提到了数组a9,通过给a9赋值来代替Command控件数组。而且,用数组也不至于因为程序繁冗而混乱。在棋盘绘制好,棋子设定好的情况下,如何来实现下棋的目的呢?这也是这个小游戏最难的地方。这相当于给计算机编写一个智能程序,使得计算机能够和人进行博弈。所以

8、计算机一方面要不让你赢的比赛,另一方面它自己还要不段寻找赢的机会。这样的话,计算机必须进行多步计算与判断,设计时程序就比较繁多。下面,是计算机和人在进行博弈时的流程图NoN0Yes人是否继续落子是否满足胜利条件开始结束Yes双方轮流落子对话框提示Label输赢显示 图6.人机互奕流程图现在堆流程图分析。首先明确目的,人机互奕的目的都是为了获得胜利,所以在前两步时,当电脑下棋时它会首先抢占5那个中间位置位置棋盘标注如图7所示,因为5位置获得胜利的概率最大。这就是所谓的抢占有利位置。这就要一段判断程序:If a.Tag = 0 Thensel = 5Elsesel = 1 End if图7.棋盘位

9、置标注而当5位置被占后,为了设计简单,使计算机占领位置1,接下来的落子,计算机则是随着人的落子而判断,我的设计是,计算机通过不断计算和判断不让人先赢,即是说计算机是不让人获得胜利为主要目的,中间的过程如果玩家疏忽,计算机会获得胜利,但是我并没有编写程序使计算机想方设法获得胜利。当人机走的步数超过2步时,计算机会首先判断人在占了5位置后,下一步有没有胜利的可能,此时人的情况有1,5、2,5、3,5、4,5、6,5、7,5、8,5、9,5、八种情况,所以此时电脑的主要任务就是堵子。当人位置为i,5时,计算机会将10-i位置占领。当人没有占领5位置后,电脑需要进行8种计算判断。这八种情况我用了多分支

10、条件选择语句,对八种情况情况一一判断。Case 1 人有没有占了2,3、4,7两个位置,若是的话,计算机会在1位置落子,若不是,计算机会按照原来的程序从1到9在没有落子位置落子;Case 2 人有没有占了1,3位置,若是的话,计算机会在2位置落子,若不是,计算机会按照原来的程序从1到9在没有落子位置落子;Case 3 人有没有占了1,2、6,9两个位置,若是的话,计算机会在3位置落子,若不是,计算机会按照原来的程序从1到9在没有落子位置落子;Case 4 人有没有占了1,7、4,6两个位置,若是的话,计算机会在4位置落子,若不是,计算机会按照原来的程序从1到9在没有落子位置落子;Case 6

11、人有没有占了3,9位置,若是的话,计算机会在6位置落子,若不是,计算机会按照原来的程序从1到9在没有落子位置落子;Case 7 人有没有占了1,4、8,9两个位置,若是的话,计算机会在7位置落子,若不是,计算机会按照原来的程序从1到9在没有落子位置落子;Case 8 人有没有占了7,9、位置,若是的话,计算机会在8位置落子,若不是,计算机会按照原来的程序从1到9在没有落子位置落子;Case 9 人有没有占了3,6、7,8两个位置,若是的话,计算机会在9位置落子,若不是,计算机会按照原来的程序从1到9在没有落子位置落子;上面程序已经可以完成互奕的要求了。在游戏进行过程中,计算机不仅仅需要下棋,还

12、要判断出输赢,因为有可能棋盘未下满,就已经有一方获得胜利了,这时游戏就应该结束停止,而不是继续下去。所以进行过程中,要有一个判断程序,不停地判断是否已经有一方获得胜利了。这段程序编写的也比较简单,因为棋盘的1,5,9位置就可以将所有胜利的情况包括在。包含1置的胜利情况有1,2,3、1,4,7、1,5,9三种情况;包含5位置的胜利情况有1,5,9、2,5,8、3,5,6、4,5,6四种情况。;包含9位置的胜利情况有3,6,9、1,5,9、7,8,9三种情况。因为1,5,9重复计算三次,总共只有3+4+3-2=8种情况将八种情况出现时,对应的Command的Tag值为1还是0即可知道是人还是计算机

13、赢得了比赛。人赢的比赛时,label1会出现对应的说明,情形如图8所示:图8.人获得胜利时窗口情形人输掉比赛时,情形如图9所示 图9.计算机获得胜利时窗口情形和棋时,情形如图10所示: 图10.和棋时窗口情形2.4窗口美化和程序完善 图11所示为最终游戏界面,图12为最终设计窗口图11.最终游戏运行界面 图12.最终设计窗口 比较图1、图11、12,不难发现最终设计的模板中比原先的多了4个Label控件和2个Timer控件。我的设计中最上面的两个重叠在一起的Label是用来滚动显示欢迎语、赞美语和鼓励语的。具体情况如下图所示 图13.滚动字幕的容 滚动字幕的设计早在之前的课上就做过,所以设计这个得心易手,很快就搞定。字幕的滚动用到了计时器Timer控件,而且要让字幕产生连续滚动效果,必须要用两个Label在事件Timer1_Timer中才能实现。主要程序如下图所示:这样,通过两个Label的相互交错运动,差生连续的效果我还用了两个label和一个计时器Timer设计

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号