ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:59.09KB ,
资源ID:3730130      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3730130.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java王锟 2.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

java王锟 2.docx

1、java王锟 2课程设计(论文)任务书 理 学院信息计算 专业 2012-1班一、课程设计(论文)题目: 人机对弈五子棋游戏 二、课程设计(论文)工作:自 2015 年 6 月 17 日起至 2015年 6 月 25日止三、课程设计(论文) 地点: 5#203 四、课程设计(论文)内容要求:1本课程设计的目的(1)使学生掌握软件开发的基本工作流程; (2)巩固JAVA程序设计课程所学的内容; (3)培养学生的计算机思维能力以及合作的精神;(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。 2课程设计的任务及要求1)基本要求:(1)研究课程设计任务,并进行系统需求分析;(2)

2、对系统进行总体设计,分解系统功能模块,进行任务分配,以实现分工合作;(3)实现各功能模块代码; (4)系统组装,测试、完善系统。2)创新要求: 在基本要求达到后,可进行创新设计,如改进界面、增加功能或进行代码优化。3)课程设计论文编写要求(1)要按照书稿的规格打印誊写课程设计论文(2)论文包括封面、设计任务书(含评语)、摘要、目录、设计内容、设计小结(3)论文装订按学校的统一要求完成4)参考文献:(1)丁振凡,JAVA语言程序设计,清华大学出版社.(2)丁振凡,JAVA语言程序设计实验指导与习题解答,清华大学出版社.(3) 5)课程设计进度安排内容 天数地点系统总体设计 1实验室软件设计及调试

3、 2实验室答辩及撰写报告 2实验室、图书馆 学生签名: 2015年6月25日 课程设计(论文)评审意见(1)课程设计过程(20):优()、良()、中()、一般()、差(); (2)是否完成调试,系统运行效果(30分):优()、良()、中()、一般()、差(); (3)回答问题(20分):优()、良()、中()、一般()、差();(4)课程设计报告(30分):优()、良()、中()、一般()、差();(5)格式规范性及考勤是否降等级:是()、否() 评阅人: 职称:教授 2014年 6月25日目 录第1章 系统概要 11.1系统介绍 11.2 基本功能要求 1第2章 设计思路与算法 2第3章 源

4、程序代码 5第4章 运行结果及分析 23第5章 心得体会 27参考文献 28第1章 系统概要1.1系统介绍 五子棋是一个简单易懂但又包含高深学问的游戏,因为它这样温和蕴藉的致命魅力,令人越陷越深而无法自拔。五子棋入门容易,甚至随时随地捡几颗石头就能下五子棋,要不然只要有纸笔也能马上来一句,容易入门的特性,使五子棋成为老少皆宜的游戏。也因为如此,一般人容易错觉五子棋只是个小游戏罢了,不会有什么高深的学问。 本系统的创新性研究主要包括以下两个方面: 第一对五子棋博奕的专业知识进行了认真的整理,针对五子棋博奕规则简单、局势判断清楚的特点,对五子棋常见的开局、定式及其后的对局做了细致的统计分析,阐明了

5、五子棋对奕中黑白双方优劣势并非均衡的规律,这一规律作为一个指导原则在设计五子棋博奕系统时起到重要作用。 第二针对初版程序中存在的缺点和不足,通过查找原因,实现了算法的优化和加强。初版程序在运行时其搜索速度和对奕表现不能让人满意。其主要原因有两个:使用常规的Alpha-Beta搜索不能避免相同局面的重复节点的搜索,从而影响搜索速度;采用固定的估值法,估值的不准确使其“智力”较低,而且固定的赋值方式使其不能在对奕过程中提高棋力。通过这次课程设计,熟悉Java的GUI图形界面设计,网络Socket编程和多线程编程。1.2基本功能要求要求实现一个简单的多用户五子棋胡游戏程序,包括如下两个界面:(1)选

6、择对弈桌及角色(执黑、执白、观看)。(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);用户列表区;棋盘绘制区。 第2章 设计思路与算法系统模块结构如图: 系统的概要设计五子棋的娱乐性强、规则简单、易学、流行性广,普通人不需长时间专门训练即可自如行棋,因此极受大众喜欢,本系统可以实现人与人手动下棋,扫描整个棋盘记录连在一起的黑白棋子数,实现人与人有次序的下棋,判断人与人的胜负,为人下棋提供帮助,五子棋规则为:本游戏可选择人与人对战模式。(2)下法:两人分别执黑白两色棋子,轮流在棋盘上选择一个无子的交叉点落子,无子的交叉点又被称为空点。(3)输赢判断:黑、白双方有一方的五个棋子在横、竖

7、或斜方向上连接成一线即为该方赢。系统模块介绍 本系统有4个程序每个程序都导入了不同的包和类运用了不同的所学知识。不同的类和包提供的方法、类型等都不同,本程序还使用了继承。以至使其能够完成不同的功能。本节主要讲述本系统所使用的基础知识。1、类的基础(1)类的定义JAVA中的类实质上是一种对象类型,它是对具有相同属性和相同行为对象的一种抽象。类是java程序中最小的组成单位。(2)Java中类定义的格式为:类修饰符class类名extends基类implements接口/成员变量声明(Membervariabledeclaration)/成员方法声明(Membermethoddeclaration

8、)其中,class、extends和implements都是Java的关键字。类修饰符、extends和implements是关于修饰符、继承和接口的内容。2、继承 继承性是面向对象程序设计语言的一个重要特征,通过继承可以实现代码的复用。Java语言中,所有的类都是直接或间接的继承java.lang.object类而得到的。被继承的类称为基类或父类,继承而的来的类成为子类。子类继承基类的方法和属性,同时也可以修改基类的方法和属性,并增加自己新的属性和方法。Java不支持多重继承。即一个子类不能拥有两个或以上的父类。3、包包的定义 在Java中,把相关的代码组织到一起,称为“包”。包市一种将相关

9、类、接口或其他包组织起来的集合体,目的是为了将包含类代码的文件组织起来,易于查找和使用。2、包的语法及导入:PackagePackageName;/包的定义Importjava.awt.Color/导入包关键字Import4、接口接口的定义 Java中的接口可以看成是一种抽象类,它是一些抽象方法和常量的集合,其主要作用是使得处于不同层次上以至于互不相干的类能够执行相同的操作,引用相同的值,而且在一个类中可以同时实现来自不同接口中的多种方法。2、接口的定义和实现Interface接口名/抽象方法/定义接口Class类名implements接口名称/类体实现接口5、线程 线程的定义同时执行多个程序

10、段,每个程序段都是一个线程。2、线程的周期线程的周期包括新建(new)、就绪(start())、执行(run())、阻塞(sleep()、wait()、suspend()、输入/输出流中发生线程阻塞)、死亡(stop()、destroy())。创建线程的方法:一种是创建Thread类的子类。另一种是实现Runnable接口.而本系统采用的是接口的方式。6.Applet小应用程序(1)小应用程序与应用程序的区别:小应用程序没有主方法不能单独运行。而应用程序是拥有主方法的是可以单独运行的。(2)Applet的执行方式它有两种:一种是浏览器中执行,另一种是使用Appletviewer()命令执行。本

11、系统的两个小应用程序都是采用编制html以浏览器形式执行。(3)Applet主类的一般框架结构图Importjava.awt.*;Importjava.applet.*;Publicclass类名extendsAppletPublicvoidinit()/初始化变量、设置字体、装载图片Publicvoidstart()/启动程序执行或恢复程序执行Publicvoidstop()/挂起正在执行的程序,暂停程序Publicvioddestroy()终止程序的执行释放资源Publicviodpaint(Graphicsg)/完成绘制图形等操作7、异常处理(1)异常处理概念异常是Java程序运行出现的

12、错误。(2)异常处理机制异常处理机制:当try子句中抛出的异常属于某个catch子句的异常类时,该catch子句捕获到异常,并且系统自动将异常类的实例传递给catch子句的异常类对象。在catch子句中,可以从异常类对象中获取异常细节,并可通过该对象使用异常类中的方法,对异常进行相应的处理。 第3章 源程序代码import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;class Point int x,y; public Point( int x1,int y1) x=x1;y=y1; p

