java实现简易连连看小游戏

本文实例为大家分享了java实现简易连连看小游戏的具体代码,供大家参考,具体内容如下

新手上路,分享一下

直接上代码

package linkgame;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class LinkGame extends JFrame implements Runnable{
    private JPanel panel_01,panel_02;
    private String first,finnal;
    private JLabel time;
    private boolean isClick=true;
    private int x1,y1,x2,y2;
    Icon temp;
    JButton firstbutton=new JButton();
    JButton secondbutton=new JButton();

    public LinkGame(){
        setTitle("连连看");
        setBounds(300,100,600,450);
        panel_01=new JPanel(new GridLayout(6,6));
        panel_02=new JPanel(new BorderLayout());

        close();
        rightPanel();
        leftPanel();
        add(panel_01,BorderLayout.CENTER);
        add(panel_02,BorderLayout.WEST);
        setVisible(true);
        setResizable(false);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        //run();
    }

//关闭应用询问
    private void close(){
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                int result = JOptionPane.showConfirmDialog(panel_01, "是否确认退出?", "确认",
                        JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);
                if(result == JOptionPane.OK_OPTION){
                    System.exit(0);
                }
            }
        });
    }

    //左侧面板
    private void rightPanel(){
        File img=new File("src/images");//打开图片文件夹
        String[] list=img.list();//获取文件中的图片名称并存入集合
        Set<String> s=new HashSet<>();//构建无序集合
        Set<String> s2=new TreeSet<>();
        boolean bol=false;
        //把18个图片存入set集合中以备生成界面
        for(int l=0;l<18;l++){
            s.add(list[l]);
            s2.add(list[l]);
        }
        for(int i=0,count=0;i<6;i++){
            for(int j=0;j<6;j++){
                String[] strs01=s.toArray(new String[0]);
                String[] strs02=s2.toArray(new String[0]);
                if(count>17){
                    count=0;
                    bol=true;
                }
                JButton button=new JButton();//新建按钮
                if(bol){
                    ImageIcon imgs=new ImageIcon("src/images/"+strs02[count]);
                    button.setIcon(imgs);
                }else{
                    ImageIcon imgs=new ImageIcon("src/images/"+strs01[count]);
                    button.setIcon(imgs);
                }
                button.addActionListener(new click());//添加按钮的监听事件
                panel_01.add(button);//把按钮添加到左面板
                count++;
            }
        }
    }
    //有面板
    private void leftPanel(){
        ImageIcon icon=new ImageIcon("src/images/leftback.png");//连连看字
        JLabel label=new JLabel(icon);
        time=new JLabel("剩余时间30秒");//倒计时计时初始化
        time.setFont(new Font("楷体",Font.PLAIN,20));//设置字体样式
        panel_02.add(label,BorderLayout.NORTH);
        panel_02.add(time,BorderLayout.SOUTH);
    }
    //倒计时方法
    public void run() {
        int  count=30;
        while (count>=0) {
            try {
                time.setText("剩余时间"+count + "秒");
                Thread.sleep(1000);   //暂停1秒
                count--;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if(count==0){
                JOptionPane.showMessageDialog(panel_01,"时间用完,已结束");
                System.exit(0);
            }
        }

    }
    //按钮点击内部类
    class click implements ActionListener{

        ImageIcon img=new ImageIcon("src/images/Img319981730_null.jpg");//空白图片
        @Override
        public void actionPerformed(ActionEvent e) {
            //获取点击按钮的行和列
            if(isClick){
                firstbutton=((JButton)e.getSource());
                first=firstbutton.getIcon().toString();//获取点击图片名称
                temp=firstbutton.getIcon();
                x1=firstbutton.getLocation().x;//获取点击图片横纵坐标
                y1=firstbutton.getLocation().y;
                firstbutton.setIcon(img);//点击后图片设置为空白图片
                isClick=false;
            }else {
                secondbutton=((JButton)e.getSource());
                finnal=secondbutton.getIcon().toString();//获取第二次点击图片名称
                x2=secondbutton.getLocation().x;//获取点击图片横纵坐标
                y2=secondbutton.getLocation().y;
                isClick=true;
                win();//判断是否消除或者胜利方法
            }
        }

        private void win(){
            boolean bol=first.equals(finnal);//判断两次点击的图片名字是否相同
            boolean bol2=!((x1==x2)&&(y1==y2));//判断位置是否不一样,防止点击两张相同的图片
            if(bol&&bol2){
                firstbutton.setIcon(img);
                secondbutton.setIcon(img);
                String str02="src/images/Img319981730_null.jpg";//把第二张图片改成空白图片
                Component[] bts=panel_01.getComponents();//获取全部组件
                int count=0;
                for(int i=0;i<bts.length;i++){
                    JButton btn=(JButton)bts[i];
                    String str01=btn.getIcon().toString();
                    if(str01.equals(str02)){//判断组件名称等于空白图片名称的个数
                        count++;
                        if(count==35){
                            //如果到达全部图片则游戏胜利
                            JOptionPane.showMessageDialog(panel_01,"你赢了");
                            System.exit(0);
                        }
                    }
                }
            }else{
                firstbutton.setIcon(temp);//设置第一张图片还原
            }
        }

    }
}

