java的连连看游戏设计和实现,基本功能包括:消除模块,重新开始模块,刷新模块,选择难度模块,计时模块。代码如下:

import java.awt.Choice;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class LianLianKan extends JFrame {

private static final long serialVersionUID = 1L;

public LianLianKan() {
        LianLianKanJPanel llk = new LianLianKanJPanel();
        add(llk);

}
    class LianLianKanJPanel extends JPanel implements ActionListener,ItemListener {

private static final long serialVersionUID = 1L;//序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
        private int[][] map = new int[8][8];//8*8的正方形
        private int kind, randomx, randomy, randomx1, randomy1; // 种类,随机x
        private int coordinatex, coordinatey, coordinatex1, coordinatey1; // 坐标X
        private Point lineStart = new Point(0, 0);
        private int clicktimes;
        private int jishushengyu;//计数剩余
        private int Kinds = 4;
        private int score;
        private int guanshu;//关数

loudou ld = new loudou();// 漏斗

JButton BlockButton[][] = new JButton[8][8];//
        Choice difficultChoice = new Choice();
        JButton newgameButton = new JButton("重新开始");
        JButton reLoad = new JButton("刷新");

ImageIcon ii = new ImageIcon("src/im/bk.jpg");

ImageIcon aIcon = new ImageIcon("src/im/1.gif");
        ImageIcon bIcon = new ImageIcon("src/im/2.gif");
        ImageIcon cIcon = new ImageIcon("src/im/3.gif");
        ImageIcon dIcon = new ImageIcon("src/im/4.gif");
        ImageIcon eIcon = new ImageIcon("src/im/5.gif");
        ImageIcon fIcon = new ImageIcon("src/im/6.gif");
        ImageIcon gIcon = new ImageIcon("src/im/7.gif");
        ImageIcon hIcon = new ImageIcon("src/im/8.gif");
        ImageIcon iIcon = new ImageIcon("src/im/9.gif");
        ImageIcon jIcon = new ImageIcon("src/im/10.gif");
        ImageIcon kIcon = new ImageIcon("src/im/11.gif");
        ImageIcon lIcon = new ImageIcon("src/im/12.gif");
        ImageIcon mIcon = new ImageIcon("src/im/13.gif");
        ImageIcon nIcon = new ImageIcon("src/im/14.gif");
        ImageIcon oIcon = new ImageIcon("src/im/15.gif");

public LianLianKanJPanel() {

this.setLayout(null);

newMap();
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    BlockButton[i][j] = new JButton();
                    add(BlockButton[i][j]);
                    BlockButton[i][j].addActionListener(this);//监听器
                    BlockButton[i][j].setBounds(30 + j * 40, 30 + i * 40, 31,34);
                //    BlockButton[i][j].setBorderPainted(false);
                //  BlockButton[i][j].setVisible(true);
                }
            }
            difficultChoice.add("简单");
            difficultChoice.add("中等");
            difficultChoice.add("困难");
            difficultChoice.add("变态");

newgameButton.setBounds(map[0].length * 40 + 80, 40, 100, 20);
            newgameButton.setBackground(Color.white);
            newgameButton.setBorderPainted(false); //去边框
            reLoad.setBounds(map[0].length * 40 + 100, 80, 60, 20);
            reLoad.setBackground(Color.white);
            reLoad.setBorderPainted(false);
            difficultChoice.setBounds(map[0].length * 40 + 100, 120, 60, 20);
            difficultChoice.addItemListener(this);
            newgameButton.addActionListener(this);
            reLoad.addActionListener(this);

this.add(newgameButton);
            this.add(reLoad);
            this.add(difficultChoice);

// /-------------------------漏斗
            ld.setBounds(map[0].length * 40 + 100, 200, 70, 150);// 漏斗
            ld.setBackground(Color.black);
            this.add(ld);

}
        class loudou extends JPanel implements Runnable {
            private static final long serialVersionUID = 1L;
            private int dijiguan;
            int remainTimes = 0; // 时间
            int x1 = 0;
            int y1 = 30;
            int x2 = 60;
            int y2 = 150;
            Thread nThread1;//线程
            JLabel overJLabel = new JLabel();
            JDialog dialog = new JDialog();

public loudou() {
                nThread1 = new Thread(this);                
                nThread1.start();
                this.setLayout(null);
                this.add(overJLabel);
                overJLabel.setBounds(0, 0, 200, 50);
                overJLabel.setForeground(Color.white);
            }

public void setdijiguan(int x) {
                this.dijiguan = x;
            }

public void paintComponent(Graphics g) // 画画函数
            {
                super.paintComponent(g);
                                
                g.setColor(Color.green);
                for (int i = 0; i < 56; i++) {
                    g.drawLine(x1 + i / 2 + 2, y1 + i, x2 - i / 2 - 2, y1 + i);
                }
                
                if (remainTimes < 55) {
                    for (int i = 0; i < remainTimes; i++) {
                        g.drawLine(x1 + i / 2 + 2, y2 - i - 1, x2 - i / 2 - 2, y2 - i
                                - 1);
                    }
                    g.drawLine((x1 + x2) / 2, (y1 + y2) / 2, (x1 + x2) / 2, y2 - 2);
                    g.drawLine((x1 + x2) / 2 + 1, (y1 + y2) / 2 + 1, (x1 + x2) / 2 + 1,y2 - 2);//两条竖线
                    g.setColor(getBackground());
                    for (int i = 0; i < remainTimes; i++) {
                        g.drawLine(x1 + i / 2 + 2, y1 + i, x2 - i / 2 - 2, y1 + i);//覆盖上边的倒三角
                    }
                }
                if (remainTimes >= 50 && remainTimes <= 55)
                    overJLabel.setText(55-remainTimes +"s");
                
                if (remainTimes == 56) 
                    overJLabel.setText("OVER");
            }

public void setTimes(int x) {
                this.remainTimes = x;
            }

public int getTimes() {
                return remainTimes;
            }

public void run() {
                while (dijiguan < 20) {
                    if (remainTimes == 0) {
                        JOptionPane.showMessageDialog(null, "游戏开始?");
                    }
                    if (remainTimes == 56) {
                        JOptionPane.showMessageDialog(null, "时间到!游戏结束!");
                    }
                    
                    remainTimes++;
                    repaint();
                    
                    try {
                        if (dijiguan < 6)
                            Thread.sleep(1500 - dijiguan * 100);
                        if (dijiguan >= 6 && dijiguan <= 8)
                            Thread.sleep(1000 - (dijiguan - 5) * 50);
                        if (dijiguan > 8)
                            Thread.sleep(850 - (dijiguan - 8) * 20);

} catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
            
        }

public void paintComponent(Graphics g) {
            super.paintComponent(g);
            //是父类JPanel里的方法,会把整个面板用背景色重画一遍,起到清屏的作用

g.drawImage(ii.getImage(), 0, 0, this);
            //绘制两个文本字符串
            g.setColor(Color.white);
            g.drawString("得分: " + score, 430, 165);
            g.drawString("第 " + (guanshu + 1) + " 关", 430, 190);
            
            
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    switch (map[i][j]) {
                    case 0:
                        
                        BlockButton[i][j].setVisible(false);
                        break;
                    case 1:
                        BlockButton[i][j].setIcon(aIcon);
                        break;
                    case 2:
                        BlockButton[i][j].setIcon(bIcon);
                        break;
                    case 3:
                        BlockButton[i][j].setIcon(cIcon);
                        break;
                    case 4:
                        BlockButton[i][j].setIcon(dIcon);
                        break;
                    case 5:
                        BlockButton[i][j].setIcon(eIcon);
                        break;
                    case 6:
                        BlockButton[i][j].setIcon(fIcon);
                        break;
                    case 7:
                        BlockButton[i][j].setIcon(gIcon);
                        break;
                    case 8:
                        BlockButton[i][j].setIcon(hIcon);
                        break;
                    case 9:
                        BlockButton[i][j].setIcon(iIcon);
                        break;
                    case 10:
                        BlockButton[i][j].setIcon(jIcon);
                        break;
                    case 11:
                        BlockButton[i][j].setIcon(kIcon);
                        break;
                    case 12:
                        BlockButton[i][j].setIcon(lIcon);
                        break;
                    case 13:
                        BlockButton[i][j].setIcon(mIcon);
                        break;
                    case 14:
                        BlockButton[i][j].setIcon(nIcon);
                        break;
                    case 15:
                        BlockButton[i][j].setIcon(oIcon);
                        break;
                    default:
                        break;
                    }

}

}

}
        //重载
        public void chongzai() {  
            jishushengyu = 0;
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    if (map[i][j] > 0) {
                        jishushengyu++;
                    }
                }
            }

