《简易数字连连看Java程序设计书(共15页).pdf》由会员分享,可在线阅读,更多相关《简易数字连连看Java程序设计书(共15页).pdf(15页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、简易(jiny)数字(shz)连连看 Java 程序设计(shj)书 1.1Java 程序(chngx)课程设计任务书 1.1简易(jiny)连连看游戏 本程序基本实现了小游戏连连看的功能,玩家找出游戏中2 个相同图案的方块,如果它们之间的连接线不多于 3 根直线,则将其连接起来,就可以成功将图案相同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列,可重新排序,游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己之前所创纪录。1.1.1 具体要求(包括技术要求等):.该游戏界面为方格类型,由纵 6 横 7 的直线平行垂直交叉组成,分别是 6行 5 列方块拼接,共有 30
2、 格小方块。方块上随机分布一些数字,数字的要求是至少两两相同,位置随机打乱。.当将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返回所得分数。.重列按钮(帮助)的功能:游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列 方可继续游戏。.退出按钮:击左下方的“退出游戏”按钮,即可结束游戏。1.2 本系统涉及的知识点:循环,javaGUI 组件,函数,数组,分支等 2功能设计 2.1 算法设计 本系统需要实现的功能要求:图一,数字按钮功能模块 数字按钮:1.设计填有数字的按钮 2.设计放按钮
3、的界面 图二,三个功能(gngnng)按钮模块 图三,数据(shj)记录模块 图四,鼠标操作(cozu)模块 2.2 部分(b fen)模块流程图:重列,结束,再来一局:1.对数据重新排列 2.结束游戏 数据记录:输出完成游戏所得分数 鼠标操作 1.操作数字之间的连接 2.对已成功配对的进行消除 连连看游戏系统 数字按钮 重列,结数据记鼠标操作 设计填有数字的按钮 设计铺放按钮的界面 对数据重新排列 结束游戏 输出完成游戏所得分数 操作数字间的链接(配对成功配对的数字进行消 3 代码(di m)设计 package mybase.programe;/*lianliankan总体算法思路:由两个
4、确定的按钮。若这两个按钮的数字相等,就开始找它们相连(xin lin)的路经。这个找路经*分3种情况:(从下面(xi mian)的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。这样就会有*三条路经。若这三条路经上都是空按钮,那么就刚好是三种直线(两个(lin)转弯点)把两个按钮连接起来了)*1.相邻(xin ln)*2.若不相邻的先在第一个按钮的同行找一个空按钮。1).找到后看第二个按钮横向到这个空按钮*所在的列是否有按钮。2).没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。3).没有的话,再从*与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有
5、按钮。没有(mi yu)的话路经就通了,可以消了.*3.若2失败后,再在第一个(y)按钮的同列找一个空按钮。1).找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮。*2).没有(mi yu)的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。3).没有的话,再从与第一个按钮同列(tn li)的*那个空按钮横向(hn xin)到与第二个按钮同列看是否有按钮。没有的话路经就通了,可以消了。*若以上三步都失败,说明这两个按钮不可以消去。*/import javax.swing.*;import java.awt.*;import java.awt.event.*;public class
6、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 firstBut
7、ton,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
8、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);/以
9、下三行是为thisContainer容器添加(tin ji)不同方位的新的面板组件 thisContainer.add(southPanel,South);thisContainer.add(northPanel,North);centerPanel.setLayout(new GridLayout(6,5);/为centerPanel面板设置网格式布局管理器(6行5列)的容纳(rngn)组建的网格 for(int cols=0;cols 6;cols+)for(int rows=0;rows 5;rows+)diamondsButtoncolsrows=new JButton(String.
10、valueOf(gridcols+1rows+1);/将数组的行数与列数各自(gz)加一后对应元素转化为字符串类型并赋值给对应的原始数组按钮 diamondsButtoncolsrows.addActionListener(this);/为每个网格单元设置(shzh)事件监听接口 centerPanel.add(diamondsButtoncolsrows);exitButton=new JButton(退出(tuch);/实例特定按钮并添加时间监听接口 exitButton.addActionListener(this);resetButton=new JButton(重列);resetBu
11、tton.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
12、转换成基本数据类型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+)/一共
13、(ygng)15对button,30个 button上的数字 randoms=(int)(Math.random()*25+1);/强制转换随机函数产生的数值(shz),并进行必要运算避免“0”for(int alike=1;alike=2;alike+)cols=(int)(Math.random()*6+1);/随机选取连连看中的单元(dnyun)网格 rows=(int)(Math.random()*5+1);while(gridcolsrows!=0)/等于0说明(shumng)这个空格有了button cols=(int)(Math.random()*6+1);rows=(int)(
14、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=0)/把没有消去的button重新放一次 cols=(int)(Math.rand
15、om()*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;/这里(zhl)一定要将按钮点击信息归为初始 init();for(int i=0;i 6;i+)for(int j=0;j 5;j+)if(gridi+1j+1=0)diamondsButtonij
16、.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=se
17、condMsg&secondButton!=firstButton)xiao();public void xiao()/相同(xin tn)的情况下能不能消去。if(x0=x&(y0=y+1|y0=y-1)|(x0=x+1|x0=x-1)&(y0=y)/判断是否(sh fu)相邻 remove();else for(j=0;j j)/第二个按钮在空按钮右边(yu bian)for(i=y-1;i=j;i-)/检测从第二个按钮横向左边到空格(kn)所在列为止是否全是空格 if(gridxi!=0)k=0;break;/存在非空格的就退出,这一退出就不可能(knng)k=2了,所以就会到下而215
18、行出同理的判断列 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列的那个按钮竖向到第二个按钮,
19、看是不是有按钮 if(k=2)if(x0=x)/第一,二按钮在同行 remove();if(x0 x)/第一(dy)按钮在第二按钮下边 for(n=x0;n x)/第一(dy)按钮在第二按钮上边 for(n=x0;n=x+1;n-)if(gridnj!=0)k=0;break;if(gridnj=0&n=x+1)remove();/当上面的检测与第一个按钮同行的空格按钮失败(shbi)后(不能找到与第二个按钮的相连路经),下面就执行/检测与第一个按钮同列的空格按钮 for(i=0;i i)/第二个按钮在这个空按钮的下面 for(j=x-1;j=i;j-)if(gridjy!=0)k=0;bre
20、ak;else k=1;if(k=1)rowPassOne();if(x i)/第二个按钮在这个(zh ge)空按钮的上面 for(j=x+1;j=i;j+)if(gridjy!=0)k=0;break;else k=1;if(k=1)rowPassOne();if(x=i)/第二个按钮与这个(zh ge)空按钮同行 rowPassOne();if(k=2)if(y0=y)/第二个按钮与第一个按钮同列(tn li)remove();if(y0 y)/第二个按钮在第一个按钮右边(yu bian)for(n=y0;n y)/第二个按钮在第一个按钮左边(zu bian)for(n=y0;n=y+1;
21、n-)if(gridin!=0)k=0;break;if(gridin=0&n=y+1)remove();/-for/-else/-xiao public void linePassOne()if(y0 j)/第一(dy)按钮同行空按钮在左边 for(i=y0-1;i=j;i-)/判断第一(dy)按钮同左侧空按钮之间有没按钮 if(gridx0i!=0)k=0;break;else k=2;/K=2说明(shumng)通过了第二次验证 if(y0 j)/第一按钮同行(tnghng)空按钮在右边 for(i=y0+1;i i)/第一个按钮在与它同列的那个空格(kn)按钮下面 for(j=x0-1
22、;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;/具体的消去(xio q)内容,并将已消去的按钮值赋值为“0”public vo
23、id actionPerformed(ActionEvent e)/对按钮事件(shjin)发生后的定义 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
24、(int rows=0;rows 5;rows+)if(e.getSource()=diamondsButtoncolsrows)estimateEven(cols+1,rows+1,diamondsButtoncolsrows);public static void main(String args)/主函数(hnsh),调用。LianLianKan llk=new LianLianKan();llk.randomBuild();llk.init();4.界面(jimin)及运行效果、测试工具与测试效果 5.设计(shj)总结 5.1.程序调试情况(qngkung):在检验(jinyn)两个
25、方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。分三种情况:(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路径。这样就会有三条路径。若这三条路径上都是空按钮,那么就刚好是三种直线(zhxin)(两个转弯点)把两个按钮连接起来了)5.2.本人在程序设计(chn x sh j)中感想:由于市场需要,游戏的更新速度步步加快,为了适应社会的需要,社会对游戏开发人员的需求,在游戏编程的学习过程中,必须理论与实践结合,提高编程能力与水平。通过小游戏的设计,对以学过的内容加深理解,对游戏开发的过程有初步的认识,为以后的游戏开发设计和更加深入的学
26、习计算机语言打下夯实的基础。目前竞争日益激烈的行业环境,对于未来行业的前景,还是要保持乐观的心态。毕竟游戏并不是一下子就可以编写成的。需要不断的技术积累,需要团队的合作,提高了工作的效率,才算是在游戏开发的道路上成功了一半。在现在这个信息化飞速发展的道路上,要成为一名合格的编程人员,那就必须走好每一步现在的路。基于 Java 的连连看小游戏,满足了用户娱乐的需求,已经达到了预期的目标。虽然该游戏大部分功能基本上已经实现,但是还是会存在一些不足。在今后的进步中,会逐步改进。6.致谢 本次课设得以完成衷心感谢姜国权老师的教学指导 感谢 DY 社团对编程有兴趣大的小伙伴们在我一筹莫展的时候对我的大力
27、支持。主要参考文献 1(美)克罗夫特(David Wallace Croft)著 彭晖译.Java 游戏高级编程J.清华大学出版社,2005 2(美)David Brackeen 著 邱仲潘译.Java 游戏编程J.科学出版社,2004 3 聂庆亮编著.Java 应用开发指南J.清华大学出版社,2010 4 耿祥义,张跃平编著(binzh).Java面向对象程序设计J.清华大学出版社,2010 5 杨绍方编著(binzh).Java编程实用技术与案例J.清华大学出版社,2000.11 6 明日科技编著.Java 编程全能(qunnng)词典J.电子工业出版社,2010 内容总结 (1)简易数字连连看 Java程序设计书 1.1Java 程序课程设计任务书 1.1简易连连看游戏 本程序基本实现了小游戏连连看的功能,玩家找出游戏中 2 个相同图案的方块,如果它们之间的连接线不多于 3 根直线,则将其连接起来,就可以成功将图案相同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列,可重新排序,游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己之前所创纪录
限制150内