java课程设计人机对弈五子棋.docx
- 文档编号:26544594
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:42
- 大小:488KB
java课程设计人机对弈五子棋.docx
《java课程设计人机对弈五子棋.docx》由会员分享,可在线阅读,更多相关《java课程设计人机对弈五子棋.docx(42页珍藏版)》请在冰豆网上搜索。
java课程设计人机对弈五子棋
《Java程序设计》
课程设计报告
学院:
理学院
班级:
—
姓名:
学#:
指导教师:
课设时间:
2015-06-23至2015-06-25
二0—五年六月二十五日
课程设计(论文)任务书
理学院信息与计算科学专业2012-2班
_、课程设计(论文)题目:
人机对弈五子棋游戏
二、课程设计(论文)工作:
自2015年6月23日起至2015年6月25日止
三、课程设计(论文)地点:
5Z205
四、课程设计(论文)内容要求:
1.本课程设计的目的
(1)使学生掌握软件开发的基本工作流程;
(2)巩固JAVA程序设计课程所学的内容;
(3)培养学生的计算机思维能力以及合作的精神;
(4)培养学生分析、解决问题的能力;
(5)提高学生的科技论文写作能力。
2.课程设计的任务及要求
1)基本要求:
(1)研究课程设计任务,并进行系统需求分析;
(2)对系统进行总体设计,分解系统功能模块,进行任务分配,以实现分工合作;
(3)实现各功能模块代码;
(4)系统组装,测试、完善系统。
2)创新要求:
在基本要求达到后,可进行创新设计,如改进界面、增加功能或进行代码优化。
3)课程设计论文编写要求
(1)要按照书稿的规格打印眷写课程设计论文
(2)论文包括封面、设计任务书(含评语)、摘要、目录、设计内容、设计小结
(3)论文装订按学校的统一要求完成
4)参考文献:
(1)丁振凡,《JAVA语言程序设计》,清华大学出版社
(2)丁振凡,《JAVA语言程序设计实验指导与习题解答》,清华大学出版社
(3)http:
//cai.ecjtu.
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课程设计的目的:
本次课程设计的口的是为了让学生使用九眩语言编程的知识,通
过编写一个简单的五子棋游戏,检验一个学期以来学习java语言的收
获成果,以及检查自己在学习java语言的过程中的漏洞来弥补不足,以
便以后更好、更熟练地使用java语言来编写方便、娱乐生活的程序。
1.2课程设计的目标:
本次课程设计所要求的五子棋游戏应达到以下儿方面的要求:
1.运行程序后即刻出现棋盘并可以开始下棋;
2.先手为黑棋,后手为白棋;人为先手,计算机为后手;
3.程序能响应鼠标点击并在相应位置画出棋子;
4.计算机具有一定的智能,能够与人进行五子棋对弈;
5.程序可以正确判断岀局面的胜负情况并及时报出结果,终止棋局;
6.尽可能实现人人对战功能。
2、概要设计
2.1开发工具及环境
文本编辑器:
记事本:
运行环境:
命令提示符(DOS环境)。
2.2任务及需求分析
设计人机对弈五子棋程序,实现人与计算机进行五子棋对弈,具体任务如下:
(1)棋盘布局设计;
(2)计算机下子的算法分析:
(3)编程实现棋子的绘制以及具体的再来一局、认输、悔棋、退出游戏等功能;
(4)运行测试程序,调试纠正运行错误。
2.3工作原理
(1)工作过程
运行程序后,首先岀现五子棋游戏窗体,用户点击游戏菜单项,出现相关子菜单,选择模式子菜单中的人机对弈便可进入人机对弈模式。
然后移动鼠标,在窗体的棋盘上点击鼠标下子,即可在棋盘中相应位苣显示下的对应棋子。
接下来计算机会根据用戸下的棋,采取穷举法选择八个方向上赢面最大的位置下子,用戸与il•算机谁先达到五子连成一线,谁便是获胜方。
若选择模式子菜单中的人人对战便可进入人人对战模式。
两个用户可同时玩游戏,同样谁先达到五子连成一线,谁便是获胜方。
若下棋过程中,双方中有一方要认输,便可选择游戏菜单项中的认输按钮,认输的一方显然失败,另外一方获胜。
若双方中有一方要悔棋,便可选择游戏菜单项中的悔棋按钮,经过对方的同意后,才能够重新翻盘,再来一局。
若双方势均力敌,可选择游戏菜单项中的棋盘子菜单,点击大号棋盘或超大号棋盘,以便避免棋盘空间不足造成无法分出胜负的情况。
若觉得窗体外观不太美观,可选择外观菜单中的三个选项进行选择。
为了显示程序的相关制作信息,程序提供了版本菜单进行显示。
具体功能实现见第四章节图。
(2)工作原理
利用图形界而编程实现,利用到的知识点包括:
□窗体的创建和应用界而布局:
□事件处理,包括按钮的动作事件处理,鼠标事件,窗体事件;
□接口知识:
事件处理中通过接口约朿事件监听者必须实现相应接口中左义的方法;
□流程控制语句:
通过条件判断区分不同事件源,作不同操作处理。
3、具体实现
3.1类设计
(1)类名:
ChessFrame
作用:
创建五子棋游戏主窗体和菜单。
该类继承JFrame类,实现ActionListener接口。
类中含有的方法介绍:
□ChessFrame()构造方法:
构造五子棋游戏的主窗体;
□makeMenu()方法:
构造五子棋游戏的主菜单:
□makeMenuItemO方法:
构造五子棋游戏的菜单项;
□makeRadioButtonMenuItem()方法:
构造五子棋游戏的单选按钮式菜单项。
⑵类名:
ChessModel
作用:
规左棋盘的宽度、高度、棋盘的模式;规左棋盘方格的横向、纵向坐标、棋盘方格的横向、纵向坐标所对应的棋子颜色:
并且规左了记录棋盘棋子信息数组arrMapShow只有4个值:
1,2,3,-1,英中1代表该棋盘方格上下的棋子为黑子,2代表该棋盘方格上下的棋子为白子,3代表为该棋盘方格上没有棋子,-1代表该棋盘方格不能够下棋子:
泄义了交换棋手的标识符isOdd,棋盘方格上是否有棋子的标识符isExist0
类中含有的主要方法介绍:
□ChessModel()构造方法:
根据不同的棋盘模式(modeChess)来构建对应大小的棋盘:
□badxyO方法:
判断下子的横向、纵向坐标是否越界:
□readyplay0方法:
判断该坐标位置是否可下棋子;
□play0方法:
在该坐标位置下棋子:
□computerDo()方法:
用穷举法判断每一个坐标点的八个方向的的最大棋子数,最后得出棋子数最大值的坐标,计算机再下子(这八个方向分别是:
左、右、上、下、左上、左下、右上、右下):
□checkMax()方法:
计算棋盘上某一方格上八个方向棋子的最大值:
□showSuccess()方法:
赢棋后的提示:
□showDefeat0方法:
输棋后的提示。
(3)类名:
MoinPanel
作用:
1、构建一个而板,在该面板上画上棋盘;
2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等):
该类继承JPanel类,实现MouseListener、MouseMotionListener接口。
类中含有的主要方法介绍:
□paintComponent0方法:
根据坐标计算出棋盘方格棋子的信息(如白子还是黑子),然后调用draw方法在棋盘上画出相应的棋子:
□mousePressed()方法:
响应鼠标的点击事件,根据鼠标的点击来下棋,根据下棋判断胜负等:
□mouseMovedO方法:
响应鼠标的拖动事件。
⑷类名:
FiveChessAppletDemo
作用:
显示五子棋游戏窗体。
类中含有的方法介绍:
□mainO方法:
程序运行的入口,创建了ChessFrame类的一个实例对彖(cf),并启动屏幕显示显示该实例对象。
⑸类名:
ChessWindowEvent
作用:
响应退出窗口。
类中含有的方法介绍:
□windowClosing0方法:
处理窗口关闭;
□ChessWindowEvent()构造方法:
提供无参构造方法。
4、运行调试与分析讨论
[£五子棋艇•I口丨…IfciSW
图人机对弈模式选择界面
ffi五子棋碾I——I
游戒外观版本
图4-2人机对弈界面
图4-3结果信息显示界面
|>|五子棋艇•L^_L__lte&fil
游我夕卜观版本
再来一局
棋盘►
檯式►
@人机对弈
认输
O人人对战]
悔棋
遍出
图卜4人人对战模式选择界血
旦五子棋碾
五子棋碾
o回|右i
游我外观版本
五子棋碾
消慝〔・心
①讯方同意悔棋决定,棋盘清空!
请维续•“
确定
图4-7悔棋后棋盘淸空提示界血
回五子棋濒L^J_MM
游戒外观版本
国五子棋槻■1=[回L羽J
游戒外观版本
ffi五子棋碾II
游戒外观版本
|■■人|小』AAI小・
①游戒结束,黒方认输,白方我胜!
确定
图「11认输后结果信息界面
12五子棋槻_gj—ifcfiw
图4-12棋盘选择界面
ffi五子棋槻1=]
图仆13外观类型选择界ifti
Hl五子棋濒L^J
图4-14版本选择界面
i□@IS_I
游戒外观版本
图4-15版木信息介绍界面
5、设计体会与小结
通过独立完成五子棋对弈系统的后,发现自己在进行软件开发方面提高不少,同时积极利用所学到的新技术用于自己的设计开发过程。
另外,在整个开发的过程中,时间也比较仓促。
因此,该系统必然会存在一些缺陷和不足。
如:
没有讨论五子棋禁手的问题。
另一个就是电脑按即左的算法去与玩家下子。
这种算法有“固怎”O不太会变,玩家若是仔细观察,可以掌握其规律。
还有就是界面不是很华丽有待改进。
尽管本系统存任着很多不足,但其实现了最重要的功能就是有人工智能。
这也让我对计算机中的人工智能领域有一上的了解•:
另一个就在做系统的过程中,我学到了Java的一些基本结构,还有就是对于Java有更深一步的认识。
6、参考文献
[11丁振凡,《JAVA语言程序设计》,淸华大学出版社.
⑵丁振凡,《JAVA语言程序设讣实验指导与习题解答》,淸华大学出版社.
[3]CharlesPetzold.Windows程序设计.北京大学岀版社,2002.
[4]陈明,《Java语言程序设计》,淸华大学岀版社.
附录:
(源程序)
importjava・awt・*;
importjava・awt.event・*;
importjavax・swing・*;
classChessFrameextendsJFrameimplementsActionListener{privateString[]strsize={"标准棋盘","大号棋盘","超大号棋盘"};privateString[]strmode=C"人机对弈","人人对战"};
publicstaticbooleaniscomputer=true,checkcomputer=true:
privateintwidth,height;
privateChessModelcm;
privateMainPanelmp;
publicChessFrame0{
this.setTitle("五子棋游戏");
cm=newChessModel
(1);
mp=newMainPanel(cm);
Containercon=this・getContentPane0;
con・add(mp,"Center");
this・setResizable(false);
this・addWindowListener(newChessWindowEvent0);
MapSize(14,14);
JMenuBarmbar=newJMenuBar0;
this・setJMenuBar(mbar);
JMenugameMenu=newJMenuC^游戏”);
mbar・add(makeMenu(gameMenu,newObject[j{
"再来一局",null,"棋盘",null,"模式",null,"认输",null,"悔棋",null,"退岀"},this));
JMenulookMenu=newJMenu("外观");
mbar.add(makeMenu(lookMenu,newObject{"类型一"、"类型二:
"类型三this));
JMenuhelpMenu=newJMenu版本”);
mbar・add(makeMenu(helpMenu,newObject[J{"关于this));
}
publicJMenumakeMenu(Objectparent,Objectitems[],Objecttarget){
JMenum=null;
if(parentinstanceofJMenu)
m=(JMenu)parent;
elseif(parentinstanceofString)
m=newJMenu((String)parent);
else
returnnull;
for(inti=0;i if(itemsti]==null) m.addSeparator0; elseif(itemsti]="棋盘"){ JMenujm=newJMenu("棋盘"); ButtonGroupgroup=newButtonGroupO; JRadioButtonMenuItemrmenu; for(intj=0;j rmenu=makeRadioButtonMenuItem(strsizeLjl,target); if(j==0) rmenu・setSelected(true); jm.add(rmenu); group・add(rmenu); } m・add(jm); }elseif(itemsEi]="模式"){ JMenujm=newJMenuC模式”); ButtonGroupgroup=newButtonGroupO; JRadioButtonMenuItemrmenu; for(inth=0;h if(h==0) rmenu・setSelected(true); jm.add(rmenu); group・add(rmenu); } m・add(jm); }else m.add(makeMenuItem(iterns[i],target)); returnm; } publicJMenuItemmakeMenuItem(Objectitem,Objecttarget){JMenuItemr=null; if(iteminstanceofString) r=newJMenuItem((String)item); elseif(iteminstanceofJMenuItem) r=(JMenuItem)item; else returnnull; if(targetinstanceofActionListener) r.addActionListener((ActionListener)target); returnr; } publicJRadioBu11onMenuItemmakeRadioBu11onNIenu11em( Objectitem,Objecttarget){ JRadioBu11onMenuItemr=null; if(iteminstanceofString) r=newJRadioButtonMenuItem((String)item); elseif(iteminstanceofJRadioBu11onMenu11em) r=(JRadioButtonMenuItem)item; else returnnull; if(targetinstanceofActionListener) r.addActionListener((ActionListener)target); returnr; } publicvoidMapSize(intw,inth){ setSize(w*24,h*27); if(this・checkcomputer) this・iscomputer二true; else this・iscomputer二false; mp.setModel(cm); mp.repaint0; } publicbooleangetiscomputer(){ returnthis・iscomputer; } publicvoidrestart(){ intmodeChess=cm.getModeChess0; if(modeChess<=3&&modeChess>=0){ cm=newChessModel(modeChess); MapSize(cm・getWidth0,cm.getHeight0); } } publicvoidactionPerformed(ActionEvente){ Stringarg=e・getActionC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课程设计 人机 对弈 五子棋
![提示](https://static.bdocx.com/images/bang_tan.gif)