视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
VB6.0五子棋代码
2025-09-28 03:23:27 责编:小OO
文档
VB实验结课报告——五子棋

班级:   旅121   

****   ***   

学号:   ******   

实验题目:五子棋软件设计

实验要求:

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 String

Public wanjia2 As String

Public blackwhite As Boolean

Public wuziqi As Boolean

Public a(-11 To 11, -11 To 11) As Integer

Dim i As Integer

Dim j As Integer

Dim countblack As Integer

Dim countwhite As Integer

Public Sub paint()

countblack = 0

countwhite = 0

Form2.Picture1.Cls

For i = -7 To 7

Form2.Picture1.Line (-7, i)-(7, i), QBColor(0)

Form2.Picture1.Line (i, -7)-(i, 7), QBColor(0)

Next

Form2.Picture1.FillStyle = 0

For i = -7 To 7

For j = -7 To 7

If a(i, j) = 1 Then

Form2.Picture1.FillColor = QBColor(0)

Form2.Picture1.Circle (i, j), 0.3, QBColor(0)

countblack = countblack + 1

End If

If a(i, j) = 2 Then

Form2.Picture1.FillColor = QBColor(15)

Form2.Picture1.Circle (i, j), 0.3, QBColor(15)

countwhite = countwhite + 1

End If

Next

Next

If countblack = countwhite Then

blackwhite = True

Else

blackwhite = False

End If

If blackwhite = True Then

Form2.Label1.Caption = "该黑方" + wanjia1 + "走"

Else

Form2.Label1.Caption = "该白方" + wanjia2 + "走"

End If

End Sub

Form1:

Private Sub Command1_Click()

If Trim(Text1.Text) = "" Or Trim(Text2.Text) = "" Then

MsgBox "请输入姓名"

Exit Sub

End If

wanjia1 = Text1.Text

wanjia2 = Text2.Text

Form2.Show

Unload Me

End Sub

Form2:

Dim m As Single

Dim n As Single

Dim x0 As Single

Dim y0 As Single

Dim shubiao As Integer

Private Sub Command1_Click()

Label1.Caption = "该黑方" + wanjia1 + "走"

blackwhite = True

wuziqi = True

Picture1.Cls

For i = -7 To 7

Picture1.Line (-7, i)-(7, i), QBColor(0)

Picture1.Line (i, -7)-(i, 7), QBColor(0)

Next

For i = -11 To 11

For j = -11 To 11

a(i, j) = 0

Next

Next

End Sub

Private Sub Command2_Click()

Form3.Show

End Sub

Private Sub Command3_Click()

Form4.Show

End Sub

Private Sub Command4_Click()

CommonDialog1.Filter = "*.wzq|*.wzq"

CommonDialog1.Action = 2

Open CommonDialog1.FileName For Output As #1

Print #1, wuziqi

For i = -7 To 7

For j = -7 To 7

If a(i, j) <> 0 Then

Print #1, i

Print #1, j

Print #1, a(i, j)

Print #1, wanjia1

Print #1, wanjia2

End If

Next

Next

Close #1

End Sub

Private Sub Command5_Click()

For i = -7 To 7

For j = -7 To 7

a(i, j) = 0

Next

Next

CommonDialog1.Filter = "*.wzq|*.wzq"

CommonDialog1.Action = 1

Open CommonDialog1.FileName For Input As #1

Line Input #1, strwuziqi

wuziqi = CBool(strwuziqi)

Do While Not EOF(1)

Line Input #1, stri

Line Input #1, strj

Line Input #1, stra

Line Input #1, strw1

Line Input #1, strw2

a(Val(stri), Val(strj)) = Val(stra)

Loop

Close #1

Call paint

End Sub

Private Sub Command6_Click()

If wuziqi = True Then

a(m, n) = 0

Call paint

End If

End Sub

Private Sub Form_Load()

Form2.Picture1.Scale (-8, 8)-(8, -8)

shubiao = 0

End Sub

Private Sub Picture1_mousedown(button As Integer, shift As Integer, x As Single, y As Single)

shubiao = 1

x0 = x

y0 = y

If CInt(x) >= -7 And CInt(x) <= 7 And CInt(y) >= -7 And CInt(y) <= 7 And wuziqi = True Then

m = CInt(x)

