本文实例为大家分享了java实现简易连连看小游戏的具体代码,供大家参考,具体内容如下
新手上路,分享一下
直接上代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
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); //设置第一张图片还原 } }
} } |
然后创建主类运行即可
1 2 3 4 5 6 7 |
package linkgame;
public class Play { public static void main(String[] args) { LinkGame linkGame= new LinkGame(); } } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
原文链接:https://blog.csdn.net/zeor_jokerman/article/details/106617038