⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainpanel.java

📁 对对碰小游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
import javax.swing.border.Border;
import java.util.*;

public class MainPanel extends JPanel{
	
	private GridMouseAdapter gma;
	private DaoJuAdapter dja;
	private boolean InGridProcess;
	private boolean[] daoju_valid;
	private JLabel Score_label;
	private JLabel Time_label;
	private Border selectedBorder;
	private Border opaqueBorder;
	private Border tipBorder;
	private JLabel grid[][];
	private JPanel gridPanel;
	private JPanel poolpanel;
	private boolean win_flag;
	private int xBound;
	private int yBound;
	private Thread show;
	private JProgressBar progress;
	private int progress_flag = 100;
	//private Sound soundclass;
	private boolean canStart;
	private boolean gameStarting;
	private int[][] map;
	private int[][] tempmap;
	private static final int KONG = 11;
	//private Vector s;
	private static final int length = 48;
	private int score = 0;
	ActionListener menuListener;
	ActionListener statusListener;
	private final static int DAOJU_TYPE = 5;
	private final static int DAOJU_ZHUAN = 0;
	private final static int DAOJU_ZHA = 1;
	private final static int DAOJU_TISHI =2;
	private final static int DAOJU_JIAN1 = 3;
	private final static int DAOJU_JIA1 = 4;
	private Vector v; 
	private static final int sleep_num = 40;
	private int kongnum;
	private boolean[] konghang;
	private static final int PROGRESS = 100;
	private int progress_num;
	private JPanel rightspace;
	private Thread progressthread;
	private JLabel[] daoju;

   	public MainPanel(ActionListener MenuListener,
		ActionListener StatusListener){

		setLayout(null);
		v=new Vector();
		InGridProcess = false;
		daoju_valid = new boolean[DAOJU_TYPE];
		//s=new Vector();
		daoju = new JLabel[5];
		daoju[0] = new JLabel();
		daoju[1]= new JLabel();
		daoju[2]= new JLabel();
		daoju[3]=new JLabel();
		daoju[4]=new JLabel();
		Score_label = new JLabel();
		Time_label = new JLabel();
		map=new int[8][8];
		tempmap = new int[8][8];
		menuListener = MenuListener;
		statusListener = StatusListener;
		progress = new JProgressBar(0,PROGRESS);
		konghang = new boolean[8];
		canStart = true;
		gameStarting =false;
		setBackground(Color.blue);
		JPanel leftspace = new JPanel();
		leftspace.setBackground(Color.black);
		leftspace.setSize(50,410);		
              add(leftspace);
		leftspace.setBounds(0,0,50,402);
		gma = new GridMouseAdapter();
		dja = new DaoJuAdapter();
		opaqueBorder = BorderFactory.createLineBorder(getBackground());
		selectedBorder = BorderFactory.createLineBorder(Color.red,3);
		tipBorder = BorderFactory.createLineBorder(Color.green);
		setPoolPanel();
		rightspace = new JPanel();
		rightspace.setBackground(Color.black);
		add(rightspace);
		rightspace.setBounds(452,0,190,402);
		//rightspace.add(new JButton("ok"),BorderLayout.CENTER);
	}

	public void startGame(){
		
		getStartMap();
		setGridPanel();
		
		rightspace.setLayout(null);
		progress_num = 0;
		progress.setValue(progress_num);
		progress.setPreferredSize(new Dimension(180,30));
		progress.setForeground(Color.blue);
		progress.setBorderPainted(false);
		progress.setVisible(true);
		rightspace.add(progress);
		progress.setBounds(5,201,180,30);

		Score_label.setPreferredSize(new Dimension(180,80));
		Score_label.setVisible(true);
		Score_label.setForeground(Color.yellow);
		Score_label.setFont(new Font("Duiduipeng",Font.BOLD,50));
		Score_label.setHorizontalAlignment(SwingConstants.CENTER);
		rightspace.add(Score_label);
		Score_label.setText(""+score);
		Score_label.setBounds(5,121,180,80);

		Time_label.setPreferredSize(new Dimension(180,80));
		Time_label.setVisible(true);
		Time_label.setForeground(Color.red);
		Time_label.setFont(new Font("Duiduipeng",Font.BOLD,30));
		Time_label.setHorizontalAlignment(SwingConstants.CENTER);
		rightspace.add(Time_label);
		Time_label.setText("00 : 00");
		Time_label.setBounds(5,261,180,80);

		int temploop = 0;
		for (temploop =0;temploop<5;temploop++)
			{
				rightspace.add(daoju[temploop]);
				daoju[temploop].setBounds(22+temploop*30,354,26,26);
				daoju[temploop].setVisible(true);
				daoju[temploop].setBorder(BorderFactory.createLineBorder(Color.green,2));
				daoju[temploop].setIcon(ImageFactory.getInstance().getImageicon(13+temploop));
				daoju[temploop].addMouseListener(dja);
				daoju_valid[temploop] = true;
			}

		
		//addAllListener();
		win_flag = false;
		canStart = false;
		gameStarting = true;
		menuListener.actionPerformed(null);
		statusListener.actionPerformed(null);	

		//progressthread = new ProgressThread(this);
		//progressthread.start();
		new TimeThread().start();
		}

