求跳棋游戏的VB代码

VB跳棋代码:

表单代码:

Dimchess板(-2to10,-2to10)作为字节板(8垂直*8国际象棋)

Dim x (10)为整数,y (10)为整数''每种方式进行搜索。

Dim x 1 (10)为整数,y 1 (10)为整数''搜索到的每一步棋的可食用子坐标。

Dim BestLocate As CHESSER

将当前播放器显示为字节''当前播放器

Dim CurrentStep As Integer ' '当前步骤

模糊人机模式为布尔型

玩家选择了哪个棋子?

Dim tTemp为布尔值

Const MAXDOWNPOINT = 7

Rem如果Cer是1(黑色方块),则返回2(红色方块),否则将加上1(黑色方块)。

公共函数NextCer(ByVal Cer As Byte) As Byte

NextCer = 1

如果Cer = 1,则NextCer = 2

结束功能

Rem棋盘

私有Sub首字母()

Dim i为整数,j为整数

For i = 1到8: For j = 1到8:棋盘(I,j) = 0:下一个j:下一个I

棋盘(1,2) = 201

棋盘(1,4) = 201

棋盘(1,6) = 201

棋盘(1,8) = 201

棋盘(2,1) = 201

棋盘(2,3) = 201

棋盘(2,5) = 201

棋盘(2,7) = 201

棋盘(3,2) = 201

棋盘(3,4) = 201

棋盘(3,6) = 201

棋盘(3,8) = 201

棋盘(6,1) = 101

棋盘(6,3) = 101

棋盘(6,5) = 101

棋盘(6,7) = 101

棋盘(7,2) = 101

棋盘(7,4) = 101

棋盘(7,6) = 101

棋盘(7,8) = 101

棋盘(8,1) = 101

棋盘(8,3) = 101

棋盘(8,5) = 101

棋盘(8,7) = 101

末端接头

Rem反转显示(将屏幕上显示的内容保存到棋盘数组中)

私有Sub重新显示()

Dim i为整数,j为整数,k为整数

k = 0

对于i = 1到8

对于j = 1到8

If cbText(k)。Text = " "那么棋盘(I,j) = 0

If cbText(k)。Text = "101 "那么棋盘(I,j) = 101

If cbText(k)。Text = "201 "那么棋盘(I,j) = 201

If cbText(k)。Text = "102 "那么棋盘(I,j) = 102

If cbText(k)。Text = "202 "那么棋盘(I,j) = 202

k = k + 1

下一个j

接下来我

末端接头

Rem显示(在屏幕后面显示棋盘数组的内容)

私有子显示器()

Dim i为整数,j为整数,k为整数

k = 0

对于i = 1到8

对于j = 1到8

如果棋盘(I,j) = 0,则

cbText(k)。文本= " "

其他

cbText(k)。Text =棋盘(I,j)

如果…就会结束

k = k + 1

下一个j

接下来我

称胜利或失败为判断

末端接头

Rem胜利或失败判断

二等兵对胜败的判断()

Dim i为整数,j为整数

Dim a为整数,b为整数

a = 0: b = 0

对于i = 1到8

对于j = 1到8

如果int(国际象棋棋盘(I,j)/100)= 1那么a = a+1 ' '计算棋手的棋子数。

如果int(棋盘(I,J)/100) = 2thenb = b+1 ' '计算计算机上的棋子数。

下一个j

接下来我

如果a = 0,则调用MsgBox("我赢了!"),vbOKOnly+32,"提示:"):退出Sub

如果b = 0那么调用MsgBox("我放弃!"),vbOKOnly+32,"提示:"):退出Sub

末端接头

Rem回报评估

私有函数CurrentValue(Cer为字节)为整数

Dim i为整数,j为整数

当前值= 0

对于i = 1到8

对于j = 1到8

如果Int(棋盘(I,j) / 100) = Cer那么_

当前值=当前值+棋盘(I,J)mod 100 * 100+100 ' '是我们的棋子,棋子是1加100点,棋子是2加200点。

如果Int(棋盘(I,j) / 100) = NextCer(Cer)那么_

当前值=当前值-(棋盘(I,J)mod 100 * 100+100)'对方棋子为1减100点,棋子为2减200点。

下一个j

接下来我

结束功能

如果Cer方I和J的棋子还能吃,Rem返回True。

