• 因为前段时间频繁更换了几个网站程序,导致网站被降权,现在还在考察恢复期,所以网站更新并不多,等网站恢复后会大量更新。

  • 原易无休资源网的站长不做了,我买来继续为大家更新,希望大家多多支持。 :smile:

  • 因为近期工作调整,比较忙,网站会暂停更新,预计半个月吧~~~

  • 以后所有商业资源,特别是源码类资源都会附上视频教程!!!

  • 出差啦,,回来再更新!!!

  • 这几天比较忙,更新不稳定,预计15号左右恢复!!

  • 主题更新了,感谢云落大神!

  • 又从HTTPS滚回来了 :evil: :evil: 太耗资源了,没有装X的资本呀,以后豪了再说!!

  • 配置了SSL,加上小绿锁,逼格瞬间高了不少。

  • 网站被百度网址安全中心标注“风险”提示:该页面可能存在虚假信息!!怀疑跟昨天发的电影资源关~~~申诉中!!!

连连看游戏源代码,直接编译即可运行

软件仓库 admin 3年前 (2017-02-15) 1225次浏览 0个评论

连连看游戏源代码,直接编译即可运行

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
 
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
 
public class Lianliankan extends JFrame{
    public static final int SQUARE_SIDE = 30; //每个格的大小
    public static final int JFRAME_WIDTH = SQUARE_SIDE * 10; //窗休宽
    public static final int JFRAME_HEIGHT = SQUARE_SIDE * 10; //窗体高
    public static final String[] data = new String[]{
        "田","畕","畾","土","圭","垚","十","卄","卅","卌",
        "屮","艸","芔","茻","水","沝","淼","皕","兟","兢",
        "競","夶","棗","棘","玨","竝","臸","玆","臦","林"};  //所有显示的数据 "字"
    public static int[][] map = new int[][]{
        // x 0 1 2 3 4 5 6 7 8 9    y
            {0,0,0,0,0,0,0,0,0,0},//0
            {0,1,1,1,1,1,1,1,1,0},//1
            {0,1,1,1,1,1,1,1,1,0},//2
            {0,1,1,1,1,1,1,1,1,0},//3
            {0,1,1,1,1,1,1,1,1,0},//4
            {0,1,1,1,1,1,1,1,1,0},//5
            {0,1,1,1,1,1,1,1,1,0},//6
            {0,1,1,1,1,1,1,1,1,0},//7
            {0,1,1,1,1,1,1,1,1,0},//8
            {0,0,0,0,0,0,0,0,0,0} //9
         
    }; //虚拟地图
     
     
    public static String[][] fonts = new String[map.length-2][map[0].length-2]; //实际抽出来的 "字" 
    public static List<Point> coordlist = new ArrayList<Point>(4); //存放已经找到的点
    public static List<Point> sticklist = new ArrayList<Point>(2); //存放两个比较点
     
    private GameArithmetic gameArithmetic = new GameArithmetic(); //查找点的算
    private SquareMap square; //图形类
    private Timer tirmer = new Timer(); //定时器
    public static int totalTime = 60000*5; //游戏时间
     
