JAVA 连连看 源代码行行注释.doc_第1页
JAVA 连连看 源代码行行注释.doc_第2页
JAVA 连连看 源代码行行注释.doc_第3页
JAVA 连连看 源代码行行注释.doc_第4页
JAVA 连连看 源代码行行注释.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

所实现应用的功能及具体实现.需求规定退出:退出界面,停止游戏。重列:重新排列按键。再来一局:重新开始一局,分数不重计。运行环境硬件要求: 普通计算机即可。操作系统:windows XP,windows 7 等开发环境:Myeclipse 8.5流程图实现思路1:将整张地图拆分为n行m列,接着用一个二维数组表示将在地图中显示什么,例如0表示此处没有东西(如果两个按键可以消除时,就可以将数组中对应的元素赋为0)。2:游戏中需要处理鼠标按下时间和获取鼠标当前点击坐标信息。3:如果其在地图范围内按下某个按键,则将其转换为在二维数组中对应的行和列。4:游戏关键就是 如何判断两张图片可以消除,这也是连连看游戏的关键吧。在这个简单连连看中可以直接比较两个按键标示的数字,如果数字相等则可以消去,如果不相等则不能消去。我们可以将开始点的前后左右 四个方向的结点都推入队列中,继续查看其前后左右的 前后左右,如果其中有为0的(代表此处没有图片,存在通路),还是元素值和开始点 相同的都推入队列中。在判断前后左右时就可以对转弯次数进行累加了,如果还是原来的方向,则保持转弯次数不变,否则转弯次数+1。如果搜索的过程中,发现存在转弯的次数少于或者等于2的,且其结点信息和 结束点一样,代表我们已经找到了开始点 和结束点之间的通路了,这时也就是两个按键可以消去了。5:如何画出两张图片消去的路径呢,我的思路是这样的,每次寻找到一个新结点时,我们可以将其上一步结点的信息也保存下来,这样当我们找到结束点时,我们就可以沿着相反的方向,搜索回去,找出原来的整条路径。代码介绍及分析。package test;import javax.swing.*; /AWT的扩展import java.awt.*; /抽象窗口工具包import java.awt.event.*; class lianliankan implements ActionListener /实现ActionListener接口 JFrame mainFrame; /主面板 ,JFrame定义的是一个容器,可向里面添加组件Container thisContainer; /定义一个容器JPanel centerPanel,southPanel,northPanel; /子面板 ,JPanel是个轻量级容器,可添加入JFrame中JButton diamondsButton = new JButton65;/定义存储游戏按钮的数组 JButton exitButton,resetButton,newlyButton; /定义退出,重列,重新开始按钮 JLabel fractionLable=new JLabel(0); /定义分数标签,并初始化为0. JButton firstButton,secondButton; /分别记录两次先后被选中的按钮 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() /init方法mainFrame=new JFrame(连连看); /定义主面板为命名为“连连看”的JFrame容器thisContainer = mainFrame.getContentPane(); /初始化mainFrame.thisContainer.setLayout(new BorderLayout(); /定义布局为东西南北中的形式centerPanel=new JPanel(); /初始化centerPanelsouthPanel=new JPanel(); /初始化southPanelnorthPanel=new JPanel(); /初始化northPanelthisContainer.add(centerPanel,Center); /将centerPanel加入mainFrame中的Center位置thisContainer.add(southPanel,South); /将southPanel加入mainFrame中的South位置thisContainer.add(northPanel,North); /将northPanel加入mainFrame中的North位置centerPanel.setLayout(new GridLayout(6,5); /将centerPanel初始化为6*5的网格布局for(int cols = 0;cols 6;cols+) /依次对第0列到第5列进行操作for(int rows = 0;rows 5;rows+ ) /依次对第0行到第4行进行操作diamondsButtoncolsrows=new JButton(String.valueOf(gridcols+1rows+1); /新建按钮diamondsButtoncolsrows.addActionListener(this);/向此按键添加动作监听以接收来自它的动作 centerPanel.add(diamondsButtoncolsrows);/将按键添加到centerPanel中 exitButton=new JButton(退出); /新建“退出”按钮exitButton.addActionListener(this); /向“退出”按钮添加事件监听resetButton=new JButton(重列); /新建“重列”按钮resetButton.addActionListener(this); /向“重列”按钮添加事件监听newlyButton=new JButton(再来一局); /新建“再来一局”按钮newlyButton.addActionListener(this); /向“再来一局”按钮添加事件监听southPanel.add(exitButton); /将“退出”按钮添加到southPanelsouthPanel.add(resetButton); /将“重列”按钮添加到southPanelsouthPanel.add(newlyButton); /将“再来一局”按钮添加到southPanelfractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText(); northPanel.add(fractionLable); /将“分数”标签加入northPanelmainFrame.setBounds(280,100,500,450); / x:X轴上的起点 ,y:Y轴上的起点 , width:长度, height:宽度mainFrame.setVisible(true); /框架可见 public void randomBuild() int randoms,cols,rows; for(int twins=1;twins=15;twins+) randoms=(int)(Math.random()*25+1); /在1-25之间随机产生一个数字for(int alike=1;alike=2;alike+) 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=randoms; /将随机产生的数字放入网格中 public void fraction() fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText()+100);/在原有数字上加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) 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; /将save中的数字放入所选择的的格子中n-; mainFrame.setVisible(false); pressInformation=false; /这里一定要将按钮点击信息归为初始 init(); /调用initfor(int i = 0;i 6;i+) for(int j = 0;j 5;j+ ) if(gridi+1j+1=0) /如果格子的值为0diamondsButtonij.setVisible(false); /则按键不可见 public void estimateEven(int placeX,int placeY,JButton bz) if(pressInformation=false) /尚未有按键被选中 x=placeX; y=placeY; secondMsg=gridxy; /将该键的值存储到secondMsg secondButton=bz; /令secondButton为按下的键 pressInformation=true; /标示已经有键被选中 else /已经有按键被选中 x0=x; /将second中的值转存到firsty0=y; fristMsg=secondMsg; firstButton=secondButton; x=placeX; y=placeY; /将该键存入secondsecondMsg=gridxy; secondButton=bz; if(fristMsg=secondMsg & secondButton!=firstButton) /如果两个格子数字相等且格子不相同xiao(); /调用xiao方法 public void xiao() if(x0=x &(y0=y+1|y0=y-1) | (x0=x+1|x0=x-1)&(y0=y) /判断是否相邻 remove(); /调用remove else for (j=0;jj) /如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边 for (i=y-1;i=j;i- ) /判断第二按钮左侧直到第一按钮中间有没有按钮 if (gridxi!=0) k=0; break; else k=1; /K=1说明通过了第一次验证 if (k=1) linePassOne(); if (yj) /如果第二个按钮的Y坐标小于空按钮的Y坐标说明第一按钮在第二按钮右边 for (i=y+1;i=j ;i+ ) /判断第二按钮左侧直到第一按钮中间有没有按钮 if (gridxi!=0) k=0; break; else k=1; if (k=1) linePassOne(); if (y=j ) linePassOne(); if (k=2) if (x0=x) remove(); if (x0x) for (n=x0;nx) for (n=x0;n=x+1 ;n- ) if (gridnj!=0) k=0; break; if(gridnj=0 & n=x+1) remove(); for (i=0;ii) for (j=x-1;j=i ;j- ) if (gridjy!=0) k=0; break; else k=1; if (k=1) rowPassOne(); if (xi) 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 (y0y) for (n=y0;ny) for (n=y0;n=y+1 ;n-) if (gridin!=0) k=0; break; if(gridin=0 & n=y+1) remove(); public void linePassOne() if (y0j) /第一按钮同行空按钮在左边 for (i=y0-1;i=j ;i- ) /判断第一按钮同左侧空按钮之间有没按钮 if (gridx0i!=0) k=0; break; else k=2; /K=2说明通过了第二次验证 if (y0j) /第一按钮同行空按钮在与第二按钮之间 for (i=y0+1;ii) for (j=x0-1;j=i ;j- ) if (gridjy0!=0) k=0; break; else k=2; if (x0i) 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(); /调用fraction, 在当前分数上加100分pressInformation=false; /使该静态变量还原为falsek=0; gridx0y0=0; /清除该游戏按钮gridxy=0; /清除该游戏按钮 public void actionPerformed(ActionEvent e) if(e.getSource()=newlyButton) /如果newlyButton产生动作int grid = new int87; /产生新的存储按键的数组this.grid = grid; randomBuild(); /调用randomBuildmainFrame.setVisible(false); /使当前mainFrame不可见pressInformation=false; /使该静态变量还原为falseinit(); /调用init if(e.getSource()=exitButton) /如果exitButton产生动作System.exit(0); /退出程序if(e.getSource()=resetButton) /如果re

温馨提示

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

评论

0/150

提交评论