	private void win(){
		new SoundThread(Sound.WIN).start();
		}
	
	public void stopGame(){
		Time_label.setVisible(false);
		Score_label.setVisible(false);
		progress.setVisible(false);
		gridPanel.setVisible(false);
		poolpanel.setVisible(true);
		int temploop = 0;
		for (temploop =0;temploop<5;temploop++)
			{
				daoju[temploop].setVisible(false);
			}
		canStart = true;
		gameStarting = false;
		menuListener.actionPerformed(null);
		statusListener.actionPerformed(null);	
		try{
			Thread.sleep(500);
			}catch(Exception e){};
		}
	
	private void setPoolPanel(){
		poolpanel = new JPanel();
		poolpanel.setBackground(Color.blue);
		JLabel pool;
		pool = new JLabel();
		pool.setIcon(ImageFactory.getInstance().getImageicon(10));
		poolpanel.setBounds(50,4,402,402);
		poolpanel.add(pool);
		add(poolpanel);
		}

	private void setGridPanel() {
	       gridPanel = new JPanel();
		poolpanel.setVisible(false);
		gridPanel.setBackground(getBackground());
		xBound = 8;
		yBound = 8;		
		gridPanel.setLayout(null);
		grid = new JLabel[yBound][xBound];
		int posx;
		int posy;
		for(int y=0;y<yBound;y++) {
			for(int x=0;x<xBound;x++) {
				       posx=50*x+2;
					posy=50*y+2;
					grid[x][y] = new JLabel();
					grid[x][y].setIcon(ImageFactory.getInstance().getImageicon(map[x][y]));
					grid[x][y].setBorder(opaqueBorder);
					grid[x][y].addMouseListener(gma);
					gridPanel.add(grid[x][y]);
					grid[x][y].setBounds(posx,posy,48,48);
			}
		}
		Toolkit toolkit  = Toolkit.getDefaultToolkit();
		Cursor cursor = toolkit.createCustomCursor(ImageFactory.getInstance().getImageicon(12).getImage(),new Point(0,0),null);
		//gridPanel.setCursor(cursor);
		add(gridPanel);
		gridPanel.setBounds(50,0,402,402);
		setVisible(true);
	}

	private class DaoJuAdapter extends MouseAdapter{
		private JLabel temp_daoju;
		public int getNumber(JLabel j){
			return (j.getX()-22)/30;
			}
		public void mouseClicked(MouseEvent me){
				int daoju_type;
				temp_daoju = (JLabel)me.getSource();
				daoju_type = getNumber(temp_daoju);
				daoju_valid[daoju_type] = false;
				daoju[daoju_type].setEnabled(false);
				switch (daoju_type){
						case DAOJU_JIA1:
							break;
						case DAOJU_JIAN1:
							break;
						case DAOJU_TISHI:
						case DAOJU_ZHUAN:
						case DAOJU_ZHA:
							new DaoJuThread(daoju_type).start();
					}
			
			}
		}

	private class GridMouseAdapter extends MouseAdapter {
		
		private JLabel prev;
		private JLabel now;
		
		private JLabel pressLabel;
		private boolean press = false;
		private boolean release = true;
		private boolean once = true;
		private JLabel test;

		public void mouseEntered(MouseEvent e){
			if(press && !release && once )
				{
					once = false;
					prev = pressLabel;
					mouseClicked(e);
				}
			}
		public void mousePressed(MouseEvent e) {
			press = true;
			release = false;
			once = true;
			pressLabel  = (JLabel)e.getSource();
			pressLabel.setBorder(selectedBorder);
			}
		public void mouseReleased(MouseEvent e){
			once = false;
			press = false;
			release = true;
			pressLabel.setBorder(opaqueBorder);
			}
		