私有函数IsLine(Cer为字节,I为字节,j为字节)为布尔值

Dim x为字节,y为字节,x1为字节,y1为字节

IsLine = False

开始搜索棋盘。

如果是Cer这边的棋子。

如果Int(棋盘(I,j) / 100) = Cer那么

‘吃子’式是1:即如果基础式的位置有对手的棋子,可以跳过去吃(式的限制:Cer是1或者棋子只能移动用于强化棋)。

如果Int(棋盘(i - 1,j-1)/100)= next Cer(Cer)And(Cer = 1或棋盘(I,j) Mod 100 = 2)则

X = (i-1)-1 ' '目标坐标

y = (j - 1) - 1

X1 = i-1 ' '池子坐标

y1 = j - 1

如果x & gt0和y & gt0和x & lt9和y & lt9和棋盘(x,y) = 0那么is line = True '如果有吃的,返回True。

如果…就会结束

吃孩子走路的方法2

如果Int(棋盘(i - 1,j+1)/100)= next Cer(Cer)And(Cer = 1或棋盘(I,j) Mod 100 = 2)则

x = (i - 1) - 1

y = (j + 1) + 1

x1 = i - 1

y1 = j + 1

如果x & gt0和y & gt0和x & lt9和y & lt9和棋盘(x,y) = 0那么is line = True '如果有吃的,返回True。

如果…就会结束

吃吃走走3

如果Int(棋盘(i + 1,j-1)/100)= next Cer(Cer)And(Cer = 2或棋盘(I,j) Mod 100 = 2)则

x = (i + 1) + 1

y = (j - 1) - 1

x1 = i + 1

y1 = j - 1

如果x & gt0和y & gt0和x & lt9和y & lt9和棋盘(x,y) = 0那么is line = True '如果有吃的,返回True。

如果…就会结束

“像吃饭一样走路”4

如果Int(棋盘(i + 1,j+1)/100)= next Cer(Cer)And(Cer = 2或棋盘(I,j) Mod 100 = 2)则

x = (i + 1) + 1

y = (j + 1) + 1

x1 = i + 1

y1 = j + 1

如果x & gt0和y & gt0和x & lt9和y & lt9和棋盘(x,y) = 0那么is line = True '如果有吃的,返回True。

如果…就会结束

如果…就会结束

结束功能

如果Cer的碎片还能被吃掉,Rem返回True。

私有函数IsLine2(Cer为字节)为布尔值

Dim x为字节,y为字节,x1为字节,y1为字节

Dim i为整数,j为整数

IsLine2 = False

开始搜索棋盘。

对于i = 1到8

对于j = 1到8

如果是Cer这边的棋子。

如果Int(棋盘(I,j) / 100) = Cer那么

‘吃子’式是1:即如果基础式的位置有对手的棋子,可以跳过去吃(式的限制:Cer是1或者棋子只能移动用于强化棋)。

如果Int(棋盘(i - 1,j-1)/100)= next Cer(Cer)And(Cer = 1或棋盘(I,j) Mod 100 = 2)则

X = (i-1)-1 ' '目标坐标

y = (j - 1) - 1

X1 = i-1 ' '池子坐标

y1 = j - 1

如果x & gt0和y & gt0和x & lt9和y & lt9和棋盘(x,y) = 0然后是第2行=真'如果有吃的,返回真。

如果…就会结束

吃孩子走路的方法2

如果Int(棋盘(i - 1,j+1)/100)= next Cer(Cer)And(Cer = 1或棋盘(I,j) Mod 100 = 2)则

x = (i - 1) - 1

y = (j + 1) + 1

x1 = i - 1

y1 = j + 1

如果x & gt0和y & gt0和x & lt9和y & lt9和棋盘(x,y) = 0然后是第2行=真'如果有吃的,返回真。

如果…就会结束

吃吃走走3

如果Int(棋盘(i + 1,j-1)/100)= next Cer(Cer)And(Cer = 2或棋盘(I,j) Mod 100 = 2)则

x = (i + 1) + 1

y = (j - 1) - 1

x1 = i + 1

y1 = j - 1

如果x & gt0和y & gt0和x & lt9和y & lt9和棋盘(x,y) = 0那么是2号线=真'如果有吃的,返回真。

如果…就会结束

“像吃饭一样走路”4

