简易数字连连看Java程序的设计书_第1页
简易数字连连看Java程序的设计书_第2页
简易数字连连看Java程序的设计书_第3页
简易数字连连看Java程序的设计书_第4页
免费预览已结束,剩余28页可下载查看

下载本文档

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

文档简介

1、简易数字连连看Java 程序设计书1.1Java 程序课程设计任务书1.1 简易连连看游戏本程序基本实现了小游戏连连看的功能,玩家找出游戏中2 个相同图案的方块,如果它们之间的连接线不多于3 根直线,则将其连接起来, 就可以成功将图案相同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列,可重新排序, 游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己之前所创纪录。1.1.1 具体要求(包括技术要求等) :.该游戏界面为方格类型,由纵6 横 7 的直线平行垂直交叉组成,分别是6行 5 列方块拼接,共有 30 格小方块。方块上随机分布一些数字,数字的要至少两两相同,位置随

2、机打乱。. 当将相同数字的方块连接, 但要满足只能至少单边无阻碍呈直线趋势连接,否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返回所得分数。. 重列按钮(帮助)的功能:游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列 方可继续游戏。. 退出按钮:击左下方的“退出游戏”按钮,即可结束游戏。1.2 本系统涉及的知识点:循环, javaGUI 组件,函数,数组,分支等2功能设计2.1 算法设计本系统需要实现的功能要求:数字按钮:1. 设计填有数字的按钮2. 设计放按钮的界面图一,数字按钮功能模块重列,结束,再来一局:1.对数据重新排列2.结束游戏图二,

3、三个功能按钮模块数据记录:输出完成游戏所得分数图三,数据记录模块鼠标操作1. 操作数字之间的连接2. 对已成功配对的进行消除图四,鼠标操作模块2.2 部分模块流程图:连连看游戏系统数字按钮数据记录鼠标操作重列,结束,再来一局对结操对输作成设设束数游出数功计计据戏完字配铺填重成间对有放新游的的数按排戏链数字钮列所接字的的得(进按界分配行钮面数对消)除3 代码设计package grame;/* lianliankan总体算法思路:由两个确定的按钮。若这两个按钮的数字相等,就开始找它们相连的路经。这个找路经* 分 3种情况: ( 从下面的这三种情况,我们可以知道,需要三个检测,

4、这三个检测分别检测一条直路经。这样就会有* 三条路经。若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了 )*1.相邻* 2.若不相邻的先在第一个按钮的同行找一个空按钮。1). 找到后看第二个按钮横向到这个空按钮* 所在的列是否有按钮。 2). 没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。 3). 没有的话,再从* 与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。没有的话路经就通了 , 可以消了 .* 3.若 2失败后,再在第一个按钮的同列找一个空按钮。1). 找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮。* 2).没有的

5、话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。3). 没有的话,再从与第一个按钮同列的* 那个空按钮横向到与第二个按钮同列看是否有按钮。没有的话路经就通了,可以消了。* 若以上三步都失败,说明这两个按钮不可以消去。*/importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassLianLianKanimplementsActionListener JFrame mainFrame ;/主面板ContainerthisContainer;JPanelcenterPanel,southPanel,north

6、Panel;/子面板JButtondiamondsButton =new JButton65;/游戏按钮数组JButtonexitButton,resetButton,newlyButton;/退出,重列,重新开始按钮JLabelfractionLable=new JLabel(0 );/实例化分数标签, 并初始化为“ 0”JButtonfirstButton,secondButton ;/分别记录两次被选中的按钮/储存游戏按钮位置( 这里其实只要6行, 5列。但是我们用了8行, 7列。是等于在这个面板按钮的周围还围/ 了一层是 0的按钮 , 这样就可以实现靠近面板边缘的两个按钮可以消去)in

7、tgrid =new int 87;staticboolean pressInformation =false ; /判断是否有按钮被选中intx0 = 0,y0 = 0,x = 0, y = 0,fristMsg= 0, secondMsg = 0,validateLV ; / 游戏按钮的位置坐标inti ,j , k,n; /消除方法控制publicvoidinit()mainFrame =new JFrame( JKJ 连连看 ); / 实例化thisContainer= mainFrame.getContentPane();/将 thisContainer放入 mainFrame的容窗

8、口中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.ad

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

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

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

