java课程设计报告书_第1页
java课程设计报告书_第2页
java课程设计报告书_第3页
免费预览已结束,剩余18页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java程序设计课程设计报告2015 2016学年 第二学期设计题目:数字连连看学生:黄杰学 号:专业班级:软件工程1402指导教师:国权2016年7 月2日目录1. JAVA程序设计书 31.1简易连连看3具体要求 31.2本系统设计的知识点32. 功能设计32.1算法设计 32.2部分模块流程图 43. 代码设计5144. 界面及运行效果,测试工具与测试效果5. 设计总结165.1. 程序调试情况:165.2. 本人在程序设计中感想:166. 致 16主要参考文献 16I.IJava程序课程设计任务书1.1简易连连看游戏本程序基本实现了小游戏连连看的功能,玩家找出游戏中2个相同图案的方块,

2、如果它们之间的连接线不多于3根直线,则将其连接起来,就可以成功将图案相 同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列, 可重新排序,游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己 之前所创纪录。具体要求(包括技术要求等):<1>.该游戏界面为方格类型,由纵 6横7的直线平行垂直交叉组成,分别是 6 行5列方块拼接,共有30格小方块。方块上随机分布一些数字,数字的要至少 两两相同,位置随机打乱。<2>.当将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接, 否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返

3、回 所得分数。<3>.重列按钮(帮助)的功能:游戏过程中,遇到困难难以寻找下一符合要求 的一对数字,可按左下按钮重置重新排列方可继续游戏。<4>.退出按钮:击左下方的“退出游戏”按钮,即可结束游戏。1.2本系统涉及的知识点:循环,javaGUI组件,函数,数组,分支等2.功能设计2.1算法设计本系统需要实现的功能要求:数字按钮:1.设计填有数字的按钮2.设计放按钮的界面图一,数字按钮功能模块重列,结束,再来一局: 1对数据重新排列2结束游戏图二,三个功能按钮模块数据记录:输出完成游戏所得分数图三,数据记录模块鼠标操作1.操作数字之间的连接2.对已成功配对的进行消除图四,

4、鼠标操作模块2.2部分模块流程图:设计填有数字的按钮3代码设计package grame;/* lia nl ia nka n总体算法思路:由两个确定的按钮。若这两个按钮的数字相等,就开始找它们相连的路经。这个找路经*分3种情况:(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。这样就会有*三条路经。若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)* 1.相邻* 2.若不相邻的先在第一个按钮的同行找一个空按钮。1).找到后看第二个按钮横向到这个空按钮*所在的列是否有按钮。2).没有的话再看第一个按钮到与它同行的

5、那个空按钮之间是否有按钮。3).没有的话,再从*与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。没有的话路经就通了 ,可以消了 .* 3.若2失败后,再在第一个按钮的同列找一个空按钮。1).找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮。* 2).没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。3).没有的话,再从与第一个按钮同列的*那个空按钮横向到与第二个按钮同列看是否有按钮。没有的话路经就通了,可以消了 *若以上三步都失败,说明这两个按钮不可以消去。*/import javax.swing.*;import java.awt.*;import java

