JAVA 连连看 源代码行行注释

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

所实现应用的功能及具体实现. 需求规定

退出:退出界面,停止游戏。

重列:重新排列按键。

再来一局:重新开始一局,分数不重计。运行环境

硬件要求:普通计算机即可。

操作系统: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 JButton[6][5];//定义存储游戏按钮的数组JButton exitButton,resetButton,newlyButton; //定义退出,重列,重新开始按钮JLabel fractionLable=new JLabel("0"); //定义分数标签,并初始化为0.

JButton firstButton,secondButton; //分别记录两次先后被选中的按钮

int grid[][] = new int[8][7];//储存游戏按钮位置

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(); //初始化centerPanel

southPanel=new JPanel(); //初始化southPanel

northPanel=new JPanel(); //初始化northPanel

thisContainer.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行进行操作diamondsButton[cols][rows]=new

JButton(String.valueOf(grid[cols+1][rows+1])); //新建按钮

diamondsButton[cols][rows].addActionListener(this);//向此按键添加动作监

听以接收来自它的动作

centerPanel.add(diamondsButton[cols][rows]);//将按键添加到centerPanel中}

}

exitButton=new JButton("退出"); //新建“退出”按钮

exitButton.addActionListener(this); //向“退出”按钮添加事件监听resetButton=new JButton("重列"); //新建“重列”按钮

resetButton.addActionListener(this); //向“重列”按钮添加事件监听newlyButton=new JButton("再来一局"); //新建“再来一局”按钮

newlyButton.addActionListener(this); //向“再来一局”按钮添加事件监听southPanel.add(exitButton); //将“退出”按钮添加到southPanel southPanel.add(resetButton); //将“重列”按钮添加到southPanel southPanel.add(newlyButton); //将“再来一局”按钮添加到southPanel fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.g etText())));

northPanel.add(fractionLable); //将“分数”标签加入northPanel mainFrame.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(grid[cols][rows]!=0) {

cols=(int)(Math.random()*6+1); //如果该格已经存在数字,则重新选择网格rows=(int)(Math.random()*5+1);

}

相关文档
最新文档