12、ame.setBounds(280, 100, 500, 450);/ 设置主界面的大小mainFrame.setVisible(true ); / 设置可见mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); / 设置当点击后界面仍旧停留且不会退出进程public voidrandomBuild() /随机数intrandoms,cols ,rows ;for( int twins= 1;twins= 15;twins +) /一共 15对 button,30个 button上的数字randoms = (int) (Math.ra

13、ndom() * 25 + 1);/ 强制转换随机函数产生的数值,并进行必要运算避免“ 0”for ( intalike= 1;alike= 2; alike +) cols = ( int ) (Math.random() * 6 + 1);/ 随机选取连连看中的单元网格rows = ( int ) (Math.random() * 5 + 1);while ( grid cols rows != 0) /等于 0说明这个空格有了 buttoncols = (int) (Math.()*6+1);randomrows = ( int ) (Math.random() * 5 + 1);thi

14、s. grid cols rows =randoms;publicvoidfraction() fractionLable.setText(String.valueOf(Integer.parseInt( fractionLable.getText() +100);public voidreload() intsave =newint 30;intn = 0,cols,rows ;intgrid =new int87;for(inti= 0;i= 6;i +) for(intj= 0;j= 0) /把没有消去的 button重新放一次cols= ( int ) (Math.random() *

15、 6 + 1);rows= ( int) (Math.random() * 5 + 1);while( grid colsrows != 0) cols= ( int ) (Math.random() * 6 + 1);rows= ( int) (Math.random() * 5 + 1);this. grid cols rows =save n;n-;mainFrame.setVisible(false);pressInformation=false ;/这里一定要将按钮点击信息归为初始init();for(inti= 0;i 6;i +) for(intj= 0;j 5;j +) if(

16、grid i+ 1j+1=0)diamondsButton i j .setVisible(false );public voidestimateEven(intplaceX , int placeY , JButtonbz ) if (pressInformation=false) x =placeX ;y =placeY ;secondMsg =grid xy;secondButton= bz ;pressInformation=true ; else x0 = x ;y0 =y ;fristMsg =secondMsg;firstButton=secondButton ;x =place

17、X ;y =placeY ;secondMsg =grid x y;secondButton=bz ;if (fristMsg= secondMsg & secondButton != firstButton) xiao();publicvoidxiao() /相同的情况下能不能消去。if(x0 =x & ( y0 =y + 1 |y0 =y - 1)| (x0 =x + 1 |x0 =x - 1)& ( y0 =y) /判断是否相邻remove();else for( j = 0;j j ) / 第二个按钮在空按钮右边for( i =y - 1;i =j ;i -) / 检测从第二个按钮横向

18、左边到空格所在列为止是否全是空格if( grid x i != 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( grid x i !=

19、 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 =if( gridx0; nn x ) / 第一按钮在第二按钮上边for( n =x0;n = x + 1;n-) if( grid nj != 0) k = 0;break ;if( g

20、rid n j = 0 &n =x + 1) remove();/ 当上面的检测与第一个按钮同行的空格按钮失败后( 不能找到与第二个按钮的相连路经) ,下面就执行/ 检测与第一个按钮同列的空格按钮for( i=0;ii ) / 第二个按钮在这个空按钮的下面for( j=x - 1;j=i ;j -) if( grid j y != 0) k = 0;break ; else k = 1;if( k = 1) rowPassOne();if( x i ) / 第二个按钮在这个空按钮的上面for( j =x + 1;j =i ;j +) if( grid j y != 0) k = 0; brea

21、k ; 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 ) / 第二个按钮在第一个按钮左边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 /-xiaopub

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

23、/ 第一个按钮在与它同列的那个空格按钮上面forif( grid( j = j x0 + 1;j =i ;j +) y0 != 0) k = 0; break ; else k = 2;publicvoidremove() firstButton.setVisible(false);secondButton.setVisible(false);fraction();pressInformation=false ;k = 0;grid x0 y0 = 0;grid x y = 0; / 具体的消去容,并将已消去的按钮值赋值为“ 0”public voidactionPerformed(Actio

24、nEvente) /对按钮事件发生后的定义if(e.getSource() =newlyButton) intgrid =newint 87;this. grid=grid;randomBuild();mainFrame.setVisible(false );pressInformation=false;init();if(e.getSource() =exitButton)System. exit (0);if(e.getSource() =resetButton)reload();for(intcols = 0;cols 6;cols +) for(introws = 0;rows 5;rows +) if(e.getSource() =diamondsButton cols rows )estimateEven(cols+ 1,rows + 1,diamondsButton cols rows ); publicstaticvoidmain(Stringargs ) / 主函数,调用。LianLianKanllk=new LianLianKan();llk.randomBuild();llk.init();4. 界面及运行效果、测试工具与测试效果5. 设计总结5.1. 程序调试情况:在检验两个方块能否消掉的时候, 我们要让两个方块

温馨提示

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

评论

0/150

提交评论