int[][] map1 = new int[8][8];
            this.map = map1;
            Random random = new Random();

for (int i = 0; i < jishushengyu / 2; i++) {
                kind = random.nextInt(Kinds) + 1;//0~3+1  === 1~4
                do {                
                    randomx1 = random.nextInt(8);//0-8随机数
                    randomy1 = random.nextInt(8);
                } while (map[randomy1][randomx1] > 0);

map[randomy1][randomx1] = kind;
                
                do {
                    randomx = random.nextInt(8);
                    randomy = random.nextInt(8);
                } while (map[randomy][randomx] > 0);

map[randomy][randomx] = kind;
                
            }
            
            repaint();
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    
                    BlockButton[i][j].setVisible(true);
                }
            }
            
            
        }

public void newGame() {

// JOptionPane.showMessageDialog(null,"你按了开始按钮");
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    BlockButton[i][j].setEnabled(true);
                    BlockButton[i][j].setVisible(true);
                }
            }
            int[][] map = new int[8][8];
            this.map = map;
            newMap();
            ld.setTimes(0);
            score = 0;
            guanshu = 0;
            ld.setdijiguan(guanshu);
        }

public void guoguan() {
            int jishushengyu2 = 0;
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    if (map[i][j] > 0) {
                        jishushengyu2++;
                    }
                }
            }
            if (jishushengyu2 == 0) {
                for (int i = 0; i < 8; i++) {
                    for (int j = 0; j < 8; j++) {
                        BlockButton[i][j].setEnabled(true);
                        BlockButton[i][j].setVisible(true);
                    }
                }
                int[][] map = new int[8][8];
                this.map = map;
                newMap();
                
                ld.setTimes(0);
                guanshu++;
                ld.setdijiguan(guanshu);
                reLoad.setEnabled(true);
            }

}

