课程设计论文任务书.docx

上传人:b****5 文档编号:4443947 上传时间:2022-12-01 格式:DOCX 页数:35 大小:321.41KB
下载 相关 举报
课程设计论文任务书.docx_第1页
第1页 / 共35页
课程设计论文任务书.docx_第2页
第2页 / 共35页
课程设计论文任务书.docx_第3页
第3页 / 共35页
课程设计论文任务书.docx_第4页
第4页 / 共35页
课程设计论文任务书.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

课程设计论文任务书.docx

《课程设计论文任务书.docx》由会员分享,可在线阅读,更多相关《课程设计论文任务书.docx(35页珍藏版)》请在冰豆网上搜索。

课程设计论文任务书.docx

课程设计论文任务书

课程设计(论文)任务书

理学 院  信息与计算科学专 业2012-2 班

一、课程设计(论文)题目:

 人机对弈五子棋游戏  

二、课程设计(论文)工作:

自2015年6月23日起至2015年6月25日止

三、课程设计(论文)地点:

5-205

四、课程设计(论文)内容要求:

1.本课程设计的目的

(1)使学生掌握软件开发的基本工作流程;

(2)巩固JAVA程序设计课程所学的内容;

(3)培养学生的计算机思维能力以及合作的精神;

(4)培养学生分析、解决问题的能力;

(5)提高学生的科技论文写作能力。

2.课程设计的任务及要求

1)基本要求:

(1)研究课程设计任务,并进行系统需求分析;

(2)对系统进行总体设计,分解系统功能模块,进行任务分配,以实现分工合作;

(3)实现各功能模块代码;

(4)系统组装,测试、完善系统。

2)创新要求:

在基本要求达到后,可进行创新设计,如改进界面、增加功能或进行代码优化。

3)课程设计论文编写要求

(1)要按照书稿的规格打印誊写课程设计论文

(2)论文包括封面、设计任务书(含评语)、摘要、目录、设计内容、设计小结

(3)论文装订按学校的统一要求完成

4)参考文献:

(1)丁振凡,《JAVA语言程序设计》,清华大学出版社

(2)丁振凡,《JAVA语言程序设计实验指导与习题解答》,清华大学出版社

(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课程设计的目的:

本次课程设计的目的是为了让学生使用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)工作过程

运行程序后,首先出现五子棋游戏窗体,用户点击游戏菜单项,出现相关子菜单,选择模式子菜单中的人机对弈便可进入人机对弈模式。

然后移动鼠标,在窗体的棋盘上点击鼠标下子,即可在棋盘中相应位置显示下的对应棋子。

接下来计算机会根据用户下的棋,采取穷举法选择八个方向上赢面最大的位置下子,用户与计算机谁先达到五子连成一线,谁便是获胜方。

若选择模式子菜单中的人人对战便可进入人人对战模式。

两个用户可同时玩游戏,同样谁先达到五子连成一线,谁便是获胜方。

若下棋过程中,双方中有一方要认输,便可选择游戏菜单项中的认输按钮,认输的一方显然失败,另外一方获胜。

若双方中有一方要悔棋,便可选择游戏菜单项中的悔棋按钮,经过对方的同意后,才能够重新翻盘,再来一局。

若双方势均力敌,可选择游戏菜单项中的棋盘子菜单,点击大号棋盘或超大号棋盘,以便避免棋盘空间不足造成无法分出胜负的情况。

若觉得窗体外观不太美观,可选择外观菜单中的三个选项进行选择。

为了显示程序的相关制作信息,程序提供了版本菜单进行显示。

具体功能实现见第四章节图。

(2)工作原理

利用图形界面编程实现,利用到的知识点包括:

❑窗体的创建和应用界面布局;

❑事件处理,包括按钮的动作事件处理,鼠标事件,窗体事件;

❑接口知识:

事件处理中通过接口约束事件监听者必须实现相应接口中定义的方法;

❑流程控制语句:

通过条件判断区分不同事件源,作不同操作处理。

...介绍还不够细,如何表示棋盘上棋子的状态没涉及

3、具体实现

3.1类设计

(1)类名:

ChessFrame

作用:

创建五子棋游戏主窗体和菜单。

该类继承JFrame类,实现ActionListener接口。

类中含有的方法介绍:

❑ChessFrame()构造方法:

构造五子棋游戏的主窗体;

❑makeMenu()方法:

构造五子棋游戏的主菜单;

❑makeMenuItem()方法:

构造五子棋游戏的菜单项;

❑makeRadioButtonMenuItem()方法:

构造五子棋游戏的单选按钮式菜单项。

(2)类名:

ChessModel