n = CInt(y)

Picture1.FillStyle = 0

If blackwhite = True And a(CInt(x), CInt(y)) = 0 Then

Picture1.FillColor = QBColor(0)

Picture1.Circle (CInt(x), CInt(y)), 0.3, QBColor(0)

a(CInt(x), CInt(y)) = 1

Label1.Caption = "该白方" + wanjia2 + "走"

blackwhite = Not blackwhite

End If

If blackwhite = False And a(CInt(x), CInt(y)) = 0 Then

Picture1.FillColor = QBColor(15)

Picture1.Circle (CInt(x), CInt(y)), 0.3, QBColor(15)

a(CInt(x), CInt(y)) = 2

Label1.Caption = "该黑方" + wanjia1 + "走"

blackwhite = Not blackwhite

End If

For 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 Then

MsgBox "黑方胜利"

wuziqi = False

Exit Sub

End If

If 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 Then

MsgBox "白方胜利"

wuziqi = False

Exit Sub

End If

Next

For 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 Then

MsgBox "黑方胜利"

wuziqi = False

Exit Sub

End If

If 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 Then

MsgBox "白方胜利"

wuziqi = False

Exit Sub

End If

Next

For i = 4 To 0 Step -1

If 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 Then

MsgBox "黑方胜利"

wuziqi = False

Exit Sub

End If

If 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 Then

MsgBox "白方胜利"

wuziqi = False

Exit Sub

End If

Next

For j = 0 To -4 Step -1

If 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 Then

MsgBox "黑方胜利"

wuziqi = False

Exit Sub

End If

If 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 Then

MsgBox "白方胜利"

wuziqi = False

Exit Sub

End If

Next

End If

End Sub

Form3

Dim rcount As Integer

Dim i As Integer

Dim j As Integer

Private Sub Command1_Click()

With Data1

.DatabaseName = App.Path + "\\wzq.mdb"

.RecordSource = "保存棋局表"

.Refresh

If Trim(Text1.Text) = "" Then

MsgBox "棋局名不能为空"

Exit Sub

End If

If .Recordset.RecordCount > 0 Then

.Recordset.MoveLast

For i = 1 To rcount

If .Recordset.Fields("棋局名") = Text1.Text Then

.Recordset.Delete

End If

If Not .Recordset.EOF Then

.Recordset.MoveNext

End If

Next

End If

For i = -7 To 7

For j = -7 To 7

If 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.Update

End If

Next

Next

Unload Me

End With

End Sub

Form4

Private Sub Command1_Click()

For i = -7 To 7

For j = -7 To 7

a(i, j) = 0

Next

Next

With Data1

.DatabaseName = App.Path + "\\wzq.mdb"

.RecordSource = "保存棋局表"

.Refresh

If .Recordset.RecordCount > 0 Then

.Recordset.MoveLast

rcount = .Recordset.RecordCount

.Recordset.MoveFirst

For i = 1 To rcount

If .Recordset.Fields("棋局名") = Combo1.Text Then

a(.Recordset.Fields("x坐标"), .Recordset.Fields("y坐标")) = .Recordset.Fields("该点状态值")

End If

If Not .Recordset.EOF Then

.Recordset.MoveNext

End If

Next

.Recordset.MoveFirst

For i = 1 To rcount

If .Recordset.Fields("棋局名") = Combo1.Text Then

wuziqi = .Recordset.Fields("下棋状态")

Exit For

End If

If Not .Recordset.EOF Then

.Recordset.MoveNext

End If

Next

End If

End With

Call paint

Unload Me

End Sub

Private Sub Form_Load()

Combo1.Text = "请选择打开棋局名称"

strfile = ""

With Data1

.DatabaseName = App.Path + "\\wzq.mdb"

.RecordSource = "保存棋局表"

.Refresh

If .Recordset.RecordCount > 0 Then

.Recordset.MoveLast

rcount = .Recordset.RecordCount

.Recordset.MoveFirst

For i = 1 To rcount

If .Recordset.Fields("棋局名") <> strfile Then

strfile = .Recordset.Fields("棋局名")

Combo1.AddItem strfile

End If

If Not .Recordset.EOF Then

.Recordset.MoveNext

End If

Next

End If

End With

End Sub下载本文

显示全文
专题