public void newMap() {
            ArrayList<Integer> numbers = new ArrayList<Integer>();//链表
            for (int i = 0; i < Kinds; i++) {
                numbers.add(i + 1);//加到列表尾部
                numbers.add(i + 1);
            }//每一次重新布局的时候,能保证一定有前几种难度中的图片类型
            
            Random random = new Random();
            int temp = 0;
            for (int i = 0; i < 32- Kinds; i++) {
                temp = random.nextInt(Kinds) + 1;//0~kinds-1之间的随机数在加1
                numbers.add(temp);
                numbers.add(temp);

}
            Collections.shuffle(numbers);//随机打乱原来的顺序
            map = new int[8][8];
            temp = 0;

for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    //JOptionPane.showMessageDialog(null, numbers.get(temp));
                    map[i][j] = numbers.get(temp++).intValue();//get方法返回第i个元素,intvalue 返回int类型
                    
                }

}

}

public void itemStateChanged(ItemEvent e) {
            // TODO 自动生成的方法存根
            if (e.getSource() == difficultChoice) {
                String selected = difficultChoice.getSelectedItem();
                if (selected == "简单") {
                    Kinds = 4;
                    newGame();
                    repaint();
                } else if (selected == "中等") {
                    Kinds = 8;
                    newGame();
                    repaint();
                } else if (selected == "困难") {
                    Kinds = 12;
                    newGame();
                    repaint();
                } else if (selected == "变态") {
                    Kinds = 15;
                    newGame();
                    repaint();
                }
            }
        }

public void actionPerformed(ActionEvent e) {
            // TODO 自动生成的方法存根
            
            if (ld.getTimes() >56) {
                for (int i = 0; i < 8; i++) {
                    for (int j = 0; j < 8; j++) {
                        BlockButton[j][i].setEnabled(false);
                    }
                }
            }
            if (e.getSource() == reLoad) {
                chongzai();
                reLoad.setEnabled(false);
            }
            if (e.getSource() == newgameButton) {
                newGame();
                reLoad.setEnabled(true);
            }

for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    if (e.getSource() == BlockButton[j][i]) {
                        clicktimes++; // 点击的次数
                        lineStart.move(i, j);
                        if (clicktimes % 2 == 1) {
                            coordinatex1 = i;
                            coordinatey1 = j;
                            BlockButton[coordinatey1][coordinatex1].setEnabled(false);
                            BlockButton[coordinatey][coordinatex].setEnabled(true);

//    BlockButton[j][i].setEnabled(false);
                        }
                        if (clicktimes % 2 == 0) {
                            
                            coordinatex = i;
                            coordinatey = j;
                            BlockButton[coordinatey][coordinatex].setEnabled(false);
                            BlockButton[coordinatey1][coordinatex1].setEnabled(true);
                        }
                    }

}
            }

