五子棋.doc_第1页
五子棋.doc_第2页
五子棋.doc_第3页
五子棋.doc_第4页
五子棋.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

专 业 班 级 学 号 姓 名 指导教师 2011年 12 月 日目 录1、 课程设计的目的32.设计方案论证 3 2.1设计思路2.2需求分析3. 设计思路 4 3.1 功能模块 3.2模块实现 3.2.1.窗体实现 3.2.2界面实现 3.2.3 鼠标点击事件 3.2.3.1 点击棋盘是有落子反应 3.2.3.2 鼠标点击特定区域对应特定功能(模拟按钮)4.体会 95.评分表 10五子棋小游戏1.课程设计的目的 通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使我们通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。2.设计方案论证2.1设计思路(1)界面棋盘设计在对棋盘界面设计方面要考虑简洁友好,符合游戏者需求。棋子的设计方面系统中设置了两种棋子颜色,white或者black, 游戏者可自行选择。棋子怎样画出来,怎样使棋子按我们所想的方式来绘制出来是设计的主要难题。运行时要求当每次点击鼠标的时候就在点击鼠标的地方画一个棋子,所以得定义一个棋子的类使点击鼠标时系统把棋子绘制出来。这样主界面里的棋子就确定了,而且也确定了几个所需要的类。可以先定义好这些类。有了以上的准备就可以把棋盘绘制出来了,只要在双方下子的时候判断赢棋情况,当然还要同步的控制两个人下棋的顺序,这样的话就要用到线程了,各自都继承或实现线程类或接口,以便各自能随时单独控制接发消息。(2)算法设计对于五子棋游戏,需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏结束的标志。判断五子连珠的原理是从横,竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子。 对战一方落子后,在该处向8个方向检测连续的同类棋子,如果检测到直线方向上存在5个连续的同类棋子(包含本位置棋子),则判断为“连五”并结束检测循环。基于检测结果,可以判断游戏是否结束,并根据获胜方的落子代码判断获胜方是谁。2.2需求分析 一款小游戏的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求,其中玩家的实际需求最为重要.面对游戏拥有不同知识和理解层面的玩家,游戏制作人对玩家需求的理解程度,在很大程度上决定了此类游戏开发的成败.因此如何更好地的了解,分析,明确玩家需求,并且能够准确,清晰以文档的形式表达给游戏制作人,保证开发过程按照满足玩家需求为目的正确开发方向进行,是每游戏游戏制作人需要面对的问题。作为五子棋的设计需要考虑到的最基本的需求莫过于人机对战与人人对战功能的实现,当然还有下棋过程中的下棋悔棋功能以及判断游戏的胜负等方面的要求。当然最好是要考虑到界面的友好性,作为一个娱乐软件,还应该考虑到玩家在游戏时的舒适性。3. 设计思路3.1 功能模块五子棋游戏完成下棋的功能界面绘制实现按钮的功能实现输赢的判断主函数 public static void main(String args) public void paint(Graphics g)private boolean CheckWin()private boolean CheckWin()private boolean CheckWin()public voidmousePressed(MouseEvent ) 3.2模块实现 3.2.1.窗体实现 public FiveChessFrame()/窗体显示this.setTitle(五子棋游戏);this.setSize(600, 500);this.setLocation(width-600)/2, (height-500)/2);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);/为窗体加入监听器this.addMouseListener(this); /th.start(); /添加背景图片try meImage = ImageIO.read(new File(e:/beijing.jpg); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();3.2.2界面实现public void paint(Graphics g)/双缓冲技术防止屏幕闪烁BufferedImage b1 = new BufferedImage(600,500,BufferedImage.TYPE_INT_ARGB);Graphics g2 = b1.createGraphics();/界面显示g2.drawImage(meImage, 0, 0, this);g2.setColor(Color.BLACK);g2.setFont(new Font(仿宋,Font.BOLD,22);g2.drawString(message, 157, 60);/绘制棋盘for (int i=0;i19;i+)g2.drawLine(40, 85+21*i, 418, 85+21*i);g2.drawLine(40+21*i, 85, 40+21*i, 463);/绘制棋盘颜色/for (int i=0;i19;i+)/if(x!=40+21*i&y!=105+21*i) / g.setColor(Color.white); / g.fillRect(x, y, 378, 378);/标注点位 g2.fillOval(101, 146, 5, 5);g2.fillOval(101, 398, 5, 5);g2.fillOval(353, 146, 5, 5);g2.fillOval(353, 398, 5, 5);g2.fillOval(227, 272, 5, 5);g2.fillOval(101, 272, 5, 5);g2.fillOval(227, 146, 5, 5);g2.fillOval(227, 398, 5, 5);g2.fillOval(353, 272, 5, 5);/绘制全部棋子for (int i=0;i19;i+)for (int j=0;j=40& x0=65&y00.5&a1) x=x+1; if (b0.5)y=y-1; if(allChessxy=0)if (isBlack = true)allChessxy=1; isBlack=false;message = 白方执子; elseallChessxy=2;isBlack=true; message = 黑方执子; boolean winFlag = this.CheckWin();if (winFlag = true)JOptionPane.showMessageDialog(this, 游戏结束,+(allChessxy=1?黑方:白方)+获胜!);play = false; elseJOptionPane.showMessageDialog(this,当前位置已有棋子,请重新落子!);this.repaint();3.2.3.2 鼠标点击特定区域对应特定功能(模拟按钮) 如图所示,点击界面右侧一排模拟按钮时,有对应功能实现。开始游戏:通过选择函数判断是否重新开始游戏,如果选择是,则清空棋盘,恢复 界面,将下一步设为黑方执子,否则无动作; for (int i=0;i19;i+)for (int j=0;j19;j+)allChessij = 0; / 运用双层循环,清空数组中数字 /或者,allchess=new int1919; message =黑方先行; isBlack = true; this.repaint(); /重新绘制棋盘游戏说明:调用JOptionPane.showMessageDialog(this, 游戏说明);增加暂停和继续功能暂停:标识当前游戏是否继续boolean play = true; 暂停,则play = false;继续:play = true;认输:int result=JOptionPane.showConfirmDialog(this, 是否确认认输?); 根据(result = 0)条件,运用if else循环, 再根据(isBlack)条件,判断当前认输的是黑方或者白方,调用输出文本函数,输出黑方认输或者白方认输:JOptionPane.showMessageDialog(this,);从而实现功能; 原程序在实现认输功能之后,除非点击“开始游戏”,否则在确认认输以后,游戏还能继续进行。所以,应该在程序后运行 for (int i=0;i19;i+)for (int j=0;j19;j+)allChessij = 0;message =黑方先行; isBlack = true; this.repaint(); 表示清空游戏界面,认输之后,游戏恢复初始状态关于游戏:调用JOptionPane.showMessageDialog(this, o(_)o 完成了);退出游戏:调用System.exit(0);音效播放(未实现):调用loadSound();方法private AudioClip loadSound(String ka) URL url=null; /因为newAudioClip()的参数为URL型try url=new URL(file:+System.getProperty(user.dir)+/+ka); /指定文件,“file:不能少System.out.println(url : +url);catch(MalformedURLException e) return Applet.newAudioClip(url); 4. 体会 一个编程语言最强大的地方不是它是容易学,或者难学,而是它拥有一个强大的库。JAVA是一个完全面向对象的语言,JAVA的命名规则是很容易让人接受的。而且容易被编程人员记住。经过实践训练,对JAVA的综合应用能力有了较大的提高,另外对JAVA的特点有了更深层次的认识。这次实践中使用的代码虽然不长,但类与类之间也有很强的逻辑关系,这就是面向对象语言的最大优势,这样可使我们更轻松的运用JAVA。 经过努力,查阅相关资料,终于完成该课题,虽然效果不是很好,但亲手做过之后还是很有成就感的。通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,比如说,添加音效,线程应用这些,都有待继续学习。这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资料。通过对此课题的开发,使我对用Ec

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论