作用:

规定棋盘的宽度、高度、棋盘的模式;规定棋盘方格的横向、纵向坐标、棋盘方格的横向、纵向坐标所对应的棋子颜色;并且规定了记录棋盘棋子信息数组arrMapShow只有4个值:

1,2,3,-1,其中1代表该棋盘方格上下的棋子为黑子,2代表该棋盘方格上下的棋子为白子,3代表为该棋盘方格上没有棋子,-1代表该棋盘方格不能够下棋子;定义了交换棋手的标识符isOdd,棋盘方格上是否有棋子的标识符isExist。

类中含有的主要方法介绍:

❑ChessModel()构造方法:

根据不同的棋盘模式(modeChess)来构建对应大小的棋盘;

❑badxy()方法:

判断下子的横向、纵向坐标是否越界;

❑readyplay()方法:

判断该坐标位置是否可下棋子;

❑play()方法:

在该坐标位置下棋子;

❑computerDo()方法:

用穷举法判断每一个坐标点的八个方向的的最大棋子数,最后得出棋子数最大值的坐标,计算机再下子(这八个方向分别是:

左、右、上、下、左上、左下、右上、右下);

❑checkMax()方法:

计算棋盘上某一方格上八个方向棋子的最大值;

❑showSuccess()方法:

赢棋后的提示;

❑showDefeat()方法:

输棋后的提示。

(3)类名:

MainPanel

作用:

1、构建一个面板,在该面板上画上棋盘;

2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等);

该类继承JPanel类,实现MouseListener、MouseMotionListener接口。

类中含有的主要方法介绍:

❑paintComponent()方法:

根据坐标计算出棋盘方格棋子的信息(如白子还是黑子),然后调用draw方法在棋盘上画出相应的棋子;

❑mousePressed()方法:

响应鼠标的点击事件,根据鼠标的点击来下棋,根据下棋判断胜负等;

❑mouseMoved()方法:

响应鼠标的拖动事件。

(4)类名:

FiveChessAppletDemo

作用:

显示五子棋游戏窗体。

类中含有的方法介绍:

❑main()方法:

程序运行的入口,创建了ChessFrame类的一个实例对象(cf),并启动屏幕显示显示该实例对象。

(5)类名:

ChessWindowEvent

作用:

响应退出窗口。

类中含有的方法介绍:

❑windowClosing()方法:

处理窗口关闭;

❑ChessWindowEvent()构造方法:

提供无参构造方法。

4、运行调试与分析讨论

图4-1人机对弈模式选择界面

图4-2人机对弈界面

图4-3结果信息显示界面

图4-4人人对战模式选择界面

图4-5悔棋界面

图4-6悔棋提示界面

图4-7悔棋后棋盘清空提示界面

图4-8悔棋后棋盘清空界面

图4-9认输界面

图4-10认输提示界面

图4-11认输后结果信息界面

图4-12棋盘选择界面

图4-13外观类型选择界面

图4-14版本选择界面

图4-15版本信息介绍界面

....界面介绍有些多

5、设计体会与小结

通过独立完成五子棋对弈系统的后,发现自己在进行软件开发方面提高不少,同时积极利用所学到的新技术用于自己的设计开发过程。

另外,在整个开发的过程中,时间也比较仓促。

因此,该系统必然会存在一些缺陷和不足。

如:

没有讨论五子棋禁手的问题。

另一个就是电脑按即定的算法去与玩家下子。

这种算法有“固定”。

不太会变,玩家若是仔细观察,可以掌握其规律。

还有就是界面不是很华丽有待改进。

尽管本系统存在着很多不足,但其实现了最重要的功能就是有人工智能。

这也让我对计算机中的人工智能领域有一定的了解。

另一个就在做系统的过程中,我学到了Java的一些基本结构,还有就是对于Java有更深一步的认识。

6、参考文献

[1]丁振凡,《JAVA语言程序设计》,清华大学出版社.

[2]丁振凡,《JAVA语言程序设计实验指导与习题解答》,清华大学出版社.

[3] Charles Petzold. Windows程序设计. 北京大学出版社,2002. 

[4]陈明,《Java语言程序设计》,清华大学出版社.

附录:

(源程序)...要添加一些注释

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

