package com.yes;
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class TXZ {
public static void main(String[] args) {
JFrame gameFrame = new JFrame("推箱子—1.0");//声明创建窗体
gameFrame.setTitle("推箱子—1.0");//窗体设置标题
gameFrame.setSize(22 * 48 + 16, 12 * 48 + 39);
//gameFrame.setLocation((1920 - 800) / 2, (1080 - 600) / 2);
gameFrame.setLocationRelativeTo(null);//窗体居中
gameFrame.setResizable(false);//窗体大小不可变
JPanel panel = new JPanel();
panel.setBackground(new Color(0, 245, 255));//给面板设置颜色
panel.setLayout(null);
gameFrame.setContentPane(panel);//面板与窗体关联
ImageIcon boxImg = new ImageIcon("imgs/box2.png");//创建图片对象,构造方法传参设置图片路径
JLabel box = new JLabel(boxImg);//创建标签对象,并且利用 构造方法把图片放入标签
panel.add(box);//面板增加
box.setBounds(5 * 48, 3 * 48, 48, 48);
ImageIcon goalImg = new ImageIcon("imgs/goal2.png");
JLabel goal = new JLabel(goalImg);
panel.add(goal);
goal.setBounds(7 * 48, 6 * 48, 48, 48);
ImageIcon workerImg = new ImageIcon("imgs/workerDown.png");
JLabel worker = new JLabel(workerImg);
panel.add(worker);
worker.setBounds(8 * 48, 8 * 48, 48,48);
ImageIcon wallImg = new ImageIcon("imgs/wall.png");
//new的是数组,数组中的每个元素依旧为空
JLabel[] walls = new JLabel[22 * 2 + (12 - 2) * 2 + 6 + 7 + 5];
for (int i = 0; i < walls.length; i++)//new 的数组中的每个元素
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);
}
for (int i = 0; i < 22; i++) {
panel.add(walls[index]);
walls[index++].setBounds(i* 48, 11 * 48, 48, 48);
}
for (int i = 1; i < 11; i++) {
panel.add(walls[index]);
walls[index++].setBounds(0, i * 48, 48, 48);
}
for (int i = 1; i <11; i++) {
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((i + 3) * 48, 5 * 48, 48, 48);
}
//竖直加
for (int i = 0; i <7; i++) {
panel.add(walls[index]);
walls[index++].setBounds(( 10 * 48), (i + 2) * 48, 48, 48);
}
//斜着加
for (int i = 0; i < 5; i++) {
panel.add(walls[index]);
walls[index++].setBounds((i + 12) * 48, (i + 3) * 48, 48, 48);
}
gameFrame.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {
//System.out.println("键盘每按一次,此方法调用一次");
int keyCode = e.getKeyCode();
int x = 0, y = 0;
String workerImgPath ="workerLeft.png";
if (keyCode == KeyEvent.VK_LEFT ||keyCode ==KeyEvent.VK_A) {
//System.out.println("左");
x = -48;
}else if(keyCode == KeyEvent.VK_UP|| keyCode == KeyEvent.VK_W){
//System.out.println("上");
workerImgPath = "workerUp.png";
y = -48;
}else if(keyCode == KeyEvent.VK_RIGHT|| keyCode == KeyEvent.VK_D){
//System.out.println("右");
workerImgPath = "workerRight.png";
x = 48;
}else if(keyCode == KeyEvent.VK_DOWN || keyCode == KeyEvent.VK_S){
//System.out.println("下");
workerImgPath = "workerDown.png";
y = 48;
}
ImageIcon img =new ImageIcon("imgs/" +workerImgPath);
worker.setIcon(img);
worker.setBounds(worker.getBounds().x + x, worker.getBounds().y + y, 48,48);
//解决穿墙问题
for (int i = 0; i < walls.length; i++) {
if(walls[i].getBounds().contains(worker.getBounds())) {
worker.setBounds(worker.getBounds().x - x, worker.getBounds().y - y, 48, 48);
break;
}
}
//让工人推动箱子
if(worker.getBounds().contains(box.getBounds())) {
box.setBounds(box.getBounds().x + x, box.getBounds().y + y, 48, 48);
}
//解决箱子的穿墙
for (int i = 0; i < walls.length; i++) {
if(walls[i].getBounds().contains(box.getBounds())) {
worker.setBounds(worker.getBounds().x - x, worker.getBounds().y - y, 48, 48);
box.setBounds(box.getBounds().x - x, box.getBounds().y - y, 48, 48);
break;
}
}
if(box.getBounds().contains(goal.getBounds())) {
JOptionPane.showMessageDialog(null, "恭喜你,过关!");
System.exit(0);
}
}
});
gameFrame.setVisible(true);//对象名.方法 窗体显示
}
}