坑的地方
JLabel色块要调透明
方向键要用press方法
主界面
package game; import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import java.awt.GridLayout; import java.awt.Color; public class Game extends JFrame implements KeyListener{ private JPanel contentPane; Block[][] block1=new Block[4][4];//色块 GameSrc game=new GameSrc();//游戏类 int[][] pane=new int[4][4];//游戏类的数据 /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Game frame = new Game(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public Game() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(new GridLayout(4, 4, 5, 5)); game.newgame(); pane=game.getPane(); for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ block1[i][j]=new Block(); block1[i][j].setValue(pane[i][j]); contentPane.add(block1[i][j]); } } this.addKeyListener(this); } @Override public void keyTyped(KeyEvent e) {} @Override public void keyPressed(KeyEvent e) { // TODO 自动生成的方法存根 if(e.getKeyCode()==KeyEvent.VK_LEFT){ game.left(); pane=game.getPane(); for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ block1[i][j].setValue(pane[i][j]); } } if(game.gameOver()==1){ JOptionPane.showMessageDialog(this, "you lose"); } } else if(e.getKeyCode()==KeyEvent.VK_RIGHT){ game.right(); pane=game.getPane(); for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ block1[i][j].setValue(pane[i][j]); } } if(game.gameOver()==1){ JOptionPane.showMessageDialog(this, "you lose"); } } else if(e.getKeyCode()==KeyEvent.VK_DOWN){ game.low(); pane=game.getPane(); for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ block1[i][j].setValue(pane[i][j]); } } if(game.gameOver()==1){ JOptionPane.showMessageDialog(this, "you lose"); } } else if(e.getKeyCode()==KeyEvent.VK_UP){ game.up(); pane=game.getPane(); for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ block1[i][j].setValue(pane[i][j]); } } if(game.gameOver()==1){ JOptionPane.showMessageDialog(this, "you lose"); } } } @Override public void keyReleased(KeyEvent e) { // TODO 自动生成的方法存根 } }