    public Lianliankan(){
        //启动定时器来监听时间
        TimerTask task = new TimerTask(){
             @Override
              public void run() {
                 totalTime -= 1000;
                 square.repaint();
              }
        };
        tirmer.scheduleAtFixedRate(task, 1000, 1000);
         
        //初始化代码
        square = new SquareMap();
        square.addMouseListener(new MouseListener());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(JFRAME_WIDTH+5, JFRAME_HEIGHT + 60);
        setTitle("Lianliankan");
        setLocationRelativeTo(null);
        setResizable(false);
        JMenuBar menu = new JMenuBar();
        JMenu game = new JMenu("游戏");   
        JMenuItem newgame = game.add("新游戏");
        JMenuItem pause = game.add("暂停");
        JMenuItem goon = game.add("继续");
        JMenuItem exit = game.add("退出");
        JMenu help = new JMenu("帮助");
        JMenuItem about = help.add("关于");
        menu.add(game);
        menu.add(help);
        setJMenuBar(menu);
         
        add(square);
        setVisible(true);
        init();
    }
    //初始化数据
    public void init(){
        boolean[] fontFalgs = new boolean[data.length];
        int length = ((map.length-2)*(map[0].length-2))/4;
        Random rn = new Random();
        for(int i = 0; i < length; i++){
            int num = 0;
            do{
                num = rn.nextInt(data.length);
            }while(fontFalgs[num]);
            String str = data[num];
            fontFalgs[num] = true;
             
            int colIndex = 0,rowIndex = 0;
            for (int j = 0; j < 4; j++) { //随机放到4个不同位置
                do{
                    rowIndex = rn.nextInt(fonts.length);
                    colIndex = rn.nextInt(fonts[0].length);
                }while(fonts[rowIndex][colIndex] != null);
                fonts[rowIndex][colIndex] = str;
            }
        }
    }
    //鼠标监听
    class MouseListener extends MouseAdapter{
        @Override
        public void mouseClicked(MouseEvent e) {
            if(e.getX() < SQUARE_SIDE || e.getX() > SQUARE_SIDE * 9 ||
                    e.getY() < SQUARE_SIDE || e.getY()> SQUARE_SIDE * 9 || 
                    map[(e.getY()/SQUARE_SIDE)][(e.getX()/SQUARE_SIDE)] == 0){
                return;
            } // 出了实际地图界限和已经找到就反回
            //System.out.println("x : " + (e.getX()/SQUARE_SIDE) + " y : " + (e.getY()/SQUARE_SIDE));
             
            if(sticklist.size() > 0){ //比较两个点
                Point p1 = new Point(sticklist.get(0)); 
                Point p2 = new Point((e.getX()/SQUARE_SIDE),(e.getY()/SQUARE_SIDE));
                map[p1.y][p1.x] = 2; //比较两个点时把这两个点设成其它标识
                map[p2.y][p2.x] = 2;
                //查询两点是否相通如果找到 设成该两点为0
                List<Point> ps = gameArithmetic.meet(p1.x < p2.x ? p1 : p2, p2.x > p1.x ? p2 : p1);
                if(ps == null){
                    sticklist.clear();
                    sticklist.add(new Point((e.getX()/SQUARE_SIDE),(e.getY()/SQUARE_SIDE)));
                    map[p1.y][p1.x] = 1;
                    map[p2.y][p2.x] = 1;
                }else{
                    coordlist.addAll(ps);
                    sticklist.add(p2);
                    square.repaint();
                    map[p1.y][p1.x] = 0;
                    map[p2.y][p2.x] = 0;
                }
            }else {
                sticklist.add(new Point((e.getX()/SQUARE_SIDE),(e.getY()/SQUARE_SIDE)));
            }
            square.repaint();
        }
    }
     
    public static void main(String[] args) {
        new Lianliankan();
    }
}
//图形类
class SquareMap extends JPanel{
    Date startTime = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
     
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Color c = g.getColor();
        g.setColor(Color.GREEN);
        draw(g);
        g.setColor(c);
    }
     
    //画显示在面板上的图形与时间
    private void draw(Graphics g){
        Font font = new Font("宋体",Font.PLAIN,25);
        g.setFont(font);
        for(int i = Lianliankan.SQUARE_SIDE ; i < Lianliankan.JFRAME_HEIGHT-Lianliankan.SQUARE_SIDE ; i+=Lianliankan.SQUARE_SIDE){
            for (int j = Lianliankan.SQUARE_SIDE; j < Lianliankan.JFRAME_WIDTH - Lianliankan.SQUARE_SIDE; j+=Lianliankan.SQUARE_SIDE) {
                if(Lianliankan.map[i/30][j/30]!=0){
                    g.draw3DRect(j, i, Lianliankan.SQUARE_SIDE, Lianliankan.SQUARE_SIDE, true);
                    g.drawString(Lianliankan.fonts[(i/Lianliankan.SQUARE_SIDE)-1][(j/Lianliankan.SQUARE_SIDE)-1], j+2, i+25);
                }
            }
        }
        if(Lianliankan.sticklist.size() > 0){
            g.setColor(Color.RED);
            for (int j2 = 0; j2 < Lianliankan.sticklist.size(); j2++) {
                Point p = Lianliankan.sticklist.get(j2); 
                g.draw3DRect(p.x * (Lianliankan.SQUARE_SIDE),(p.y *Lianliankan.SQUARE_SIDE) , Lianliankan.SQUARE_SIDE, Lianliankan.SQUARE_SIDE, true);
            }
            if(Lianliankan.sticklist.size() >= 2){ 
                Lianliankan.sticklist.clear();
            }
        }
        if(Lianliankan.coordlist.size() > 0){
            g.setColor(Color.RED);
            int num = Lianliankan.SQUARE_SIDE/2;
            for (int j2 = 1; j2 < Lianliankan.coordlist.size(); j2++) {
                Point p1 = Lianliankan.coordlist.get(j2 - 1); 
                Point p2 = Lianliankan.coordlist.get(j2);
                g.drawLine((p1.x * Lianliankan.SQUARE_SIDE + num) , (p1.y * Lianliankan.SQUARE_SIDE + num) 
                        , (p2.x * Lianliankan.SQUARE_SIDE + num) , (p2.y * Lianliankan.SQUARE_SIDE + num));
            }
            if(Lianliankan.coordlist.size() >= 2){ 
                Lianliankan.coordlist.clear();
            }
        }
        g.setColor(Color.GRAY);
        font = new Font("宋体",Font.PLAIN,15);
        g.setFont(font);
        startTime.setTime(Lianliankan.totalTime);
        g.drawString(sdf.format(startTime), Lianliankan.JFRAME_WIDTH-Lianliankan.SQUARE_SIDE*2-5, 12);
    }
     
}
//算法类
class GameArithmetic{
     
