好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java实现简易连连看小游戏

本文实例为大家分享了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

查看更多关于java实现简易连连看小游戏的详细内容...

  阅读:21次