然后创建主类运行即可

package linkgame;

public class Play {
    public static void main(String[] args) {
        LinkGame linkGame=new LinkGame();
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java仿QQ连连看游戏

    关于这个项目,真的是花了很多心思在上面,从开始构思,到最后完成,真的是花了整整一个月.大概是11月初开始学java swing的时候有的想法,然后开始构思整个思路,相关算法讨论以及调试. 最开始先对连连看基础算法进行测试,就用一般的二维数组,然后就用控制台输入两个点的坐标进行删除,这一步就调试了我整整一个星期,基础算法搞完了 终于开始设计界面了,反正也不知道那时候花了多长时间才把界面给设计好,反正还设计的特别丑(至今也如此). 功能如下: 运行程序后有背景音乐 菜单栏有:重新开始,提示,炸弹,排

  • 用Java实现连连看小游戏

    很多人写游戏都是从连连看或者五子棋这类的简单小游戏入手的,最近我也尝试着写了一个连连看,想要再梳理一遍其中的思路. 连连看的规则 连连看要求在一定范围内找到两个特征一样并且能够通过空白的通道在两折(直角)以内相连的东西,连续点击两个东西之后消除.通常我们会选择用图片来进行匹配,这样更直观有趣. 如何存储连连看的数据 使用二维数组进行存储,每一个数组元素对应一个位置上的图片种类.例如我们分别用1,2,3,4代表四个不同的图片,用0代表没有图片:那么二维数组{{},{},{},{}}就相应地存储对应

  • java连连看游戏菜单设计

    本文实例为大家分享了java连连看游戏菜单的具体实现代码,供大家参考,具体内容如下 先写GUI. 首先初始化框架,菜单,按钮,需要把菜单和按钮都添加在框架中.注意添加的顺序,首先要设置菜单,再设置框架,再设置按钮,如果交换了设置菜单和框架的顺序,会导致菜单显示不出,被框架挡住.对菜单设置了三个选项,第一个选项有五个下拉按键,用循环添加,第二个和第三个选项的下拉按键直接添加. GUI代码如下: package gui; import java.awt.Font; import javax.swin

  • Java实现简单连连看游戏

    本文实例为大家分享了Java实现连连看游戏的具体代码,供大家参考,具体内容如下 大二时做的Java课程设计,拿了个优秀,用了icon来模拟做了个简单的连连看,代码量不多,仅供参考. 课设要求是实现连连看最基本的功能,所以这里写了个简单的初始界面和经典模式的一个界面. 初始界面 代码如下: public class PictureMatching {     JButton classical = new JButton("经典模式");     JButton about = new

  • Java实现连连看算法

    连连看是个经典的小游戏,规则是:两图案相同的方块在2折以内的线连接下可以消除.里面的算法还是非常有趣,今天来研究一下. 初始化棋盘 假设有一个8*8的棋盘,我们要将其扩充至10*10,为什么?因为这样外围的连接就可以不用越界了. 消除基本条件 判断是否具备消除的基本条件有 3 个 两个方块不能是同一个坐标 两个方块必须是同种类型(图案) 两个方块中不能有任何一个已经消除过的(消除过后的值用 mark 表示) // 判断是否具备消除的基本条件:两个方块不能是同一个坐标:两个方块必须是同种类型:两个

  • java实现连连看游戏

    本文实例为大家分享了java实现连连看游戏的具体代码,供大家参考,具体内容如下 代码会实现共享的,这个是截图 代码: package com.lr.bean; import java.util.Scanner; import java.util.Random; import com.lr.bean.Point; public class Link{ public static void main(String[] args){ Scanner sc=new Scanner(System.in);

  • java实现连连看游戏课程设计

    本文为大家分享了JAVA语言课程设计:连连看小游戏,供大家参考,具体内容如下 1.设计内容 界面中有5*10的界面,图中共有6种不同的图片,每两个相同的图片连接在一起,如果连线中转折的次数<=3次,两张图片可同时削掉,否则不能削去. 2.设计要求 色彩鲜艳,鼠标点击键好用,以固定时间将所有图片消掉为胜利,若时间到了,图片还有,则闯关失败. 3.设计思想 1)    搭建界面,首先搭建简单界面,可以先用按钮代替图片,并且行列可以先少做一些,如下图所示:2)    每次用户选择两个图形,如果图形满足

  • java基于swing实现的连连看代码

    本文实例讲述了java基于swing实现连连看代码.分享给大家供大家参考. 主要功能代码如下: 复制代码 代码如下: package llkan; import javax.swing.*; import java.awt.*; import java.awt.event.*; /**  * 连连看游戏  * @author Administrator  *2014年10月17日  */ public class MainGame implements ActionListener {     

  • java实现简易连连看小游戏

    本文实例为大家分享了java实现简易连连看小游戏的具体代码,供大家参考,具体内容如下 新手上路,分享一下 直接上代码 package linkgame; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.

  • Java实现简易五子棋小游戏

    本文实例为大家分享了Java实现简易五子棋小游戏的具体代码,供大家参考,具体内容如下 一.实践目标: 1.掌握JavaGUI界面设计 2.掌握鼠标事件的监听(MouseListener,MouseMotionListener) 二.实践内容: 设计一个简单的五子棋程序,能够实现五子棋下棋过程.如下图所示 五子棋运行界面 1.五子棋棋盘类 package cn.edu.ouc.fiveChess;   import java.awt.Color; import java.awt.Cursor; i

  • python递归法实现简易连连看小游戏

    问题:简单版连连看小游戏 一个分割成w*h个正方格子的矩形板上,每个正方格子可以有游戏卡,也可以没有游戏卡 两个游戏卡之间有一条路径相连需满足以下三个条件: 1.路径只包含水平和垂直的直线段 2.路径不能穿过别的游戏卡片 3.允许路径临时离开矩形板 输入要求: 第一行包括两个整数:w 和 h ; w:矩形板的宽度,h:矩形板的长度 下面h行,每行包括w个字符,表示矩形板上卡片的分布情况:'X'代表这个地方有卡片:'O'代表无卡片 之后一行包括4个整数:X1,Y1,X2,Y2(1<=X1,X2<

  • 利用Matlab编写简易版连连看小游戏

    这是一款MATLAB连连看小游戏,基本实现了连连看的功能,不过目前没有写出死局判定的模块,日后可能会对其进行改进. 游戏截图 游戏组装说明 我们的变量path输入的是图像包的相对路径或绝对路径 这里我们由于文件夹名称就叫“图片”所以直接path='图片’是没啥问题的. 文件夹里就是图片素材啦,其名称没有任何要求,形状最好是方的,不过不是的话问题也不大,程序会自动将其拉伸成方的........ 我们这里要求的是读入jpg格式,想要png,jpg都读的话,.....最简单的就是直接读两次 完整代码

  • Java实现三子棋小游戏简易版

    本文实例为大家分享了Java实现三子棋小游戏的具体代码,供大家参考,具体内容如下 游戏操作如图示: 原理: 主要借助3x3的二维数组 实现: 1.Main–主程序 public class Main {     public static void main(String[] args) {       Player player=new Player();//玩家       Game game=new Game(player);       //一次循环代表一次游戏       while

  • Java完美实现2048小游戏

    完美地模仿了2048游戏,是根据网友的一个2048改的. Block.java import javax.swing.*; import java.awt.*; public class Block extends JLabel { private int value; public Block() { value = 0;//初始化值为0 setFont(new Font("font", Font.PLAIN, 40));//设定字体 setBackground(Color.gray

  • Java实现打飞机小游戏(附完整源码)

    写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过这个游戏让大家理解oop面向对象编程的过程,纯属娱乐.代码写的很简单,也很容易理解,并且注释写的很清楚了,还有问题,自己私下去补课学习. 效果如下 完整代码 敌飞机 import java.util.Random; 敌飞机: 是飞行物,也是敌人 public class Airplane extends FlyingObject implements Enemy

  • java实现数字猜拳小游戏

    本文编写一个java数字猜拳的小游戏,具体实现很简单 package guenum; import java.util.ArrayList; import java.util.Scanner; public class Demo { // private static Object list; public static void main(String ad[]) { System.out.println("-------------------------------------小游戏---

  • Java实现的打地鼠小游戏完整示例【附源码下载】

    本文实例讲述了Java实现的打地鼠小游戏.分享给大家供大家参考,具体如下: 这里涉及到java线程和GUI的相关知识,一个简单的java小游戏打地鼠,有兴趣的朋友可以优化一下.先来看看运行效果: 具体代码: Mouse.java: import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt

  • Java实现24点小游戏

    本文实例为大家分享了Java实现24点小游戏的具体代码,供大家参考,具体内容如下 程序设计要求: 24点游戏是经典的纸牌益智游戏. 常见游戏规则: 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢.(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏. 基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题. 1.程序风格良好(使用自定义注释模板) 2.列出表

随机推荐