人机对弈五子棋游戏
玛丽莲梦兔
857次浏览
2021年01月27日 22:17
最佳经验
本文由作者推荐
大学生网络购物-大学生座谈会发言稿
课程设计
(
论文
)
任务书
学
院
专
业
班
一、课程设计
(
论文
)
题目:
人机对弈五子棋游戏
二、课程设计
(
论文
)
工作:
三、课程设计
(
论文
)
地点
:
四、课程设计
(
论文
)
内容要求:
1
.本课程设计的目的
(
1
)使学生掌握软件开发的基本工作流程;
(
2
)巩固
JAVA
程序设计课程所学的内容;
(
3
)培养学生的计算机思维能力以及合作的精神;
(
4
)培养学生分析、解决问题的能力;
(
5
)提高学生的科技论文写作能力。
2
.课程设计的任务及要求
1
)基本要求:
(
1
)研究课程设计任务,并进行系统需求分析;
(
2< br>)对系统进行总体设计,分解系统功能模块,进行任务分配,以实现分工合作;
(
3
)实现各功能模块代码;
(
4
)系统组装,测试、完善系统。
2
)创新要求:
在基本要求达到后,可进行创新设计,如改进界面、增加功能或进行代码优化。
3
)课程设计论文编写要求
(
1
)要按照书稿的规格打印誊写课程设计论文
(
2
)论文包括封面、设计任务书(含评语)、摘要、目录、设计内容、设计小结
(
3
)论文装订按学校的统一要求完成
4
)参考文献:
(
1
)丁振凡
,
《JAVA
语言程序设计》
,
清华大学出版社
(
2)丁振凡
,
《
JAVA
语言程序设计实验指导与习题解答》
,< br>清华大学出版社
(
3
)
/
5
)课程设计进度安排
内容
天数
地点
系统总体设计
1
实验室
软件设计及调试
1
实验室
答辩及撰写报告
1
实验室、图书馆
学生签名:
2015
年
6
月
25
日
课程设计
(
论文
)
评审意见
(
1
)
课程设计过程(
20
分):优(
)、良(
)、中(
)、一般(
)、差
(
);
(
2
)
是否完成调试,系统运行效果(
30
分):优(
)、良(
)、中(
)、
一般(
)、差(
);
(
3
)回答问题(
20
分):优(
)、良(
)、中(
)、一般(
)、差(
);
(
4
)课程设计报告(
30
分):优(
)、良(
)、中(
)、一般(
)、差
(
);
(
5
)格式规范性及考勤是否降等级:是(
)、否(
)
评阅人
:
职称
:教授
2015
年
6
月
25
日
人机对弈五子棋游戏设计
摘要:
近些年来五子棋游戏成为了人们 的最爱,
游戏的下载量很高可以说一直排
在前几位,
也是人们日常生活中放松娱乐的最 爱,
特别是最近
IT
行业的发展,
人工智能的实现,
移动客户端的发 展和普及为我们五子棋游戏的发展带来了新
的生机,
新的高潮,
人工智能与五子棋的完 美结合是五子棋的又一项重要发展,
而我们现在开发的人机对弈更是掀起了五子棋发展的新篇章,
为五子棋的发展
与传播提供了新的机会,
但是机会与挑战并存,
我们相信通过我们对 五子棋程
序的不断优化和完善,五子棋一定会越来越受到大家的欢迎。
本次课程设计 要求利用
Java
语言设计出一个人机对弈五子棋游戏,
能实现人机对弈五子棋。了解 五子棋对弈规则后,利用本学期所学的
Java
高级图形界面编程方法的知识,
并通过 穷举法,
考虑八个方向连成
五子的几率高低,
让计算机具有人工智能,
成功设 计出人机对弈五子棋
的游戏。除了人机对弈的功能,我们还增加了人人对战的功能。这项功
能使 得人与人之间能够互下五子棋,
不仅仅是人与计算机对弈。除此之
外,还增加了再来一局、认输 、悔棋、退出游戏的功能,为了让游戏功
能更加丰富,还增加了棋盘、模式、外观三个菜单栏供用户选择 相应功
能的菜单项。
目录
1
、课程设计的目的及目标
.................................. 1
1.1
课程设计的目的
......................................... 1
1.2
课程设计的目标
......................................... 1
2
、概要设计
............................................
1
2.1
开发工具及环境
......................................... 1
2.2
任务及需求分析
......................................... 1
2.3
工作原理
............... ................................ 1
3
、具体实现
............................................
2
3.1
类设计
............ ..................................... 2
4
、运行调试与分析讨论
..................................
3
5
、设计体会与小结
.....................................
10
6
、参考文献
...........................................
10
附录:(源程序)
......................................
10
1
、课程设计的目的及目标
1.1
课程设计的目的:
< br>本次课程设计的目的是为了让学生使用
java
语言编程的知识,通
过编写一个 简单的五子棋游戏,检验一个学期以来学习
java
语言的收
获成果
,
以及检查自己在学习
java
语言的过程中的漏洞来弥补不足,
以
便以后更 好、更熟练地使用
java
语言来编写方便、娱乐生活的程序。
1.2
课程设计的目标:
本次课程设计所要求的五子棋游戏应达到以下几方面的要求
:
1.
运行程序后即刻出现棋盘并可以开始下棋;
2.
先手为黑棋,后手为白棋;人为先手,计算机为后手;
3.
程序能响应鼠标点击并在相应位置画出棋子;
4.
计算机具有一定的智能,能够与人进行五子棋对弈;
5.
程序可以正确判断出局面的胜负情况并及时报出结果,终止棋局;
6.
尽可能实现人人对战功能。
2
、概要设计
2.1
开发工具及环境
文本编辑器:记事本;
运行环境:命令提示符(
DOS
环境)。
2.2
任务及需求分析
设计人机对弈五子棋程序,实现人与计算机进行五子棋对弈,具体任务如下:
(
1
)棋盘布局设计;
(
2
)计算机下子的算法分析;
(
3
)编程实现 棋子的绘制以及具体的再来一局、认输、悔棋、退出游戏等功能;
(
4
)运行测试程序,调试纠正运行错误。
2.3
工作原理
(
1
)工作过程
运行程序后,首先出 现五子棋游戏窗体,用户点击游戏菜单项,出现相关子菜单,选择模
式子菜单中的人机对弈便可进入人机 对弈模式。
然后移动鼠标,
在窗体的棋盘上点击鼠标下子,
即可在棋盘中相应位置显示 下的对应棋子。接下来计算机会根据用户下的棋,采取穷举法选择
八个方向上赢面最大的位置下子,用户 与计算机谁先达到五子连成一线,谁便是获胜方。若选
择模式子菜单中的人人对战便可进入人人对战模式 。两个用户可同时玩游戏,同样谁先达到五
子连成一线,谁便是获胜方。若下棋过程中,双方中有一方要 认输,便可选择游戏菜单项中的
认输按钮,认输的一方显然失败,另外一方获胜。若双方中有一方要悔棋 ,便可选择游戏菜单
项中的悔棋按钮,经过对方的同意后,才能够重新翻盘,再来一局。若双方势均力敌 ,可选择
1
游戏菜单项中的棋盘子菜单,点击大号棋盘或超大号棋盘,以便避免棋 盘空间不足造成无法分
出胜负的情况。若觉得窗体外观不太美观,可选择外观菜单中的三个选项进行选择 。为了显示
程序的相关制作信息,程序提供了版本菜单进行显示。具体功能实现见第四章节图。
(
2
)工作原理
利用图形界面编程实现,利用到的知识点包括:
窗体的创建和应用界面布局;
事件处理,包括按钮的动作事件处理,鼠标事件,窗体事件;
接口知识:事件处理中通过接口约束事件监听者必须实现相应接口中定义的方法;
流程控制语句:通过条件判断区分不同事件源,作不同操作处理。
3
、
具体实现
3.1
类设计
(1)
类名:
ChessFrame
作用:创建五子棋游戏主窗体和菜单。
该类继承
JFrame
类< br>,
实现
ActionListener
接口。
类中含有的方法介绍:
ChessFrame()
构造方法:构造五子棋游戏的主窗体;
makeMenu()
方法:构造五子棋游戏的主菜单;
makeMenuItem()
方法:构造五子棋游戏的菜单项;
makeRadioButtonMenuItem()
方法:构造五子 棋游戏的单选按钮式菜单项。
(2)
类名:
ChessModel 作用:规定棋盘的宽度、高度、棋盘的模式;规定棋盘方格的横向、纵向坐标、棋盘方格的横
向、纵 向坐标所对应的棋子颜色;并且规定了记录棋盘棋子信息数组
arrMapShow
只有
4
个值:
1
,
2
,
3
,
-1
, 其中
1
代表该棋盘方格上下的棋子为黑子,
2
代表该棋盘方格上下的棋子为白 子,
3
代
表为该棋盘方格上没有棋子,
-1
代表该棋盘方格不能够下 棋子;
定义了交换棋手的标识符
isOdd
,
棋盘方格上是否有棋子的标识符
isExist
。
类中含有的主要方法介绍:
ChessModel()
构造方法:根据不同的棋盘模式(
m odeChess
)来构建对应大小的棋盘;
badxy()
方法:判断下子的横向、纵向坐标是否越界;
readyplay()
方法:判断该坐标位置是否可下棋子;
play()
方法:在该坐标位置下棋子;
comp uterDo()
方法:用穷举法判断每一个坐标点的八个方向的的最大棋子数,最后得
出棋子 数最大值的坐标,计算机再下子(这八个方向分别是:左、右、上、下、左上、
左下、右上、右下);< br>
checkMax()
方法:计算棋盘上某一方格上八个方向棋子的最大值;
showSuccess()
方法:赢棋后的提示;
showDefeat()
方法:输棋后的提示。
(3)
类名:
MainPanel
作用:
1
、构建一个面板,在该面板上画上棋盘;
2
、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等);
该类继承
JPanel
类
,
实现
MouseListene r
、
MouseMotionListener
接口。
2
类中含有的主要方法介绍:
paintComp onent()
方法:根据坐标计算出棋盘方格棋子的信息(如白子还是黑子),
然后调用draw
方法在棋盘上画出相应的棋子;
mousePressed
()
方法:响应鼠标的点击事件,根据鼠标的点击来下棋 ,根据下棋判断
胜负等;
mouseMoved()
方法:响应鼠标的拖动事件。
(4)
类名:
FiveChessAppletDemo
作用:显示五子棋游戏窗体。
类中含有的方法介绍:
main()
方法:程序运行的入口,创建了
ChessFrame
类的一个 实例对象(
cf
),并启动
屏幕显示显示该实例对象。
(5)
类名:
ChessWindowEvent
作用:响应退出窗口。
类中含有的方法介绍:
windowClosing()
方法:处理窗口关闭;
ChessWindowEvent ()
构造方法:提供无参构造方法。
4
、运行调试与分析讨论
图
4-1
人机对弈模式选择界面
3
图
4-2
人机对弈界面
图
4-3
结果信息显示界面
4
图
4-4
人人对战模式选择界面
图
4-5
悔棋界面
图
4-6
悔棋提示界面
5
图
4-7
悔棋后棋盘清空提示界面
图
4-8
悔棋后棋盘清空界面
6
图
4-9
认输界面
图
4-10
认输提示界面
7
图
4-11
认输后结果信息界面
图
4-12
棋盘选择界面
8
图
4-13
外观类型选择界面
图
4-14
版本选择界面
9