this.requestFocus();
            clearBlock();

/*
             * for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) {
             * BlockButton[j][i].setEnabled(true); }
             * 
             * }
             */

repaint();

}

// --------------------------------------------------------------------------
        // 判断在一列之内两图片之间是否全部是空白或直接相邻
        private boolean containsAllOrNoneZeroInColumn(int posX1, int posY1,
                int posX2, int posY2) {
            // 直接相连,因而不包含空白
            if (Math.abs(posY1 - posY2) == 0) {
                return true;
            }
            int a = posY1 < posY2 ? posY1 : posY2;
            int b = posY1 < posY2 ? posY2 : posY1;//y值:a小 b大
            for (int j = a + 1; j < b; j++) {
                if (map[posX1][j] != 0) {
                    return false;
                }
            }
            return true;
        }

// 判断在一行之内两图片之间是否全部是空白或直接相邻
        private boolean containsAllOrNoneZeroInRow(int posX1, int posY1,
                int posX2, int posY2) {
            // 直接相连,因而不包含空白
            if (Math.abs(posX1 - posX2) == 0) {
                return true;
            }
            int a = posX1 < posX2 ? posX1 : posX2;
            int b = posX1 < posX2 ? posX2 : posX1;
            for (int i = a + 1; i < b; i++) {
                if (map[i][posY1] != 0) {
                    return false;
                }
            }
            return true;
        }

// 是否可以一直线相连
        private boolean isLinkByOneLine(int posX1, int posY1, int posX2,
                int posY2) {

if (posX1 != posX2 && posY1 != posY2) {
                return false;
            }
            if (posX1 == posX2) {
                if (containsAllOrNoneZeroInColumn(posX1, posY1, posX2, posY2)) {
                    return true;
                }
            }
            if (posY1 == posY2) {
                if (containsAllOrNoneZeroInRow(posX1, posY1, posX2, posY2)) {
                    return true;
                }
            }
            return false;
        }

// 是否可以两直线相连
        private boolean isLinkByTwoLines(int posX1, int posY1, int posX2,
                int posY2) {
            if (posX1 != posX2 && posY1 != posY2) {
                // x1,y1 to x2,y1 to x2,y2
                if (containsAllOrNoneZeroInRow(posX1, posY1, posX2, posY1)
                        && map[posX2][posY1] == 0
                        && containsAllOrNoneZeroInColumn(posX2, posY1, posX2,
                                posY2)) {
                    return true;
                }
                // x1,y1 to x1,y2 to x2,y2
                if (containsAllOrNoneZeroInColumn(posX1, posY1, posX1, posY2)
                        && map[posX1][posY2] == 0
                        && containsAllOrNoneZeroInRow(posX1, posY2, posX2,
                                posY2)) {
                    return true;
                }

}
            return false;
        }

// 是否可以三直线相连
        private boolean isLinkByThreeLines(int posX1, int posY1, int posX2,
                int posY2) {
            if (isOnSameEdge(posX1, posY1, posX2, posY2)) {
                return true;
            }
            if (isOnThreeLinesLikeArc(posX1, posY1, posX2, posY2)) {
                return true;
            }
            if (isOnThreeLinesLikeZigzag(posX1, posY1, posX2, posY2)) {
                return true;
            }
            return false;
        }

// 是否可以三直线相连,似U形
        private boolean isOnThreeLinesLikeArc(int posX1, int posY1, int posX2,
                int posY2) {
            if (isOnUpArc(posX1, posY1, posX2, posY2)) {
                return true;
            }
            if (isOnDownArc(posX1, posY1, posX2, posY2)) {
                return true;
            }
            if (isOnLeftArc(posX1, posY1, posX2, posY2)) {
                return true;
            }
            if (isOnRightArc(posX1, posY1, posX2, posY2)) {
                return true;
            }
            return false;
        }

// ∪
        private boolean isOnUpArc(int posX1, int posY1, int posX2, int posY2) {
            // Y --> 0
            int lessY = posY1 < posY2 ? posY1 : posY2; //找小y
            for (int j = lessY - 1; j >= 0; j--) {
                if (containsAllOrNoneZeroInRow(posX1, j, posX2, j)
                        && containsAllOrNoneZeroInColumn(posX1, posY1, posX1, j)
                        && containsAllOrNoneZeroInColumn(posX2, posY2, posX2, j)
                        && map[posX1][j] == 0 && map[posX2][j] == 0) {
                    return true;
                }
            }

if (isOnSameEdge(posX1, 0, posX2, 0)
                    && containsAllOrNoneZeroInColumn(posX1, posY1, posX1, 0)
                    && containsAllOrNoneZeroInColumn(posX2, posY2, posX2, 0)
                    && (map[posX1][0] == 0 && map[posX2][0] == 0
                            || map[posX1][0] == 0
                            && map[posX2][0] == map[posX2][posY2] || map[posX1][0] == map[posX1][posY1]
                            && map[posX2][0] == 0)) {
                return true;
            }

return false;
        }

// ∩
        private boolean isOnDownArc(int posX1, int posY1, int posX2, int posY2) {
            int moreY = posY1 < posY2 ? posY2 : posY1;
            for (int j = moreY + 1; j <= 8 - 1; j++) {
                if (containsAllOrNoneZeroInRow(posX1, j, posX2, j)
                        && containsAllOrNoneZeroInColumn(posX1, posY1, posX1, j)
                        && containsAllOrNoneZeroInColumn(posX2, posY2, posX2, j)
                        && map[posX1][j] == 0 && map[posX2][j] == 0) {
                    return true;
                }
            }
            if (isOnSameEdge(posX1, 8 - 1, posX2, 8 - 1)
                    && containsAllOrNoneZeroInColumn(posX1, posY1, posX1, 8 - 1)
                    && containsAllOrNoneZeroInColumn(posX2, posY2, posX2, 8 - 1)
                    && (map[posX1][8 - 1] == 0 && map[posX2][8 - 1] == 0
                            || map[posX1][8 - 1] == map[posX1][posY1]
                            && map[posX2][8 - 1] == 0 || map[posX1][8 - 1] == 0
                            && map[posX2][8 - 1] == map[posX2][posY2])) {
                return true;
            }
            return false;
        }

// ﹚
        private boolean isOnLeftArc(int posX1, int posY1, int posX2, int posY2) {
            int lessX = posX1 < posX2 ? posX1 : posX2;
            for (int i = lessX - 1; i >= 0; i--) {
                if (containsAllOrNoneZeroInColumn(i, posY1, i, posY2)
                        && containsAllOrNoneZeroInRow(i, posY1, posX1, posY1)
                        && containsAllOrNoneZeroInRow(i, posY2, posX2, posY2)
                        && map[i][posY1] == 0 && map[i][posY2] == 0) {
                    return true;
                }
            }

if (isOnSameEdge(0, posY1, 0, posY2)
                    && containsAllOrNoneZeroInRow(0, posY1, posX1, posY1)
                    && containsAllOrNoneZeroInRow(0, posY2, posX2, posY2)
                    && (map[0][posY1] == 0 && map[0][posY2] == 0
                            || map[0][posY1] == map[posX1][posY1]
                            && map[0][posY2] == 0 || map[0][posY1] == 0
                            && map[0][posY2] == map[posX2][posY2])) {
                return true;
            }

return false;
        }

// (
        private boolean isOnRightArc(int posX1, int posY1, int posX2, int posY2) {
            int moreX = posX1 < posX2 ? posX2 : posX1;
            for (int i = moreX + 1; i <= 8 - 1; i++) {
                if (containsAllOrNoneZeroInColumn(i, posY1, i, posY2)
                        && containsAllOrNoneZeroInRow(i, posY1, posX1, posY1)
                        && containsAllOrNoneZeroInRow(i, posY2, posX2, posY2)
                        && map[i][posY1] == 0 && map[i][posY2] == 0) {
                    return true;
                }
            }

if (isOnSameEdge(8 - 1, posY1, 8 - 1, posY2)
                    && containsAllOrNoneZeroInRow(posX1, posY1, 8 - 1, posY1)
                    && containsAllOrNoneZeroInRow(posX2, posY2, 8 - 1, posY2)
                    && (map[8 - 1][posY1] == 0 && map[8 - 1][posY2] == 0
                            || map[8 - 1][posY1] == map[posX1][posY1]
                            && map[8 - 1][posY2] == 0 || map[8 - 1][posY1] == 0
                            && map[8 - 1][posY2] == map[posX2][posY2])) {
                return true;
            }

return false;
        }