    public List<Point> meet(Point p1,Point p2){
        if(p1.equals(p2) || !Lianliankan.fonts[p1.y-1][p1.x-1].equals(Lianliankan.fonts[p2.y-1][p2.x-1])) return null;
        int index = 0;
        boolean left = true,right = true,up = true,down = true;
        //分 上下左右四个方向查找 每次+1 移动的找有障碍物返回
        while(left || right || up || down){
             
            if(right && meetCols(p1,new Point(p1.x+index,p1.y))==0){
                if(meetCols(p2,new Point(p1.x+index,p2.y))==0 && 
                        meetRows(new Point(p1.x+index,p1.y),new Point(p1.x+index,p2.y)) == 0){
                    return surveyPointer(p1,p2,new Point(p1.x+index,p1.y),new Point(p1.x+index,p2.y));
                }
            }else{
                right = false;
            }
             
            if(left && meetCols(p1,new Point(p1.x-index,p1.y))==0){
                if(meetCols(p2,new Point(p1.x-index,p2.y))==0 && 
                        meetRows(new Point(p1.x-index,p1.y),new Point(p1.x-index,p2.y)) == 0){
                    return surveyPointer(p1,p2,new Point(p1.x-index,p1.y),new Point(p1.x-index,p2.y));
                }
            }else{
                left = false;
            }
             
            if(down && meetRows(p1,new Point(p1.x,p1.y+index))==0){
                if(meetRows(p2,new Point(p2.x,p1.y+index))==0 && 
                        meetCols(new Point(p1.x,p1.y+index),new Point(p2.x,p1.y+index)) == 0){
                    return surveyPointer(p1,p2,new Point(p1.x,p1.y+index),new Point(p2.x,p1.y+index));
                }
            }else{
                down = false;
            }
         
            if(up && meetRows(p1,new Point(p1.x,p1.y-index))==0){
                if(meetRows(p2,new Point(p2.x,p1.y-index))==0 && 
                        meetCols(new Point(p1.x,p1.y-index),new Point(p2.x,p1.y-index)) == 0){
                    return surveyPointer(p1,p2,new Point(p1.x,p1.y-index),new Point(p2.x,p1.y-index));
                }
            }else{
                up = false;
            }
             
            index ++;
        }
        return null;
         
    }
     
    private int meetCols(Point p1,Point p2){
        int start = p1.x < p2.x ? p1.x : p2.x;
        int end = p1.x < p2.x ? p2.x : p1.x;
         
        if(start < 0 || end >= Lianliankan.map[0].length) return 1;
         
        for (int i = start; i <= end ; i++) {
            if(Lianliankan.map[p1.y][i]==1)
                return Lianliankan.map[p1.y][i];
        }
        return 0;
    }
     
    private int meetRows(Point p1,Point p2){
        int start = p1.y < p2.y ? p1.y : p2.y;
        int end = p1.y < p2.y ? p2.y : p1.y;
         
        if(start < 0 || end >= Lianliankan.map.length) return 1;
         
        for (int i = start; i <= end ; i++) {
            if(Lianliankan.map[i][p1.x]==1)
                return Lianliankan.map[i][p1.x];
        }
        return 0;
    }
     
    private List<Point> surveyPointer(Point p1,Point p2,Point proxy1,Point proxy2){
        List<Point> pList = new ArrayList<Point>();
        pList.add(p1);
        if(proxy1.equals(p1) && proxy2.equals(p2)){
        }else if(proxy1.equals(p1)){
            pList.add(proxy2);
        }else if(proxy2.equals(p2)){
            pList.add(proxy1);
        }else{
            pList.add(proxy1);
            pList.add(proxy2);
        }
        pList.add(p2);
        return pList;
    }
}

易无休资源网 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:连连看游戏源代码,直接编译即可运行
喜欢 (5)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址