java五子棋游戏软件设计报告_第1页
java五子棋游戏软件设计报告_第2页
java五子棋游戏软件设计报告_第3页
java五子棋游戏软件设计报告_第4页
java五子棋游戏软件设计报告_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、 佛山科学技术学院可视化编程技术课程设计报告五子棋软件设计学生姓名: 凌健铭学 号: 2011924133年级专业:11级教育技术学2班指导老师: 容汝佳学 院: 教育科学学院广东佛山提交日期:2013年6月目 录1. 前言22概要设计3 2.1 开发环境 3 2.2 五子棋功能 3 2.3 界面设计 3 2.4 类的框架结构图 43. 详细设计 5 3.1 五子棋使用的JAVA类的说明 5 3.2 类的主要方法 6下放棋子 6 判断输赢 7 重新开始 10 悔棋 10 程序流程图 11 4. 运行结果 125. 测试分析 156. 源程序 15参考文献26设计总结26摘要:该程序是一个图形界

2、面的简单的java五子棋游戏,具有良好的界面,使用人员能快捷简单地进行操作。人们可以在空闲时使用该程序进行五子棋对战,达到娱乐休闲的目的。该五子棋程序设有悔棋、重新开始和退出功能。界面为黄色棋盘。关键字:java五子棋游戏软件,娱乐类电子游戏设计1 前言五子棋作为一个棋类竞技活动,其满足了人民娱乐休闲的需要,在民间十分流行。Java是由Sun公司开发的新一代纯面向对象的网络编程语言。其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。Java开发小组把J

