//MainView 主界面
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
public class MainView extends JFrame implements ActionListener{
private static final long serialVersionUID = -8711256543675730570L;
public static JLabel fractionLable=new JLabel("0"); //分数标签
public static int count =0;
private JMenuBar menuBar;
private JMenu menu;
private JMenuItem MenuItem1;
private JMenuItem MenuItem2;
private JMenuItem MenuItem3;
private JButton exitButton,newlyButton; //退出,重列,重新开始按钮
private JPanel centerPanel,pane5;
private JPanel northPanel;
private int row = 7;
private int col = 8;
private MyThread myThread;
private int time = 100; //单位为秒
private JProgressBar aJProgressBar;
public MainView(){
initView();
}
private void initView(){
centerPanel = new JPanel();
centerPanel.setLayout(new BorderLayout());
pane5 =new CenterPanel(row,col);
centerPanel.add(pane5,BorderLayout.SOUTH);
JPanel mainPanel=new JPanel();
setNorthPanel();
mainPanel.add(northPanel,BorderLayout.NORTH);
mainPanel.add(centerPanel,BorderLayout.SOUTH);
myThread = new MyThread(){
protected void runPersonelLogic(){
int minimum = aJProgressBar.getMinimum();
if(aJProgressBar.getValue() != minimum){
int value = aJProgressBar.getValue();
System.out.println(value);
try {
Thread.sleep(1000);
aJProgressBar.setValue(aJProgressBar.getValue() - 1);
} catch (InterruptedException e){
e.printStackTrace();
}
if(count ==row*col/2){
this.setSuspend(true);
int i= JOptionPane.showConfirmDialog
(null,"恭喜过关了,是否继续?", "游戏提示", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if(i==0){
this.setSuspend(false);
centerPanel.remove(pane5);
pane5 =new CenterPanel(row,col);
centerPanel.add(pane5);
count = 0;
aJProgressBar.setValue(time);
centerPanel.revalidate();
}
}
}else{
this.setSuspend(true);
int i =JOptionPane.showOptionDialog
(null,"大侠,时间到了!","游戏提示",JOptionPane.OK_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE,null,
new String[]{"重来","取消"},"重来");
if(i==0){
restart();
}
}
}
};
myThread.start();
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
this.getContentPane().add(mainPanel);
this.setJMenuBar();
this.setTitle("连连看");
this.setVisible(true);
this.setBounds(280,100,600,650);
this.setResizable(false);
}
private void setJMenuBar() {
MenuItem1 = new JMenuItem("重新开始");
MenuItem1.addActionListener(this);
MenuItem2 = new JMenuItem("关于");
MenuItem2.addActionListener(this);
MenuItem3 = new JMenuItem("退出");
MenuItem3.addActionListener(this);
menu = new JMenu("菜单");
menuBar = new JMenuBar();
menu.add(MenuItem1);
menu.add(MenuItem2);
menu.add(MenuItem3);
menuBar.add(menu);
this.setJMenuBar(menuBar);
}
private void setNorthPanel(){
northPanel=new JPanel();
northPanel.setLayout(new FlowLayout());
northPanel.add(new JLabel("分数:"));
northPanel.add(fractionLable);
northPanel.add(new JLabel("时间:"));
aJProgressBar = new JProgressBar(0,time);
aJProgressBar.setValue(time);
aJProgressBar.setStringPainted(true);
aJProgressBar.setBackground(Color.white);
aJProgressBar.setForeground(Color.red);
northPanel.add(aJProgressBar);
exitButton=new JButton("退出");
exitButton.addActionListener(this);
newlyButton=new JButton("再来一局");
newlyButton.addActionListener(this);
northPanel.add(exitButton);
northPanel.add(newlyButton);
}
public static void main(String args[]){
new MainView();
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==exitButton||e.getActionCommand().equals("退出")){
System.exit(0);
}
if(e.getSource()==newlyButton||e.getActionCommand().equals("重新开始")){
restart();
}
}
private void restart() {
fractionLable.setText("0");
if(pane5 != null){
centerPanel.remove(pane5);
}
pane5 =new CenterPanel(row,col);
centerPanel.add(pane5);
count = 0;
aJProgressBar.setValue(time);
myThread.setSuspend(false);
centerPanel.revalidate();
}
}
//自写的button按钮
import java.awt.Insets;
import javax.swing.JButton;
public class MyButton extends JButton {
private static final long serialVersionUID = -7656457111448117368L;
private int row;
private int col;
private int pictrueId;
private boolean isBlank;
private boolean isCleaned = false;
public MyButton(int row,int col,int pictrueId){
this.row=row;
this.col=col;
this.pictrueId = pictrueId;
this.setMargin(new Insets(0,0,0,0));
}
public MyButton() {
}
public int getRow() {
return row;
}
public void setRow(int row) {
this.row = row;
}
public int getCol() {
return col;
}
public void setCol(int col) {
this.col = col;
}
public int getPictrueId() {
return pictrueId;
}
public void setPictrueId(int pictrueId) {
this.pictrueId = pictrueId;
}
public boolean isBlank() {
return isBlank;
}
public void setBlank(boolean isBlank) {
this.isBlank = isBlank;
}
public boolean isCleaned() {
return isCleaned;
}
public void setCleaned(boolean isCleaned) {
this.isCleaned = isCleaned;
}
}
//MyThread.java
public abstract class MyThread extends Thread {
private boolean suspend = false;
private String control = ""; //只是需要一个对象而已,这个对象没有实际意义
public void setSuspend(boolean suspend) {
if(!suspend) {
synchronized(control) {
control.notifyAll();
}
}
this.suspend = suspend;
}
public boolean isSuspend() {
return this.suspend;
}
public void run() {
while(true) {
synchronized(control){
if(suspend) {
try {
control.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}this.runPersonelLogic();
}
}
protected abstract void runPersonelLogic();
}
分两页篇写,以上都是基础。还有主功能模块。一般不想写什么评论,这些东西很多人做过,至于连连看算法,网上都有,不过细节很重要,也就是你知道算法,还不一定能一次搞定,为此我也是检查检查在检查,终于主功能OK了。接下篇。。。