package com.wangwang2; import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class GameFrame extends JFrame { private JPanel panel = null; private JLabel box = null; private JLabel worker = null; private JLabel goal = null; private JLabel[] walls = null; public GameFrame(String title) { super(title); setSize(22 * 48 + 10, 12 * 48 + 38); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); initPanel(); initWalls(); this.goal = initLabel("goal3.png",17,6); this.worker = initLabel("workerRight3.png",3,3); this.box = initLabel("box3.png",8,9); addEvent(); } private JLabel initLabel(String imgPath,int x,int y){ ImageIcon img = new ImageIcon("imgs/"+ imgPath); JLabel label = new JLabel(img); panel.add(label); label.setBounds(x*48,y*48,48,48); return label; } private void initWalls() { this.walls = new JLabel[22 * 2 + (12 - 2) * 2 + 6 + 5 + 5]; ImageIcon wallImg = new ImageIcon("imgs/wall3.png"); for (int i = 0; i < walls.length; i++) { walls[i] = new JLabel(wallImg); } int index = 0; for (int i = 0; i < 22; i++) { panel.add(walls[index]); walls[index++].setBounds(i * 48, 0, 48, 48); panel.add(walls[index]); walls[index++].setBounds(i * 48, 11 * 48, 48, 48); } for (int i = 1; i <= 10; i++) { panel.add(walls[index]); walls[index++].setBounds(0, i * 48, 48, 48); panel.add(walls[index]); walls[index++].setBounds(21 * 48, i * 48, 48, 48); } for (int i = 0; i < 5; i++) { panel.add(walls[index]); walls[index++].setBounds((6 + i) * 48, 3 * 48, 48, 48); } for (int i = 0; i <= 5; i++) { panel.add(walls[index]); walls[index++].setBounds(14 * 48, (4 + i) * 48, 48, 48); } for (int i = 0; i < 5; i++) { panel.add(walls[index]); walls[index++].setBounds((3 + i) * 48, (4 + i) * 48, 48, 48); } } private void initPanel() { panel = new JPanel(); panel.setBackground(Color.PINK); panel.setLayout(null); super.setContentPane(panel); } private void addEvent(){ super.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); //System.out.println(keyCode); String workerImgPath = "workerRight3.png"; int x = 0, y = 0; if (keyCode == KeyEvent.VK_A || keyCode == KeyEvent.VK_LEFT) { x = -48; workerImgPath = "workerLeft3.png"; } else if (keyCode == KeyEvent.VK_W || keyCode == KeyEvent.VK_UP) { y = -48; workerImgPath = "workerUp3.png"; } else if (keyCode == KeyEvent.VK_D || keyCode == KeyEvent.VK_RIGHT) { x = 48; } else if (keyCode == KeyEvent.VK_S || keyCode == KeyEvent.VK_DOWN) { y = 48; workerImgPath = "workerDown3.png"; } worker.setBounds(worker.getBounds().x + x, worker.getBounds().y + y, 48, 48); ImageIcon img = new ImageIcon("imgs/" + workerImgPath); worker.setIcon(img); //工人不能穿墙 for (int i = 0; i < walls.length; i++) { //如果工人的边界与某块围墙的边界有交集 if (worker.getBounds().intersects(walls[i].getBounds())) { worker.setBounds(worker.getBounds().x - x, worker.getBounds().y - y, 48, 48); break; } } if (worker.getBounds().intersects(box.getBounds())) { box.setBounds(box.getBounds().x + x, box.getBounds().y + y, 48, 48); } for (int i = 0; i <= walls.length; i++) { if (box.getBounds().intersects(walls[i].getBounds())) { box.setBounds(box.getBounds().x - x, box.getBounds().y - y, 48, 48); worker.setBounds(worker.getBounds().x - x, worker.getBounds().y - y, 48, 48); break; } } if (box.getBounds().intersects(goal.getBounds())) { JOptionPane.showMessageDialog(null, "恭喜您成功通关!"); System.exit(0); } } @Override public void keyReleased(KeyEvent e) { } }); } }