6、.awt.event.*;public class LianLianKanimplements ActionListener JFrame mainFrame; / 主面板Container thisC on tai nerJPanelcenterPanel,southPanel, northPanel ;/ 子面板JButtondiamondsButton =new JButton65;/ 游戏按钮数组JButtonexitButton,resetButton, newlyButton; / 退岀,重列,重新开始按钮JLabel fractionLable= new JLabel( &quo

7、t;0"); / 实例化分数标签,并初始化为"0”JButton firstButton, secondButton ; / 分别记录两次被选中的按钮/储存游戏按钮位置(这里其实只要6行,5列。但是我们用了 8行,7列。是等于在这个面板按钮的周围还围/ 了一层是0的按钮,这样就可以实现靠近面板边缘的两个按钮可以消去)int grid = new int 87;staticboolea n press In formati on= false ; / 判断是否有按钮被选中int x0 = 0, y0 = 0, x = 0, y = 0, fristMsg = 0,second

8、Msg = 0, validateLV ; / 游戏按钮的位置坐标int i , j , k, n;/消除方法控制public void init()mainFrame = newJFrame( "JKJ 连连看 ”);/ 实例化thisContainer = mainFrame.getContentPane(); / 将thisContainer 放入 mainFrame的容窗口中 thisContainer .setLayout( new BorderLayout(); / 为 thisContainer 仓U建 Borderlayout 布局管 理器centerPanel =

9、new JPanel(); / 实例化southPanel = new JPanel();/ 实例化northPanel = new JPanel();/ 实例化thisCo nta in er.add( cen terPa nel , "Ce nter" ); / 以下三行是为 thisCo nta in er容器添加不同方位的新的面板组件thisContainer.add( southPanel , "South");thisContainer.add( northPanel , "North");centerPanel .set

10、Layout( new GridLayout(6, 5);/ 为 centerPanel 面板设置网格式布局管理器(6行5列)的容纳组建的网格for ( int cols = 0;cols < 6;cols +) for ( int rows = 0;rows < 5;rows +) diamondsButton cols rows = new JButton(String.valueOf (grid cols + 1 rows + 1); /将数组的行数与列数各自加一后对应元素转化为字符串类型并赋值给对应的原始数组按钮diamondsButton cols rows.addAct

11、ionListener(this ); / 为每个网格单元设置事件监听接口centerPanel .add( diamondsButton cols rows);exitButton = new JButton("退岀”);/实例特定按钮并添加时间监听接口exitButton.addActionListener(this );resetButton= new JButton("重列");resetButton .addActionListener(this );newlyButton = new JButton("再来一局");newlyBut

12、ton .addActionListener(this );southPanel .add( exitButton ); /将三个特定接口添加到三个确定方位布局的面板组件容器中 southPanel .add( resetButton );southPanel .add( newlyButton );fractionLable.setText(String. valueOf (Integer.parseInt (fractionLable.getText();/嵌套,把整形对象Integer转换成基本数据类型int (整数)再转化为字符串型。/设置主界面的大小EXIT_ON_CLOSEnort

13、hPanel .add( fractionLable);mainFrame.setBounds(280, 100, 500, 450); mainFrame.setVisible(true ); / 设置可见mainF rame.setDefaultCloseOperati on( JFrame.设置当点击后界面仍旧停留且不会退岀进程public void randomBuild() / 随机数intrandoms, cols , rows;for ( int twi ns = 1; twi ns <= 15; twins +) / 一共 15对 butt on,30 个 butt on

14、 上的数字 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( gridcols rows != 0) /等于0 说明这个空格有了butt oncols = ( int ) (Math.random() * 6 + 1);rows= (in

15、t)(Math.random() * 5 +1);this . grid cols rows = randoms; public void fraction() fractionLable.setText(String. valueOf (Integer.parseInt (fractionLable100);.getText() +public void reload() int save = new int 30;int n = 0, cols , rows;int grid = new int 87;for( inti= 0;i<= 6;i +) for(intj= 0;j<

16、= 5;j +) if ( this . grid i j != 0) save n = this . grid i j ; / 记下每个 button 的数字 n+; /有几个没有消去的 butt onn = n - 1;this . grid = gridwhile ( n >= 0) /把没有消去的 button重新放一次cols = ( int ) (Math. rows = ( int ) (Math. while ( grid cols cols = ( int ) (Math. rows = ( int ) (Math.ran dom() * 6 + 1);ran dom(

17、) * 5 + 1); rows != 0) ran dom() * 6 + 1);ran dom() * 5 + 1);this . grid cols rows = save n;n-;mainFrame.setVisible( false ); press In formati on = false ; / ini t();for ( inti=0;i<6; i +) for ( intj=0;j<5; j +) if ( gridi+1j+1 = 0)diamondsButton ij.setVisible(这里一定要将按钮点击信息归为初始false );public vo

18、id estimateEven(int placeX , int placeY , JButtonbz) if ( press In formati on= false ) x = placeX ;y = placeY ;sec on dMsg = grid x y;sec on dButt on = bz;press In formati on = true ; else x0 = x;yO = y;fristMsg = sec on dMsg;firstButt on= sec on dButt on ;x = placeX ;y = placeY ;sec on dMsg = grid

19、x y;sec on dButt on = bz;if ( fristMsg = sec on dMsg && sec on dButt on 匸 firstButt on) 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 ( grid x0 j = 0)

20、 /判断和第一个按钮同行的哪个按钮为空/如果找到一个为空的,就按列值的三种情况比较第二个按钮与空按钮的位置if ( y > j) /第二个按钮在空按钮右边for ( i = y - 1; i >= j ; i -) /检测从第二个按钮横向左边到空格所在列为止是否全是空格if ( grid x i != 0) k = 0;break ;/存在非空格的就退岀,这一退岀就不可能k=2了,所以就会到下而 215行岀同理的判断列 else k = 1; / K=1说明全是空格通过了第一次验证,也就是从第二个按钮横向左边到空格所在列为止全是 空格if ( k = 1) linePassOne(

21、);/进入第二次验证,也就是从第一个按钮到它同行的空格之间的空格判断if ( y < j) /第二个按钮在空按钮左边for (i = y + 1; i <= j ; i +) /检测从第二个按钮横向右边到空格所在列为止是否全是空格if ( grid x i != 0) k = 0;break ; else k = 1;if ( k = 1) lin ePassO ne();if ( y = j ) /第二个按钮和空按钮同列lin ePassO ne();/第三次检测,检测确定为空的第j列的那个按钮竖向到第二个按钮,看是不是有按钮if ( k = 2) if ( x0 = x) /第

22、一,二按钮在同行remove();if ( x0 < x) /第一按钮在第二按钮下边for ( n = x0; n <= x - 1;n +) /从空按钮竖向到第二个按钮所在行是否有按钮if ( grid n j != 0) k = 0;break ;/没有按钮,说明这条路经就通了if ( grid n j = 0 && n = x - 1) remove();if ( x0 > x) /第一按钮在第二按钮上边for (n = x0; n >= x + 1;n -) if ( grid n j != 0) k = 0;break ;if ( grid n

23、 j = 0 && n = x + 1) remove();/当上面的检测与第一个按钮同行的空格按钮失败后(不能找到与第二个按钮的相连路经),下面就执行/检测与第一个按钮同列的空格按钮for ( i = 0; i < 8; i +) if ( grid i y0 = 0) /判断和第一个按钮同列的哪个按钮为空if (x > i) /第二个按钮在这个空按钮的下面for ( j = x - 1; j >= i ; j -) if ( grid j y != 0) k = 0;break ; else k = 1;if ( k = 1) rowPass On e()

24、;if ( x < i) /第二个按钮在这个空按钮的上面for ( j = x + 1; j <= i ; j +) if ( grid j y != 0) k = 0;break ; else k = 1;if ( k = 1) rowPass On e();if ( x = i ) /第二个按钮与这个空按钮同行rowPass On e();if ( k = 2) if ( y0 = y) /第二个按钮与第一个按钮同列remove();if ( y0 < y) /第二个按钮在第一个按钮右边for (n = yO; n <= y - 1;n+) if ( grid i

25、n != 0) k = 0;break ;if ( grid i n = 0 && n = y - 1) remove。; if ( y0 > y) /第二个按钮在第一个按钮左边for (n = y0; n >= y + 1; n _) if ( grid i n != 0) k = 0;break ;if ( grid i n = 0 && n = y + 1) remove();/for/else/xiao public void lin ePass On e() if ( y0 > j ) /第一按钮同行空按钮在左边for ( i = y

26、0 - 1; i >= j ; i -) /判断第一按钮同左侧空按钮之间有没按钮if ( grid x0 i != 0) k = 0;break ; else k = 2; / K=2说明通过了第二次验证if ( y0 < j ) /第一按钮同行空按钮在右边for ( i = y0 + 1; i <= j ; i +) if ( grid x0 i != 0) k = 0;break ; else k = 2;public void rowPassOne() if ( x0 > i ) /第一个按钮在与它同列的那个空格按钮下面for ( j = x0 - 1; j &g

27、t;= i ; j -) if ( grid j yO != 0) k = 0;break ; else k = 2;if ( x0 < i ) /第一个按钮在与它同列的那个空格按钮上面for ( j = x0 + 1; j <= i ; j +) if ( grid j y0 != 0) k = 0;break ; else k = 2; public void remove。firstButton.setVisible( false );sec on dButt on .setVisible( false ); fractio n();press In formati on=

28、false ;k = 0;grid x0 y0 = 0;grid x y = 0;e) /对按钮事件发生后的定义/具体的消去容,并将已消去的按钮值赋值为“0”public void acti on Performed(Acti on Eve nt if ( e.getSource() =newlyButton ) int grid = new int 87;this . grid = grid ;ran domBuild();mainFrame.setVisible( false );press In formati on= false ;ini t();if ( e.getSource()

29、=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() =diamondsButton cols rows)estimateEve n( cols + 1, rows + 1,diam on dsButt on cols rows);public static void main(Stringargs ) / 主函数,调用。Lia nLia nKanllk = new Lia nLia nKan();llk .randomBuild();llk .init();4. 界面及运行效果、测试工具与测试效果电"« ETH&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论