您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > java五子棋项目报告
河南经贸职业学院信息管理系《Java程序设计》课程设计报告1《Java语言程序设计》课程设计报告题目:设计者:班级:学号:指导教师:系部:信息管理系专业:计算机应用技术2011年6月25日河南经贸职业学院信息管理系《Java程序设计》课程设计报告2目录1、概论.............................................................................错误!未定义书签。2、总体设计...........................................................................错误!未定义书签。3、详细设计...........................................................................错误!未定义书签。4、实现....................................................................................错误!未定义书签。5、总结体会..........................................................................错误!未定义书签。-6、参考文献...........................................................................错误!未定义书签。7、附录....................................................................................错误!未定义书签。河南经贸职业学院信息管理系《Java程序设计》课程设计报告31、概述1.1问题分析主要运用了GUI(用户图形界面)和API(应用程序借口)来实现。当然,Event监听器等也是这个程序的重要部分。程序没有用到图片的引用,棋盘和棋子的设计完全是应用坐标来绘制,再加入按钮、及实现本游戏的用户界面布局。程序编写的思路来源于老师的视频资料,程序在编写过程中遇到的问题主要集中在前期的棋盘绘制和后期的棋子算法。1.2功能(1)程序在设计初就定义黑棋先行,白棋随后。从第一个棋子开始开始相互顺序落子。(2)通过坐标索引算出最先在棋盘的横向、竖向、斜向形成连续的相同色五棋子的一方为胜利。(3)为保持界面洁净设为游戏界面设为固定。(4)在游戏过程中或下完时可选择重新开始。(5)赢家对话框提示。(6)游戏实现了基本的单机功能但为实现人机对战和网路对战。2、总体设计主要包括的类有三个:ChessBoard、Point、StartChessJFrame1、StartChessJFrame类StartChessJFrame类是java版五子棋的主框架,程序的启动类。其中包括游戏界面的创建、按钮的设置、相关的事件监听器设置、游戏的启动2、ChessBoard类ChessBoard类主要实现的是棋盘的绘制、创建数组存放棋子的坐标、设置只能在棋盘内可以落子、实现判断黑白棋的输赢、实现重新游戏。3、Point类Point类主要就是实现棋子的功能河南经贸职业学院信息管理系《Java程序设计》课程设计报告43、详细设计1、StartChessJFrame类(1)publicChessBoardchessBoard;publicJPaneltoolbar;publicJButtonstartButton;publicJButtonexitButton;//“重新开始”按钮和“退出”按钮publicStartChessJFrame(){setTitle(云、凡、杰的五子棋);chessBoard=newChessBoard();//创建面板对象toolbar=newJPanel();//创建工具栏startButton=newJButton(重新开始);exitButton=newJButton(退出);toolbar.setLayout(newFlowLayout(FlowLayout.LEFT));//将工具面板按钮用边框布局toolbar.add(startButton);toolbar.add(exitButton);MyItemListenerlis=newMyItemListener();//创建事件监听器startButton.addActionListener(lis);exitButton.addActionListener(lis);//将两个按钮注册监听事件add(toolbar,BorderLayout.SOUTH);//将工具面板布局到下面add(chessBoard);//将面板对象添加到窗体上setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置界面关闭事件pack();//界面自适应大小}主要实现游戏界面的创建,按钮的添加、为按钮添加事件监听器、面板的添加。(2)publicclassMyItemListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){Objectjt=e.getSource();//取得事件源if(jt==startButton){chessBoard.restartGame();}河南经贸职业学院信息管理系《Java程序设计》课程设计报告5//调用重新开始elseif(jt==exitButton){System.exit(0);}//结束应用程序}实现的功能事件监听器内部类(3)publicstaticvoidmain(String[]args){StartChessJFramef=newStartChessJFrame();f.setVisible(true);f.setResizable(false);}实现的功能创建主框架,锁定窗体的大小,显示主框架2、Point类intx;inty;Colorcolor;publicstaticfinalintDIAMETER=30;publicPoint(intx,inty,Colorcolor){this.x=x;this.y=y;this.color=color;}publicintgetX(){returnx;}publicintgetY(){returny;}publicColorgetColor(){returncolor;}实现的功能设定棋子直径大小,取得棋盘中的棋子的坐标3.ChessBoard类1.publicChessBoard(){setBackground(Color.GRAY);addMouseListener(this);addMouseMotionListener(newMouseMotionListener(){publicvoidmouseDragged(MouseEvente){}河南经贸职业学院信息管理系《Java程序设计》课程设计报告6publicvoidmouseMoved(MouseEvente){intx1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;inty1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;}});}publicvoidpaintComponent(Graphicsg){super.paintComponent(g);for(inti=0;i=ROWS;i++){//画横线g.drawLine(MARGIN,MARGIN+i*GRID_SPAN,MARGIN+COLS*GRID_SPAN,MARGIN+i*GRID_SPAN);}for(inti=0;i=COLS;i++){//画竖线g.drawLine(MARGIN+i*GRID_SPAN,MARGIN,MARGIN+i*GRID_SPAN,MARGIN+ROWS*GRID_SPAN);}for(inti=0;ichessCount;i++){intxPos=chessList[i].getX()*GRID_SPAN+MARGIN;//棋子的坐标位置intyPos=chessList[i].getY()*GRID_SPAN+MARGIN;//g.setColor(chessList[i].getColor());//设置颜色g.fillOval(xPos-Point.DIAMETER/4,yPos-Point.DIAMETER/4,Point.DIAMETER/2,Point.DIAMETER/2);}}实现的功能:将鼠标单击的坐标位置转换成网格索引,绘制棋盘,用间距来确定棋子的位置,画棋子,网格交叉处的x,y坐标2.publicvoidmousePressed(MouseEvente){if(gameOver)return;//游戏已经结束,不能下StringcolorName=Black?黑棋:白棋;xIndex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//将鼠标单击的坐标位置转换成网格索引yIndex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;if(xIndex0||xIndexROWS||yIndex0||yIndexCOLS)return;//落在棋盘外,不能下河南经贸职业学院信息管理系《Java程序设计》课程设计报告7if(findChess(xIndex,yIndex))//x,y位置已经有棋子存在,不能下return;Pointch=newPoint(xIndex,yIndex,Black?Color.black:Color.white);chessList[chessCount++]=ch;repaint();if(isWin()){//给出胜利信息,不能再继续下棋Stringchoice;StringZDX;StringYS;if(!Black){choice=白棋;}elsechoice=黑棋;Stringmsg=String.format(恭喜!%s赢了,再来一盘O(∩_∩)O~!,choice);JOptionPane.showMessageDialog(this,msg);gameOver=true;}Black=!Black;}publicvoidmouseClicked(MouseEvente){}//鼠标按键在组件上单击时调用publicvoidmouseEntered(MouseEvente){}//鼠标进入到组件上时调用publicvoidmouseExited(MouseEvente){}//鼠标离开组件时调用publicvoidmouseReleased(MouseEvente){}//鼠标按钮组件上释放时调用//在棋子数组中查找是否有索引为x,y的棋子存在publicbooleanfindChess(intx,inty){for(Pointc:chessList){if(c!=null&&c.getX()==x&&c.getY()==y)returntrue;}returnfalse;}实现的功能:在什么情况下可以可以下棋子,设置棋盘外不可以下,游戏结束一方胜出不可以下河南经贸职业学院信息管理系《Java程序设计》课程设计报告83.publicbooleanisWin(){intcontinueCount=1;//定义棋子的个数初始化为1//横向向西寻找for(intx=xIndex-1;x=0;x--){Colorc=Black?Color.black:Color.white;if(getChess(x,yIndex,c)!=null){continueCount++;}elsebreak;}
本文标题:java五子棋项目报告
链接地址:https://www.777doc.com/doc-6114365 .html