课程设计论文任务书.docx
- 文档编号:20739277
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:38
- 大小:187.61KB
课程设计论文任务书.docx
《课程设计论文任务书.docx》由会员分享,可在线阅读,更多相关《课程设计论文任务书.docx(38页珍藏版)》请在冰豆网上搜索。
课程设计论文任务书
课程设计(论文)任务书
信息工程学院 物联网工程专 业2016-2 班
一、课程设计(论文)题目:
人机对弈五子棋游戏
二、课程设计(论文)工作:
自2018年12月24日起至2018年12月28日止
三、课程设计(论文)地点:
5-202
四、课程设计(论文)内容要求:
1.本课程设计的目的
(1)使学生掌握软件开发的基本工作流程;
(2)巩固JAVA程序设计课程所学的内容;
(3)培养学生的计算机思维能力以及合作的精神;
(4)培养学生分析、解决问题的能力;
(5)提高学生的科技论文写作能力。
2.课程设计的任务及要求
1)基本要求:
(1)研究课程设计任务,并进行系统需求分析;
(2)对系统进行总体设计,分解系统功能模块,进行任务分配,以实现分工合作;
(3)实现各功能模块代码;
(4)系统组装,测试、完善系统。
2)创新要求:
在基本要求达到后,可进行创新设计,如改进界面、增加功能或进行代码优化。
3)课程设计论文编写要求
(1)要按照书稿的规格打印誊写课程设计论文
(2)论文包括封面、设计任务书(含评语)、摘要、目录、设计内容、设计小结
(3)论文装订按学校的统一要求完成
4)参考文献:
(1)丁振凡,《JAVA语言程序设计》(第2版),清华大学出版社
(2)丁振凡,《JAVA语言程序设计实验指导与习题解答》,清华大学出版社
(3)
5)课程设计进度安排
内容天数地点
系统总体设计1实验室
软件设计及调试1实验室
答辩及撰写报告1实验室、图书馆
学生签名:
2015年6月25日
课程设计(论文)评审意见
(1)课程设计过程(20分):
优( )、良( )、中( )、一般( )、差
();
(2)是否完成调试,系统运行效果(30分):
优( )、良( )、中( )、
一般()、差();
(3)回答问题(20分):
优( )、良( )、中( )、一般( )、差( );
(4)课程设计报告(30分):
优( )、良( )、中( )、一般( )、差
();
(5)格式规范性及考勤是否降等级:
是( )、否( )
评阅人:
职称:
教授
2018年12月29日
1、课程设计的目的及目标
1.1课程设计的目的:
本次课程设计的目的是为了让学生使用java语言编程的知识,JAVA是一门编程语言也是一个平台,它基于JAV虚拟机技术,借助这个东西建立了跨平台优势
JAVA编程语言与众不同之处在于:
JAV程序既是编译型的(转换为一种JAVA字节码的中间语言),又是解释型(JVM对字节码进行解析和运行)。
编译只进行一次,而解释在每次运行程序时都会进行。
编译后的字节码采用一种针对JVM优化过的机器码形式;解释器是JVM的实现。
我们需要利用JAVA开发平台,学习和巩固JAVA知识,了解类与对象的关系,绘图以及事件处理原则。
1.2课程设计的目标:
本次课程设计所要求的五子棋游戏应达到以下几方面的要求:
(1)运行程序后即刻出现棋盘并可以开始下棋;
(2)人机对弈时,先手为黑棋,后手为白棋;人为先手,计算机为后手;
(3)程序能响应鼠标点击并在相应位置画出棋子;
(4)计算机具有一定的智能,能够与人进行五子棋对弈;
(5)程序可以正确判断出局面的胜负情况并及时报出结果,终止棋局;
(6)尽可能实现人人对战功能;
(7)重新开始:
在游戏途中,可以选择重新开始,中断游戏并重新开始。
2、概要设计
2.1开发工具及环境
装有eclipse的计算机一台。
2.2任务及需求分析
设计人机对弈五子棋程序,实现人与计算机进行五子棋对弈,具体任务如下:
(1)棋盘布局设计;
(2)能进行基本的五子棋操作,有图形界面,能够用鼠标进行操作;
(3)编程实现棋子的绘制;
(4)增加具体的功能如重开一局等功能;
(5)胜负判断的功能,程序能对下棋的结果进行判断,分出胜负,并显示获胜方;
(6)运行测试程序,调试纠正运行错误。
(7)游戏内容:
采用无“禁手”的规则,相同颜色的棋子,五子一线为胜。
2.3工作原理
(1)工作过程
运行程序后,首先出现五子棋游戏窗体,用户点击游戏菜单项,出现相关子菜单,选择模式子菜单中的人机对弈便可进入人机对弈模式。
然后移动鼠标,在窗体的棋盘上点击鼠标下子,即可在棋盘中相应位置显示下的对应棋子。
接下来计算机会根据用户下的棋,采取穷举法选择八个方向上赢面最大的位置下子,用户与计算机谁先达到五子连成一线,谁便是获胜方。
若选择模式子菜单中的人人对战便可进入人人对战模式。
两个用户可同时玩游戏,同样谁先达到五子连成一线,谁便是获胜方。
若双方势均力敌,可选择游戏菜单项中的棋盘子菜单,点击大号棋盘或超大号棋盘,以便避免棋盘空间不足造成无法分出胜负的情况。
若觉得窗体外观不太美观,可选择外观菜单中的三个选项进行选择。
为了显示程序的相关制作信息,程序提供了版本菜单进行显示。
具体功能实现见第四章节运行调试及分析讨论。
(2)工作原理
利用图形界面编程实现,利用到的知识点包括:
❑窗体的创建和应用界面布局;
❑事件处理,包括按钮的动作事件处理,鼠标事件,窗体事件;
❑接口知识:
事件处理中通过接口约束事件监听者必须实现相应接口中定义的方法;
❑流程控制语句:
通过条件判断区分不同事件源,作不同操作处理。
❑棋子状态控制:
通过arrMapShow数组来判断是下什么颜色的棋子,如果是计算机下棋,则计算棋盘上某一放个八个方向上棋子的最大值,通过调用readyplay()方法判断某位置是否可下棋。
3、具体实现
总共涉及五类,分别为:
ChessFrame、ChessModel、ChessWindowEvent、FiveChessAppletDemo、MainPanel。
引入的java包为:
importjava.awt.*;
importjava.awt.event.*;
importjava.applet.*;
importjavax.swing.*;
importjava.io.PrintStream;
importjavax.swing.JComponent;
importjavax.swing.JPanel;
3.1类设计
(1)类名:
FiveChessAppletDemo
作用:
显示五子棋游戏窗体。
类中含有的方法介绍:
❑main()方法:
程序运行的入口,创建了ChessFrame类的一个实例对象(cf),并启动屏幕显示显示该实例对象。
(2)类名:
ChessFrame
作用:
创建五子棋游戏主窗体和菜单。
该类继承JFrame类,实现ActionListener接口。
类中含有的方法介绍:
❑ChessFrame()构造方法:
构造五子棋游戏的主窗体;
❑makeMenu()方法:
构造五子棋游戏的主菜单;
❑makeMenuItem()方法:
构造五子棋游戏的菜单项;
❑makeRadioButtonMenuItem()方法:
构造五子棋游戏的单选按钮式菜单项;
❑mapsize()方法:
获取棋盘大小;
❑restart()方法:
重新开局;
❑actionperformed()方法:
异常的捕获及不同模式、不同棋盘大小以及下拉菜单功能的实现。
(3)类名:
ChessModel
作用:
实现了整个五子棋程序算法的核心。
采用穷举法判断八个方向上存在棋子的最大值进行对弈。
类中含有的主要方法介绍:
❑ChessModel()构造方法:
根据不同的棋盘模式(modeChess)来构建对应大小的棋盘;
❑PanelInit()方法:
按照棋盘模式构建棋盘大小;
❑badxy()方法:
判断下子的横向、纵向坐标是否越界;
❑chessExist()方法:
计算棋盘上某一方格上八个方向棋子的最大值,(这八个方向分别是:
左、右、上、下、左上、左下、右上、右下);
❑readyplay()方法:
判断该坐标位置是否可下棋子;
❑play()方法:
在该坐标位置下棋子;
❑computerDo()方法:
用穷举法判断每一个坐标点的八个方向的的最大棋子数,最后得出棋子数最大值的坐标,下子;
❑checkMax()方法:
计算棋盘上某一方格上八个方向棋子的最大值;
❑judgeSuccess()方法:
判断胜负;
❑showSuccess()方法:
赢棋后的提示;
❑showDefeat()方法:
输棋后的提示。
(4)类名:
MainPanel
作用:
构建一个面板,在该面板上画上棋盘;处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等);
该类继承JPanel类,实现MouseListener、MouseMotionListener接口。
类中含有的主要方法介绍:
❑ChessModel()方法:
根据棋盘模式设定面板的大小;
❑setModel()方法:
根据棋盘模式设定棋盘的宽度和高度;
❑paintComponent()方法:
根据坐标计算出棋盘方格棋子的信息(如白子还是黑子),然后调用draw方法在棋盘上画出相应的棋子;
❑draw()方法:
根据提供的棋子信息(颜色、坐标)画棋子;
❑mousePressed()方法:
响应鼠标的点击事件,根据鼠标的点击来下棋,根据下棋判断胜负、判断是否人机对弈等;
❑mouseMoved()方法:
响应鼠标的拖动事件。
(5)类名:
ChessWindowEvent
作用:
响应退出窗口。
该类继承WindowAdapter。
类中含有的方法介绍:
❑windowClosing()方法:
处理窗口关闭;
❑ChessWindowEvent()构造方法:
提供无参构造方法。
3.2对弈策略
采用readyplay()方法判断该位置是否可以下棋,然后用穷举法判断每一个坐标点的八个方向,即左、右、上、下、左上、左下、右上、右下,棋子的最大值,最后得出最大值的坐标,下子。
最后采用judgeCuccess()方法,判断八个方向上是否满五个同色棋子,若有,则成功,反之则失败。
4、运行调试与分析讨论
图4-1程序运行初始界面
图4-2人机/人人对弈模式选择界面
图4-3人机对弈界面
图4-4两种结果信息显示界面
图4-5棋盘选择界面
图4-6视图类型选择界面
图4-7程序版本信息选择界面
图4-8程序版本信息介绍界面
5、设计体会与小结
本次实验我们做的是人机对弈五子棋,这是上课时曾经了解过的相关内容,但不可否认的是,理解起来确实存在一定的困难。
课程设计是将所有学过的甚至没有学过的知识集合起来,并且运用到实际的运用当中,使得整个过程进行的难度较大,最后敲定的代码也很长,较为复杂,以致于在调试过程中,出现了很多问题,代码不断出错,运行之后的界面功能不全,计算机下棋的算法太过简单,甚至一度出现无从下手,不知从何修改的困境……
但所有的一切都不能成为实现道路上的障碍,所以后来我们通过不停的讨论、翻书,上网参考别人的代码,不断优化,最后问题都被一一解决。
由于此次时间仓促,依旧存在很多不足,比如很多功能并不能全部实现,对弈的策略比较简单等。
此次课程设计,我们深刻的了解到对知识运用熟练的重要性和团队团结协作的重要性,它们是做好一个项目的基石。
通过努力和团结协作完成的完整代码带给我们的成就感是不可比拟的,希望下次我们能做的更好。
小组成员:
胡子凌、范整整、吴越男、吴嘉懿
6、参考文献
[1]丁振凡,《JAVA语言程序设计》,清华大学出版社.
[2]丁振凡,《JAVA语言程序设计实验指导与习题解答》,清华大学出版社.
[3] Charles Petzold. Windows程序设计. 北京大学出版社,2002.
[4]陈明,《Java语言程序设计》,清华大学出版社.
附录:
(源程序)
packagekeshe;
importjava.awt.*;
importjava.awt.event.*;
importjava.applet.*;
importjavax.swing.*;
importjava.io.PrintStream;
importjavax.swing.JComponent;
importjavax.swing.JPanel;
/**main方法创建了ChessFrame类的一个实例对象(cf)
,*并启动屏幕显示显示该实例对象。
**/
publicclassFiveChessAppletDemo{
publicstaticvoidmain(Stringargs[]){
ChessFramecf=newChessFrame();
cf.show();
}
}
/**类ChessFrame主要功能是创建五子棋游戏主窗体和菜单**/
classChessFrameextendsJFrameimplementsActionListener{
privateString[]strsize={"20x15","30x20","40x30"};
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(20,15);
JMenuBarmbar=newJMenuBar();
this.setJMenuBar(mbar);
JMenugameMenu=newJMenu("游戏");
mbar.add(makeMenu(gameMenu,newObject[]{"开局","棋盘","模式",null,"退出"},this));
JMenulookMenu=newJMenu("视图");
mbar.add(makeMenu(lookMenu,newObject[]{"Metal","Motif","Windows"},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*20+50,h*20+100); 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>=1){ cm=newChessModel(modeChess); MapSize(cm.getWidth(),cm.getHeight()); }else{ System.out.println("\u81EA\u5B9A\u4E49"); } } publicvoidactionPerformed(ActionEvente){ Stringarg=e.getActionCommand(); try{ if(arg.equals("Windows")) UIManager.setLookAndFeel( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); elseif(arg.equals("Motif")) UIManager.setLookAndFeel( "com.sun.java.swing.plaf.motif.MotifLookAndFeel"); elseUIManager.setLookAndFeel( "javax.swing.plaf.metal.MetalLookAndFeel"); SwingUtilities.updateComponentTreeUI(this); }catch(Exceptionee){} if(arg.equals("20x15")){ this.width=20; this.height=15; cm=newChessModel (1); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); } if(arg.equals("30x20")){ this.width=30; this.height=20; cm=newChessModel (2); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); } if(arg.equals("40x30")){ this.width=40; this.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 论文 任务书