java推箱子1.0代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class TXZ1 {
public static void main(String[] args) {
JFrame gameFrame = new JFrame();
gameFrame.setTitle("推箱子");
gameFrame.setSize(48 * 22 + 12,48 * 12 + 38);
//gameFrame.setLocation((1920 - 1000) / 2,(1080 - 800) / 2);
//gameFrame.setBounds((1920 - 1000) / 2, (1080 - 800) / 2, 800, 600);
gameFrame.setLocationRelativeTo(null);
gameFrame.setResizable(false);
JPanel panel = new JPanel();
panel.setBackground(Color.CYAN);
gameFrame.setContentPane(panel);
panel.setLayout(null);
ImageIcon boxImg = new ImageIcon("imgs/box3.png");
JLabel box = new JLabel(boxImg);
panel.add(box);
box.setBounds(3 * 48, 3 * 48, 48, 48);
ImageIcon workerImg = new ImageIcon("imgs/workerLeft3.png");
JLabel worker = new JLabel(workerImg);
panel.add(worker);
worker.setBounds(17 * 48, 6 * 48, 48, 48);
ImageIcon goalImg = new ImageIcon("imgs/goal3.png");
JLabel goal = new JLabel(goalImg);
panel.add(goal);
goal.setBounds(8 * 48, 9 * 48, 48, 48);
ImageIcon wallImg = new ImageIcon("imgs/wall3.png");
JLabel[] walls = new JLabel[22 * 2 + (12 - 2) * 2 + 6 + 5 + 5];
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 < 6; 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, (i + 4) * 48, 48, 48 );
}
//斜着加
for(int i = 0; i < 5; i++){//横着加
panel.add(walls[index]);
walls[index++].setBounds((3 + i) * 48, (i + 4) * 48, 48, 48 );
}
//添加事件,匿名内部类,事件处理
gameFrame.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
//工人移动与图片改变
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
int x = 0, y = 0;
String imgPath = "workerDown3.png";
if(keyCode == 37 || keyCode == 65){
x = -48;
imgPath = "workerLeft3.png";
} else if(keyCode == 38 || keyCode ==87){
y = -48;
imgPath = "workerUp3.png";
} else if(keyCode == 39 || keyCode == 68){
x = 48;
imgPath = "workerRight3.png";
} else if(keyCode == 40 || keyCode == 83){
y = 48;
}
worker.setBounds(worker.getBounds().x + x, worker.getBounds().y + y, 48, 48);
ImageIcon workerImg = new ImageIcon("imgs/" + imgPath);
worker.setIcon(workerImg);
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) {}
});
gameFrame.setVisible(true);
gameFrame.setDefaultCloseOperation(3);
}
}