佛山科学技术学院《可视化编程技术》课程设计报告五子棋软件设计学生姓名:凌健铭学号:2011924133年级专业:11级教育技术学2班指导老师:容汝佳学院:教育科学学院广东★佛山提交日期:2013年6月目录1. 前言 (2)2.概要设计 (3)2.1 开发环境 (3)2.2 五子棋功能 (3)2.3 界面设计 (3)2.4 类的框架结构图 (4)3. 详细设计 (5)3.1 五子棋使用的JAVA类的说明 (5)3.2 类的主要方法 (6)3.2.1下放棋子 (6)3.2.2 判断输赢 (7)3.2.3 重新开始 (10)3.2.4 悔棋 (10)3.2.5 程序流程图 (11)4. 运行结果 (12)5. 测试分析 (15)6. 源程序 (15)参考文献 (26)设计总结 (26)摘要:该程序是一个图形界面的简单的java五子棋游戏,具有良好的界面,使用人员能快捷简单地进行操作。
人们可以在空闲时使用该程序进行五子棋对战,达到娱乐休闲的目的。
该五子棋程序设有悔棋、重新开始和退出功能。
界面为黄色棋盘。
关键字:java五子棋游戏软件,娱乐类电子游戏设计1 前言五子棋作为一个棋类竞技活动,其满足了人民娱乐休闲的需要,在民间十分流行。
Java是由Sun公司开发的新一代纯面向对象的网络编程语言。
其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。
正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。
Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。
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++语言发展起而来的,是一种彻底的面向对象的程序设计语言。
作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。
Java语言去掉了C++语言的一些容易引起错误的特性。
Java语言的特点有:面向对象、跨平台、安全性、多线程和图形功能强。
2 概要设计2.1开发环境开发平台:Microsoft Windows XP Professional Service Pack 2开发工具:JBuilder 2007 + JDK 1.6.0_022.2五子棋功能功能1:获取外部图片作棋盘背景并自动适应棋盘大小。
功能2:响应鼠标点击并在相应位置画出棋子。
功能3:实现二人对战,并判断胜负的功能。
功能4:当放下棋子后,下棋者可点击“悔棋”按钮,则清空原棋子,并可再次下棋。
功能5:当下棋者点击“重新开始”后,清空棋盘上所有棋子,并重新开始游戏。
功能6:按下“退出”键,退出程序并关闭窗口。
2.3界面设计图2.3 五子棋界面2.4类的框架结构图图2.4类的框架结构图package WUZIQIpublic class Point Public class ChessBoardPublic class StartChessJFrame属性 private int x; private int y; private Color color;属性public static final int MARGIN public static final int GRID_SPANpublic static final int ROWS public static final int COLS; boolean isBlack boolean gameOver int chessCount;int xIndex,yIndex; Image img;Color colortemp;属性private ChessBoard chessBoard; private JPanel toolbar; private ButtonstartButton,backButton,exitButton; private JMenuBar menuBar; private JMenu sysMenu; private JMenuItemstartMenuItem,exitMenuItem,backMenuI tem;操作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 mouseEntered(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 StartChessJFrame() public voidactionPerformed(ActionEvent e) public static void main(String[] args)3详细设计3.1五子棋使用的Java类的说明类名: ChessBoard作用: 自定义的棋盘类,用来棋盘绘制,和鼠标点击棋盘上的事件处理。
继承的父类: JPanel类实现的接口: MouseListenerpublic class ChessBoard extends JPanel implements MouseListener {public static final int MARGIN=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 DIAMETER=30;//直径类名: StartChessJFrame作用: 五子棋主框架类,程序启动类。
继承的父类:JFrame实现的接口: 无public class StartChessJFrame extends JFrame {public StartChessJFrame()//创建主框架public static void main(String[] args){//主程序,创建和显示主框架类名: MyItemListener作用: 在主程序类中的私有类,用于获得菜单中“悔棋”、“重新开始”、“退出”的事件源。
继承的父类: 无实现的接口: ActionListenerpublic void actionPerformed(ActionEvent e){//获得事件源3.2类的主要方法3.2.1下放棋子: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_SPAN;//落在棋盘外不能下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);chessList[chessCount++]=ch;repaint();//通知系统重新绘制//如果胜出则给出提示信息,不能继续下棋if(isWin()){String msg=String.format("恭喜,%s赢了!", colorName);JOptionPane.showMessageDialog(this, msg);gameOver=true;}isBlack=!isBlack;}3.2.2判断输赢: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++;}elsebreak;}//横向向东寻找for(int x=xIndex+1;x<=COLS;x++){Color c=isBlack?Color.black:Color.white;if(getChess(x,yIndex,c)!=null){continueCount++;}elsebreak;}if(continueCount>=5){return true;}elsecontinueCount=1;//继续另一种搜索纵向//向上搜索for(int y=yIndex-1;y>=0;y--){Color c=isBlack?Color.black:Color.white;if(getChess(xIndex,y,c)!=null){continueCount++;}elsebreak;}//纵向向下寻找for(int y=yIndex+1;y<=ROWS;y++){Color c=isBlack?Color.black:Color.white;if(getChess(xIndex,y,c)!=null)continueCount++;elsebreak;}if(continueCount>=5)return true;elsecontinueCount=1;//继续另一种情况的搜索:斜向//东北寻找for(int x=xIndex+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++;}else 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++,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;}3.2.3重新开始:public void restartGame(){//清除棋子for(int i=0;i<chessList.length;i++){chessList[i]=null;}//恢复游戏相关的变量值isBlack=true;gameOver=false;chessCount =0;repaint();}3.2.4 悔棋:public void goback(){if(chessCount==0)return ;chessList[chessCount-1]=null;chessCount--;if(chessCount>0){xIndex=chessList[chessCount-1].getX();yIndex=chessList[chessCount-1].getY();}isBlack=!isBlack;repaint();}3.2.5设计的总体认识●JA V A设计的摘要●JA V A设计的目录结构●JA V A设计的概要和详细设计●JA V A设计的版权意识● JA V A 设计需要编译的环境● JA V A 设计的实用性3.2.6程序流程图图3.2.6绘制五子棋方法PAD 图否否显示界面,绘制棋盘开始玩家下棋鼠标动作绘制棋子判断输赢结束游戏重置 悔棋重新开始 撤销棋子 是 否是是4运行结果图4 .1五子棋界面显示图4 .2五子棋界面显示图4 .3五子棋界面显示5测试分析程序运行情况:运行主程序类时,分别调用ChessBoard类和Point类。