classChessFrameextendsJFrameimplementsActionListener{

privateString[]strsize={"标准棋盘","大号棋盘","超大号棋盘"};

privateString[]strmode={"人机对弈","人人对战"};

publicstaticbooleaniscomputer=true,checkcomputer=true;

privateintwidth,height;

privateChessModelcm;

privateMainPanelmp;

publicChessFrame(){

this.setTitle("五子棋游戏");

cm=newChessModel

(1);

mp=newMainPanel(cm);

Containercon=this.getContentPane();

con.add(mp,"Center");

this.setResizable(false);

this.addWindowListener(newChessWindowEvent());

MapSize(14,14);

JMenuBarmbar=newJMenuBar();

this.setJMenuBar(mbar);

JMenugameMenu=newJMenu("游戏");

mbar.add(makeMenu(gameMenu,newObject[]{

"再来一局",null,"棋盘",null,"模式",null,"认输",null,"悔棋",null,"退出"},this));

JMenulookMenu=newJMenu("外观");

mbar.add(makeMenu(lookMenu,newObject[]{"类型一","类型二","类型三"},this));

JMenuhelpMenu=newJMenu("版本");

mbar.add(makeMenu(helpMenu,newObject[]{"关于"},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(items[i]==null)

m.addSeparator();

elseif(items[i]=="棋盘"){

JMenujm=newJMenu("棋盘");

ButtonGroupgroup=newButtonGroup();

JRadioButtonMenuItemrmenu;

for(intj=0;j

rmenu=makeRadioButtonMenuItem(strsize[j],target);

if(j==0)

rmenu.setSelected(true);

jm.add(rmenu);

group.add(rmenu);

}

m.add(jm);

}elseif(items[i]=="模式"){

JMenujm=newJMenu("模式");

ButtonGroupgroup=newButtonGroup();

JRadioButtonMenuItemrmenu;

for(inth=0;h

rmenu=makeRadioButtonMenuItem(strmode[h],target);

if(h==0)

rmenu.setSelected(true);

jm.add(rmenu);

group.add(rmenu);

}

m.add(jm);

}else

m.add(makeMenuItem(items[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;

}

publicJRadioButtonMenuItemmakeRadioButtonMenuItem(

Objectitem,Objecttarget){

JRadioButtonMenuItemr=null;

if(iteminstanceofString)

r=newJRadioButtonMenuItem((String)item);

elseif(iteminstanceofJRadioButtonMenuItem)

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.repaint();

}

publicbooleangetiscomputer(){

returnthis.iscomputer;

}

publicvoidrestart(){

intmodeChess=cm.getModeChess();

if(modeChess<=3&&modeChess>=0){

cm=newChessModel(modeChess);

MapSize(cm.getWidth(),cm.getHeight());

}

}

publicvoidactionPerformed(ActionEvente){

Stringarg=e.getActionCommand();

try{

if(arg.equals("类型三"))

UIManager.setLookAndFeel(

"com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

elseif(arg.equals("类型二"))

UIManager.setLookAndFeel(

"com.sun.java.swing.plaf.motif.MotifLookAndFeel");

else

UIManager.setLookAndFeel(

"javax.swing.plaf.metal.MetalLookAndFeel");

SwingUtilities.updateComponentTreeUI(this);

}catch(Exceptionee){}

if(arg.equals("标准棋盘")){

this.width=14;

this.height=14;

cm=newChessModel

(1);

MapSize(this.width,this.height);

SwingUtilities.updateComponentTreeUI(this);

}

if(arg.equals("大号棋盘")){

this.width=18;

this.height=18;

cm=newChessModel

(2);

MapSize(this.width,this.height);

SwingUtilities.updateComponentTreeUI(this);

}

if(arg.equals("超大号棋盘")){

this.width=22;

this.height=22;

cm=newChessModel(3);

MapSize(this.width,this.height);

SwingUtilities.updateComponentTreeUI(this);

}

if(arg.equals("人机对弈")){

this.checkcomputer=true;

this.iscomputer=true;

cm=newChessModel(cm.getModeChess());

MapSize(cm.getWidth(),cm.getHeight());

SwingUtilities.updateComponentTreeUI(this);

}

if(arg.equals("人人对战")){

this.checkcomputer=false;

this.iscomputer=false;

cm=newChessModel(cm.getModeChess());

MapSize(cm.getWidth(),cm.getHeight());

SwingUtilities.updateComponentTreeUI(this);

}

if(arg.equals("再来一局")){

restart();

}

if(arg.equals("悔棋")){

if(!

checkcomputer){

intresult=JOptionPane.showConfirmDialog(this,(FiveChessAppletDemo.isBlack==false?

"白方悔棋,黑方是否同意?

":

"黑方悔棋,白方是否同意?

"));

if(result==0){

JOptionPane.showMessageDialog(this,"双方同意悔棋决定,棋盘清空!

请继续...");

restart();

}

}

}

if(arg.equals("认输")){

intresult=JOptionPane.showConfirmDialog(this,"是否认输?

");

if(re

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1