java课程设计教学提纲.doc
如有侵权,请联系网站删除,仅供学习与交流java课程设计【精品文档】第 11 页Java程序设计课程设计报告20152016学年 第二学期设计题目: 数字连连看 学生姓名: 黄杰 学 号: 311409060212 专业班级: 软件工程1402 指导教师: 姜国权 2016 年 7 月 2 日目录1.JAVA程序设计书31.1简易连连看31.1.1具体要求31.2本系统设计的知识点32.功能设计32.1算法设计32.2部分模块流程图43.代码设计54.界面及运行效果,测试工具与测试效果 145.设计总结 165.1.程序调试情况:165.2.本人在程序设计中感想:166.致谢 16主要参考文献161.1Java程序课程设计任务书1.1简易连连看游戏 本程序基本实现了小游戏连连看的功能,玩家找出游戏中2个相同图案的方块,如果它们之间的连接线不多于3根直线,则将其连接起来,就可以成功将图案相同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列,可重新排序,游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己之前所创纪录。1.1.1具体要求(包括技术要求等):<1>. 该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。方块上随机分布一些数字,数字的要求是至少两两相同,位置随机打乱。<2>. 当将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返回所得分数。<3>. 重列按钮(帮助)的功能:游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列 方可继续游戏。<4>. 退出按钮:击左下方的 “退出游戏”按钮,即可结束游戏。1.2本系统涉及的知识点:循环,javaGUI组件,函数,数组,分支等2功能设计2.1算法设计本系统需要实现的功能要求:数字按钮:1. 设计填有数字的按钮2. 设计放按钮的界面图一,数字按钮功能模块重列,结束,再来一局:1.对数据重新排列2.结束游戏图二,三个功能按钮模块数据记录:输出完成游戏所得分数图三,数据记录模块鼠标操作1. 操作数字之间的连接2. 对已成功配对的进行消除图四,鼠标操作模块2.2部分模块流程图:连连看游戏系统数据记录鼠标操作数字按钮重列,结束,再来一局操作数字间的链接(配对)对成功配对的数字进行消除输出完成游戏所得分数结束游戏对数据重新排列设计铺放按钮的界面设计填有数字的按钮3代码设计package mybase.programe;* lianliankan总体算法思路:由两个确定的按钮。若这两个按钮的数字相等,就开始找它们相连的路经。这个找路经* 分3种情况:(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。这样就会有* 三条路经。若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)* 1.相邻* 2. 若不相邻的先在第一个按钮的同行找一个空按钮。1).找到后看第二个按钮横向到这个空按钮* 所在的列是否有按钮。2).没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。3).没有的话,再从* 与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。没有的话路经就通了,可以消了.* 3.若2失败后,再在第一个按钮的同列找一个空按钮。1).找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮。* 2).没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。3).没有的话,再从与第一个按钮同列的* 那个空按钮横向到与第二个按钮同列看是否有按钮。没有的话路经就通了,可以消了。* 若以上三步都失败,说明这两个按钮不可以消去。import javax.swing.*;import java.awt.*;import java.awt.event.*;public class LianLianKan implements ActionListener JFrame mainFrame; / 主面板Container thisContainer;JPanel centerPanel, southPanel, northPanel; / 子面板JButton diamondsButton = new JButton65;/ 游戏按钮数组JButton exitButton, resetButton, newlyButton; / 退出,重列,重新开始按钮 JLabel fractionLable = new JLabel("0"); / 实例化分数标签,并初始化为“0”JButton firstButton, secondButton; / 分别记录两次被选中的按钮/ 储存游戏按钮位置(这里其实只要6行,5列。但是我们用了8行,7列。是等于在这个面板按钮的周围还围/了一层是0的按钮,这样就可以实现靠近面板边缘的两个按钮可以消去) int grid = new int87;static boolean pressInformation = false; / 判断是否有按钮被选中int x0 = 0, y0 = 0, x = 0, y = 0, fristMsg = 0, secondMsg = 0, validateLV; / 游戏按钮的位置坐标int i, j, k, n;/ 消除方法控制public void init()mainFrame = new JFrame("JKJ连连看");/实例化thisContainer = mainFrame.getContentPane();/将thisContainer放入mainFrame的内容窗口中thisContainer.setLayout(new BorderLayout();/为thisContainer创建Borderlayout布局管理器centerPanel = new JPanel();/实例化southPanel = new JPanel();/实例化northPanel = new JPanel();/实例化thisContainer.add(centerPanel, "Center");/以下三行是为thisContainer容器添加不同方位的新的面板组件thisContainer.add(southPanel, "South");thisContainer.add(northPanel, "North");centerPanel.setLayout(new GridLayout(6, 5);/为centerPanel面板设置网格式布局管理器(6行5列)的容纳组建的网格for (int cols = 0; cols < 6; cols+) for (int rows = 0; rows < 5; rows+) diamondsButtoncolsrows = new JButton(String.valueOf(gridcols + 1rows + 1);/将数组的行数与列数各自加一后对应元素转化为字符串类型并赋值给对应的原始数组按钮diamondsButtoncolsrows.addActionListener(this);/为每个网格单元设置事件监听接口centerPanel.add(diamondsButtoncolsrows);exitButton = new JButton("退出");/实例特定按钮并添加时间监听接口exitButton.addActionListener(this);resetButton = new JButton("重列");resetButton.addActionListener(this);newlyButton = new JButton("再来一局");newlyButton.addActionListener(this);southPanel.add(exitButton);/将三个特定接口添加到三个确定方位布局的面板组件容器中southPanel.add(resetButton);southPanel.add(newlyButton);fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText();/嵌套,把整形对象Integer转换成基本数据类型int(整数)再转化为字符串型。northPanel.add(fractionLable);mainFrame.setBounds(280, 100, 500, 450);/设置主界面的大小mainFrame.setVisible(true);/设置可见mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /设置当点击后界面仍旧停留且不会退出进程public void randomBuild() /随机数int randoms, cols, rows;for (int twins = 1; twins <= 15; twins+) /一共15对button,30个 button上的数字randoms = (int) (Math.random() * 25 + 1);/强制转换随机函数产生的数值,并进行必要运算避免“0”for (int alike = 1; alike <= 2; alike+) cols = (int) (Math.random() * 6 + 1);/随机选取连连看中的单元网格rows = (int) (Math.random() * 5 + 1);while (gridcolsrows != 0) /等于0说明这个空格有了button cols = (int) (Math.random() * 6 + 1);rows = (int) (Math.random() * 5 + 1);this.gridcolsrows = randoms;public void fraction() fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable .getText() + 100);public void reload() int save = new int30;int n = 0, cols, rows;int grid = new int87;for (int i = 0; i <= 6; i+) for (int j = 0; j <= 5; j+) if (this.gridij != 0) saven = this.gridij;/记下每个button的数字n+;/有几个没有消去的buttonn = n - 1;this.grid = grid;while (n >= 0) /把没有消去的button重新放一次cols = (int) (Math.random() * 6 + 1);rows = (int) (Math.random() * 5 + 1);while (gridcolsrows != 0) cols = (int) (Math.random() * 6 + 1);rows = (int) (Math.random() * 5 + 1);this.gridcolsrows = saven;n-;mainFrame.setVisible(false);pressInformation = false; / 这里一定要将按钮点击信息归为初始init();for (int i = 0; i < 6; i+) for (int j = 0; j < 5; j+) if (gridi + 1j + 1 = 0)diamondsButtonij.setVisible(false);public void estimateEven(int placeX, int placeY, JButton bz) if (pressInformation = false) x = placeX;y = placeY;secondMsg = gridxy;secondButton = bz;pressInformation = true; else x0 = x;y0 = y;fristMsg = secondMsg;firstButton = secondButton;x = placeX;y = placeY;secondMsg = gridxy;secondButton = bz;if (fristMsg = secondMsg && secondButton != firstButton) xiao();public void xiao() / 相同的情况下能不能消去。if (x0 = x && (y0 = y + 1 | y0 = y - 1)| (x0 = x + 1 | x0 = x - 1) && (y0 = y) / 判断是否相邻remove();else for (j = 0; j < 7; j+) if (gridx0j = 0) / 判断和第一个按钮同行的哪个按钮为空/如果找到一个为空的,就按列值的三种情况比较第二个按钮与空按钮的位置if (y > j) /第二个按钮在空按钮右边for (i = y - 1; i >= j; i-) /检测从第二个按钮横向左边到空格所在列为止是否全是空格if (gridxi != 0) k = 0;break;/存在非空格的就退出,这一退出就不可能k=2了,所以就会到下而215行出同理的判断列 else k = 1; / K=1说明全是空格通过了第一次验证,也就是从第二个按钮横向左边到空格所在列为止全是空格if (k = 1) linePassOne();/进入第二次验证,也就是从第一个按钮到它同行的空格之间的空格判断if (y < j) / 第二个按钮在空按钮左边for (i = y + 1; i <= j; i+) /检测从第二个按钮横向右边到空格所在列为止是否全是空格if (gridxi != 0) k = 0;break; else k = 1;if (k = 1) linePassOne();if (y = j) /第二个按钮和空按钮同列linePassOne();/第三次检测,检测确定为空的第j列的那个按钮竖向到第二个按钮,看是不是有按钮if (k = 2) if (x0 = x) /第一,二按钮在同行remove();if (x0 < x) /第一按钮在第二按钮下边for (n = x0; n <= x - 1; n+) /从空按钮竖向到第二个按钮所在行是否有按钮if (gridnj != 0) k = 0;break;/没有按钮,说明这条路经就通了if (gridnj = 0 && n = x - 1) remove();if (x0 > x) /第一按钮在第二按钮上边for (n = x0; n >= x + 1; n-) if (gridnj != 0) k = 0;break;if (gridnj = 0 && n = x + 1) remove();/当上面的检测与第一个按钮同行的空格按钮失败后(不能找到与第二个按钮的相连路经),下面就执行/检测与第一个按钮同列的空格按钮for (i = 0; i < 8; i+) if (gridiy0 = 0) / 判断和第一个按钮同列的哪个按钮为空if (x > i) /第二个按钮在这个空按钮的下面for (j = x - 1; j >= i; j-) if (gridjy != 0) k = 0;break; else k = 1;if (k = 1) rowPassOne();if (x < i) /第二个按钮在这个空按钮的上面 for (j = x + 1; j <= i; j+) if (gridjy != 0) k = 0;break; else k = 1;if (k = 1) rowPassOne();if (x = i) /第二个按钮与这个空按钮同行 rowPassOne();if (k = 2) if (y0 = y) /第二个按钮与第一个按钮同列 remove();if (y0 < y) /第二个按钮在第一个按钮右边 for (n = y0; n <= y - 1; n+) if (gridin != 0) k = 0;break;if (gridin = 0 && n = y - 1) remove();if (y0 > y) /第二个按钮在第一个按钮左边for (n = y0; n >= y + 1; n-) if (gridin != 0) k = 0;break;if (gridin = 0 && n = y + 1) remove();/-for/-else/-xiaopublic void linePassOne() if (y0 > j) / 第一按钮同行空按钮在左边for (i = y0 - 1; i >= j; i-) / 判断第一按钮同左侧空按钮之间有没按钮if (gridx0i != 0) k = 0;break; else k = 2; / K=2说明通过了第二次验证if (y0 < j) / 第一按钮同行空按钮在右边for (i = y0 + 1; i <= j; i+) if (gridx0i != 0) k = 0;break; else k = 2;public void rowPassOne() if (x0 > i) /第一个按钮在与它同列的那个空格按钮下面for (j = x0 - 1; j >= i; j-) if (gridjy0 != 0) k = 0;break; else k = 2;if (x0 < i) /第一个按钮在与它同列的那个空格按钮上面for (j = x0 + 1; j <= i; j+) if (gridjy0 != 0) k = 0;break; else k = 2;public void remove() firstButton.setVisible(false);secondButton.setVisible(false);fraction();pressInformation = false;k = 0;gridx0y0 = 0;gridxy = 0;/具体的消去内容,并将已消去的按钮值赋值为“0”public void actionPerformed(ActionEvent e) /对按钮事件发生后的定义if (e.getSource() = newlyButton) int grid = new int87;this.grid = grid;randomBuild();mainFrame.setVisible(false);pressInformation = false;init();if (e.getSource() = exitButton)System.exit(0);if (e.getSource() = resetButton)reload();for (int cols = 0; cols < 6; cols+) for (int rows = 0; rows < 5; rows+) if (e.getSource() = diamondsButtoncolsrows)estimateEven(cols + 1, rows + 1, diamondsButtoncolsrows); public static void main(String args) /主函数,调用。LianLianKan llk = new LianLianKan();llk.randomBuild();llk.init();4. 界面及运行效果、测试工具与测试效果5.设计总结5.1.程序调试情况:在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。分三种情况:(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路径。这样就会有三条路径。若这三条路径上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)5.2.本人在程序设计中感想:由于市场需要,游戏的更新速度步步加快,为了适应社会的需要,社会对游戏开发人员的需求,在游戏编程的学习过程中,必须理论与实践结合,提高编程能力与水平。通过小游戏的设计,对以学过的内容加深理解,对游戏开发的过程有初步的认识,为以后的游戏开发设计和更加深入的学习计算机语言打下夯实的基础。目前竞争日益激烈的行业环境,对于未来行业的前景,还是要保持乐观的心态。毕竟游戏并不是一下子就可以编写成的。需要不断的技术积累,需要团队的合作,提高了工作的效率,才算是在游戏开发的道路上成功了一半。在现在这个信息化飞速发展的道路上,要成为一名合格的编程人员,那就必须走好每一步现在的路。基于Java的连连看小游戏,满足了用户娱乐的需求,已经达到了预期的目标。虽然该游戏大部分功能基本上已经实现,但是还是会存在一些不足。在今后的进步中,会逐步改进。6.致谢 本次课设得以完成衷心感谢姜国权老师的教学指导 感谢DY社团对编程有兴趣大的小伙伴们在我一筹莫展的时候对我的大力支持。主要参考文献1(美)克罗夫特(David Wallace Croft)著 彭晖译. Java游戏高级编程J. 清华大学出版社,20052 (美)David Brackeen著 邱仲潘译. Java游戏编程J. 科学出版社,20043 聂庆亮编著. Java应用开发指南J. 清华大学出版社,20104 耿祥义,张跃平编著. Java面向对象程序设计J. 清华大学出版社,20105 杨绍方编著. Java编程实用技术与案例J. 清华大学出版社,2000.116 明日科技编著. Java编程全能词典J. 电子工业出版社,2010