// 是否可以三直线相连,似之字形N
        private boolean isOnThreeLinesLikeZigzag(int posX1, int posY1,
                int posX2, int posY2) {
            if (isOnZigzagWith1Row2Cols(posX1, posY1, posX2, posY2)) {
                return true;
            }
            if (isOnZigzagWith2Rows1Col(posX1, posY1, posX2, posY2)) {
                return true;
            }

return false;
        }

// 是否可以三直线相连,似之字形, 两行一列 Z
        private boolean isOnZigzagWith2Rows1Col(int posX1, int posY1,
                int posX2, int posY2) {
            int moreX = posX1 < posX2 ? posX2 : posX1;
            int lessX = posX1 < posX2 ? posX1 : posX2;
            for (int i = lessX + 1; i < moreX; i++) {
                if (containsAllOrNoneZeroInColumn(i, posY1, i, posY2)
                        && containsAllOrNoneZeroInRow(i, posY1, posX1, posY1)
                        && containsAllOrNoneZeroInRow(i, posY2, posX2, posY2)
                        && map[i][posY1] == 0 && map[i][posY2] == 0) {
                    return true;
                }
            }
            return false;
        }

// 是否可以三直线相连,似之字形, 一行两列
        private boolean isOnZigzagWith1Row2Cols(int posX1, int posY1,
                int posX2, int posY2) {
            int moreY = posY1 < posY2 ? posY2 : posY1;
            int lessY = posY1 < posY2 ? posY1 : posY2;
            for (int j = lessY + 1; j < moreY; j++) {
                if (containsAllOrNoneZeroInRow(posX1, j, posX2, j)
                        && containsAllOrNoneZeroInColumn(posX1, posY1, posX1, j)
                        && containsAllOrNoneZeroInColumn(posX2, posY2, posX2, j)
                        && map[posX1][j] == 0 && map[posX2][j] == 0) {
                    return true;
                }
            }
            return false;
        }

// 是否处于游戏区域的4条边的同一边上
        private boolean isOnSameEdge(int posX1, int posY1, int posX2, int posY2) {
            if ((posY1 == posY2 && posY2 == 0)
                    || (posY1 == posY2 && posY2 == 8 - 1)
                    || (posX1 == posX2 && posX2 == 0)
                    || (posX1 == posX2 && posX2 == 8 - 1)) {
                return true;
            }

return false;
        }

// --------------------------------------------------------------------------
        public boolean ifcanTouch(int posX1, int posY1, int posX2, int posY2) {

if (isLinkByOneLine(posX1, posY1, posX2, posY2)) {
                return true;
            }
            // 是否可以两直线相连
            if (isLinkByTwoLines(posX1, posY1, posX2, posY2)) {
                return true;
            }
            // 是否可以三直线相连
            if (isLinkByThreeLines(posX1, posY1, posX2, posY2)) {
                return true;
            }

return false;

}

public void clearBlock() {
            if (clicktimes >=2) {
            
                if (map[coordinatey1][coordinatex1] == map[coordinatey][coordinatex]
                        && !((coordinatex1 == coordinatex) && (coordinatey1 == coordinatey))) {
                    
                    if (ifcanTouch(coordinatey1, coordinatex1, coordinatey,
                            coordinatex)) {
                        
                        if (map[coordinatey1][coordinatex1] > 0)
                            score = score + 10;
                        
                        map[coordinatey1][coordinatex1] = 0;
                        map[coordinatey][coordinatex] = 0;
                        guoguan();
                    }
                }
            }
        }
    }

public static void main(String[] args) {
        
    String lookAndFeel ="javax.swing.plaf.metal.MetalLookAndFeel";//swing 外观和感觉
        try {
            UIManager.setLookAndFeel(lookAndFeel);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

LianLianKan frame = new LianLianKan();
        frame.setTitle("连连看");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(100, 100, 560, 430);
        frame.setLocation(440, 100);
//        frame.setSize(600, 500);
        frame.setSize(540, 440);
        frame.setVisible(true);

}

}

