Java创新实习课程设计报告题目:简易五子棋游戏开发院(系):年级专业:学生姓名:学生学号:指导老师:实习时间:成绩评定:设计报告(40%)程序演示(20%)回答问题(40%)总成绩:目录1.摘要-----------------------------------------------------22.概要设计--------------------------------------------------23.详细设计--------------------------------------------------24.测试分析--------------------------------------------------95.参考文献--------------------------------------------------9一、摘要五子棋游戏是常见的经典游戏,在19*19的棋盘方格上进行对弈,由于时间与基础知识的掌握程度限制,现初步完成简易五子棋的实现。本程序完全有面向对象的JAVA语言编写而成,单击“开始游戏按钮”将弹出确认对话框,当点击对话框上的“确认”按钮,游戏正式开始;“认输”按钮表示当对弈双方有一方认输时,结束比赛并且输出结果;“关于”按钮的功能可以由制作者自己添加,主要表示游戏的版本等级;“退出”按钮单击时推出对弈比赛。二、概要设计(一)自定义类说明类名:ChessBoardFrame作用:显示五子棋游戏的主界面在整个屏幕中的位置与大小继承的父类:Jframe实现接口:无publicclassChessBoardFrameextendsJFrame{}//自定义一个继承于Jframe的类用于获取五子棋背景图的大小,在整个屏幕上的显示位置类名:ChessBoardPanel作用:实现五子棋的各个功能,通过面板继承来进行背景图片载入、通过画直线的成员函数画出棋盘、通过判断函数对鼠标的判断以保证正确落子、在判断函数中还包括了对输与赢的判断、加上清屏函数、每次重新开始时进行清屏。在此类中主要使用了JAVA本身所具有的一些功能,如:异常抛出、鼠标适配器、鼠标单击时间的捕捉、窗口重绘、颜色填充等功能。继承的父类:JPanel实现接口:无publicclassChessBoardPanelextendsJPanel{}//完成五子棋的主要功能(二)程序流程图x=e.getX();y=e.getY()arr[][]=newint[19][19];booleanstart;chess=1确认开始游戏x=10&&x=370&&y=50&&y=410i=(x-10)/20j=(y-50)/20(x-10)%2010(y-50)%2010i=i+1;j=j+1;arr[i][j]==0;arr[i][j]=chess;游戏结束三、详细设计一、ChessBoardFrame类importjava.awt.Dimension;importjava.awt.Toolkit;importjavax.swing.JFrame;publicclassChessBoardFrameextendsJFrame{publicChessBoardFrame(){//设置标题this.setTitle(五子棋);intwidth=500;intheight=456;//窗口起点坐标Toolkitkit=Toolkit.getDefaultToolkit();Dimensiondimension=kit.getScreenSize();doublescreenWidth=dimension.getWidth();doublescreenHeight=dimension.getHeight();intx=(int)(screenWidth-width)/2;inty=(int)(screenHeight-height)/2;//设置窗口大小和位置this.setBounds(x,y,width,height);//设置窗口大小不可改变this.setResizable(false);//设置默认关闭选项this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//将面板放于窗口中//注意:这句话在ChessBoardFrame的构造方法中this.add(newChessBoardPanel());this.setVisible(true);}publicstaticvoidmain(String[]args){newChessBoardFrame();}}二、ChessBoardPanel类importjava.awt.Color;importjava.awt.Cursor;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.awt.event.MouseMotionAdapter;importjava.io.File;importjava.io.IOException;importjavax.imageio.ImageIO;importjavax.swing.JOptionPane;importjavax.swing.JPanel;publicclassChessBoardPanelextendsJPanel{//保存棋子,1表示黑棋,-1表示白棋,0表示没有棋int[][]arr=newint[19][19];//是否开始游戏booleanstart;//棋子intchess=1;publicChessBoardPanel(){this.addMouseListener(ma);this.addMouseMotionListener(mma);}MouseMotionAdaptermma=newMouseMotionAdapter(){@OverridepublicvoidmouseMoved(MouseEvente){intx=e.getX();inty=e.getY();if((x=400&&x=470&&y=50&&y=80)||(x=400&&x=470&&y=250&&y=280)||(x=400&&x=470&&y=300&&y=330)||(x=400&&x=470&&y=350&&y=380)){setCursor(newCursor(Cursor.HAND_CURSOR));}else{setCursor(newCursor(Cursor.DEFAULT_CURSOR));}}};//棋盘:10,50;370,410//开始游戏:400,50;470,80//认输:400,250;470,280//关于:400,300;470,330//退出:400,350;470,380MouseAdapterma=newMouseAdapter(){@OverridepublicvoidmouseClicked(MouseEvente){intx=e.getX();inty=e.getY();if(start==true){if(x=10&&x=370&&y=50&&y=410){inti=(x-10)/20;intj=(y-50)/20;if((x-10)%2010){i=i+1;}if((y-50)%2010){j=j+1;}if(arr[i][j]==0){arr[i][j]=chess;}//判断输赢if(isWin(chess)==true){if(chess==1){JOptionPane.showMessageDialog(null,黑棋获胜);}else{JOptionPane.showMessageDialog(null,白棋获胜);}start=false;}//改棋子颜色chess=chess*(-1);}}//开始游戏if(x=400&&x=470&&y=50&&y=80){//清空数组,清盘for(inti=0;i19;i++){for(intj=0;j19;j++){arr[i][j]=0;}}start=true;JOptionPane.showMessageDialog(null,游戏开始!);}//认输if(x=400&&x=470&&y=250&&y=280){intoption=JOptionPane.showConfirmDialog(null,确定要认输吗?,确认框,JOptionPane.YES_NO_OPTION);if(option==0){if(chess==1){JOptionPane.showMessageDialog(null,黑棋认输,白棋胜);}else{JOptionPane.showMessageDialog(null,白棋认输,黑棋胜);}start=false;}}//关于if(x=400&&x=470&&y=300&&y=330){JOptionPane.showMessageDialog(null,简易五子棋1.0版);}//退出if(x=400&&x=470&&y=350&&y=380){intoption=JOptionPane.showConfirmDialog(null,确定要退出吗?,对话框,JOptionPane.YES_NO_OPTION);if(option==0){//退出System.exit(0);}}}};@Overridepublicvoidpaint(Graphicsg){super.paint(g);//构造背景图的Image对象Imageimg=null;try{img=ImageIO.read(newFile(System.getProperty(user.dir)+/background.jpg));}catch(IOExceptione){e.printStackTrace();}//绘制背景图g.drawImage(img,0,0,this);//绘制棋盘//横向for(inti=0;i19;i++){g.drawLine(10,50+i*20,370,50+i*20);}//纵向for(inti=0;i19;i++){g.drawLine(10+i*20,50,10+i*20,410);}//遍历数组for(inti=0;i19;i++){for(intj=0;j19;j++){if(arr[i][j]!=0){if(arr[i][j]==1){g.setColor(Color.BLACK);g.fillOval(3+i*20,43+j*20,14,14);g.drawOval(3+i*20,43+j*20,14,14);}else{g.setColor(Color.WHITE);g.fillOval(3+i*20,43+j*20,14,14);g.setColor(Color.BLACK);g.drawOval(3+i*20,43+j*20,14,14);}}}}//让窗口重绘this.repaint();}//判断输赢//横向publicbooleanisH(intchess){for(inti=0;i19;i++){for(intj=2;j17;j++){if(arr[i][j-2]==chess&&arr[i][j-1]==chess&&arr[i][j]==chess&&arr[i][j+1]==chess&&arr[i][j+2]==chess){returntrue;}}}returnfalse;}//纵向publicbooleanisV(intchess){for(inti=2;i17;i++){for(intj=0;j19;j++){