如果Int(棋盘(i + 1,j+1)/100)= next Cer(Cer)And(Cer = 2或棋盘(I,j) Mod 100 = 2)则

x = (i + 1) + 1

y = (j + 1) + 1

x1 = i + 1

y1 = j + 1

如果x & gt0和y & gt0和x & lt9和y & lt9和棋盘(x,y) = 0那么是2号线=真'如果有吃的,返回真。

如果…就会结束

如果…就会结束

下一个j

接下来我

结束功能

Rem搜索程序

私有函数搜索(Cer为字节,Steps为整数,IsTop为布尔,UpMax为整数)

Dim a为整数,b为整数,b1为整数,b2为整数,I为整数,j为整数,k为整数,l为整数,v为整数

Dim MaxValue为整数

Dim Sc(40)作为CHESSER

Dim IsEat(7) As Boolean ' '你吃了你搜索到的七种方式吗?

迪姆是不是像布尔''一样吃了一个孩子?

如果IsTop,则

List1。清楚的

对于i = 0到40: Sc(i)。Allow = False:下一个I ';默认情况下,不允许所有遍历,如果所有值都为假,则允许所有遍历。

如果…就会结束

吃=假

对于i = 0到7: IsEat(7) = False: Next i '默认情况下,所有搜索到的招式都不吃。

步骤数=步骤数- 1

如果步骤& lt1和IsLine2(Cer) = False然后

如果我们没有孩子吃,我们将回到估值

Search = -CurrentValue(Cer)' '返回估计值。

退出功能

如果…就会结束

k = 0

开始搜索棋盘。

对于i = 1到8

对于j = 1到8

如果是Cer这边的棋子。

如果Int(棋盘(I,j) / 100) = Cer那么

for I 1 = 1 tomaxdownpoint:x(I 1)= 0:x 1(I 1)= 0:next ' ' x记录所有移动,并清空x。

列出所有的方法。

基本方式:左上、右上、左下、右下。

x(0) = i - 1: y(0) = j - 1

x(1)= I-1:y(1)= j+1

x(2) = i + 1: y(2) = j - 1

x(3) = i + 1: y(3) = j + 1

棋子代表:白棋101(普通),102(有底强棋)

红棋201(普通),202(过底强力棋)

下一句解释:如果是白(101,102),则不允许退(删除x(2),x(3))。

如果Cer = 1且棋盘(I,j)Mod 100 & lt;& gt2那么x(2) = -2: x(3) = -2

下一句解释:如果是红棋(201,202),不允许退(删除x(0),x(1))。

如果Cer = 2且棋盘(I,j)Mod 100 & lt;& gt2那么x(0) = -2: x(1) = -2

‘吃子’式是1:即如果基础式的位置有对手的棋子,可以跳过去吃(式的限制:Cer是1或者棋子只能移动用于强化棋)。

如果Int(棋盘(i - 1,j-1)/100)= next Cer(Cer)And(Cer = 1或棋盘(I,j) Mod 100 = 2)则

X(4) = (i-1)-1 ' '目标坐标。

y(4) = (j - 1) - 1

X1(4) = i-1 ' '池子坐标

y1(4) = j - 1

如果x(4)>0和y(4)>0和x(4)& lt;9和y(4)& lt;9和棋盘(x(4),y(4)) = 0 Then _

EAT = True: IsEat(4) = True ' '你有东西吃,必须走这一步,其他方式无效。

如果…就会结束

吃孩子走路的方法2

如果Int(棋盘(i - 1,j+1)/100)= next Cer(Cer)And(Cer = 1或棋盘(I,j) Mod 100 = 2)则

x(5) = (i - 1) - 1

y(5) = (j + 1) + 1

x1(5) = i - 1

y1(5) = j + 1

如果x(5)>0和y(5)>0和x(5)& lt;9和y(5)& lt;9和棋盘(x(5),y(5)) = 0 Then _

EAT = True: IsEat(5) = True ' '你有东西吃,必须走这一步,其他方式无效。

如果…就会结束

吃吃走走3

如果Int(棋盘(i + 1,j-1)/100)= next Cer(Cer)And(Cer = 2或棋盘(I,j) Mod 100 = 2)则

x(6) = (i + 1) + 1

y(6) = (j - 1) - 1

x1(6) = i + 1

