基于消息包交换的围棋对弈程序的设计
福清市邮电局 林航
随着计算机的逐步普及与人民消费水平的逐步提高,在我国的传统的娱乐项目——围棋中逐步也和现代化的计算机结合起来了。如何在现有电话网(PSTN),局域网(LAN),互联网(INTERNET)上实现围棋(或其他游戏)的远程对弈,作为话音通信与数据通信的增值业务,提高现有邮电网络的利用率,是摆在邮电系统的广大计算机工作者面前的艰巨任务。
在程控交换机的局间通信中,存在这样的一个基本原理:两个交换局互为发送方与接受方,在信号交换上存在信号互锁与相互验证。以NO.7的市话局呼叫长话局为例:
LS TS
IAI
SAM
SAM
ACM
ANC
。。。。。。
CLF
RLG
在两个交换局之间的任何的消息都按一定的规范组合成消息包,如以上的IAI等等,在两个交换局之间进行消息包的传送与验证。
由交换机的消息交换原理得到启发,我们提出了基于消息包交换的围棋对弈程序的设计思想。
程序的功能模块:
本文就以下几点做详细的论述:
在本地实现自动提子。
围棋程序的消息包格式。
基于消息包交换的MODEM对弈原理
基于消息包交换的网络对弈原理
本程序的开发环境是:IBM ThinkPad 770。
本程序的开发工具是:Microsoft visual basic 5.0 中文企业版
一.在本地实现自动提子。
设计任何的围棋程序如果不能实现自动提子,它在功能上就谈不上商业价值。在围棋中,提子是这样规定的:把对方的一块或一个没有“气”的棋子从盘面上去除掉。其中还包括了许多复杂的规定,如:打劫等等,由于篇幅所限,不做详细介绍。
如下图:
用计算机的语言来描述,就是:
A表示棋子a SUR(A)表示与A接触的四周(上下左右)的棋子。
C(A)表示A的颜色,C(A)=1表示棋子A的颜色为黑,C(A)=2表示棋子A的颜色为白,C(A)=0表示A为空白点。
!C(A)这样定义:
若C(A)=1 则 !C(A)=2
若C(A)=2 则 !C(A)=1
若C(A)=0 则 !C(A)=0
Q(A)表示A点的气数,Q(A)=与A相接触的点中是否有空白点。
Q(A)=0 表示无空白点
Q(A)=1表示有空白点
DEAD(A)表示A是否死棋,DEAD(A)=TRUE表示A为死棋,DEAD(A)=FALSE表示A不是死棋。
那么,可以用以下的递归描述:
PROCEDURE DEAD(A)
SUR(A)完全都是异色棋子(包括棋盘的边界),Q(A)=0,那么棋子A为死棋,即:DEAD(A)=TRUE RETURN。
SUR(A)中有空白点,那么棋子A不为死棋,即:Q(A)=1,DEAD(A)=FALSE,RETURN。
SUR(A)中无空白点,又不完全是异色棋子时,那么C(A)= !C(A)
DEAD(A)=DEAD(SUR(A))
END PROCEDURE
重要的几个数据结构:
棋子的数据定义:
Public Type Point
Color As Integer ‘颜色
X As Integer ‘X
Y As Integer ‘Y
Q As Integer ‘Q(A)
End Type
棋盘的定义(19*19):
Dim Board(1 to 19,1 to 19) As Point
下棋模块:
N 其中:判断A为:
所下的棋子是否造成对方的死棋。
Y B为提子操作。
原创力文档

文档评论(0)