13、ublic String toString() return x+,+y; public class chessGame extends Frame implements ActionListener chessBoard b = new chessBoard(); static int i=0; public chessGame() setBackground(Color.lightGray); setLayout(new BorderLayout(); add(Center, b); Panel p = new Panel(); Button pass = new Button(放弃一手)

14、; Button color = new Button(变棋盘背景); Button fail = new Button(认输); Button back = new Button(悔棋); Button exit = new Button(退出游戏); Button gameRule=new Button(游戏规则); p.setLayout(new GridLayout(8, 2, 10, 10); p.add(new Label(); / 为界面美观插入一个空标签P.add(group); p.add(pass); p.add(color); p.add(fail); p.add(bac

15、k); p.add(gameRule); p.add(exit); add(East, p); pass.addActionListener(this); fail.addActionListener(this); back.addActionListener(this); exit.addActionListener(this); color.addActionListener(this); gameRule.addActionListener(this); setSize(500, 450); setVisible(true); public static void main(String

16、 args) new chessGame(); public void actionPerformed(ActionEvent e) if(e.getActionCommand()=退出游戏) dispose(); else if(e.getActionCommand()=变棋盘背景) If(i=0) setBackground(Color.RED); i=i+1;else if(i=1) setBackground(Color.YELLOW); i=i+1;else if(i=2)setBackground(Color.BLUE); i=i+1;else if(i=3)setBackgrou

17、nd(Color.ORANGE); i=i+1; else if(i=4)setBackground(Color.PINK); i=i+1; else setBackground(Color.lightGray); i=0; add(“Center”,b) else if(e.getActionCommand()=认输) b.GiveUpGame(); else if(e.getActionCommand()=悔棋) b.Undo(); else if(e.getActionCommand()=放弃一手) b.GiveFirst(); else if(e.getActionCommand()=

18、游戏规则) b.displayGameRule(); class chessBoard extends Canvas int chess = new int1919; / 存放棋盘子的状态 int sx = 40, sy = 20; / 棋盘左上角位置 int w = 20; / 棋盘每个格子宽度 int cx = 50; / 下棋位置游标的初值,对应鼠标移动位置 int cy = 50; int player = 1; /1表示轮黑下子,2表示轮白下子 static final int EMPTY = 0, / 代表空方格. WHITE = 2, /白子. BLACK = 1; / 黑子.

19、static int goodx=0; static int goody=0; static int value=0; static ArrayList my =new ArrayList(); static int state =new int5; int xp,yp; int oldx=cx; int oldy=cy; public void Undo() chessstate0state1=0; chessstate2state3=0; if(state4=1) player=2; else player=1; for(int i=0;i5;i+) System.out.println(

20、statei); repaint(); public chessBoard() this.addMouseMotionListener(new MouseMotionAdapter() public void mouseMoved(MouseEvent e) Graphics g = getGraphics(); g.setXORMode(chessBoard.this.getBackground(); g.setColor(Color.red); g.fillRect(cx - w / 4, cy - w / 4, w / 2, w / 2); cx = sx + (e.getX()-sx+

21、w/2)/w * w; cy = sy + (e.getY()-sy+w/2)/w * w; g.fillRect(cx - w / 4, cy - w / 4, w / 2, w / 2); ); this.addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent e) /鼠标点击表示下子 Graphics g = getGraphics(); oldx=cx;oldy=cy; state0=(oldx-sx)/w; state1=(oldy-sy)/w; xp=(cx-sx)/w; yp=(cy -sy)

22、/w; if (chessxpyp = 0) /是否已有棋子 if (player = 1) g.setColor(Color.black); / 黑棋 chessxpyp = 1; state2=xp; state3=yp; state4=1; else g.setColor(Color.white); / 白棋 chessxpyp = 2; state2=xp; state3=yp; state4=2; g.fillOval(cx - w / 2 + 1, cy -w / 2 + 1, w - 2, w - 2); if (winner(xp,yp) / 判是否胜 if (player=

23、2) gameOver(白方胜!); else gameOver(黑方胜!); return; player = 1+player% 2; / 黑白方轮流下子 g.setXORMode(chessBoard.this.getBackground(); g.setColor(Color.red); /用异或方式绘制小游标 g.fillRect(cx - w / 4, cy - w / 4, w / 2, w / 2); computer(); g.setXORMode(chessBoard.this.getBackground(); g.setColor(Color.red); /用异或方式绘制

24、小游标 g.fillRect(cx - w / 4, cy - w / 4, w / 2, w / 2); System.out.println(xp+,+yp); ); void findsolution() value=0; /goodx=0; /goody=0; my.clear(); for (int x=0;x19;x+) for (int y=0;y value) goodx=x; goody=y; value=v; my.clear(); my.add(new Point(x,y); else if (v=value) my.add(new Point(x,y); v=value

25、me2(x,y,player%2+1); if (v value) value=v; goodx=x; goody=y; my.clear(); my.add(new Point(x,y); else if (v=value) my.add(new Point(x,y); /System.out.println(value); int valueme( int x,int y,int player) if (count(player, x,y, 1, 0)=5|count(player, x,y, 0,1)=5|count(player, x,y, 1,-1)=5| count(player,

26、 x,y, 1,1)=5) return 120; int v=1; if (count2(player, x,y, 1, 0)=4) if (conject2(player, x,y, 0,1) v=v+18; else v=v+80; if (count2(player, x,y, 0,1)=4) if (conject2(player, x,y, 0,1) v=v+18; else v=v+80; if (count2(player, x,y, 1,-1)=4) if (conject2(player, x,y, 1,-1) v=v+18; else v=v+80; if (count2

27、(player, x,y, 1,1)=4) if (conject2(player, x,y, 1,1) v=v+18; else v=v+80; if (count2(player, x,y, 1, 0)=3) if (conject(player, x,y, 1, 0) v=v+2; else v=v+15; if (count2(player, x,y, 0,1)=3) if (conject(player, x,y, 0,1) v=v+2; else v=v+15; if (count2(player, x,y, 1,-1)=3) if (conject(player, x,y, 1,-1) v=v+2; else v=v+15; if (count2(player, x,y, 1,1)=3) if (conject(player, x,y, 1,1) v=v+2; else v=v+15; if (count3(player, x,y, 1, 0)=3) v=v+14; if (count3(player, x,y, 0,1)=3) v=v+13; if (count3(playe

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

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