y1(6) = j - 1

如果x(6)>0和y(6)>0和x(6)& lt;9和y(6)& lt;9和棋盘(x(6),y(6)) = 0 Then _

EAT = True: IsEat(6) = True ' '你有东西吃,必须走这一步,其他方式无效。

如果…就会结束

“像吃饭一样走路”4

如果Int(棋盘(i + 1,j+1)/100)= next Cer(Cer)And(Cer = 2或棋盘(I,j) Mod 100 = 2)则

x(7) = (i + 1) + 1

y(7) = (j + 1) + 1

x1(7) = i + 1

y1(7) = j + 1

如果x(7)>0和y(7)>0和x(7)& lt;9和y(7)& lt;9和棋盘(x(7),y(7)) = 0 Then _

EAT = True: IsEat(7) = True ' '你有东西吃,必须走这一步,其他方式无效。

如果…就会结束

如果有吃孩子的方法,不吃孩子的删除其他方法。

如果吃=真,那么

对于a = 0到7

如果IsEat(a) = False,则x(a) = -1

下一个a

如果…就会结束

存储在Sc(移动表)中

对于a = 0到7

如果x(a) = 5,y(a) = 2,那么停止

如果你过了棋盘,你就不能走了。

如果x(a)>0和y(a)>0和x(a)& lt;9和y(a)& lt;那就9

如果目标有棋子,你就不能去。如果为0,则保存。

如果棋盘(x(a),y(a)) = 0则

将移动保存在“移动表”中

Sc(k)。Initx = i

Sc(k)。Inity = j

Sc(k)。ObjX = x(a)

Sc(k)。ObjY = y(a)

Sc(k).x1 = x1(a)' '被吃掉的位置

Sc(k).y1 = y1(a)

如果iseat (a) = true,则sc (k)。Allow = true ' '如果有子级,则允许此移动。

k = k + 1

如果…就会结束

如果…就会结束

下一个a

如果eat = true那么I = 100: J = 100 ' '如果有孩子,就不用再搜索了。

如果…就会结束

下一个j

接下来我

MaxValue = -30000 ' '当前分数

tTemp = False

搜索是否有允许的移动,如果没有,则允许所有移动。

对于i = 0至k - 1

如果Sc(i)。Allow = True Then tTemp = True

接下来我

如果存在允许的移动,则除了允许的移动之外,所有其他移动都是不允许的。

如果tTemp = False,则

对于i = 0到k - 1: Sc(i)。Allow = True:下一个I

如果…就会结束

想尽一切办法。

对于i = 0至k - 1

如果Sc(i)。那么Allow = True

B1 =棋盘(SC (I))。initx,SC (I)。inity)' '记录开始和结束片段。

b2 =棋盘(Sc(i)。ObjX,Sc(i)。ObjY)

B =棋盘(SC (I) .x1,SC(I). y 1)‘’记录已经吃掉的棋子。

棋盘(sc(一)。initx,sc (I)。inity) = 0 ' '清除起始棋子。

棋盘(sc(一)。objx,sc (I)。objy) = b1 ' '试下棋。

棋盘(SC(一)。x1,SC (I)。y1) = 0 ' '清除被吃掉位置的棋子。

如果你到达边界,你的力量会增加。

下一句:如果是黑的(101,102)

如果Cer = 1,则

下一句:如果你去第一线,棋子就变成102,威力增强。

如果Sc(i)。ObjX = 1然后棋盘(Sc(i)。ObjX,Sc(i)。ObjY) = 102

如果…就会结束

下一句:如果是红色(201,202)

如果Cer = 2,则

下一句:如果到了八线,棋子变成202,力量增强。

如果Sc(i)。ObjX = 8那么棋盘(Sc(i)。ObjX,Sc(i)。ObjY) = 202

如果…就会结束

如果b & gt0和IsLine(Cer,Sc(i))。ObjX,Sc(i)。ObjY) = True,那么EAT = True

如果能连续吃小孩。

V =当前值(Cer)+300 ''V是当前情况值加上300点。

其他

V = search (next cer (cer),steps-1,false,-up max)‘’没有连续的食物可以吃,继续搜索。

如果…就会结束

恢复棋盘

棋盘(sc(一)。x1,sc (I)。y1) = b ' '还原被吃掉的孩子。