3、ava按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。Java基本版本叫Java 2标准版(Java 2 Standard Edition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API)。Java 2移动版(The Java 2 Mobile Edition,J2ME)包含创建无线Java应用程序的API。还有Java 2企业版(The Java 2 Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。Java语言是由C+语言发展起而来的,是一种彻底的面向对象的程序设计语言。作为一种纯面向对象的程序设计语言

4、,它非常适合大型软件的开发。Java语言去掉了C+语言的一些容易引起错误的特性。Java语言的特点有:面向对象、跨平台、安全性、多线程和图形功能强。2 概要设计开发环境 开发平台:Microsoft Windows XP Professional Service Pack 2 开发工具:JBuilder 2007 + JDK _02五子棋功能功能 1:获取外部图片作棋盘背景并自动适应棋盘大小。    功能 2:响应鼠标点击并在相应位置画出棋子。功能 3:实现二人对战,并判断胜负的功能。功能 4:当放下棋子后,下棋者可点击“悔棋”按钮,则清空原棋子,并可再次下棋。&

5、#160;   功能 5:当下棋者点击“重新开始”后,清空棋盘上所有棋子,并重新开始游戏。功能 6:按下“退出”键,退出程序并关闭窗口。图2.3 五子棋界面类的框架结构图package WUZIQIpublic class Point Public class StartChessJFramePublic class ChessBoard属性private ChessBoard chessBoard;private JPanel toolbar;private Button startButton,backButton,exitButton;private JMenuBar

6、 menuBar;private JMenu sysMenu;private JMenuItem startMenuItem,exitMenuItem,backMenuItem;属性public static final int MARGINpublic static final int GRID_SPANpublic static final int ROWSpublic static final int COLS;boolean isBlackboolean gameOverint chessCount;int xIndex,yIndex; Image img;Color colortem

7、p;属性private int x;private int y; private Color color; 操作public Point(int x,int y,Color color)public int getX()public int getY()public Color getColor()操作public ChessBoardpublic void paintComponent(Graphics g)public void mousePressed(MouseEvent e)public void mouseClicked(MouseEvent e)public void mouse

8、Entered(MouseEvent e)public void mouseExited(MouseEvent e)public void mouseReleased(MouseEvente)private boolean findChess(int x,int y)private boolean isWin()private Point getChess(int xIndex,int yIndex,Color color)public void restart()public void goback()public Dimension getPreferredSize()操作public S

9、tartChessJFrame()public void actionPerformed(ActionEvent e)public static void main(String args)类的框架结构图3详细设计五子棋使用的Java类的说明类名: ChessBoard作用: 自定义的棋盘类,用来棋盘绘制,和鼠标点击棋盘上的事件处理。 继承的父类: JPanel类 实现的接口: MouseListener public class ChessBoard extends JPanel implements MouseListener public static final int MARGIN=

10、30;/边距 public static final int GRID_SPAN=35;/网格间距 public static final int ROWS=16;/棋盘行数 public static final int COLS=16;/棋盘列数类名: Point 作用: 棋子类,获取棋子在棋盘中x,y的索引,获取颜色和定义棋子大小。继承的父类:无实现的接口: 无public class Point private int x;/棋盘中的x索引 private int y;/棋盘中的y索引 private Color color;/颜色 public static final int DI

11、AMETER=30;/直径类名: StartChessJFrame 作用: 五子棋主框架类,程序启动类。继承的父类: JFrame实现的接口: 无public class StartChessJFrame extends JFrame public StartChessJFrame()/创建主框架public static void main(String args)/主程序,创建和显示主框架类名: MyItemListener 作用: 在主程序类中的私有类,用于获得菜单中“悔棋”、“重新开始”、“退出”的事件源。继承的父类: 无实现的接口: ActionListenerpublic void

12、 actionPerformed(ActionEvent e)/获得事件源类的主要方法下放棋子: public void mousePressed(MouseEvent e)/鼠标在组件上按下时调用 /游戏结束时,不再能下 if(gameOver) return; String colorName=isBlack?"黑棋":"白棋" /将鼠标点击的坐标位置转换成网格索引 xIndex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN; yIndex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPA

13、N; /落在棋盘外不能下 if(xIndex<0|xIndex>ROWS|yIndex<0|yIndex>COLS) return; /如果x,y位置已经有棋子存在,不能下 if(findChess(xIndex,yIndex)return; /可以下 Point ch=new Point(xIndex,yIndex,isBlack?Color.black:Color.white); chessListchessCount+=ch; repaint();/通知系统重新绘制 /如果胜出则给出提示信息,不能继续下棋 if(isWin() String msg=String.

14、format("恭喜,%s赢了!", colorName); JOptionPane.showMessageDialog(this, msg); gameOver=true; isBlack=!isBlack; 判断输赢:private boolean isWin() int continueCount=1;/连续棋子的个数 /横向向西寻找 for(int x=xIndex-1;x>=0;x-) Color c=isBlack?Color.black:Color.white; if(getChess(x,yIndex,c)!=null) continueCount+;

15、 else break; /横向向东寻找 for(int x=xIndex+1;x<=COLS;x+) Color c=isBlack?Color.black:Color.white; if(getChess(x,yIndex,c)!=null) continueCount+; else break; if(continueCount>=5) return true; else continueCount=1; /继续另一种搜索纵向 /向上搜索 for(int y=yIndex-1;y>=0;y-) Color c=isBlack?Color.black:Color.whit

16、e; if(getChess(xIndex,y,c)!=null) continueCount+; else break; /纵向向下寻找 for(int y=yIndex+1;y<=ROWS;y+) Color c=isBlack?Color.black:Color.white; if(getChess(xIndex,y,c)!=null) continueCount+; else break; if(continueCount>=5) return true; else continueCount=1; /继续另一种情况的搜索:斜向 /东北寻找 for(int x=xIndex

17、+1,y=yIndex-1;y>=0&&x<=COLS;x+,y-) Color c=isBlack?Color.black:Color.white; if(getChess(x,y,c)!=null) continueCount+; else break; /西南寻找 for(int x=xIndex-1,y=yIndex+1;x>=0&&y<=ROWS;x-,y+) Color c=isBlack?Color.black:Color.white; if(getChess(x,y,c)!=null) continueCount+; el

18、se break; if(continueCount>=5) return true; else continueCount=1; /西北寻找 for(int x=xIndex-1,y=yIndex-1;x>=0&&y>=0;x-,y-) Color c=isBlack?Color.black:Color.white; if(getChess(x,y,c)!=null) continueCount+; else break; /东南寻找 for(intx=xIndex+1,y=yIndex+1;x<=COLS&&y<=ROWS;x+

19、,y+) Color c=isBlack?Color.black:Color.white; if(getChess(x,y,c)!=null) continueCount+; else break; if(continueCount>=5) return true; else continueCount=1; return false; 重新开始:public void restartGame() /清除棋子 for(int i=0;i<chessList.length;i+) chessListi=null; /恢复游戏相关的变量值 isBlack=true; gameOver=

20、false; chessCount =0; repaint(); 3.2.4 悔棋: public void goback() if(chessCount=0) return ; chessListchessCount-1=null; chessCount-; if(chessCount>0) xIndex=chessListchessCount-1.getX(); yIndex=chessListchessCount-1.getY(); isBlack=!isBlack; repaint(); 3.2.5设计的总体认识l JAVA设计的摘要l JAVA设计的目录结构l JAVA设计的概

21、要和详细设计l JAVA设计的版权意识l JAVA设计需要编译的环境l JAVA设计的实用性开始程序流程图显示界面,绘制棋盘玩家下棋撤销棋子鼠标动作重置绘制棋子是悔棋否结束游戏是重新开始否否是判断输赢图3绘制五子棋方法PAD图4运行结果图4 .1五子棋界面显示图4 .2五子棋界面显示图4 .3五子棋界面显示5测试分析程序运行情况: 运行主程序类时,分别调用ChessBoard类和Point类。程序正常地响应鼠标和按钮事件。棋盘调用了根目录下的图片“”作为底面。默认先由黑色棋子开始,棋子被限制在棋盘中,当棋子填充满整个棋盘但没有决出胜负,棋子会清空,游戏会回复初始状态。玩家亦可在游戏的过程中选择

22、悔棋或重新开始。点“退出”按钮可关闭程序。6 程序清单:package WUZIQI;import java.awt.Color;/ 棋子类public class Point private int x; private int y; private Color color; public static final int DIAMETER=30; public Point(int x,int y,Color color) this.x=x; this.y=y; this.color=color; public int getX() return x; public int getY() r

23、eturn y; public Color getColor() return color; package WUZIQI;import java.awt.Color;import java.awt.Cursor;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.RadialGradientPaint;import java.awt.RenderingHints;import java.awt.Toolkit;im

24、port java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.geom.Ellipse2D;import javax.swing.*;/ 五子棋-棋盘类 public class ChessBoard extends JPanel implements MouseListener public static final int MARGIN=30; public static final int GRID_S

25、PAN=35; public static final int ROWS=16; public static final int COLS=16; Point chessList=new Point(ROWS+1)*(COLS+1); boolean isBlack=true; boolean gameOver=false; int chessCount; int xIndex,yIndex; Image img; Color colortemp; public ChessBoard() setBackground(Color.orange); img=Toolkit.getDefaultTo

26、olkit().getImage("board.jpg"); addMouseListener(this); addMouseMotionListener(new MouseMotionListener() public void mouseDragged(MouseEvent e) public void mouseMoved(MouseEvent e) int x1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN; int y1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN; if(x1<0|x1&

27、gt;ROWS|y1<0|y1>COLS|gameOver|findChess(x1,y1) setCursor(new Cursor(Cursor.DEFAULT_CURSOR); else setCursor(new Cursor(Cursor.HAND_CURSOR); ); public void paintComponent(Graphics g) super.paintComponent(g); int imgWidth= img.getWidth(this); int imgHeight=img.getHeight(this); int FWidth=getWidth

28、(); int FHeight=getHeight();/获得窗口的宽度与高度 int x=(FWidth-imgWidth)/2; int y=(FHeight-imgHeight)/2; g.drawImage(img, x, y, null); for(int i=0;i<=ROWS;i+) g.drawLine(MARGIN, MARGIN+i*GRID_SPAN, MARGIN+COLS*GRID_SPAN, MARGIN+i*GRID_SPAN); for(int i=0;i<=COLS;i+) g.drawLine(MARGIN+i*GRID_SPAN, MARGIN

29、, MARGIN+i*GRID_SPAN, MARGIN+ROWS*GRID_SPAN); for(int i=0;i<chessCount;i+) int xPos=chessListi.getX()*GRID_SPAN+MARGIN; int yPos=chessListi.getY()*GRID_SPAN+MARGIN; g.setColor(chessListi.getColor(); colortemp=chessListi.getColor(); if(colortemp=Color.black) RadialGradientPaint paint = new RadialG

30、radientPaint(xPos-Point.DIAMETER/2+25, yPos-Point.DIAMETER/2+10, 20, new float0f, 1f , new ColorColor.WHITE, Color.BLACK); (Graphics2D) g).setPaint(paint); (Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); (Graphics2D) g).setRenderingHint(Rendering

31、Hints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT); else if(colortemp=Color.white) RadialGradientPaint paint = new RadialGradientPaint(xPos-Point.DIAMETER/2+25, yPos-Point.DIAMETER/2+10, 70, new float0f, 1f , new ColorColor.WHITE, Color.BLACK); (Graphics2D) g).setPaint(

32、paint); (Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); (Graphics2D) g).setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT); Ellipse2D e = new Ellipse2D.Float(xPos-Point.DIAMETER/2, yPos-Poin

33、t.DIAMETER/2, 34, 35); (Graphics2D) g).fill(e); if(i=chessCount-1) g.setColor(Color.red); g.drawRect(xPos-Point.DIAMETER/2, yPos-Point.DIAMETER/2,34, 35); public void mousePressed(MouseEvent e) if(gameOver) return; String colorName=isBlack?"黑棋":"白棋" xIndex=(e.getX()-MARGIN+GRID_S

34、PAN/2)/GRID_SPAN; yIndex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN; if(xIndex<0|xIndex>ROWS|yIndex<0|yIndex>COLS) return; if(findChess(xIndex,yIndex) return; Point ch=new Point(xIndex,yIndex,isBlack?Color.black:Color.white); chessListchessCount+=ch; repaint(); if(isWin() String msg=String.

35、format("恭喜,%s赢了!", colorName); JOptionPane.showMessageDialog(this, msg); gameOver=true; isBlack=!isBlack; public void mouseClicked(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseReleased(MouseEvent e) private boolean findChess(in

36、t x,int y) for(Point c:chessList) if(c!=null&&c.getX()=x&&c.getY()=y) return true; return false; private boolean isWin() int continueCount=1; for(int x=xIndex-1;x>=0;x-) Color c=isBlack?Color.black:Color.white; if(getChess(x,yIndex,c)!=null) continueCount+; else break; for(int x=x

37、Index+1;x<=COLS;x+) Color c=isBlack?Color.black:Color.white; if(getChess(x,yIndex,c)!=null) continueCount+; else break; if(continueCount>=5) return true; else continueCount=1; for(int y=yIndex-1;y>=0;y-) Color c=isBlack?Color.black:Color.white; if(getChess(xIndex,y,c)!=null) continueCount+;

38、 else break; for(int y=yIndex+1;y<=ROWS;y+) Color c=isBlack?Color.black:Color.white; if(getChess(xIndex,y,c)!=null) continueCount+; else break; if(continueCount>=5) return true; else continueCount=1; for(int x=xIndex+1,y=yIndex-1;y>=0&&x<=COLS;x+,y-) Color c=isBlack?Color.black:C

39、olor.white; if(getChess(x,y,c)!=null) continueCount+; else break; for(int x=xIndex-1,y=yIndex+1;x>=0&&y<=ROWS;x-,y+) Color c=isBlack?Color.black:Color.white; if(getChess(x,y,c)!=null) continueCount+; else break; if(continueCount>=5) return true; else continueCount=1; for(int x=xInde

40、x-1,y=yIndex-1;x>=0&&y>=0;x-,y-) Color c=isBlack?Color.black:Color.white; if(getChess(x,y,c)!=null) continueCount+; else break; for(int x=xIndex+1,y=yIndex+1;x<=COLS&&y<=ROWS;x+,y+) Color c=isBlack?Color.black:Color.white; if(getChess(x,y,c)!=null) continueCount+; else br

41、eak; if(continueCount>=5) return true; else continueCount=1; return false; private Point getChess(int xIndex,int yIndex,Color color) for(Point p:chessList) if(p!=null&&p.getX()=xIndex&&p.getY()=yIndex &&p.getColor()=color) return p; return null; public void restart()/清除棋子

42、for(int i=0;i<chessList.length;i+) chessListi=null; isBlack=true; gameOver=false; chessCount =0; repaint(); public void goback() /悔棋 if(chessCount=0) return ; chessListchessCount-1=null; chessCount-; if(chessCount>0) xIndex=chessListchessCount-1.getX(); yIndex=chessListchessCount-1.getY(); isB

43、lack=!isBlack; repaint(); public Dimension getPreferredSize() return new Dimension(MARGIN*2+GRID_SPAN*COLS,MARGIN*2+GRID_SPAN*ROWS); package WUZIQI;import java.awt.event.*;import java.awt.*;import javax.swing.*;/五子棋主框架,程序启动类public class StartChessJFrame extends JFrame private ChessBoard chessBoard;

44、private JPanel toolbar; private Button startButton,backButton,exitButton; private JMenuBar menuBar; private JMenu sysMenu; private JMenuItem startMenuItem,exitMenuItem,backMenuItem; public StartChessJFrame() setTitle("我的五子棋游戏"); chessBoard=new ChessBoard(); Container contentPane=getContent

45、Pane(); contentPane.add(chessBoard); chessBoard.setOpaque(true); menuBar=new JMenuBar(); sysMenu=new JMenu("菜单"); startMenuItem=new JMenuItem("重新开始"); backMenuItem =new JMenuItem("悔棋"); exitMenuItem =new JMenuItem("退出"); sysMenu.add(startMenuItem); sysMenu.add

46、(backMenuItem); sysMenu.add(exitMenuItem); MyItemListener lis=new MyItemListener(); this.startMenuItem.addActionListener(lis); backMenuItem.addActionListener(lis); exitMenuItem.addActionListener(lis); menuBar.add(sysMenu); setJMenuBar(menuBar); toolbar=new JPanel(); startButton=new Button("重新开始"); backButton=new Button("悔棋"); exitButton=new Button("退出"); toolbar.setLayout(new FlowLayout(FlowLayout.RIGHT); toolbar.add(star

温馨提示

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

评论

0/150

提交评论