📄 mainpanel.java
字号:
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 + -