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)