连连看小游戏java源代码(1)

//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了。接下篇。。。

 

 


 

 


 


 

展开阅读全文

没有更多推荐了,返回首页