棋盘(sc(一)。initx,sc (I)。inity) = b1 ' '记录开始和结束片段。

棋盘(Sc(一)。ObjX,Sc(i)。ObjY) = b2

显示每次行走的分数。

如果IsTop,则

列表1。加法“从”&;Str(Sc(i))。Initx)和amp“,”& ampStr(Sc(i))。inity)& amp;_

“到”&;Str(Sc(i))。ObjX)& amp;“,”& ampStr(Sc(i))。ObjY)& amp;"分数:" &;Str(v)

如果…就会结束

如果这个动作得分高,就记录下来。

如果IsTop和(v & gtMaxValue或MaxValue = -30000)那么

最佳定位。Initx = Sc(i)。Initx

最佳定位。Inity = Sc(i)。无限

最佳定位。ObjX = Sc(i)。ObjX

最佳定位。ObjY = Sc(i)。ObjY

bestlocate . x 1 = Sc(I). x 1

bestlocate . y 1 = Sc(I). y 1

最大值= v

如果…就会结束

如果v & gtMaxValue Then MaxValue = v

下一句:如果最大值>;= -UpMax //α-β剪枝,符合剪枝条件的会被剪掉。UpMax是上层的最大值。

如果IsTop = False并且MaxValue & gt= -UpMax Then i = 100 ' '修剪程序

如果…就会结束

接下来我

如果IsTop = False,则Search = -MaxValue,否则Search = MaxValue

结束功能

Private Sub cbText_Click(索引为整数)

Dim I asinteger,J asinteger,C asinteger'' c记录吃小孩。

Dim Temp为字符串,Temp2为字符串,Temp3为字符串

Dim x为字节,y为字节,x2为字节,y2为字节

If cbText(索引)。BackColor & lt& gt& ampHC0E0FF然后调用MsgBox("象棋无效!",vbOKOnly+32,"提示:"):退出Sub

如果cSel = 0且Trim(cbText(Index))。Text)>" "那么csel = index: cbtext (csel)。forecolor = QB color(12):exit sub ' '如果所有棋手都不是第一,且当前棋盘位置有一枚棋子,则表示该棋手选中了这枚棋子。

如果cSel & lt& gt0和Val(cbText(Index))。Text) = Val(cbText(cSel)。Text)然后是cbText(cSel)。ForeColor = H80000008 & amp:cSel = 0: Exit Sub '如果玩家选择同一个棋子两次,则取消选择。

如果cSel & lt& gt那么0

下棋。

cbText(索引)。Text = cbText(cSel)。文本

判断是否可以变成强化棋。

k = Val(cbText(Index))。正文)

如果Int(k / 100) = 1且Index & lt8然后是CB文本(索引)。text = "102 " '如果1到顶,就成了补强棋。

如果Int(k / 100) = 2且Index & gt55然后cbText(索引)。Text = "202 " '如果两个玩家去顶,就变成了强化棋。

cbText(cSel)。文本= " "

cbText(cSel)。ForeColor = H80000008 & amp

来判断有没有小孩吃。

向左上方倾斜。

如果Index - cSel = -18,则

CbText(索引+9)。Text = " ":' '吃了。

C =指数+ 9

如果…就会结束

向右上方倾斜。

如果Index - cSel = -14,则

CbText(索引+7)。Text = " ":' '吃了。

C =指数+ 7

如果…就会结束

向左下方倾斜。

如果Index - cSel = 14,则

CbText(索引-7)。Text = " ":' '吃了。

C =指数- 7

如果…就会结束

向右斜下方。

如果Index - cSel = 18,则

CbText(索引-9)。Text = " ":' '吃了。

C =指数- 9

如果…就会结束

'存储方法'

k = 0: Temp = "": Temp2 = "": Temp = " " "

对于i = 1到8

对于j = 1到8

如果k = cSel,则Temp = " from " &;Str(i) +","+ Str(j)

如果k = Index那么Temp2 = "to"+str (i)+","+str (j): x = i: y = j。

如果k = C,那么Temp3 = "池子" &;Str(i)和amp“,”& ampStr(j): x2 = i: y2 = j

k = k + 1

下一个j

接下来我

列表2。AddItem“第一”&;当前步骤“手”& Str(CurrentPlayer)+“方”+Temp+Temp2+Temp3。

