课程设计报告(JAVA程序设计).pdf
河河南南城城建建学学院院HenanHenan UniversityUniversity ofof UrbanUrban ConstructionConstructionJAVA 基础课程设计设计说明书课程名称:JAVA 基础课程设计设计题目:Java 游戏设计黑白棋指导教师:陈红军何宗耀班级:0844141学号:084414119学生姓名:管维聪同组人员:张欣林阳赵阳计算机科学与工程学院2016 年 1 月 8 日成绩:评语:JAVA 基础课程设计实验报告- 1 -目录第第 1 章章 选选题题. 21.1 题目背景.21.2 系统实现的具体分工.21.2.1选题.21.2.2团队分工.21.3 开发环境.2第 2 章 设计内容(用例图及类图等).32.1 实现功能.32.2 概要设计.42.3 界面设计.5第第 3 章章 系统实现系统实现. 63.1 涉及知识点.63.2 系统运行(主要运行界面抓图).63.3 源程序清单(关键代码).7第第 4 章章 测试与实验结果测试与实验结果. 23第第 5 章章 结束语结束语. 23参考文献参考文献. 24JAVA 基础课程设计实验报告- 2 -第 1 章 选题1.1 题目背景目前游戏是人们娱乐消遣的途径之一, 并且开发一个游戏可以让自己综合运用所学的知识,也能让自己掌握的知识更加巩固。所以如何设计,开发一个游戏,也是许多人去热衷研究的。1.2 系统实现的具体分工1.2.1选题用户可通过使用界面选择人人对战和人机对战来进行游戏, 在游戏界面还能通过自己的爱好,来选择界面的颜色,还有让用户了解游戏规则的帮助选项。1.2.2团队分工表 1.1项目分工一览表角色姓名承担的具体任务组长张欣设计人机部分组员林阳设计画图部分组员赵阳设计界面部分组员管维聪设计人人部分1.3 开发环境编程工具:JDK+ECLIPSE(+MySQL)计算机:PC操作系统:Microsoft Windows 7.0JAVA 基础课程设计实验报告- 3 -第 2 章 设计内容(用例图及类图等)2.1 实现功能1. 用户进入界面:用户通过这个界面进入游戏。如图2.菜单功能:提供开始,更改背景,帮助提示 等功能。用户可以使用重新开始游戏,退出游戏,和改变界面背景,观看帮助信息。如图:3. 人人对战:可以进行两个人的对战游戏,玩家和玩家之间可以继续游戏。4人机对战::玩家可以和简单人对战。JAVA 基础课程设计实验报告- 4 -2.2 概要设计自己的图:Class:ChessListener继承ChessListener:构 造 函数MousClickedjudge()full()Check(int a)paintChess()paintChess1()paintChess2()paintChess3()paintChess4()hengYou()hengZuo()hengShang()hengShang1()hengXia()hengXia1()xieyouS()xieyouX()xiezuoS()xiezuoX()hengYou1()hengZuo1()xieyou1()xieyou2()xiezuo1()xiezuo2()MouseAdaperJAVA 基础课程设计实验报告- 5 -组员林阳的图:组员赵阳的图:2.3 界面设计用户使用界面人人对战开始功能背景设计功能关于人机对战游 戏 界面JAVA 基础课程设计实验报告- 6 -第 3 章 系统实现3.1 涉及知识点Java 编程,Swing 图形界面设计,继承与多态等。3.2 系统运行(主要运行界面抓图)图 3.1系统主界面1.用户使用界面:2.人人对战:3.人机对战:JAVA 基础课程设计实验报告- 7 -3.3 源程序清单(关键代码)import java.awt.*;/导入包中的类import java.awt.event.*;import javax.swing.*;class ChessListener extends MouseAdapter / 继承MouseAdapter类,重写方法MouseClicked()private Graphics g;/将画布对象传过来private int xiafa;/记录当前棋子的下法publicstatic int stata=1;/判断下黑棋还是白棋private int x1,y1;/记录点击处的横坐标和纵坐标private JLabel jilu;/当前下棋子的人private JLabel alila;/黑棋棋子数private JLabel taozila;/白棋棋子数private Chess ch;/用来刷新棋盘private intte=0;/特殊情况private intchange;/记录改变的棋子数目public ChessListener(Graphics g,Chess ch,JLabel jilu,JLabel alila,JLabeltaozila)this.g=g;this.ch=ch;this.jilu=jilu;this.alila=alila;this.taozila=taozila;/点击下棋子构造函数:用于接受来自 Chess 类的数据, 并对 ChessListener 类进行初始化。JAVA 基础课程设计实验报告- 8 -public void mouseClicked(MouseEvent e)int a=1;/记录所下的子String s = null;x1=e.getX();y1=e.getY();System.out.println(x1+,+y1);for(int i=0;iChess.rows-1;i+)for(int j=0;jChess.cols-1;j+)int x2=Chess.x+Chess.size/2+Chess.size*i;/得到棋盘中棋子所在点的横坐标int y2=Chess.y+Chess.size/2+Chess.size*j;/得到棋盘中棋子所在点的纵坐标/将棋子下在棋盘格子的正中央if(Math.abs(x1-x2)Chess.size/3&Math.abs(y1-y2)judge()1)/如果黑棋的子较多, 则黑棋获胜JOptionPane.showMessageDialog(null, 游戏结束,黑棋获胜);jilu.setText(游戏结束,黑棋获胜 );else if(judge()0judge()1)/如果白棋的子较多,则白棋获胜JOptionPane.showMessageDialog(null, 游戏结束,白棋获胜);jilu.setText(游戏结束,白棋获胜 );else if(judge()0=judge()1)JOptionPane.showMessageDialog(null, 平局);jilu.setText(游戏结束,平局 );return;JAVA 基础课程设计实验报告- 11 -/* 判断输赢的方法,如果黑棋多则黑棋获胜,否则白棋获胜* return 黑棋和白棋的数目*/public int judge()int count=new int2;for(int i=0;iChess.rows-1;i+)for(int j=0;jChess.cols-1;j+)if(Chess.chessij=1)count0+;/计算黑棋的个数else if(Chess.chessij=-1)count1+;/计算白棋的个数return count;/* 判断棋盘是否已满的方法*/public boolean full()if(te=2)/如果双方都不能下子,则游戏结束return true;elsefor(int i=0;iChess.rows-1;i+)for(int j=0;jChess.cols-1;j+)/如果有一个地方是空的则返回falseif(Chess.chessij=0)return false;return true;/*判断当前棋子的下法还有多少种*return 返回下法的总数*/public int Check(int a)int n=0;通过 for 循环记录黑棋和白棋的个数JAVA 基础课程设计实验报告- 12 -for(int i=0;iChess.chess.length;i+)for(int j=0;jChess.chessi.length;j+)if(Chess.chessij!=0)/检测棋盘中的空白处continue;elseChess.chessij=a;/判断是否可以下棋if(hengYou(i, j) != null | hengZuo(i, j) != null| hengShang(i, j) != null | hengXia(i, j) != null| xieyouS(i, j)!= null | xieyouX(i, j) != null| xiezuoS(i, j)!= null | xiezuoX(i, j) != null)Chess.chessij=0;n+;/如果有一个地方可以下子,则n+1elseChess.chessij=0;return n;/* 检测相同颜色*/* 改变两棋子之间的棋子的颜色直线*/public void paintChess(int r1, int c1, int r2, int c2) / 横向if (c1 = c2) for (int k = Math.min(r1, r2) + 1; k Math.max(r1, r2); k+) Chess.chesskc1 = Chess.chessr1c1;change+;/ 纵向if (r1 = r2) for (int k = Math.min(c1, c2) + 1; k Math.max(c1, c2); k+) Chess.chessr1k = Chess.chessr1c1;change+;/*用 for 结构和判断是否可以下棋的方法来得到可以下棋的位置有哪些。下列改变颜色的方法中, 参数分别表示当前下棋的坐标, 和与下棋位置相同颜色棋子的坐标。JAVA 基础课程设计实验报告- 13 -* 改变两棋子之间的棋子的颜色斜线右上*/public void paintChess1(int r1, int c1, int r2, int c2) for (int k = Math.min(r1, r2) + 1, v = Math.max(c1, c2) - 1; k Math.max(r1, r2); k+, v-) Chess.chesskv = Chess.chessr1c1;change+;/* 改变两棋子之间的棋子的颜色斜线右下*/public void paintChess2(int r1, int c1, int r2, int c2) for (int k = Math.min(r1, r2) + 1, v = Math.min(c1, c2) + 1; k Math.min(r1, r2); k-, v-) Chess.chesskv = Chess.chessr1c1;change+;/* 改变两棋子之间的棋子的颜色斜线左下*/public void paintChess4(int r1, int c1, int r2, int c2) for (int k = Math.min(r1, r2) + 1, v = Math.max(c1, c2) - 1; k = Math.max(r1, r2); k+, v-) Chess.chesskv = Chess.chessr1c1;change+;/* 向右检测是否有相同颜色棋子,如果有且不相邻,改变中间棋子颜色,否则返回NULL*/JAVA 基础课程设计实验报告- 14 -public int hengYou(int x, int y) int r = -2;int i;/ 向右for (i = x + 1; i = 0; i-) if (Chess.chessiy != 1 & Chess.chessiy != -1) break;if (Chess.chessiy = Chess.chessxy) r = i;break;if (r != -2 & Chess.chessx - 1y != Chess.chessiy) return new int r, y ; else return null;/*JAVA 基础课程设计实验报告- 15 -* 向上检测是否有相同颜色棋子,如果有且不相邻,改变中间棋子颜色,否则返回NULL*/public int hengShang(int x, int y) int r = -2;int i;/ 向上for (i = y - 1; i = 0; i-) if (Chess.chessxi = 0) break;if (Chess.chessxi = Chess.chessxy) r = i;break;if (r != -2 & Chess.chessxy - 1 != Chess.chessxi) return new int x, r ; else return null;/* 向上检测是否有相同颜色棋子,如果有且不相邻,改变中间棋子颜色,否则返回NULL*/public int hengShang1(int x, int y) int r = -2;int i;/ 向上for (i = y - 1; i = 0; i-) if (Chess.chessxi = 0) break;if (Chess.chessxi = Chess.chessxy) r = i;break;if (r != -2 & Chess.chessxy - 1 != Chess.chessxi) / 改变中间的子paintChess(x, y, x, r);return new int x, r ; else return null;JAVA 基础课程设计实验报告- 16 -/* 向下检测是否有相同颜色棋子,如果有且不相邻,改变中间棋子颜色,否则返回NULL*/public int hengXia(int x, int y) int r = -2;int i;/ 向下for (i = y + 1; i Chess.rows-1; i+) if (Chess.chessxi = 0) break;if (Chess.chessxi = Chess.chessxy) r = i;break;if (r != -2 & Chess.chessxy + 1 != Chess.chessxi) return new int x, r ; else return null;/* 向下检测是否有相同颜色棋子,如果有且不相邻,改变中间棋子颜色,否则返回NULL*/public int hengXia1(int x, int y) int r = -2;int i;/ 向下for (i = y + 1; i Chess.rows-1; i+) if (Chess.chessxi = 0) break;if (Chess.chessxi = Chess.chessxy) r = i;break;if (r != -2 & Chess.chessxy + 1 != Chess.chessxi) / 改变中间的子paintChess(x, y, x, r);return new int x, r ;JAVA 基础课程设计实验报告- 17 - else return null;/* 斜右上方向*/public int xieyouS(int x, int y) / 向上int r = -2, s = -2;int i, j;for (i = x + 1, j = y - 1; i = 0; i+, j-) if (Chess.chessij = 0) break;if (Chess.chessij = Chess.chessxy) r = i;s = j;break;if (r != -2 & s != -2& Chess.chessx + 1y - 1 != Chess.chessij) return new int r, s ; else return null;/* 斜右下方向*/public int xieyouX(int x, int y) / 向下int r = -2, s = -2;int i, j;for (i = x + 1, j = y + 1; i Chess.rows-1 & j = 0 & j = 0; i-, j-) if (Chess.chessij = 0) break;if (Chess.chessij = Chess.chessxy) r = i;s = j;break;if (r != -2 & s != -2& Chess.chessx - 1y - 1 != Chess.chessij) return new int r, s ; else return null;/* 斜左下方向*/public int xiezuoX(int x, int y) / 向下int r = -2, s = -2;int i, j;for (i = x - 1, j = y + 1; i = 0 & j Chess.cols-1; i-, j+) if (Chess.chessij = 0) break;JAVA 基础课程设计实验报告- 19 -if (Chess.chessij = Chess.chessxy) r = i;s = j;break;if (r != -2 & s != -2& Chess.chessx - 1y + 1 != Chess.chessij) return new int r, s ; else return null;/* 向右检测是否有相同颜色棋子,如果有且不相邻,改变中间棋子颜色,否则返回NULL*/public int hengYou1(int x, int y) int r = -2;int i;/ 向右for (i = x + 1; i = 0; i-) if (Chess.chessiy != 1 & Chess.chessiy != -1) break;if (Chess.chessiy = Chess.chessxy) r = i;break;if (r != -2 & Chess.chessx - 1y != Chess.chessiy) / 改变中间的子paintChess(x, y, r, y);return new int r, y ; else return null;/* 斜右上方向*/public int xieyou1(int x, int y) / 向上int r = -2, s = -2;int i, j;for (i = x + 1, j = y - 1; i = 0; i+, j-) if (Chess.chessij = 0) break;if (Chess.chessij = Chess.chessxy) r = i;s = j;break;if (r != -2 & s != -2& Chess.chessx + 1y - 1 != Chess.chessij) / 改变中间的子paintChess1(x, y, i, j);return new int r, s ; else return null;JAVA 基础课程设计实验报告- 21 -/* 斜右下方向*/public int xieyou2(int x, int y) / 向下int r = -2, s = -2;int i, j;for (i = x + 1, j = y + 1; i Chess.rows-1 & j = 0 & j = 0; i-, j-) if (Chess.chessij = 0) break;if (Chess.chessij = Chess.chessxy) r = i;s = j;break;JAVA 基础课程设计实验报告- 22 -if (r != -2 & s != -2& Chess.chessx - 1y - 1 != Chess.chessij) / 改变中间的子paintChess3(x, y, i, j);return new int r, s ; else return null;/* 斜左下方向*/public int xiezuo2(int x, int y) / 向下int r = -2, s = -2;int i, j;for (i = x - 1, j = y + 1; i = 0 & j Chess.cols-1; i-, j+) if (Chess.chessij = 0) break;if (Chess.chessij = Chess.chessxy) r = i;s = j;break;if (r != -2 & s != -2& Chess.chessx - 1y + 1 != Chess.chessij) / 改变中间的子paintChess4(x, y, i, j);return new int r, s ; else return null;JAVA 基础课程设计实验报告- 23 -第 4 章 测试与实验结果人人对战测试:1.下棋出错图:2.黑棋下:第 5 章 结束语通过两周的课程设计, 我学到了很多, 特别是对于团队合作的重要性有了更深的了解。在我们一个团队考虑做什么题目时,每个人都提出自己的意见,综合我们自己的实力和水平,选了这个黑白棋游戏,当时我们也很纠结,不知道选哪个,因为提出很多个题目给我们选择,好在我们最后果断的选择了它,毕竟这个题目在我们能力范围之内。在设计这个游戏过程中,最主要的是将黑白棋的规则通过 java 代码表示出来,其中还有人人对战,背景设置,菜单选项等功能需要实现,这个过程中就体现出团队的重要性,每个人都有自己负责的一部分,分工明确,这让游戏设计的进程大大加快,也让我更加了解我负责的那部分代码,加深了我对 Java 的了解,也学到了更多知识。JAVA 基础课程设计实验报告- 24 -参考文献1 於东军杨静宇编著Java 程序设计与应用开发清华大学出版社2 辛运帏编著Java 语言程序设计(第二版).【M】.人民邮电出版社3 王鹏编著JavaSwing 图形界面开发与案例详解.【M】.清华大学出版社,20083 辛运帏编著Java 语言程序设计例题解析与实验指导(第二版).【M】.人民邮电出版社