java连连看游戏设计与实现相关推荐

  1. 【java毕业设计】基于java+swing+GUI的连连看游戏设计与实现(毕业论文+程序源码)——连连看游戏

    基于java+swing+GUI的连连看游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+GUI的连连看游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

  2. 第1章 游戏之乐——连连看游戏设计

    连连看游戏设计 连连看是一种很受大家欢迎的小游戏.微软亚洲研究院的实习生们就曾经开发过一个类似的游戏--Microsoft Link-up.    图1-17为Microsoft Link-up的一个 ...

  3. java设计建议植物大战僵尸_基于Java的游戏设计之植物大战僵尸

    植物大战僵尸这款游戏相信大家或多或少都玩过,那么大家有没有想过自己尝试着做一下植物大战僵尸的游戏设计呢.本文将基于Java语言为大家展示如何开发出植物大战僵尸游戏的简易版本,主要内容包括规则.对象.功 ...

  4. java俄罗斯方块ppt_基于Java俄罗斯方块游戏设计与开发PPT.ppt

    基于Java俄罗斯方块游戏设计与开发PPT 基于Java的俄罗斯方块游戏的设计与实现 答 辩 人:xxx 学 号:201012120201 指导老师:xxx副教授 专 业:网络工程 学 院:信息科学与 ...

  5. 基于Java的连连看游戏设计与实现

    项目介绍 连连看是一种消除类益智游戏,核心要求是在规定的时间内,消除游戏界面中选中的两张相同的图案,直至完全消除所有图案.这款游戏操作简单(只需单击鼠标左键操作).面向人群广泛,在限时操作的游戏要求下 ...

  6. 连连看游戏设计与实现

    技术:Java等 摘要: 连连看是近些年流行的一种益智类休闲游戏.它是通过在游戏执行界面内连接两张相同图案来进行消除的,以在规定时间内完全消除游戏界面内的图片为游戏胜利的标准.这项小游戏操作简单,只需 ...

  7. java台球游戏设计原理_台球游戏的核心算法和AI(1)

    前言: 08年的时候, 写过一个台球游戏, 用的是java, 不过代码真的是用传说中的神器notepad写的(你信吗? 其实是用GVIM写的, ^_^), 很多类都在同一java文件中编写. 可见当时 ...

  8. 答案_连连看游戏设计

    分析与解法 连连看游戏的设计,最主要包含游戏局面的状态描述,以及游戏规则的描述.而游戏规则的描述就对应着状态的合法转移(在某一个状态,有哪些操作是满足规则的,经过这些满足规则的操作,会到达哪些状态). ...

  9. 基于C#的单机版连连看游戏设计与实现

    摘 要 游戏"连连看",只要将相同花色的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手.游戏速度节奏快,画面清晰可爱,老少皆宜.丰富的道具和公共模式的加入,增强游戏的竞 ...

最新文章

  1. SAP+ 差旅报销集成方案的实现
  2. php获取数组中,相同键名的键值之和
  3. android logger的使用
  4. 【实习】今日头条【抖音火山】后台开发实习生
  5. leetcode C++ 6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
  6. 蓝牙4.0 vs 蓝牙4.1 vs 蓝牙4.2 vs 蓝牙5.0
  7. 【报错笔记】 启动tomcat服务器报错Context initialization failed
  8. SQLite的使用(二):数据增删改查
  9. Servlet文件下载模板
  10. python实现单链表快速排序升序linkedqueue_数据结构回顾
  11. Python风格总结:列表List
  12. MR案例:输出/输入SequenceFile
  13. VS2008+SQL2005 ASP.NET2.0数据库连接总结 (vs2005也可)----转载+说明
  14. javaWeb毕业设计项目完整源码附带论文合集免费下载
  15. 一键备份服务器文件夹权限,教大家一键设置局域网共享文件夹权限
  16. 【Mysql】数据库的设计学习笔记
  17. Mac字体怎么安装?如何在macOS电脑导入字体文件?
  18. try 、catch、finally用法总结
  19. C++中的友元——编程界的老王
  20. Golang 和 lua 相遇会擦出什么火花?

热门文章

  1. 简单总结笔试和面试中的海量数据问题
  2. web前端-《初识HTML》(附实例详解)
  3. SD-WAN EVPN简介
  4. 关于Unity的SteamVR Plugin 2.0版本中SteamVR_Controller不见的问题
  5. Python编程从入门到实践——外星人入侵代码
  6. java计算机毕业设计springboot+vue在线投票系统
  7. 江西理工大学matlab考试,Matlab在《固定收益证券》课堂教学中的应用
  8. win10快速访问 文件夹无法删除
  9. 科学定义工作目标SMART原则
  10. hbuilder如何设置图片居中显示_Hbuilder div的垂直居中