当前步骤=当前步骤+ 1

短信3。Text =温度+温度2

cSel = 0

呼叫重新显示

下一句:如果是人机模式,玩家没东西吃。

如果人机模式=真且(is line(当前玩家,x,y) =真且x2 > 1且y2 & gt2) =假那么

如果人机模式=真,则

看玩家走了棋子的哪一面,再算棋子的另一面。

current player = NextCer(Int(Val(CB text(Index))。Text) / 100))

调用Command2_Click ' '如果是人机模式,让电脑长时间运行。

如果…就会结束

如果…就会结束

末端接头

私有子命令1_Click()

列表2。清除''清除棋谱。

CurrentStep = 1

呼叫初始

呼叫显示

末端接头

私有子命令2_Click()

将t标注为布尔值

命令2。启用=假

t:

Text1。Text = Str(Search(CurrentPlayer,Val(Text2。Text),True,0))

命令2。启用=真

使用BestLocate

t =下切(。Initx,。Inity,。ObjX,。ObjY,. x1,.. y1)

呼叫显示

如果t = true并且是line(当前玩家,。objx,。objy)然后调用msgbox("我想再吃一个"):GoTo t '如果还能吃到棋(连续吃),再计算一次。

以…结尾

current player = next cer(current player)

末端接头

雷姆下象棋。

Rem Sx,Sy:开始棋Ex,Ey:结束棋Ax,Ay:被吃掉。

如果有孩子,Rem返回True。

私有函数DownChess(Sx作为字节,Sy作为字节,ex作为字节,ey作为字节,Ax作为字节,Ay作为字节)作为布尔

棋盘(ex,ey) =棋盘(Sx,Sy)

棋盘(Sx,Sy) = 0

棋盘(Ax,Ay) = 0 ' '清除被吃掉的孩子。

如果Ax & lt& gt0和Ay & lt& gt0则DownChess = True否则DownChess = False

短信3。text = " no . " &;当前步骤“手”& Str(CurrentPlayer)+“方聪”&;Str(Sx)+","+Str(Sy)+"到"+str (ex)+","+Str(ey)&;_

“吃了孩子”&;Str(Ax)和amp“,”& ampStr(Ay)

当前步骤=当前步骤+ 1

列表2。AddItem文本3。文本

下一句:如果是黑的(101,102)

如果Int(棋盘(ex,ey) / 100) = 1那么

下一句:如果你去第一线,棋子就变成102,威力增强。

如果ex = 1,那么棋盘(ex,ey) = 102

如果…就会结束

下一句:如果是红色(201,202)

如果Int(棋盘(ex,ey) / 100) = 2那么

下一句:如果到了八线,棋子变成202,力量增强。

如果ex = 8,那么棋盘(ex,ey) = 202

如果…就会结束

结束功能

Rem一号行动

私有子命令3_Click()

CurrentPlayer = 1

呼叫命令2_Click

末端接头

远程操作2

私有子命令4_Click()

CurrentPlayer = 2

呼叫命令2_Click

末端接头

私有子命令5_Click()

呼叫重新显示

末端接头

私有子命令6_Click()

如果人机模式=假,则人机模式=真,否则人机模式=假

如果人机模式=假,则命令6。Caption = "人机模式":Command6。ToolTipText = "当前模式:每个人都在战斗" Else命令6。Caption = "休息模式":Command6。ToolTipText = "当前模式:人机对战"

末端接头

私有子命令7_Click()

结束

末端接头

快速眼动存储光谱

私有子命令8_Click()

出错时转到e

将I标注为整数

打开InputBox("请输入文件名:")作为#1输出。

对于i = 0到List2。列表计数- 1

打印编号1,列表2。列表(一)

接下来我

关闭#1

出口接头

e:

调用MsgBox("存储错误!",vbOKOnly+32,"提示:")

呃。清楚的

出口接头

末端接头

私有子窗体_Load()

人机模式=假

cSel = 0

CurrentPlayer = 1

呼叫命令1_Click

末端接头

模块代码:

CHESSER型

定位为字节''为什么定位,在BestLocate中,为什么指示数组。

Initx的初始位置为字节“”

初始化为字节

运算后ObjX的棋点为Byte ' '。

对象作为字节

x1作为字节

y1作为字节

是否允许作为布尔值“”使用?

结束类型