




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java语言程序设计课程设计报告题 目: 设 计 者: 班 级: 学 号: 指导教师: 系 部: 信息管理系 专 业: 计算机应用技术 2011年 6 月 25 日目 录1、概论 - 1 -2、总体设计- 2 -3、详细设计- 3 -4、实现- 4-5、总结体会- 5-6、参考文献- 6 -7、附录- 7- 1、概述1.1问题分析主要运用了GUI(用户图形界面)和API(应用程序借口)来实现。当然,Event监听器等也是这个程序的重要部分。程序没有用到图片的引用,棋盘和棋子的设计完全是应用坐标来绘制,再加入按钮、及实现本游戏的用户界面布局。程序编写的思路来源于老师的视频资料,程序在编写过程中遇
2、到的问题主要集中在前期的棋盘绘制和后期的棋子算法。1.2功能(1)程序在设计初就定义黑棋先行,白棋随后。从第一个棋子开始开始相互顺序落子。(2)通过坐标索引算出最先在棋盘的横向、竖向、斜向形成连续的相同色五棋子的一方为胜利。(3)为保持界面洁净设为游戏界面设为固定。(4)在游戏过程中或下完时可选择重新开始。(5)赢家对话框提示。(6)游戏实现了基本的单机功能但为实现人机对战和网路对战。2、总体设计主要包括的类有三个:ChessBoard、Point、StartChessJFrame1、StartChessJFrame类 StartChessJFrame类是java版五子棋的主框架,程序的启动类
3、。其中包括游戏界面的创建、按钮的设置、相关的事件监听器设置、游戏的启动2、ChessBoard类 ChessBoard类主要实现的是棋盘的绘制、创建数组存放棋子的坐标、设置只能在棋盘内可以落子、实现判断黑白棋的输赢、实现重新游戏。3、Point类 Point类主要就是实现棋子的功能3、详细设计 1、StartChessJFrame类 (1) public ChessBoard chessBoard;public JPanel toolbar;public JButton startButton;public JButton exitButton;/“重新开始”按钮和“退出”按钮public S
4、tartChessJFrame()setTitle(云、凡、杰的五子棋);chessBoard=new ChessBoard();/创建面板对象toolbar=new JPanel();/创建工具栏startButton=new JButton(重新开始);exitButton=new JButton(退出);toolbar.setLayout(new FlowLayout(FlowLayout.LEFT);/将工具面板按钮用边框布局toolbar.add(startButton);toolbar.add(exitButton);MyItemListener lis=new MyItemLis
5、tener();/创建事件监听器startButton.addActionListener(lis);exitButton.addActionListener(lis);/将两个按钮注册监听事件add(toolbar,BorderLayout.SOUTH);/将工具面板布局到下面add(chessBoard);/将面板对象添加到窗体上setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/设置界面关闭事件pack();/界面自适应大小主要实现游戏界面的创建,按钮的添加、为按钮添加事件监听器、面板的添加。 (2)public class MyItemLis
6、tener implements ActionListenerpublic void actionPerformed(ActionEvent e)Object jt=e.getSource();/取得事件源if(jt=startButton) chessBoard.restartGame(); /调用重新开始else if(jt=exitButton)System.exit(0);/结束应用程序实现的功能事件监听器内部类(3)public static void main(String args)StartChessJFrame f=new StartChessJFrame();f.setVi
7、sible(true);f.setResizable(false);实现的功能创建主框架,锁定窗体的大小,显示主框架2、Point类int x; int y; 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()return y;public Color getColor()return color;实现的功能设定棋子
8、直径大小,取得棋盘中的棋子的坐标3. ChessBoard类1.public ChessBoard()setBackground(Color.GRAY);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_SP
9、AN/2)/GRID_SPAN;); public void paintComponent(Graphics g)super.paintComponent(g);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, MARGIN+i*GRID_SPAN,MARGIN+ROWS*GRID_SPAN);for(
10、int i=0;ichessCount;i+)int xPos=chessListi.getX()*GRID_SPAN+MARGIN;/棋子的坐标位置int yPos=chessListi.getY()*GRID_SPAN+MARGIN;/g.setColor(chessListi.getColor();/设置颜色g.fillOval(xPos-Point.DIAMETER/4, yPos-Point.DIAMETER/4,Point.DIAMETER/2,Point.DIAMETER/2);实现的功能:将鼠标单击的坐标位置转换成网格索引,绘制棋盘,用间距来确定棋子的位置,画棋子,网格交叉处的
11、x,y坐标2. public void mousePressed(MouseEvent e)if(gameOver)return;/游戏已经结束,不能下String colorName=Black?黑棋:白棋;xIndex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;/将鼠标单击的坐标位置转换成网格索引yIndex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;if(xIndexROWS|yIndexCOLS)return; /落在棋盘外,不能下if(findChess(xIndex,yIndex) /x,y位置已经有棋子存
12、在,不能下return;Point ch=new Point(xIndex,yIndex,Black?Color.black:Color.white);chessListchessCount+=ch;repaint();if(isWin()/给出胜利信息,不能再继续下棋String choice;String ZDX;String YS;if(!Black)choice=白棋;else choice=黑棋;String msg=String.format(恭喜!%s赢了,再来一盘O(_)O!, choice);JOptionPane.showMessageDialog(this, msg);g
13、ameOver=true;Black=!Black;public void mouseClicked(MouseEvent e)/鼠标按键在组件上单击时调用public void mouseEntered(MouseEvent e)/鼠标进入到组件上时调用public void mouseExited(MouseEvent e)/鼠标离开组件时调用public void mouseReleased(MouseEvent e)/鼠标按钮组件上释放时调用/在棋子数组中查找是否有索引为x,y的棋子存在public boolean findChess(int x,int y)for (Point c:
14、chessList)if(c!=null&c.getX()=x&c.getY()=y)return true;return false;实现的功能:在什么情况下可以可以下棋子,设置棋盘外不可以下,游戏结束一方胜出不可以下3. public boolean isWin()int continueCount=1;/定义棋子的个数初始化为1/横向向西寻找for(int x=xIndex-1;x=0;x-)Color c=Black?Color.black:Color.white;if(getChess(x,yIndex,c)!=null)continueCount+;elsebreak;/横向向东寻
15、找for(int x=xIndex+1;x=5)return true;else continueCount=1;/纵向向上寻找for(int y=yIndex-1;y=0;y-)Color c=Black?Color.black:Color.white;/颜色判断if(getChess(xIndex,y,c)!=null)/如果坐标、颜色相符统计棋子个数continueCount+;elsebreak;/纵向向下寻找for(int y=yIndex+1;y=5)return true;else continueCount=1;/继续另一种情况的搜索:斜向/东北寻找for(int x=xInd
16、ex+1,y=yIndex-1;y=0&x=COLS;x+,y-)Color c=Black?Color.black:Color.white;if(getChess(x,y,c)!=null)continueCount+;elsebreak;/西南寻找for(int x=xIndex-1,y=yIndex+1;y=0;x-,y+)Color c=Black?Color.black:Color.white;if(getChess(x,y,c)!=null)continueCount+;elsebreak;if(continueCount=5)return true;else continueCo
17、unt=1;/继续另一种情况的搜索:斜向/西北寻找for(int x=xIndex-1,y=yIndex-1;y=0&x=0;x-,y-)Color c=Black?Color.black:Color.white;if(getChess(x,y,c)!=null)continueCount+;elsebreak;/西南寻找for(int x=xIndex+1,y=yIndex+1;y=ROWS&x=5)return true;else return false;public Point getChess(int xIndex,int yIndex,Color color)for(Point c
18、:chessList)if(c!=null&c.getX()=xIndex&c.getY()=yIndex&c.getColor()=color)return c;return null;实现的功能:判断那方赢,具体判断黑白棋的输赢4. public void restartGame()for(int i=0;ichessList.length;i+)chessListi=nullgameOver=false;chessCount=0;/当前棋盘的棋子个数 repaint();实现的功能:清除棋子,恢复游戏相关的变量值,4 实现内容:运行情况抓图重新游戏5 总结与体会通过这次对JAVA的学习,
19、让我渐渐体会到了JAVA的博大精深。以及怎么学习JAVA,怎么学习计算机语言,怎样对问题进行解决和运用JAVA GUI,查找JAVA API的使用都用了更进一步的理解。对于Java中的引用,初始化类等,开始我并不是非常的理解,知道就这么做就能实现相应的功能了,并没有很深刻的去理解它为什么要这么做。但是真正的要用Java去做一个东西不理解它是不行的,而且其间这课设涉及到了Java 中的绝大多数的知识点,如Java图形用户界面设计、Java的异常处理机制、Java中的多线程程序设计、Java输入输出流,要应用这些东西更要求我去好好理解Java的这些规则。好在有一定的C+基础Java 与C+语法类似
20、,并把C+中一些较低级和较难以理解的功能都去掉了,如多继承、指针等,同时Java增强了部分功能。所以理解起来也比较容易。但是理解了Java的规则要把这个课设做好也不是那么容易,最难的部分是如何实现各个功能的划分和类的通讯问题。我在这方面就遇到了不少的问题。总结这次课设,我还是收获不少。虽然界面也不是很美观,有点功能间的连接做的也不是特别的好,但是我能认识到自己的不足,并且在跟同学的交流中也学到了一些他们的设计思路,也知道今后要加强哪些方面的知识。附录: 程序清单1. StartChessJFrame类import javax.swing.*;import java.awt.event.*;im
21、port java.awt.*;/五子棋-主框架,程序启动类public class StartChessJFrame extends JFrame public ChessBoard chessBoard;public JPanel toolbar;public JButton startButton;public JButton exitButton;/“重新开始”按钮和“退出”按钮public StartChessJFrame()setTitle(云、凡、杰的五子棋);chessBoard=new ChessBoard();/创建面板对象toolbar=new JPanel();/创建工
22、具栏startButton=new JButton(重新开始);exitButton=new JButton(退出);toolbar.setLayout(new FlowLayout(FlowLayout.LEFT);/将工具面板按钮用边框布局toolbar.add(startButton);toolbar.add(exitButton);MyItemListener lis=new MyItemListener();/创建事件监听器startButton.addActionListener(lis);exitButton.addActionListener(lis);/将两个按钮注册监听事件
23、add(toolbar,BorderLayout.SOUTH);/将工具面板布局到下面add(chessBoard);/将面板对象添加到窗体上setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/设置界面关闭事件pack();/界面自适应大小/事件监听器内部类public class MyItemListener implements ActionListenerpublic void actionPerformed(ActionEvent e)Object jt=e.getSource();/取得事件源if(jt=startButton) chess
24、Board.restartGame(); /调用重新开始else if(jt=exitButton)System.exit(0);/结束应用程序public static void main(String args)StartChessJFrame f=new StartChessJFrame();/创建主框架f.setVisible(true);/锁定窗体的大小f.setResizable(false);/显示主框架2.import java.awt.Color;public class Point int x; int y; Color color;public static final
25、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()return y;public Color getColor()return color;3.import javax.swing.*;import java.awt.*;import java.awt.event.MouseListener;import java.awt.event.Mous
26、eMotionListener;import java.awt.event.MouseEvent;public class ChessBoard extends JPanel implements MouseListenerpublic static final int MARGIN= 30 ;/棋盘到边框的边距public static final int GRID_SPAN=15;/网格间距public static final int ROWS=20;/棋盘行数、列数public static final int COLS=20;PointchessList=new Point(ROWS
27、+1)*(COLS+1);/创建数组存放棋子的坐标,初始化每个数组boolean Black=true;/默认开始时黑棋先下boolean gameOver=false;/游戏是否结束int chessCount;/当前棋盘的棋子个数int xIndex,yIndex;/当前棋子的索引public ChessBoard()setBackground(Color.GRAY);addMouseListener(this);addMouseMotionListener(new MouseMotionListener()public void mouseDragged(MouseEvent e)pub
28、lic void mouseMoved(MouseEvent e)/将鼠标单击的坐标位置转换成网格索引int x1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;int y1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;); /绘制棋盘public void paintComponent(Graphics g)super.paintComponent(g);for(int i=0;i=ROWS;i+)/画横线g.drawLine(MARGIN, MARGIN+i*GRID_SPAN, MARGIN+COLS*GRID_SPA
29、N, MARGIN+i*GRID_SPAN);/用间距来确定棋子的位置for(int i=0;i=COLS;i+)/画竖线g.drawLine( MARGIN+i*GRID_SPAN,MARGIN, MARGIN+i*GRID_SPAN,MARGIN+ROWS*GRID_SPAN);/画棋子for(int i=0;ichessCount;i+)int xPos=chessListi.getX()*GRID_SPAN+MARGIN;/棋子的坐标位置int yPos=chessListi.getY()*GRID_SPAN+MARGIN;/网格交叉处的x,y坐标g.setColor(chessLis
30、ti.getColor();/设置颜色g.fillOval(xPos-Point.DIAMETER/4, yPos-Point.DIAMETER/4,Point.DIAMETER/2,Point.DIAMETER/2);public void mousePressed(MouseEvent e)if(gameOver)return;/游戏已经结束,不能下String colorName=Black?黑棋:白棋;xIndex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;/将鼠标单击的坐标位置转换成网格索引yIndex=(e.getY()-MARGIN+GRID
31、_SPAN/2)/GRID_SPAN;if(xIndexROWS|yIndexCOLS)return; /落在棋盘外,不能下if(findChess(xIndex,yIndex) /x,y位置已经有棋子存在,不能下return;Point ch=new Point(xIndex,yIndex,Black?Color.black:Color.white);chessListchessCount+=ch;repaint();if(isWin()/给出胜利信息,不能再继续下棋String choice;String ZDX;String YS;if(!Black)choice=白棋;else cho
32、ice=黑棋;String msg=String.format(恭喜!%s赢了,再来一盘O(_)O!, choice);JOptionPane.showMessageDialog(this, msg);gameOver=true;Black=!Black;public void mouseClicked(MouseEvent e)/鼠标按键在组件上单击时调用public void mouseEntered(MouseEvent e)/鼠标进入到组件上时调用public void mouseExited(MouseEvent e)/鼠标离开组件时调用public void mouseReleas
33、ed(MouseEvent e)/鼠标按钮组件上释放时调用/在棋子数组中查找是否有索引为x,y的棋子存在public boolean findChess(int x,int y)for (Point c:chessList)if(c!=null&c.getX()=x&c.getY()=y)return true;return false;/判断那方赢public boolean isWin()int continueCount=1;/定义棋子的个数初始化为1/横向向西寻找for(int x=xIndex-1;x=0;x-)Color c=Black?Color.black:Color.white;if(getChess(x,yIndex,c)!=null)continueCount+;elsebreak;/横向向东寻找for(int x=xIndex+1;x=5)return true;else continueCount=1;/纵向向上寻找for(int y=yIndex-1;y=0;y-)Color c=Black?Color.black:Color.whit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 本溪市明山区2024-2025学年小升初复习数学模拟试卷含解析
- 云南旅游职业学院《混凝土和砌体结构设计》2023-2024学年第二学期期末试卷
- 广西中远职业学院《形体训练与健美》2023-2024学年第一学期期末试卷
- 宁波财经学院《趣味逻辑学与人生智慧》2023-2024学年第二学期期末试卷
- 兴义民族师范学院《数字系统设计》2023-2024学年第二学期期末试卷
- 渤海理工职业学院《外国电影史》2023-2024学年第二学期期末试卷
- 柱上式无功补偿装置项目风险评估报告
- 广州科技贸易职业学院《心理学核心理论专题研究》2023-2024学年第一学期期末试卷
- 贵州体育职业学院《童装结构与工艺设计》2023-2024学年第二学期期末试卷
- 右江民族医学院《英语学术文献阅读》2023-2024学年第二学期期末试卷
- 2024年人教版八年级生物下册期末考试卷(附答案)
- 1.设备设施运行、检修、维护、保养管理制度
- 二位数乘二位数600道
- 2024年湖南省高考物理试卷真题(含答案解析)
- 初级制图员职业鉴定考试题及答案
- 大型机械设备进出场及安拆施工专项方案
- 创维电视机E710U系列电子说明书
- 《山谷回音真好听》名师课件(简谱)
- 医院抗菌药物临时采购使用申请表
- 高考英语核心词汇1000个
- 校园海绵城市设计方案
评论
0/150
提交评论