		public void mouseClicked(MouseEvent me) {
				InGridProcess = true;
				removeAllListener();
				v.add(new JItem(Sound.SELECT));
			       if(prev == null){
					prev = (JLabel)me.getSource();
					prev.setBorder(selectedBorder);
					
					}
				else{
						now =(JLabel)me.getSource();
						if(IsSame(prev, now))
							{
								prev.setBorder(opaqueBorder);
								prev = null;
								now =null;
							}
						else if(!IsRelated(prev,now))
							{
								prev.setBorder(opaqueBorder);
								now.setBorder(selectedBorder);
								prev = now;
								now =null;
								
							}
						else
							{
								now.setBorder(selectedBorder);
								prev.setBorder(opaqueBorder);
								now.setBorder(opaqueBorder);
								v.add(new JItem(prev,KONG,0,0));
								v.add(new JItem(now,KONG,0,0*sleep_num));
								v.add(new JItem(prev,map[getXpos(now)][getYpos(now)],0,0));
								//System.out.println("Input is "+map[getXpos(now)][getYpos(now)]);
								//System.out.println("After false");
								v.add(new JItem(now,map[getXpos(prev)][getYpos(prev)],0,10*sleep_num));
								copyArray(map, tempmap);
								tempmap[getXpos(now)][getYpos(now)]=map[getXpos(prev)][getYpos(prev)];
								tempmap[getXpos(prev)][getYpos(prev)]=map[getXpos(now)][getYpos(now)];
								if(!HasKong(tempmap))
									{
										v.add(new JItem(Sound.WRONG));
										v.add(new JItem(true,1*sleep_num));
										v.add(new JItem(prev,KONG,0,0));
										v.add(new JItem(now,KONG,0,1*sleep_num));
										v.add(new JItem(prev,map[getXpos(prev)][getYpos(prev)],0,0));
										v.add(new JItem(now,map[getXpos(now)][getYpos(now)],0,10*sleep_num));
										prev.setBorder(opaqueBorder);
										now.setBorder(opaqueBorder);
										prev =null;
										now =null;
									}
								else
									{
									for(;;){
										do{
												int loopout;
												int loopin;
												int loopX;
												int loopY;
												int loop;
												while(kongnum>0)
													{
													for(loopX=0;loopX<8;loopX++)
														{
														if(!konghang[loopX])
															continue;
														for(loopY=7;loopY>=0;loopY--)
															{
																if(tempmap[loopX][loopY] ==KONG)
																	{
																		for(loop=loopY;loop>0;loop--)
																			{
																				tempmap[loopX][loop]=tempmap[loopX][loop-1];
																				v.add(new JItem(grid[loopX][loop],tempmap[loopX][loop],0,0));
																				tempmap[loopX][loop-1]=KONG;
																				v.add(new JItem(grid[loopX][loop-1],KONG,0,0));
																			}
																		tempmap[loopX][0]=(int)(Math.random()*7);
																		v.add(new JItem(grid[loopX][0],tempmap[loopX][0],0,0));
																		kongnum--;
																		//progress_num ++;
																		break;
																	}
															}
														}
													v.add(new JItem(true,5*sleep_num));
													}
												//v.add(new JItem(true,5*sleep_num));
											}
										while(calculateDelete());
										if(!IsLiving(tempmap))
											{
												setKong(tempmap);
												kongnum = 8*8;
											}
										else
											{
												break;
											}
										}
										copyArray(tempmap,map);
										prev=null;
										now=null;
									}
							}
					}
				if(progress_num >= PROGRESS)
					win_flag = true;
				if(!v.isEmpty()){
						show = new DisplayThread(v);
						show.start();
					}
				else if(!win_flag)
					addAllListener();
				InGridProcess = false;
				}

	}
	private class SoundThread extends Thread{
		private int sound;
		public SoundThread(int s){
			sound = s;
			}
		public void run(){
			try{
				new Sound(sound);
				}catch(Exception e){System.out.println("Play sound error");};
			}
		}
	private class DisplayThread extends Thread {
		private Vector v;
		
		public DisplayThread(Vector vector) {
			v=vector;
		}
		public void run() {
			JItem temp;
			//System.out.println("Come in run");
			//System.out.println("Vector num is"+v.size());
			while(!v.isEmpty()){
				
				temp = (JItem)v.remove(0);
				if(temp.progress_num!=temp.NoProgress)
					{
						//System.out.println("temp.progress_num"+temp.progress_num);
						if(temp.progress_num >= PROGRESS)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -