VB6.0五子棋代码.doc_第1页
VB6.0五子棋代码.doc_第2页
VB6.0五子棋代码.doc_第3页
VB6.0五子棋代码.doc_第4页
VB6.0五子棋代码.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VB实验结课报告五子棋班级: 旅121 姓名: 范梦涵 学号: 121352 实验题目:五子棋软件设计实验要求:1基本要求:(1)输入两个对手名字,然后进入游戏界面。(2)用鼠标点击的方式在棋盘上摆放棋子,黑白交替。(棋盘15*15)(3)可以悔棋。(4)五子连在一起的时候能判断胜利,并且显示出胜利者的名字。(5)能够将棋局的结果保存,保存该棋局结束的状态、对手名字、 棋局名字(棋局名字在保存时由用户在相应的界面下添入)(此功能要求用数据库和文件两种技术实现)。(6)棋局能够恢复,即重新打开,打开后出现棋局结束的状态、对手名字(此功能要求用数据库和文件两种技术实现)。2其它要求:(1)界面友好、漂亮。(2)程序尽可能无bug。(3)程序健壮性强,基本上达到无论用户如何操作,软件都不出错,都有相应的处理方法。实验目的:1通过五子棋软件设计或者自拟题目设计,巩固本课程所学的各个章节重点知识,自拟题目的同学需尽早向教师提出自己的想法及设计方案。2通过开发一个较大的系统,增强软件开发能力。3通过调试系统,增强逻辑思维能力。设计日期:2013年12月4日完成日期:2013年12月26日实验体会:通过对五子棋软件设计的编程结束,我所体会到的不仅是关于这个软件给我带来的感受,还有对于这个课的感触。其实在一开始看到课表安排上游vb的时候就觉得,我们一个文科专业为什么要学编程?随着课程的开展老师确实是从零基础一点一点细心的教起,有些例子程序若是班里人明白的少老师就会多讲几遍直到大家都听明白了为止,并且上课的时候并不是老师自己讲自己的,而是时不时的就会关心全班是否真的都在认真听课,并且能够真正的关心到“边缘同学”,但是尽管是在这样的情况下,我偶尔也会开开小差,课后实验也会稍稍参考一下同学的代码,就是这样有问题没有及时的弄明白导致最后在编五子棋代码时,出现了许多问题。其实在当初老师让在自拟题目和五子棋当中选择一个作为结课作业的时候,我最开始想选择的是自拟题目,因为我觉得这样可以得到高一点的分数,但是再说了两个题目都被老师说不太合适之后我便选回了五子棋,现在想想当初真的是自己想太多了,光想到成绩,没有想到自己是不是有那么高的实力,以为就算自己上课听得不是特别的认真,但是上网找找别人的代码自己再根据书本和老师的课件便能理解了然后编出自己的代码。但事实并非如此,在老师给了大部分五子棋代码并且讲解过后,还是出了好多问题的我来说,还好当初没选自拟题目。下面我说一说对于五子棋软件设计的感受。既然决定了制作五子棋,于是就每节理论课都跟着老师的思路走,认真听,为了可以抄清楚老师的代码和防止自己在开小差坐在第一排。老师首先讲的是关于Form1和Form2的制作,同时讲那两个窗体的过程中告诉了我们一个如果使用的这个定义变量过多的话便在模块里面定义。还讲了棋盘的画法,以及赢棋判断的其中一种。当时在抄代码,听思路的时候没觉得什么难度,但是当第二天自己真正上机的时候问题就一个一个的来了。Form1的制作并没有什么特别大的难度,主要问题都出在了Form2上。首先是数组定义的类型不认识,所以为什么这么定义就不了解,于是再去查课件,查书找清楚每一个代表什么意思,然后再看这些变量在代码中的那些位置,就慢慢地能明白为什么这么定义了。当然寻找变量一行一行读代码的过程中也会发现自己不明白的专业名词,又不知具体在书上的那些地方,就上网找。终于总算还算顺利的读下来了。但还没有轻松多久另一个难题就又来了,关于赢棋判断的另外三个方向。一开始竖着的判断时很简单,因为我以为只要像横着的一样把x坐标和y坐标调换一下就可以了,但是当做到斜着的方向判断时x坐标y坐标同时改变时便不知道如何改变了。先是照着老师的循环变量更改,因为只要定义两个变量就可以了,但是当运行之后却告诉我循环已经用过了,然后我自己读代码又不看不出有什么错误,我便去问老师,老师说循环语句写错了,不是嵌套的给写成嵌套格式了。改过之后,我问老师是不是调换一下坐标就能把斜的也做出来,老师说不是这样的,你要先了解我为什么这么写循环,然后要是循环不理解的话写列举法也行。我当时就想列举法要写好多点,代码肯定看起来不如循环的看上去简便。于是我开始拿了一张纸在上面分别写了好几组横着、竖着、斜着怎样是赢棋的坐标,然后找到其中的规律再结合这老师前面给的循环,发现自己明白了点。一种斜着的是x坐标y坐标的变换方式是同加同减的,另一种是一个加一个减的。既然规律找到了,那么下一难关就是循环变量的范围,在这中我试过把两个都用一个范围,后来发现不行,于是我便先试其中一种斜着的我试过0 to 4然后写坐标的的加减变换,然后发现不行,于是我把加减变换调换了一下发现还是不行,老师提示我超标线。所以我就换了个范围终于在试到4 to 0 step -1是成功了,所以我就想这个范围是不是在同加同减的那种形式下也可以呢?但是试过后发现又是超标,然后我就想到两个的起点坐标不一样是不是范围应该取值对称一下,于是0 to -4 step -1成功了。终于就这样我在制作五子棋的过程中的第一大难题攻克了。接下来随着老师讲的逐渐深入,自己也及时理解还不算太过困难。但是在棋局库哪里却出了问题,代码没有问题,但是数据库就是打不开,后来询问老师,老师也找了半天没有找出问题所在,便让我再重新建立个数据库或者换个电脑,但是试过之后还是不行,于是我便去找老师,终于在老师的细心寻找下,终于找到了问题所在,没有把数据库改成该有的格式。在这两个我认为在编程中遇到的两大问题的过后,尽管还是遇见了很多小问题,但还是解决了,老师要求我们自己做到的功能,再仔细研读老师的代码后也完成了。但是在这一切还比较顺利的过程中也出了个小插曲,就是在最后一节上机课前,我给优盘杀了个小病毒,结果就最后一次码代码的时候发现,以前编的部分代码缺失,不过还好不是全都没了还是能很快补了回来的。幸亏老师在之前提醒过这种情况的发生,我先把代码做了备份,要不就真的又是一个大工程了。最后我想说的是尽管这真的是一个编程的课程,但是它教给我们的不仅仅是代码,不仅仅是如何制作软件。就像老师说的那样它交给我们的是解决问题如何思考的方式,如何抓住问题的根本,遇到问题应该勇于找解决办法。就像在编程的过程中遇到不会的问题不能理解的名词,就要及时的查书,上网查,和及时的问老师,当然其中不乏有一些因为上课你没有特别的认真听而问出的一些特别基础的问题,但是老师都一一的细心解答了。我觉得老师交给我们的这些不仅仅能用在这节课上,还可以用在其余的课程以及今后的道路上,所以在这里很感谢老师。以上就是我所有关于五子棋以及关于这个课的体会、感受。全部界面:游戏最开始玩家姓名输入 游戏开始与赢棋判断保存棋局库打开棋局库保存棋局文件打开棋局文件悔棋全部代码:Modulel(全局变量)Public wanjia1 As StringPublic wanjia2 As StringPublic blackwhite As BooleanPublic wuziqi As BooleanPublic a(-11 To 11, -11 To 11) As IntegerDim i As IntegerDim j As IntegerDim countblack As IntegerDim countwhite As IntegerPublic Sub paint()countblack = 0countwhite = 0Form2.Picture1.ClsFor i = -7 To 7Form2.Picture1.Line (-7, i)-(7, i), QBColor(0)Form2.Picture1.Line (i, -7)-(i, 7), QBColor(0)NextForm2.Picture1.FillStyle = 0For i = -7 To 7For j = -7 To 7If a(i, j) = 1 ThenForm2.Picture1.FillColor = QBColor(0)Form2.Picture1.Circle (i, j), 0.3, QBColor(0)countblack = countblack + 1End IfIf a(i, j) = 2 ThenForm2.Picture1.FillColor = QBColor(15)Form2.Picture1.Circle (i, j), 0.3, QBColor(15)countwhite = countwhite + 1End IfNextNextIf countblack = countwhite Thenblackwhite = TrueElseblackwhite = FalseEnd IfIf blackwhite = True ThenForm2.Label1.Caption = 该黑方 + wanjia1 + 走ElseForm2.Label1.Caption = 该白方 + wanjia2 + 走End IfEnd SubForm1:Private Sub Command1_Click()If Trim(Text1.Text) = Or Trim(Text2.Text) = ThenMsgBox 请输入姓名Exit SubEnd Ifwanjia1 = Text1.Textwanjia2 = Text2.TextForm2.ShowUnload MeEnd SubForm2:Dim m As SingleDim n As SingleDim x0 As SingleDim y0 As SingleDim shubiao As IntegerPrivate Sub Command1_Click()Label1.Caption = 该黑方 + wanjia1 + 走blackwhite = Truewuziqi = TruePicture1.ClsFor i = -7 To 7Picture1.Line (-7, i)-(7, i), QBColor(0)Picture1.Line (i, -7)-(i, 7), QBColor(0)NextFor i = -11 To 11For j = -11 To 11a(i, j) = 0NextNextEnd SubPrivate Sub Command2_Click()Form3.ShowEnd SubPrivate Sub Command3_Click()Form4.ShowEnd SubPrivate Sub Command4_Click()CommonDialog1.Filter = *.wzq|*.wzqCommonDialog1.Action = 2Open CommonDialog1.FileName For Output As #1Print #1, wuziqiFor i = -7 To 7For j = -7 To 7If a(i, j) 0 ThenPrint #1, iPrint #1, jPrint #1, a(i, j)Print #1, wanjia1Print #1, wanjia2End IfNextNextClose #1End SubPrivate Sub Command5_Click()For i = -7 To 7For j = -7 To 7a(i, j) = 0NextNextCommonDialog1.Filter = *.wzq|*.wzqCommonDialog1.Action = 1Open CommonDialog1.FileName For Input As #1Line Input #1, strwuziqiwuziqi = CBool(strwuziqi)Do While Not EOF(1)Line Input #1, striLine Input #1, strjLine Input #1, straLine Input #1, strw1Line Input #1, strw2a(Val(stri), Val(strj) = Val(stra)LoopClose #1Call paintEnd SubPrivate Sub Command6_Click()If wuziqi = True Thena(m, n) = 0Call paintEnd IfEnd SubPrivate Sub Form_Load()Form2.Picture1.Scale (-8, 8)-(8, -8)shubiao = 0End SubPrivate Sub Picture1_mousedown(button As Integer, shift As Integer, x As Single, y As Single)shubiao = 1x0 = xy0 = yIf CInt(x) = -7 And CInt(x) = 7 And CInt(y) = -7 And CInt(y) = 7 And wuziqi = True Thenm = CInt(x)n = CInt(y)Picture1.FillStyle = 0If blackwhite = True And a(CInt(x), CInt(y) = 0 ThenPicture1.FillColor = QBColor(0)Picture1.Circle (CInt(x), CInt(y), 0.3, QBColor(0)a(CInt(x), CInt(y) = 1Label1.Caption = 该白方 + wanjia2 + 走blackwhite = Not blackwhiteEnd IfIf blackwhite = False And a(CInt(x), CInt(y) = 0 ThenPicture1.FillColor = QBColor(15)Picture1.Circle (CInt(x), CInt(y), 0.3, QBColor(15)a(CInt(x), CInt(y) = 2Label1.Caption = 该黑方 + wanjia1 + 走blackwhite = Not blackwhiteEnd IfFor i = CInt(x) - 4 To CInt(x)If a(i, CInt(y) = 1 And a(i + 1, CInt(y) = 1 And a(i + 2, CInt(y) = 1 And a(i + 3, CInt(y) = 1 And a(i + 4, CInt(y) = 1 ThenMsgBox 黑方胜利wuziqi = FalseExit SubEnd IfIf a(i, CInt(y) = 2 And a(i + 1, CInt(y) = 2 And a(i + 2, CInt(y) = 2 And a(i + 3, CInt(y) = 2 And a(i + 4, CInt(y) = 2 ThenMsgBox 白方胜利wuziqi = FalseExit SubEnd IfNextFor j = CInt(y) - 4 To CInt(y)If a(CInt(x), j) = 1 And a(CInt(x), j + 1) = 1 And a(CInt(x), j + 2) = 1 And a(CInt(x), j + 3) = 1 And a(CInt(x), j + 4) = 1 ThenMsgBox 黑方胜利wuziqi = FalseExit SubEnd IfIf a(CInt(x), j) = 2 And a(CInt(x), j + 1) = 2 And a(CInt(x), j + 2) = 2 And a(CInt(x), j + 3) = 2 And a(CInt(x), j + 4) = 2 ThenMsgBox 白方胜利wuziqi = FalseExit SubEnd IfNextFor i = 4 To 0 Step -1If a(CInt(x) - i, CInt(y) + i) = 1 And a(CInt(x) - i + 1, CInt(y) + i - 1) = 1 And a(CInt(x) - i + 2, CInt(y) + i - 2) = 1 And a(CInt(x) - i + 3, CInt(y) + i - 3) = 1 And a(CInt(x) - i + 4, CInt(y) + i - 4) = 1 ThenMsgBox 黑方胜利wuziqi = FalseExit SubEnd IfIf a(CInt(x) - i, CInt(y) + i) = 2 And a(CInt(x) - i + 1, CInt(y) + i - 1) = 2 And a(CInt(x) - i + 2, CInt(y) + i - 2) = 2 And a(CInt(x) - i + 3, CInt(y) + i - 3) = 2 And a(CInt(x) - i + 4, CInt(y) + i - 4) = 2 ThenMsgBox 白方胜利wuziqi = FalseExit SubEnd IfNextFor j = 0 To -4 Step -1If a(CInt(x) - j - 4, CInt(y) - j - 4) = 1 And a(CInt(x) - j - 3, CInt(y) - j - 3) = 1 And a(CInt(x) - j - 2, CInt(y) - j - 2) = 1 And a(CInt(x) - j - 1, CInt(y) - j - 1) = 1 And a(CInt(x) - j, CInt(y) - j) = 1 ThenMsgBox 黑方胜利wuziqi = FalseExit SubEnd IfIf a(CInt(x) - j - 4, CInt(y) - j - 4) = 2 And a(CInt(x) - j - 3, CInt(y) - j - 3) = 2 And a(CInt(x) - j - 2, CInt(y) - j - 2) = 2 And a(CInt(x) - j - 1, CInt(y) - j - 1) = 2 And a(CInt(x) - j, CInt(y) - j) = 2 ThenMsgBox 白方胜利wuziqi = FalseExit SubEnd IfNextEnd IfEnd SubForm3Dim rcount As IntegerDim i As IntegerDim j As IntegerPrivate Sub Command1_Click()With Data1.DatabaseName = App.Path + wzq.mdb.RecordSource = 保存棋局表.RefreshIf Trim(Text1.Text) = ThenMsgBox 棋局名不能为空Exit SubEnd IfIf .Recordset.RecordCount 0 Then.Recordset.MoveLastFor i = 1 To rcountIf .Recordset.Fields(棋局名) = Text1.Text Then.Recordset.DeleteEnd IfIf Not .Recordset.EOF Then.Recordset.MoveNextEnd IfNextEnd IfFor i = -7 To 7For j = -7 To 7If a(i, j) 0 Then.Recordset.AddNew.Recordset.Fields(棋局名) = Text1.Text.Recordset.Fields(x坐标) = i.Recordset.Fields(y坐标) = j.Recordset.Fields(该点状态值) = a(i, j).Recordset.Fields(下棋状态) = wuziqi.Recordset.Fields(玩家1) = wanjia1.Recordset.Fields(玩家2) = wanjia2.Recordset.UpdateEnd IfNextNextUnload MeEnd WithEnd SubForm4Private Sub Command1_Click()For i = -7 To 7For j = -7 To 7a(i, j) = 0NextNextWith Data1.DatabaseName = App.Path + wzq.mdb.RecordSource = 保存棋局

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论