围棋游戏的设计与实现毕业论文设计
温柔似野鬼°
553次浏览
2021年01月27日 22:28
最佳经验
本文由作者推荐
优秀党支部先进事迹-斧王装备
北
京
大
学
毕
业
设
计
围棋游戏的设计与实现
摘
要
围棋 作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以
及研究简单的人工智能,决定 用
Java
开发五子棋游戏。主要完成了人机对战和玩家之
间联网对战
2个功能。网络连接部分为
Socket
编程应用,客户端和服务器端的交互用
Cl ass Message
定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信
息 ,及错误处理。服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,
动态维护用户列表。在 人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智
能。分析估值模块中的影响精准性的几个要素 ,以及提出若干提高精准性的办法,以
及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提 高电脑
AI
方案,如
递归算法、电脑学习等。算法的研究有助于理解程序结构,增强逻 辑思维能力,在其
他人工智能方面也有很大的参考作用。
关键词
:
围棋,信息自动化,游戏,
java
i
北
京
大
学
毕
业
设
计
Design and Implementation of chess game
ABSTRACT
Go as a chess tournament sport is very popular in the folk, in order to know the renju
rules and techniques, and artificial intelligence research simple, decided to use Java gobang
game development. Main completed the man-machine between networking and multiplayer
game with two functions. Network connection parts for Socket programming applications,
client and the server to interact with the Class Message definition, has good scalability, the
client is responsible for the maintenance and collect information of user input interface, and
error handling. The basic information of the server maintenance online users and any two
against the user's information board, dynamic maintenance user list. Through deep search and
valuation in man-machine game module, to improve computer chess player's intelligence.
Analysis of several factors that have effect on the precision of the valuation module, and puts
forward some improve the precision of the method, as well as to the number of nodes in the
search to compare them, on the basis of these algorithms analyze some improve AI scheme,
such as recursive algorithm, computer learning, etc. Algorithm research helps to understand
the program structure, enhance the logical thinking ability, in the other artificial intelligence
also has a great reference function.
Keywords: Go, Information Automation , Games , Java
ii
北
京
大
学
毕
业
设
计
目
录
摘
要
.... .................................................. .........
I
ABSTRACT ................. ...........................................
I
I
第
1
章
绪论
....... ..................................................
1
1.1
背景
................. ..........................................
1
1.2
设计内容
................ ........................................
2
第
2
章
围棋对弈系统
.................................................
4
2.1
围棋概述
.
..... .................................................
4
2.1.1
围棋定义
............ ...................................
4
2.1.2
开发围棋的任务及目的
..................................
5
2.2
主要系统介绍
.
............. .....................................
5
2.3
本章小结
.
............... .......................................
6
第
3
章
围棋对弈系统的设计
............................................
7
3.1
系统需求分析
............. ......................................
7
3.2
系统开发及运行环境
.............................................
8
3.3
系统主要功能要求
...............................................
8
3.4
系统总体结构
.............. ......................................
9
3.5
本章小结
.
............... ......................................
1
0
第
4
章
围棋对弈系统的具体实现
.....................................
1
1
4.1
界面设计
.......................... .............................
1
1
4.2
输赢判断设计
..................................................
1
4
4.3
程序设计及调试运行
.............................................
1
5
4.4
本章小结
............... ........................................
1
5
第
5
章
结束语
...... ................................................
1
6
参考文献
.......................... ..................................
1
7
致
谢
............................. .................................
1
8
附
录
............................. .................................
1
9
译文资料
..................................... .......................
3
3
中文译文
.. .................................................. ........
4
7
iii
北
京
大
学
毕
业
设
计
第
1
章
绪论
1.1
背景
围棋是一种智力游戏,
起源于中国。
中日韩是现今围棋的三大支柱,
但近年来 日本
围棋逐步衰弱,形成了中韩争霸的局面。
围棋是中华民族传统文化中的瑰宝,< br>它体现了中华民族对智慧的追求,
古人常以
“琴
棋书画”论及一个人的才华和修 养,其中的“棋”指的就是围棋。被人们形象地比喻为
黑白世界的围棋,
是我国古人所喜爱的娱 乐竞技活动,
同时也是人类历史上最悠久的一
种棋戏。由于它将科学、艺术和竞技三者融为一体 ,有着发展智力,培养意志品质和机
动灵活的战略战术思想意识的特点,因而,几千年来长盛不衰,
并逐渐地发展成了一
种国际性的文化竞技活动。
围棋是一种策略性二 人棋类游戏,
使用格状棋盘及黑白二色棋子进行对弈。
目前围
棋流行于亚太,覆盖世界 范围,是一种非常流行的棋类游戏。
中国围棋规则是数子法,围棋的本质是:谁的占地面积大谁获胜。
围棋的规则十分简 单,
却拥有十分广阔的落子空间,
使得围棋变化多端,
比其它棋
类复杂深奥。
这就是围棋的魅力所在。
下围棋对人脑的智力开发很有帮助,
可增强一个
人的 计算能力、创造能力、思维能力、判断能力,也能提高人的注意力和控制力。下围
棋对儿童少年的智力发 展起到积极作用,使他们能更好的分析事物。
Java
语言是当今最为流行的程序设计语言之一
作为一门非常优秀和极为 健壮的编
程语言,它同时具有的面向对象,与平台无关,分布式应用,安全,稳定和多线程等优
良的特征,使用
Java
语言,不仅可以开发出功能强大的大型应用程序,而且
Jav a
语言
本身突出的跨平台的特性也使得它特别适合于
Internet
上的应 用开发,
可以这样说,
Java
的出现使得所开发的应用程序“一次编写,处处可用” 的实现成为了可能。
近来随着计算机的快速发展,
各种各样的电脑游戏层出不穷,< br>使得我们能有更多的
娱乐项目,
而棋类游戏能起到锻炼人的思维和修身养性的作用,而且棋类游戏水平颇高,
大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军
-
卡斯帕罗夫的“深蓝”便是
最具说服力的代表。
越来越多的具有智能的机器进入了 人类的生活,人工智能的重要性如今显而易见。
自己对人工智能比较感兴趣,
而围棋游戏程序的 开发实现这个课题,
正好提供给我这样
一个研究的机会,通过对人工智能中博弈方面的研究(人 机对弈)
,让我在简单的人机
对弈全局设计,
以及具体到相关算法上有了深入的了解。
人工智能属于计算机科学的领
域,它以计算机技术为基础,近几十年来,它的理论和技术已经日 益成熟,应用领域也
正在不断扩大,
显示出强大的生命力。
人工智能大致可以分成几个 学科,
它们每一个都
是独特的,
但是它们常常又互相结合起来完成设计任务,
这时,
这些学科之间的差别就
变的很模糊。人工智能在专家系统,自然语言理解,自动定理证明 ,自动程序设计,人
工智能在机器人学、模式识别、物景分析、数据库的智能检索、机器下棋(实质上是 博
弈论问题)
和家用电器智能化等领域都有广泛的应用。
而这个课题就是和人工智能中 的
博弈论领域紧密相关的。
这个题目核 心是人工智能和
Socekt
编程,
。并且人工智能中的博弈部分,由于采用
了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技术,正在各行各业
1
北
京
大
学
毕
业
设
计
广 泛渗透。智能已经成为当今各种新产品、新装备的发展方向。所以,趁着这个机会,
对人工智能中比较容 易实现的人机博弈进行了解研究学习,也是很实用且很有必要的。
1.2
设计内容
此设计是一个小游戏(围棋)的实现,主要运用了
GUI(
用户图形界面
)API(
应用程
序借口
)
来实现。
此程序没有用到图片的引用,
棋盘和棋子的设计完全是应用函数绘制,
再加入复选框,按钮,标签及实现本游戏的用户界面布局。
在页面上通过单纯的JCreator
实现的下棋程序,
能够实现提子,
打劫等简单的下棋
功 能。更好的掌握
java
编程以及布局和设计。通过课程设计把课堂上讲的内容融会贯
通,学会设计程序、开发应用软件、开发系统软件等各项工作。通过实习掌握语言的语
法结构,
理解类和对象的概念,
准确的使用各种数据类型,
对面向对象中的继承和多态
的概念要 理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维
护。
一、棋盘
盘面有纵横各十九条等距离、
垂直交叉的平行线,共构成
19
×
19
=
361
个交叉点
(以下简称为
“点”
)
。
在盘面上标有几
个小圆点。称为星位,中央的星位又称“天元”
。
二、棋子
棋子分黑白两色。均为扁圆形。
棋子的数量以黑子
181
、白子
180
个为宜。
三、围棋的下法
1
、对局双方各执一色棋子,黑先白后,交替下子,每次只能下一子。
2
、棋子下在棋盘的点上。
3
、棋子下定后,不得向其他点移动。
4
、轮流下子是双方的权利,但允许任何一方放弃下子权。
四、棋子的气
一个棋子在棋盘上,
与它直线紧邻的空点是这个棋子的
“气”
。
< br>棋子直线紧邻的点
上,
如果有同色棋子存在,
则它们便相互连接成一个不可分割 的整体。
它们的气也应一
并计算。
棋子直线紧邻的点上,如果有异色棋子存 在,这口气就不复存在。如所有的
气均为对方所占据,
便呈无气状态。
无气状态的棋子 不能在棋盘上存在,
也就是第四条
——提子。
五、提子
把无气之子提出盘外的手段叫“提子”
。
提子有二种:
1
、下子后,对方棋子无气,应立即提取。
2
、下子后,双方棋子都呈无气状态,应立即提取对方无气之子。
六、计算胜负
1
、贴
3
又
3/4
子的规则
第一步,把死子捡掉。
第二步,只数一方围得点(叫做目)并记录下来(一般围得点 以整十目为单位)
,
再数刚才那一方的子数并记录下来,再把目数和子数加起来。
< br>第三步,如果数的是黑棋,再减去
3
又
3/4
子,如果数的是白棋,再 加上
3
又
3/4
子。
2
北
京
大
学
毕
业
设
计
第 四步,结果和
180
又
1/2
(棋盘
361
个点的一半)比 较,超过就算胜,否则判负。
2
、让先与让子
让先不贴目,让子要贴还让子数的一半(就当被让方是预先收了单官)
。
3
北
京
大
学
毕
业
设
计
第
2
章
围棋对弈系统
2.1
围棋概述
网络围棋在中国的出现几乎跟随着互联网同步成长,
1998
年,
联众率先推出了
网络围棋对弈。几年来各大网络围棋平台先后
上线,出身各异,水平也参差不齐。根
据网络资料显示,截止
2007
年底,中国网络围棋平台平均在线人数达
6
万人。
大型的游戏平台如
游戏、联众游戏中都有围棋游戏。也就是
说
围棋、联
众围棋都是镶嵌在其游戏平台之上。依靠游戏平
台用户人数的优势,这两个平台围棋
用户人数占据了网络围棋
用户的半数之多。
但根据专业人士分析:这部分用户无论
在产品使用深度和对围
棋的认知上是绝对的新手,浅尝辄止,他们大多是过客。同时
他们的围棋软件本身也不够专业。专业的网络围棋平台才是中
国网络围棋普及和发展
的出路。
目前国内的专业网络围棋平台,大致可分使用韩产软件和国
产软件两大类。国内
专业围棋平台的领军人物弈城、
TOM
,
便
是使用韩产软件的代表。两平台能够实现
中韩对垒的特性,为
他们吸引了不少高水平的棋手,并受到棋友的广泛认可。但他
们同样有一个死穴,就是两家皆为购买韩国软件,不掌握主动
权,因此根本无法保证
软件的及时更新,容易受制于韩方。“弈
城事件”便将这个致命缺点暴露无疑。
经典的围棋系统有:
Handtalk,Goemate,Wulu
,他是陈志行的作品,曾多 次获得过
冠军。在他的指导下一个研究小组编写了乌鹭
(WUIU)
,也在比赛中取得 过亚军。
Handtalk
是用汇编语言编写的,执行速度快,程序本身也不大。由于程序并不 大,可
以推侧出其所用到的模式资料也不多。
Handtalk
在大多数的情况下都不 会失误,作者
本人曾提到他是用到一种类似人类棋手在下围棋时常用到的手割法来帮助判断的。
Handtalk
与其它的程序明显不同的地方是它的攻杀能力特别强,在大多数的比赛中,
都 是通过吃掉对方几块棋而获胜。这是由于程序的棋块安危判断能力、形势判断能
力、眼位判断能力和模式 匹配能力都很强的关系
.
这些系统的好坏,跟设计者的棋力关
系很大。
2.1.1
围棋定义
围棋是人生的模拟。
开局时,盘上一片空白,就好像一个刚刚有了自觉意识的小孩,睁开了懵懂的双
眼,开始了自己的人生之 路。开局时,你可以有各种选择,自由度最大,走哪一步都
不会让你立刻输掉。
布局 基本上是兴趣的显示,有喜欢大模样的,那是寄希望于未来的做法;有现实
地捞空的;有顺应对方的思路 ,不知不觉中达到自己目的的;也有处处与对方作对,
即使自己不爽,也要给对方添堵的。
4
北
京
大
学
毕
业
设
计
由 于棋盘的广大,不可能面面俱到地行棋。过程中,对局者不断地在判断、取
舍,好像人生开始在选择自己 的道路了。看着这里想要,那里也想要,可是没法面面
俱到,终究只能选取一条路。有时候,你的招法对 路,越走越畅,有的时候就有问
题,想要的没要到,越下越添堵。
优势时,好比人生 得意时,心情很爽,最好一直就这么下去;劣势时,千方百计
寻找对手的破绽,伺机翻盘。心理毅力强的 人,总能把弦绷得紧紧的,一直像甲鱼一
样咬住对手;心理软弱的人,很早就放弃抵抗,认输投降。
优势时被对方翻盘了,就好像原本胜券在握的一件事情,被自己搞砸了,懊悔痛
恨都没有 用;大败的棋,忽然找到对手的漏勺又赢了回来,就好像本已被逼到绝境,
却又咸鱼翻生,大获全胜,心 情之爽,难以表达!
由于围棋的棋盘相对比较广大,过程也较反复,一盘棋下来,通常势均力 敌的对
手都会有不止一次的获胜机会。这种翻来覆去的体验,非常象人生经历的一种浓缩、
抽象 。人生,是不可重复的,因此在迈出想要尝试的一步时,有可能随之而来的,是
非常惨痛的代价。而围棋 的过程,可以让你在做出种种尝试后付出最少的代价--大
不了输一盘棋么?推掉再来就是了。
围棋还含有艺术、哲学的成份,以及创造世界的哲理。通过学习围棋,你不仅享
受到其中的乐趣 ,而且还会开拓一个更加美好的世界。
2.1.2
开发围棋的任务及目的
随着
Intemet
的普及, 网络游戏己经成为大家耳濡目染的新生事物。网络游戏从
出现到现在发展的时间很短,但是其发展速度却 非常之快。现在,可以说网络游戏已
经成为人们休闲、娱乐的有效方式。网络游戏种类很多,目前主要分 战略类、
RPG
类、棋牌类等几种,常见的棋牌类游戏有中国象棋、国际象棋、围 棋、桥牌、拱猪、
麻将等。网络游戏具有如下特征:
2.2
主要系统介绍
主要功能包括:
能实现联机对战
,
和单机版游戏对战。
开始游戏之后:
1
、用户双方自行选择白棋和黑棋。
2
、任何一方可以随时随地认输,游戏结束。
4
、要实现围棋最基本吃掉对方的法则。
此设计为本人原创作品。
其中包括:
源程序,
可执行程序,
论文,
录像,
使用说明。
(
1
)有一个或多个游戏服务器启动特定游戏服务;
5
北
京
大
学
毕
业
设
计
(
2
)游戏者到游戏网站下载客户端程序并申请游戏账号。然后启动客户端程序通
过某种 网络协议连接游戏服务器。
(
3
)
客户端负责处理客户端显示和操 作界面,
具有简单的逻辑处理功能力,
同时
负责接收发送与服务器端交互的数据包。
(
4
)服务 器程序负方处理服务器端逻辑、游戏逻辑、客户之间的网络信息传递,
以及数据库之间的数据读取保存工 作。
同时服务器端还要承担客户端数据的接收、
转发工作。
(5)
网络游戏常用的网络协议有
Internet
的
TCP / IP
协议、
适用于局域网
(如
红色警报联网等采用)的
IPX
协 议。
虽然目前很多围棋游戏正在运行,但是使用
java
平台开发的游戏少之又少,这就
使得围棋客户端的运行平台十分有限,不能满足今后发展的需求,如移动 客户端,
就基本上没有。因此开发一套基于
java
的围棋系统十分必要。
2.3
本章小结
这一章介绍了当前围棋应该具备的功能模块,
并提供了市面上比较流行的围棋系统
作为参考。在这一章中,我们可以了解什么是围棋系统,当前围棋系 统的市场需求,还
有一个围棋系统应该的开发目标。
6
北
京
大
学
毕
业
设
计
第
3
章
围棋对弈系统的设计
这一章时介绍开发 环境和用到的开发工具,
系统主要的功能设计,
系统的数据流程
图
。
3.1
系统需求分析
1.
设计流程
(
图
3-1)
图
3-1
设计流程图
7
北
京
大
学
毕
业
设
计
2.
运行流程
(
带流程图
3-2)
图
3-2
运行流程图
3.2
系统开发及运行环境
硬件平台:
惠普
6450B
软件平台:
操作系统:
Windows 7
旗舰版。
开发工具包:
JDK Version1.6.0_13 MyEclipse8.5
分辨率:最佳效果
1024
×
768
像素。
3.3
系统主要功能要求
系统设计目标如下:
主要功能包括:
1
、能够在局域网上实现多人在线对战。
2
、能够实现单机版游戏对战。
开始游戏之后:
1
、用户双方选择白棋和黑棋。
2
、任何一方可以随时随地认输,游戏结束。
3
、要实现围棋最基本吃掉对方的法则。
此设计为本站原创作品。
其中包括:
源程序,
可执行程序,
论文,
录像,
使用说明。
8
北
京
大
学
毕
业
设
计
3.4
系统总体结构
如图
3-3
系统功能结构图
图
3-3
系统功能结构图
private void jbInit() throws Exception
{
kground(new Color(236, 190, 98));
kground(new Color(236, 190, 98));
//
try
//
{
//
kAndFeel(temLookAndFeelClassName());
//
}catch(Exception e){tackTrace();}
izable(false);
new Thread(this).start();//
启动监听线程
=1976;
iative=false;//
是否主动连接
ag=false;//
是否继续监听的标志
m(
黑
m(
白
9
北
京
大
学
毕
业
设
计
LastPoint=new Point();
messagePoint=new Point();
e(470,450);
le(
围棋大战
制造者
:
郭欣
bled(false);//
开始之前屏蔽掉盘面
seListener(new dapter()
{
public void mouseClicked(MouseEvent e)
{
checkbox1_mouseClicked(e);
}
});
tPoint=ation();//
out(borderLayout1);
out(borderLayout2);
ckboxGroup(checkboxGroup1);
el(
单机
ckboxGroup(checkboxGroup1);
el(
联机
seListener(new dapter()
{
public void mouseClicked(MouseEvent e)
{
checkbox2_mouseClicked(e);
}
});
t(
对方地址
el(
连接
3.5
本章小结
< br>通过对围棋游戏的编写,使自己对
java
语言有了更深的了解。让我渐渐体会到了JAVA
的博大精深。以及怎么学习
JAVA
,怎么学习计算机语言,怎样对问题 进行解决和
运用
JAVA
GUI
,
查找
JAVA
API
的使用都用了更进一步的理解。
也更加熟悉和了解了
java
开发工 具
Eclipse
的使用
同时,
程序在编写完毕之后还有很多地方 需要完善。
例如:
可以把另一方选择为电
脑方,让电脑自动下,也可以给游戏添加背景 音乐;甚至可以修改成网络游戏,用户可
以在网上对战。
总之,
有很多地方可以扩充和 完善。
在此次设计过程中我也学到了许多
了关于计算机方面的知识,编程能力有了很大的提高。
10
北
京
大
学
毕
业
设
计
第
4
章
围棋对弈系统的具体实现
界面是系统之间最直接的交互界面
,
界面的友好性体现了软件设计的质量
,
并在很
大程度上决定了软件是否成功。
4.1
界面设计
系统主界面如图
4-1
(修改前)
,图
4-2
(修改后)< br>
图
4-1
主界面修改前
//
画棋盘
void paintChessboard(Graphics g,Point startPoint,int interval)
{
int pX=startPoint.x;
int pY=startPoint.y;
int LINELENGTH=interval*18;
int i;
for(i=0;i<19;i++)
11
北
京
大
学
毕
业
设
计
{
ne(pX+i*interval,pY
,pX+i*interval,pY+LINEL ENGTH);
ne(pX,pY+i*interval,pX+LIN ELENGTH,pY+i*interval);
}
al(pX+interval*3-3,pY+interval*3-3,( int)(interval-14),(int)(interval-14));
al(pX+interval*9 -3,pY+interval*3-3,(int)(interval-14),(int)(interv al-14));
< br>al(pX+interval*15-3,pY+interval*3-3,(int)(inter val-14),(int)(interval-14));
al(pX+interval*3-3,pY+inte rval*9-3,(int)(interval-14),(int)(interval-14));
al(pX+ interval*9-3,pY+interval*9-3,(int)(interval-14),(i nt)(interval-14));
al(pX+interval*15-3,pY+interval*9-3, (int)(interval-14),(int)(interval-14));
al(pX+interval*3 -3,pY+interval*15-3,(int)(interval-14),(int)(inter val-14));
al(pX+interval*9-3,pY+interval*15-3,(int)(inte rval-14),(int)(interval-14));
al(pX+interval*15-3,pY+int erval*15-3,(int)(interval-14),(int)(interval-14));
ct(pX-3,pY-3,366,366);
}
12
北
京
大
学
毕
业
设
计
图
4-2
主界面修改后
关键代码:
void initMyHash(Point startPoint,int interval)
{
One one;
Point key;
//
逻辑点标志
int i,j;
//
定义
i,j
for(i=1;i<=19;i++)
for(j=1;j<=19;j++)
//
循环
{
key=new Point(i,j);
one=new One();
//
创建对象
=startPoint.x+(i-1)*interval;//
相邻点处理,获取
=startPoint.y+(j-1)*interval;//
相邻点处理。获取
//
获取相邻点
round[0]=new Point(i,j-1);
//
上
round[1]=new Point(i,j+1);
//
下
round[2]=new Point(i-1,j);
//
左
round[3]=new Point(i+1,j);
//
右
13
北
京
大
学
毕
业
设
计
if(i==1)round[2]=;
//
左的周围
if(i==19)round[3]=;
//
右的周围
if(j==1)round[0]=;
//
上的周围
if(j==19)round[1]=;
//
下的周围
(key,one);
//
我的我的哈希表并且
在里键入关键字
}
}
//
更新盘面
public void paint(Graphics g)
{
Point startPoint=STARTPOINT;
//
创建对象,开始点
int interval=INTERVAL;
//
定义成员变量
hessboard(g,startPoint,interval);
//
棋盘的操作
hessman(g,startPoint,interval);
//
棋子的操作
}
//
画棋盘
4.2
输赢判断设计
中国规则又称数子规则,子空皆地,主要在春兰杯及中国国内使用。它 规定“双方
下子完毕的棋局,计算胜负采用数子法。
先将双方死子全部清理出盘外, 然后对一方
的活棋(包括活棋围住的点)以子为单位进行计数。
双方活棋之间的空点各得一半,
一个点即为一子。
胜负的基准以棋局总点数 的一半
180
又
1/2
点为归本数。凡一方活棋
与所属空点的总和大 于此数者为胜,小于此数者为负,等于此数者为和。
采用贴子方
式的棋局,胜负标准另行规定。
”
关于贴子的规定:
“
为了抵消黑方先手的效率,
现行全国性正式比 赛在终局计算胜
负时,黑方需贴出三又四分之三子。
”因此,黑
184
又1/4
,白
176
又
3/4
为双方分别
获胜的基数。简 言之
,
就黑方至少
185
以上方为获胜
,
反之白方胜
对终局有以下规定:
一、棋局下到双方一致确认着子完毕,为终局。
二、对局中,有一方中途认输,为终局。
关于终局判断的规定:
一、
除总则第七条的规定外,
凡比赛一方弃权或因各种原因被裁判员判负、
判 和的
对局,
也作终局处理。
二、双方确认的终局,确认的次序应是,先由轮走方,后是对方以异色棋子一枚放
14
北
京
大
学
毕
业
设
计
于已方
棋盘右下角的线外。
4.3
程序设计及调试运行
利用
JSP
“一次编写,各处 运行”的编程优点
,
按功能模块结构设计菜单
,
布置各明
细模块工作 界面,编写各个模块的程序代码,进行编译连接运行,经过反复调试修改,
以达到系统功能要求。
这个过程具有大量的工作量,
应仔细对每个程序细节进行分析思
考、编写程序并调试,做到程 序简洁清楚,尽量避免可能潜在的程序错误,并在必要的
地方加以注释,
以便于程序阅读和修改 。
每个
Java
源文件都包含一个单一的公共类或接
口。
若私有类和 接口与一个公共类相关联。
可以将它们和公共类放入同个源文件。
公共
类必须是这个文 件中的第一个类和接口。
4.4
本章小结
本章介绍了系统的具体实现和部分关键代码。
1.
一个新的系统,从页面到 数据库再到配置文件,建议统一使用
UTF-8
。
racterEncod ingFilter
只对
post
请求有效,
get
一律忽略。
3.
JavaScript
和
Ajax
乱码的避免,注意< br>JavaScript
默认是
ISO8859
的编码,避
免
J S/AJAX
乱码和
GET
一样,不要在
URL
里面使用中文,实 在避免不了,就只能在生
成链接的时候转码,绝对不能想当然的认为
SetCharacter EncodingFilter
会帮你做什
么事情。
4. 如果在本项目中采用了
get
方式提交请求并附加参数,结果导致编码乱码,原
因 是
Tomcat
默认请求编码是
ISO8859
,需要在
Tomca t
的配置文件
添加一
个参数,
URIEncoding=
”
UTF-8
”
,
这样请求中附件的参数就会以
UTF-8
来进行编码。
请求乱码
使用
Ajax
,
JS
也是默认使用
ISO8859
编码,所以在进行请求时
遇到中文参数需 要进行编码,
此类做到代码简洁清楚,
尽量避免可能潜在的程序错误如:
var
url
=
=sub
Trade
+
Id=
+
encodeURI() +
这里有两个地方需要注意 :第一个
地方是
encodeURI()
,方法,可以将参数进行转码,默认是转化为
UTF-8
,如果需要转
为其他码制,
需要在方法中添加第二个参数。
第二个地方是
()
,
由于
Ajax
有缓存机制,
在接受请 求的时候第一时间先判断该请求的地址是否被访问过,
如果被访
问过则
直接 使用缓存中的内容返回,这个东西很讨厌,客户在访问过一次出错后以后
每次出现的都是这个错误,所以在请求中给其增加一个时间戳,
只要可以随机生成一个
不同的字串就可以,保证
Ajax
每次都去访问服务器。
15
北
京
大
学
毕
业
设
计
第
5
章
结束语
围棋对弈系统的研究与实现为 进一步进行计算机博弈打下了一定的基础。
但该系统
目前仍有许多问题亟待解决,
例如 ,
对死活库的建立,
可以为将来系统进一步判断死活
打下基础,达到真正智能化,并进 一步实现“人
-
机”对弈。毋庸置疑,这是一个很有
研究价值的领域。
多次获得计算机围棋世界冠军的“手谈”开发者陈志行教授在《电脑围棋门径》中
提到了设计计算机 围棋的方法:
第一,
显示棋盘棋子及其他必须显示的内容;
设置黑白
选择、进 子及有关的功能。第二,设置计算和记录棋子串气数的功能,赋予提子和禁着
的功能。第三,设计一种函 数,表征每个棋子对周围的影响,用以划分势力范围,作为
静态形式判断的基础。
第四,
要对盘上各着点分别试进黑子和白子,
比较进子前后的静
态形势,
以估算该点的进子 价值,
成为着点选择的基本依据。
还要设置棋谱记录、
计时、
发声、显示形式 对比、计算胜负等功能。
“首先必需完成前两个部分,其次先解决后两
个部分
,
这样程序就算是基本会下棋了”。
围棋对弈系统的设计完成了前三个部分,
故本系 统下一步的工作要解决第四部分的
内容,
分别对棋局中的各点着黑子和白子,
并对落子 前后的静态局面形势进行比较,
进
而估算该点的着子价值,以此作为基本依据进行着点选择,其 中还包括算法优化问题,
以进一步提高系统的效率。
16
北
京
大
学
毕
业
设
计
参考文献
[1]
冯博
.Java
网络编程实例教程,清华 大学出版社,
,
2005.1
[2]
赵文靖编著
.Java
程序设计基础与上机指导
.
清华大学出版社,
2006
[3]
(美)
Rogers Cadenhead. Java
编程入门经典
.
梅兴文译
.
第
4
版
.
人民邮电出版社,
2007
[4]
(美)
Bruce Eckel
编
.《
Java
编程思想第
3
版》
.
机械工业出版社, 2005
[5]
陈国君等编著
.Java2
程序设计基础
.
清华大学出版社,
2006
[6]
朱喜福等编
.Java
程序设计
.
人民邮电出版社,
2005
[7]
(美)
Doug Lea
著
.Java
并发编程:设 计原则与模式
.
中国电力出版社译。
2004
[8]
李芝兴,杨瑞 龙编
.
《
Java
程序设计之网络编程》
.
清华大学出版社 ,
2006
[9]
赵越超
.
应用
JSP
技术开发
Web
应用程序
[J].
中国金融电脑
. 2002
[ 10]
王淑荣,赵晋松
,
范慧敏,白小军
.JSP
技术在
W EB
应用中的研究
[J].
西北电力技术
2003
[11]
Andrea Steelman, Joel Murach . Murach's Java Servlets and JSP [M]. 2011
.
[12]
Michael
Gehond.
Logic
Programming
and
Nonmonotonic
Reasoning
[M]
德
国
.Springer
Berlin/Heidelberg. 2007
[13]
Watts
D
Worlds.
The
dynamics
of
networks
between
order
and
randomness[P].America:
56A2579BB6, l999-05-13.
17
北
京
大
学
毕
业
设
计
致
谢
感谢行文至此,我的这篇论文已接近尾声;岁月如梭,我 四年的大学时光也即将敲响结束的钟
声。离别在即,站在人生的又一个转折点上,心中难免思绪万千,一 种感恩之情油然而生。生我者
父母。感谢生我养我,含辛茹苦的父母。是你们,为我的学习创造了条件; 是你们,一如既往的站
在我的身后默默的支持着我。没有你们就不会有我的今天。谢谢你们,我的父亲母 亲!
在这四年中,老师的谆谆教导、同学的互帮 互助使我在专业技术和为人处事方面都得到了很大
的提高。感谢软件学院在我四年的大学生活当中对我的 教育与培养,感谢太原理工大学软件的所有
专业老师,没有你们的辛勤劳动,
就没有我们今日的 满载而归,
感谢上海杰普软件公司对我的培养
,
感谢大学四年曾经帮助过我的所有同学 。在制作毕业设计过程中我曾经向老师们和同学们请教过不
少的问题,老师们的热情解答和同学们的热心 帮助才使我的毕业设计能较为顺利的完成。在此我向
你们表示最衷心的感谢。
18
北
京
大
学
毕
业
设
计
源代码
附
录
/*** **********************MainWindow****************** ****/
import .*;
//import .*;
import .*;
import .*;
import .*;
public class MainWindow extends Frame implements Runnable
{
Go panelGo=new Go();
Image myImage;
int PORT;
Socket sendSocket;//
主动连接
Socket
PrintWriter writer;//
用来发送
message
boolean stopFlag;
boolean isInitiative;
Point messagePoint;
Point goStartPoint=null;
Point yellowPoint=null;
boolean stepColor=true;
Point LastPoint=null;//
移除黄点时,判断位置变动
BorderLayout borderLayout1 = new BorderLayout();
Panel panel1 = new Panel();
Panel panel2 = new Panel();
BorderLayout borderLayout2 = new BorderLayout();
Panel panel3 = new Panel();
CheckboxGroup checkboxGroup1 = new CheckboxGroup();
Checkbox checkbox1 = new Checkbox();
Checkbox checkbox2 = new Checkbox();
Label label1 = new Label();
TextField textField1 = new TextField();
Button button1 = new Button();
Label label2 = new Label();
Choice choice1 = new Choice();
Button button2 = new Button();
GridLayout gridLayout1 = new GridLayout();
BorderLayout borderLayout3 = new BorderLayout();
19
北
京
大
学
毕
业
设
计
public MainWindow()
{
try
{
jbInit();
}
catch(Exception e)
{
tackTrace();
}
}
private void jbInit() throws Exception
{
kground(new Color(236, 190, 98));
kground(new Color(236, 190, 98));
//
try
//
{
//
kAndFeel(temLookAndFeelClassName());
//
}catch(Exception e){tackTrace();}
izable(false);
new Thread(this).start();//
启动监听线程
=1976;
iative=false;//
是否主动连接
ag=false;//
是否继续监听的标志
m(
黑
m(
白
LastPoint=new Point();
messagePoint=new Point();
e(470,450);
le(
围棋大战
制造者
:
郭欣
bled(false);//
开始之前屏蔽掉盘面
seListener(new dapter()
{
public void mouseClicked(MouseEvent e)
{
checkbox1_mouseClicked(e);
}
});
tPoint=ation();//
out(borderLayout1);
out(borderLayout2);
20
北
京
大
学
毕
业
设
计
ckboxGroup(checkboxGroup1);
el(
单机
ckboxGroup(checkboxGroup1);
el(
联机
seListener(new dapter()
{
public void mouseClicked(MouseEvent e)
{
checkbox2_mouseClicked(e);
}
});
t(
对方地址
el(
连接
ionListener(new Listener()
{
public void actionPerformed(ActionEvent e)
{
button1_actionPerformed(e);
}
});
t(
kground(new Color(236, 190, 98));
el(
开始
ionListener(new Listener()
{
public void actionPerformed(ActionEvent e)
{
button2_actionPerformed(e);
}
});
out(gridLayout1);
s(8);
umns(1);
p(100);
p(10);
out(borderLayout3);
e(500,70);
seMotionListener(new otionAdapter()
{
public void mouseMoved(MouseEvent e)
{
panelGo_mouseMoved(e);
}
21
北
京
大
学
毕
业
设
计
});
seListener(new dapter()
{
public void mouseClicked(MouseEvent e)
{
panelGo_mouseClicked(e);
}
});
dowListener(new Adapter()
{
public void windowClosing(WindowEvent e)
{
this_windowClosing(e);
}
});
kground(new Color(236, 190, 98));
(checkbox1, null);
(checkbox2, null);
(label1, null);
(textField1, null);
(button1, null);
(choice1, null);
(button2, null);
(label2, null);
(o,);
(panel3, );
(panel2, );
(panel1, );
eLink();//
废掉控件
//bled(false);//
废掉开始
ectedCheckbox(ox1);
Point=new Point(1000,1000);//
初始化一个世纪外的黄点
Window();
();
myImage=Image(16,16);//
用来纪录有黄点之前的图像
}
void centerWindow()
{
Dimension d=aultToolkit().getScreenSize();
int pX=(th())/2;
22
北
京
大
学
毕
业
设
计
int pY=(ght())/2;
ation(pX,pY);
}
public static void main(String args[])
{
MainWindow main=new MainWindow();
}
//
监听线程
public void run()
{
try
{
ServerSocket serverSocket=new ServerSocket(PORT);
Socket receiveSocket=null;
receiveSocket=();
if(iative)//
如果已在进行,则不接受连接
ag=true;
ectedCheckbox(ox2);//
自动选择联机
bled(false);
bled(true);
bled(false);
bled(false);
bled(false);
=new PrintWriter(putStream(),true);
BufferedReader
reader=new
BufferedReader(new
InputStreamReader(utStream()));
String message;
while(!ag)
{
ror(
接收连接成功
message=ne();
age(message);
}
();
();
();
}catch(IOException ioe){ror(
您赢了
}
//
处理接收到的东西
void doMessage(String message)
{
if(With(
判断开始
{
23
北
京
大
学
毕
业
设
计
ror(
开始了
if((
(
白
else
(
黑
if(ectedItem().equals (
黑
只要你是黑的,就先走
bled(true);
yColor();//
表明颜色
eLink();
}
else//
下子的信息
{
int color=nt(ing(0,1));
ePoint.x=nt(ing(1,3));
ePoint.y=nt(ing(3,5));
bled(true);//
解禁
(ePoint,color);
}
}
//
为鼠标定位
void panelGo_mouseMoved(MouseEvent e)
{
Point realPoint=nt();
Point mousePoint=sePoint(realPoint,tPoint);
LastMousePoint(int,mousePoint);
//int=mousePoint;
大错误,使对象公用了一个地址
int.x=mousePoint.x;
int.y=mousePoint.y;
if(e(mousePoint))
usePoint(mousePoint);
}
//
加黄点的范围
boolean isPlace(Point p)
{
if(p.x>19||p.x<1||p.y<1||p.y>19)
return false;
int color;
One one;
one=(One)((p));
color=;
if(color!=0)
return false;
24
北
京
大
学
毕
业
设
计
return true;
}
void panelGo_mouseClicked(MouseEvent e)
{
if(le())
{
le();
}
else
{
iple();
}
}
//
开始
void button2_actionPerformed(ActionEvent e)
{
if(ionCommand().equals(
开始
{
eLink();
bled(false);
bled(false);
el(
退出
if(le())
bled(true);
else//
联机版时
{
if(ectedItem().equals(
黑
{
n(
}
else
n(
}
yColor();//
表明颜色
}
else if(ionCommand().equals(
退出
{
e();
(0);
}
}
//disable
联机时用的控件
void disableLink()
25
北
京
大
学
毕
业
设
计
{
kground(new Color(236, 190, 98));
bled(false);
bled(false);
bled(false);
}
//enable
联机时的控件
void enableLink()
{
kground();
bled(true);
bled(true);
bled(true);
}
//
判断类型
boolean isSingle()
{
return te();
}
void single()
{
}
void multiple()
{
}
//
加小黄点
void showMousePoint(Point mousePoint)
{
Graphics g=phics();
or();
al(mousePoint.x* 20-6,mousePoint.y*20-6,
AL-8,
AL-8);
Point.x=mousePoint.x;//
定位黄点
Point.y=mousePoint.y;
Graphics myG=phics();
MyImage(myG
,Point,0);
}
//
消除前一个黄点
void removeLastMousePoint(Point thatPoint,Point thisPoint)
{
if(thatPoint.x!= thisPoint.x||thatPoint.y!=thisPoint.y)
{
26
北
京
大
学
毕
业
设
计
Graphics g=phics();
if(Point!=null&&e!=null)
age(e,Point.x*20-8,Point.y*20-8,16,1 6,null)
;
Point.x=1000;//
不在范围内,就一边去
Point.y=1000;
}
}
//
构成所需要的
Image
void createMyImage(Graphics g,Point thisPoint,int color)
{
int px=thisPoint.x;
int py=thisPoint.y;
Color myColor=kground();
if(px==1&&py==1&&color==0)//
四个角
{
or(myColor);
ct(0,0,16,16);
or();
ne(8,8,8,16);
ne(5,5,5,16);
ne(8,8,16,8);
ne(5,5,16,5);
}
else if(px==1&&py==19&&color==0)
{
or(myColor);
ct(0,0,16,16);
or();
ne(8,8,8,0);
ne(8,8,16,8);
ne(5,11,16,11);
ne(5,11,5,0);
}
else if(px==19&&py==1&&color==0)
{
or(myColor);
ct(0,0,16,16);
or();
ne(8,8,8,16);
ne(8,8,0,8);
ne(11,5,11,16);
27