《Vb扫雷课程设计报告-.pdf》由会员分享,可在线阅读,更多相关《Vb扫雷课程设计报告-.pdf(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Vb扫雷课程设计报告姓名:班级:学号:难度:知识点:控件数组绘图菜单文本文件的读写多模块程序设计资源文件的使用1.题目“扫雷”是windows 下的经典小游戏。如下图所示,一个由M 行 N 列小方格组成的雷区影藏着K 颗地雷(M N 和 K 可以事先设置)。用户根据判断确定哪个方格有雷,哪个方格无雷。使用鼠标左键单击无雷方格将其翻开会在该方格内显示一个数字(18),该数字表示这个方格周围相邻的8 个方格内共有多少克雷。如果左键单击方格内未显示数字,表示方格周围没有雷,程序自动将周围的方格翻起直至遇到周围有雷的方格为止。在方格内数字的提示下,用户判断某个位置有雷,使用鼠标右键单击将有雷方格标记出
2、来(显示小红旗)当所有有雷的方格打上了标志,所有无雷的方格都被翻起,表明扫雷成功。如果中途使用左键单击了有雷方格,则被“炸死”,扫雷失败。功能:(1)启动程序后,显示初始界面,游戏共有3 种预定义的难度级别,分别是初级(9行 9 列 10 颗雷),中级(16 行 16 列 40 颗雷)和高级(30 行 16 列 99 颗雷),通过“游戏”菜单中的菜单项可以选择不同难度。使用自定义菜单命令打开自定义对话框,可以自行定义雷区的行数,列数及雷数。(2)雷区正上方是一个“小脸”图标,不同状态下,小脸显示出微笑,惊讶,痛苦和胜利等表情。任何情况下单击小脸,可以重新开始游戏。笑脸左边以LED(发光二极管)
3、方式显示了当前雷区中未被标记出来的雷数,右面是游戏进行的秒数。计时是在用户第一次单机雷区的方块时开始的。(3)是用右键单击一个方格将其标记为有雷(插上小旗)之后,不能再使用左键单击它,但可以再用右键单击。右键再单机一次方格上显示“?”号(表示暂时不确定),再单击第二次,恢复为普通样子。使用左键可以单机除了标记为有雷之外的所有未翻开的方格(包括标记为“?”号的)(4)如果一个方格内显示的数字为N(18)且其周围已有N 个方格被标记为有雷,这时可以同时单击鼠标左键和右键将方格周围所有的其它格子翻开。这样就不必一个一个去单击了。不过,如果标记为有雷的方格中有标记错的,这是会被“炸死”。(5)扫雷失败
4、时程序用图标显示所有有雷的位置,并将标记错了的和“炸了的”用和显示。(6)扫雷成功时,如果没有打破该难度级别的记录,显示“胜利”消息框;如果破了纪录,显示输入框提示输入用户名。通过“扫雷英雄榜”菜单命令可以显示“扫雷英雄榜”对话框,其中列出了预设的3 个难度级别的记录保持者。2.框架结构图流程规划大致上可以分为三个部分,分别为:画面初始、游戏者按下第一个方块和为非地雷方块时展开。画面初始时,以游戏者最后一次设定的地雷区大小为范围画出地雷区,但此时并未产生地雷。当游戏者按下第一个方块时产生地雷资料并启动定时器,为何在游戏者按下第一个方块才产生地雷资料呢?其主要的用意在于不要让游戏者第一次就踩到地
5、雷,这样在某种程度上可以提高游戏者游玩的气氛。接着就是如何判断按下的方块是非地雷时的处理,这也是整个游戏的技术核心,我们可以通过递归的观念来检查周边的方块是否含有地雷及是否继续往外翻开。流程规划如图1 所示:错误!图 1 整体流程规划图3.原程序(注释)1.模块窗口代码Option Explicit 下面类型定义了游戏区中每个格子可能的状态Enum Board_Status 定义枚举类型COMMON=0 保存成绩是等待按键标 记 小 旗 或“?”或恢复方格第 一 次按下启 动 计 时器否是否为雷是游戏结束否翻开方格并检查是否标记所有雷否游 戏 胜 利 是否破纪录是否结 束 是 否重新开始开始(
6、初始化程序)选择游戏等级等待按键右键左键是同时如果一个方格内显示的数字与其 周 围 被 标 记 为有 雷 方格 相同,将方格周围所有的其它格子翻开是是FLAG=1 MARK=2 DIEBOMB=3 NOBOMB=4 BOMB=5 MARKDOWN=6 NUM8=7 NUM7=8 NUM6=9 NUM5=10 NUM4=11 NUM3=12 NUM2=13 NUM1=14 DOWN=15 End Enum 下面类型定义了小脸可能的状态Enum Face_Status 定义枚举类型SMILEDOWN=0 COOL=1 CRY=2 SURPRISE=3 SMILE=4 End Enum 下面的类型定
7、义了游戏区中一个格子的当前状态Type TBOMB 自定义类型isBomb As Boolean 是否为地雷board As Board_Status 当前状态End Type Type TPOINT 自定义类型TPOINT,定义点的坐标x As Integer y As Integer End Type Public picBoard(0 To 15)As StdPicture 15 种显示内容Public picnum(0 To 10)As StdPicture 11 种数字Public picFace(0 To 4)As StdPicture 5 种表情图片Public wFace As
8、 TPOINT 保存小脸的位置Public arrBomb()As TBOMB 保存雷区状态Public bDrawFace As Boolean Public nFace As Integer Public nBombs As Integer 地雷总数Public nLeftBombs As Integer 剩余雷数Public nRows As Integer,nCols As Integer 雷区的行数和列数Public nLevel As Integer 难度:14(分别对应初级、中级、高级和自定义)Public nTime As Integer 时间Public bMark As B
9、oolean Public nOldRow As Integer,nOldCol As Integer 前一个行数和列数Public bStarted As Boolean 开始标志Public bLButton As Boolean,bRButton As Boolean 左右键按下状态Public uname(0 To 2)As String,uscore(0 To 2)As Integer 英雄榜记录Sub DrawBoard(col As Integer,ln As Integer,board As Board_Status)在雷区的指定行列绘制指定的内容Main.PaintPictu
10、re picBoard(board),(col+1)*16-4,40+(ln+1)*16,16,16 End Sub Sub DrawNum(nnum As Integer,ntype As Integer)绘制数字,nnum 参数为数字内容;ntype 参数:1 绘制雷数(左边),2 绘制时间(右边)Dim x As Integer,i As Integer Dim strNum,strChr As String If ntype=1 Then x=17 If ntype=2 Then x=Main.Width/Screen.TwipsPerPixelX-60 返 回 水 平(TwipsPe
11、rPixelX)度量的对象的每一像素中的缇数。If nnum=0 And strChr=9 Then 绘制 0-9 Main.PaintPicture picnum(Val(strChr),x,15,13,26 Else 绘制-Main.PaintPicture picnum(10),x,15,13,26 End If x=x+13 Next End Sub Sub DrawNineBoard(col As Integer,ln As Integer)Dim i As Integer,j As Integer For i=col-1 To col+1 For j=ln-1 To ln+1 If
12、 Not(i 0 Or j=nCols Or j=nRows)Then If arrBomb(i,j).board=COMMON Then DrawBoard i,j,DOWN If arrBomb(i,j).board=MARK Then DrawBoard i,j,MARKDOWN End If Next Next End Sub Sub DrawFace(face As Integer)画脸形Main.PaintPicture picFace(face),wFace.x,wFace.y,24,24 End Sub Sub GameOver()Dim i As Integer,j As I
13、nteger For i=1 To nCols For j=1 To nRows If arrBomb(i,j).isBomb And(Not arrBomb(i,j).board=FLAG)Then 是雷没插旗显示雷arrBomb(i,j).board=BOMB DrawBoard i,j,BOMB End If If(Not arrBomb(i,j).isBomb)And arrBomb(i,j).board=FLAG Then 不是雷插旗的显示无雷arrBomb(i,j).board=NOBOMB DrawBoard i,j,NOBOMB End If Next Next nFace=C
14、RY DrawFace nFace 画哭脸Main.Timer.Enabled=False End Sub Sub OnGameNew()开始新游戏Dim i As Integer,j As Integer Dim ln As Integer,col As Integer Main.Timer.Enabled=False Select Case(nLevel)Case 0 初级nCols=9 nRows=9 nBombs=10 Case 1 中级nCols=16 nRows=16 nBombs=40 Case 2 高级nCols=30 nRows=16 nBombs=99 End Select
15、 ReDim arrBomb(0 To nCols,0 To nRows)Main.Width=30*Screen.TwipsPerPixelX+16*Screen.TwipsPerPixelX*nCols Main.Height=100*Screen.TwipsPerPixelY+13*Screen.TwipsPerPixelY+16*Screen.TwipsPerPixelY*nRows 返回水平(TwipsPerPixelX)或垂直(TwipsPerPixelY)度量的对象的每一像素中的缇数。bLButton=False bRButton=False bStarted=False bDr
16、awFace=False nFace=SMILE nOldCol=0 nOldRow=0 nLeftBombs=nBombs For i=0 To nCols-1 For j=0 To nRows-1 arrBomb(i,j).isBomb=False arrBomb(i,j).board=COMMON Next Next i=0 Do While i nBombs 随机生成nBombs 个地雷col=Int(Rnd*100)Mod nCols ln=Int(Rnd*100)Mod nRows If arrBomb(col,ln).isBomb=False Then arrBomb(col,l
17、n).isBomb=True 防止重复i=i+1 End If Loop wFace.x=Main.Width/(2*Screen.TwipsPerPixelX)-13 wFace.y=15 nTime=0 End Sub Sub Check()检查是否胜利,并显示胜利消息Dim WIN As Boolean Dim i,j As Integer WIN=True For i=0 To nCols-1 For j=0 To nRows-1 If arrBomb(i,j).board=COMMON Or arrBomb(i,j).board=MARK Then WIN=False 存在既没插旗又
18、没翻开的格子If arrBomb(i,j).isBomb=False And arrBomb(i,j).board=FLAG Then WIN=False 插旗的有不是雷Next Next If Not WIN Then Exit Sub End If nFace=COOL DrawFace nFace Main.Timer.Enabled=False If nLevel nTime Or uscore(nLevel)=0 Then 破本难度的记录uscore(nLevel)=nTime uname(nLevel)=InputBox(胜利了,恭喜你破了本难度的记录!&Chr(10)&Chr(1
19、3)&请留下大名:,扫雷,无名侠)If uname(nLevel)=Then uname(nLevel)=匿名 Else MsgBox 胜利了,恭喜你!,64,扫雷 vbOKOnly+vbInformation End If Else MsgBox 胜利了,恭喜你!,64,扫雷 End If End Sub Sub Kick(col As Integer,ln As Integer)递归过程,判断一个位置的周围的雷数Dim sum As Integer Dim i As Integer,j As Integer If col 0 Or ln=nCols Or ln=nRows Then Exi
20、t Sub If arrBomb(col,ln).isBomb=True Then 如果踩上地雷GameOver arrBomb(col,ln).board=DIEBOMB DrawBoard col,ln,DIEBOMB Exit Sub End If sum=0 i=0 j=0 For i=col-1 To col+1 计算周围共有地雷数For j=ln-1 To ln+1 If Not(i 0 Or j=nCols Or j=nRows)Then If arrBomb(i,j).isBomb Then sum=sum+1 End If End If Next Next arrBomb(c
21、ol,ln).board=15-sum 记下并显示周围地雷数DrawBoard col,ln,15-sum If sum=0 Then 如果周围没有地雷,For i=col-1 To col+1 For j=ln-1 To ln+1 If i=0 And j=0 And i nCols And j=LBound(v,1)And i=UBound(v,1)Then uname(i)=v(i,0)uscore(i)=v(i,1)Else uname(i)=无名侠 uscore(i)=0 End If Next End Sub Private Sub Timer_Timer()显示游戏时间If nT
22、ime=wFace.x And y=wFace.y And x=wFace.x+24 And y=wFace.y+24 Then 如果在小脸上点击bLButton=True bDrawFace=True DrawFace SMILEDOWN Exit Sub End If If nFace=CRY Or nFace=COOL Then Exit Sub 如果已炸死或胜利,则不反应bLButton=True DrawFace SURPRISE If x=12+16*nCols Or y=55+16*nRows Then Exit Sub 如果点击在雷区外,则不反应ln=Int(y-40)/16)
23、-1 划分按钮col=Int(x+4)/16)-1 nOldRow=ln nOldCol=col 记录鼠标按下的按钮If bRButton Then DrawNineBoard col,ln 两键都按下翻开周围九个按钮End If If arrBomb(col,ln).board=MARK Then 如果点击?号,显示按下的?号DrawBoard col,ln,MARKDOWN End If If arrBomb(col,ln).board=COMMON Then 中果点击空白,显示按下的空白DrawBoard col,ln,DOWN End If ElseIf Button=2 Then 按
24、下鼠标右键时If(nFace=CRY Or nFace=COOL)Then Exit Sub 如果已炸死或胜利,则不反应If x=12+16*nCols Or y=55+16*nRows Then Exit Sub 如果点击在雷区外,则不反应bRButton=True ln=Int(y-40)/16)-1 划分按钮col=Int(x+4)/16)-1 If bLButton Then DrawNineBoard col,ln 两键都按下翻开周围九个按钮End If If arrBomb(col,ln).board=COMMON Then arrBomb(col,ln).board=FLAG D
25、rawBoard col,ln,FLAG nLeftBombs=nLeftBombs-1 DrawNum nLeftBombs,1 ElseIf arrBomb(col,ln).board=FLAG Then arrBomb(col,ln).board=MARK DrawBoard col,ln,MARK nLeftBombs=nLeftBombs+1 DrawNum nLeftBombs,1 Else If arrBomb(col,ln).board=MARK Then arrBomb(col,ln).board=COMMON DrawBoard col,ln,COMMON End If E
26、nd If End If End Sub Private Sub Form_MouseMove(Button As Integer,Shift As Integer,x As Single,y As Single)Dim ln As Integer,col As Integer Dim i As Integer,j As Integer If(Not bLButton)And(Not bRButton)Then 左右键都未按下移动鼠标不反应Exit Sub End If If bDrawFace Then If x=wFace.x And y=wFace.y And x=wFace.x+24
27、And y=wFace.y+24 Then 鼠标在脸形上时显示Smiledown DrawFace SMILEDOWN Else DrawFace nFace 鼠标移开恢复原来脸型Exit Sub End If End If If x=12+16*nCols Or y=55+16*nRows Then 鼠标移到雷区外翻开的按钮全部恢复For i=nOldCol-1 To nOldCol+1(原因:两键都按下时翻开周围九个按钮需要全部恢复)For j=nOldRow-1 To nOldRow+1 If Not(i 0 Or j=nCols Or j=nRows)Then DrawBoard i,
28、j,arrBomb(i,j).board End If Next Next nOldRow=0 nOldCol=0 Exit Sub End If ln=Int(y-40)/16)-1 col=Int(x+4)/16)-1 划分按钮If(ln=nOldRow And col=nOldCol)Then Exit Sub 在同一按钮上移动鼠标不反应DrawBoard nOldCol,nOldRow,arrBomb(nOldCol,nOldRow).board 恢复上一按钮If bLButton And bRButton Then 两键都按下移动鼠标时For i=nOldCol-1 To nOldC
29、ol+1 For j=nOldRow-1 To nOldRow+1 If Not(i 0)Or(j=nCols)Or(j=nRows)Then 恢复翻开的九个按钮DrawBoard i,j,arrBomb(i,j).board End If Next Next If(Not(col 0)Or(ln=nCols)Or(ln=nRows)Then 翻开周围九个按钮DrawNineBoard col,ln End If ElseIf bLButton Then If arrBomb(col,ln).board=COMMON Then DrawBoard col,ln,DOWN 只按左键移动鼠标翻开鼠
30、标所在的按钮If arrBomb(col,ln).board=MARK Then DrawBoard col,ln,MARKDOWN End If nOldRow=ln nOldCol=col End Sub Private Sub Form_MouseUp(Button As Integer,Shift As Integer,x As Single,y As Single)Dim ln As Integer,col As Integer Dim i As Integer,j As Integer Dim sumBomb As Integer,sumFlag As Integer If But
31、ton=1 Then DrawFace nFace If x=wFace.x And y=wFace.y And x=wFace.x+24 And y=wFace.y+24 And bDrawFace Then 在脸形上重新开始游戏OnGameNew Form_Paint Exit Sub End If If bDrawFace Then 鼠标移开不在脸上bDrawFace=False bLButton=False Exit Sub End If bDrawFace=False If(x=12+16*nCols)Or(y=55+16*nRows)Then 鼠标移到雷区外bLButton=Fal
32、se Exit Sub End If If nFace=CRY Or nFace=COOL Then Exit Sub 如果已炸死或胜利,则不反应ln=Int(y-40)/16)-1 col=Int(x+4)/16)-1 If Not bStarted Then 第一次翻开一个按钮后开始计时bStarted=True Timer.Enabled=True End If If bRButton Then 两件都按下时sumBomb=15-arrBomb(col,ln).board 单击的方格周围雷的个数sumFlag=0 已经标记的雷的个数For i=col-1 To col+1 For j=l
33、n-1 To ln+1 If Not(i 0 Or j=nCols Or j=nRows)Then If arrBomb(i,j).board=FLAG Then sumFlag=sumFlag+1 End If End If Next Next If sumBomb=sumFlag Then 如果一个方格内显示的数字与其周围被标记为有雷方格相同,将方格周围所有的其它格子翻开For i=col-1 To col+1 For j=ln-1 To ln+1 If Not(i 0 Or j=nCols Or j=nRows)Then If arrBomb(i,j).board=COMMON Or a
34、rrBomb(i,j).board=MARK Then Kick i,j End If End If Next Next End If For i=col-1 To col+1 For j=ln-1 To ln+1 If Not(i 0 Or j=nCols Or j=nRows)Then DrawBoard i,j,arrBomb(i,j).board End If Next Next ElseIf(arrBomb(col,ln).board=COMMON)Or(arrBomb(col,ln).board=MARK)And bLButton)Then 按下左键时,松开鼠标时翻开方格Kick
35、col,ln End If bLButton=False If nFace CRY Then Check 检查是否胜利,并显示胜利消息ElseIf Button=2 Then If nFace=CRY Or nFace=COOL Then Exit Sub 如果已炸死或胜利,则不反应bRButton=False bLButton=False If x=12+16*nCols Or y=55+16*nRows Then Exit Sub 鼠标移到雷区外ln=Int(y-40)/16)-1 划分方格col=Int(x+4)/16)-1 If bLButton Then 两件都按下时sumBomb=
36、15-arrBomb(col,ln).board 单击的方格周围雷的个数sumFlag=0 已经标记的雷的个数For i=col-1 To col+1 For j=ln-1 To ln+1 If Not(i 0 Or j=nCols Or j=nRows)Then If arrBomb(i,j).board=FLAG Then sumFlag=sumFlag+1 End If End If Next Next If sumBomb=sumFlag Then 如果一个方格内显示的数字与其周围被标记为有雷方格相同,将方格周围所有的其它格子翻开For i=col-1 To col+1 For j=l
37、n-1 To ln+1 If Not(i 0 Or j=nCols Or j=nRows)Then If arrBomb(i,j).board=COMMON Or arrBomb(i,j).board=MARK Then Kick i,j End If End If Next Next End If For i=col-1 To col+1 For j=ln-1 To ln+1 If Not(i 0 Or j=nCols Or j=nRows)Then DrawBoard i,j,arrBomb(i,j).board End If Next Next Else End If If nFace
38、CRY Then Check 检查是否胜利,并显示胜利消息End If End Sub 3自定义窗口代码Private Sub Command1_Click()Main.mnu1.Checked=False Main.mnu2.Checked=False Main.mnu3.Checked=False Main.mnu4.Checked=True nRows=Val(Text1.Text)nCols=Val(Text2.Text)nBombs=Val(Text3.Text)nLevel=3 OnGameNew Main.Form_Paint Unload Me End Sub Private
39、Sub Command2_Click()Unload Me End Sub Private Sub Form_Load()Text1.Text=20 Text2.Text=20 Text3.Text=20 End Sub 4。英雄榜窗口Private Sub Command1_Click()Unload Me End Sub Private Sub Command2_Click()uname(0)=无名侠 uname(1)=无名侠 uname(2)=无名侠 uscore(0)=0 uscore(1)=0 uscore(2)=0 Call SaveRecord lbln1.Caption=una
40、me(0)lbln2.Caption=uname(1)lbln3.Caption=uname(2)lblt1.Caption=uscore(0)lblt2.Caption=uscore(1)lblt3.Caption=uscore(2)End Sub Private Sub Form_Load()lbln1.Caption=uname(0)lbln2.Caption=uname(1)lbln3.Caption=uname(2)lblt1.Caption=uscore(0)lblt2.Caption=uscore(1)lblt3.Caption=uscore(2)End Sub 4.界面(测试)
41、(1)主页面(2)自定义界面(3)扫雷英雄榜界面(4)关于扫雷界面(5)菜单测试界面5.困难与解决1.GetAllSettings 函数GetAllSettings 函数从Windows 注册表中返回应用程序项目的所有项设置及其 相 应 值(开 始 是 由SaveSetting 产 生)。语 法GetAllSettings(appname,section)GetAllSettings 函数的语法具有下列命名参数:部分描述appname 必要。字符串表达式,包含应用程序或工程的名称,并要求这些应用程序或工程有注册表项设置section必 要。字 符 串 表 达 式,包 含 区 域 名 称,并 要
42、 求 该 区 域 有 注 册 表 项 设 置。GetAllSettings 返回Variant,其内容为字符串的二维数组,该二维数组包含指定区域中 的 所 有 注 册 表 项 设 置 及 其 对 应 值。说 明 如 果appname 或section 不 存 在,则GetAllSettings 返回未初始化的Variant 2.DeleteSetting 语句DeleteSetting 语句在Windows 注册表中,从应用程序项目里删除区域或注册表项设置。语法DeleteSetting appname,section,keyDeleteSetting 语句的语法具有下列命名参数:部分描述ap
43、pname 必需的。字符串表达式,包含应用程序或工程的名称,区域或注册表项用于这些应用程序或工程。section 必要。字符串表达式,包含要删除注册表项设置的区域名称。如果只有appname 和section,则将指定的区域连同所有有关的注册表项设置都删除。key 可选。字符串表达式,包含要删除的注册表项设置。说明如果提供了所有参数,则删除指定的注册表项设置。如果试图使用不存在的区域或注册表项设置上的DeleteSetting 语句,则发生一个运行时错误 3.SaveSetting 语句SaveSetting 语句在 Windows 注册表中保存或建立应用程序项目。语法SaveSetting
44、appname,section,key,settingSaveSetting 语句的语法具有下列命名参数部分描述appname 必要。字符串表达式,包含应用程序或工程的名称,对这些应用程序或工程使用设置;section 必要。字符串表达式,包含区域名称,在该区域保存注册表项设置;key 必要。字符串表达式,包含将要保存的注册表项设置的名称;setting 必要。表达式,包含 key 的设置值。说明如果无论如何也不能保存注册表项设置,则将导致错误发生。3.IsEmpty()函数IsEmpty 函数返回Boolean 值指明变量是否已初始化。IsEmpty(expression)expressio
45、n 参数可以是任意表达式。然而,由于IsEmpty 用于判断一个变量是否已初始化,故 expression 参数经常是一个变量名。说明:如果变量未初始化或显式地设置为Empty,则函数IsEmpty 返回True;否则函数返回False。如果expression 包含一个以上的变量,总返回False。4.Enum 意思Enum 不是函数,是一种自定义枚举数据Long 类型 Enum 内部的元素可以不赋值,vb 会使用默认数值:首元素为0,后面一个比前面一个大1 4.Screen.TwipsPerPixelX 与 Screen.TwipsPerPixely意思返回屏幕中每一个像素中的缇数。一个是
46、垂直中的像素,一个是水平中的像素。6.感想通过四周时间的努力终于完成了扫雷游戏的设计,原以为通过上学期的学习我应该能够很顺利的完成这一课程,然而事与愿违,在设计的过程中我遇到了许多难以解决的问题,原来我所学习的知识还仅仅是冰山一角而已,通过几周来对课本的再度解读和在互联网上的解释我有学到了不少新的知识自我感觉中,扫雷游戏的编写对自己编程的水平有着更大挑战,其中有好多的算法和技巧要求了解和掌握,不去问同学或老师,仅凭一己之力,是很难预期完成的。在编程时的收获不少,除了对编程语言有了更深一步的了解,还有同学之间的友谊加深。在自己有了困难时,同学或老师的大力帮助,自己真的很感动。再一次谢谢我的同学和
47、老师。当然在编程时还有许多经验和教训值得反思,现在自己整理一下:(1)在开始编程之前,要先构思各种功能实现的算法,想好了以后在上机编写,不要急于上机;(2)编程时一定要注意变量的使用,切勿胡乱使用变量。我在编程时候最大的问题就是变量总是搞错,那就要反复调试,最后才搞清楚变量的含义;(3)编程不要过于复杂,多调用过程;(4)编程结束,自己再多运行,调试几次可能有某个方面你没注意到,当然可以让同学来帮你。参考书目:1.王栋.Visual basic 程序设计实用教程(第 3 版).北京.清华大学出版社,2010 2.王栋.Visual basic 课程设计.北京.清华大学出版社,2010 3.百度百科4.