根据推箱子1.0小游戏的基础,做推箱子2.0继承
这是原先推箱子1.0的代码
package com.lyc;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class TXZ {
public static void main(String[] args) {
JFrame gameJFrame = new JFrame();
//设置标题
gameJFrame.setTitle("推箱子1.0");
//设置窗口大小
gameJFrame.setSize(22*48+10,12*48+30);
//居中
gameJFrame.setLocationRelativeTo(null);
//关闭窗口时结束程序
gameJFrame.setDefaultCloseOperation(3);
//创建面板
JPanel panel =new JPanel();
//设置面板背景
panel.setBackground(Color.GREEN);
//自定义布局
panel.setLayout(null);
//面板与窗口相关联
gameJFrame.setContentPane(panel);
//创建图片对象,构造方法传参,设置图片路径
ImageIcon boxImag = new ImageIcon("imgs/box3.png");
//创建标签,构造方法传参,把图片放入标签
JLabel box = new JLabel(boxImag);
//吧标签放入面板
panel.add(box);
box.setBounds(18*48,7*48,48,48);
ImageIcon workerImag = new ImageIcon("imgs/workerLeft3.png");
JLabel worker = new JLabel(workerImag);
panel.add(worker);
worker.setBounds(18*48,6*48,48,48);
ImageIcon goalImag = new ImageIcon("imgs/goal3.png");
JLabel goal = new JLabel(goalImag);
panel.add(goal);
goal.setBounds(17*48,10*48,48,48);
//添加围墙
ImageIcon wallsImag = new ImageIcon("imgs/wall3.png");
JLabel[] walls = new JLabel[22*2+10*2+6+5+6];
for (int i =0;i< walls.length;i++){
walls[i] = new JLabel(wallsImag);
}
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((4+i)*48,(4+i)*48,48,48);
}
for (int i= 0;i<6;i++){
panel.add(walls[index]);
walls[index++].setBounds(15*48,(3+i)*48,48,48);
}
gameJFrame.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
//System.out.println("键盘每按一次,系统操作一次");
int keycold =e.getKeyCode();
int x=0,y=0;
String impath = "workerDown3.png";
if (keycold==38||keycold==87){
y=-48;
impath="workerUP3.png";
}else if (keycold==40||keycold==83){
y=48;
}else if (keycold==37||keycold==65){
x=-48;
impath="workerLeft3.png";
}else if (keycold==39||keycold==68){
x=48;
impath="workerRight3.png";
}
worker.setBounds(worker.getBounds().x+x,worker.getBounds().y+y,48,48);
ImageIcon workerImag = new ImageIcon("imgs/"+impath);
worker.setIcon(workerImag);
//解决工人穿墙问题
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;
}
}
//解决工人推动箱子问题
for (int i=0;i< walls.length;i++){
if (worker.getBounds().intersects(box.getBounds())){
box.setBounds(box.getBounds().x+x,box.getBounds().y+y,48,48);
break;
}
}
//解决箱子穿墙问题
for (int i =0;i< walls.length;i++){
if (worker.getBounds().intersects(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().intersects(goal.getBounds())){
//弹框
JOptionPane.showMessageDialog(null,"恭喜过关");
System.exit(0);//退出系统
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
gameJFrame.setVisible(true);
}
}
然后在创建一个包,新建一个推箱子来继承JFrame类
package com.lyc1;
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 + 15, 12 * 48 + 35);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setResizable(false);
initPanel();
initWalls();
this.goal=initLable("goal3.png",17,10);
this.worker=initLable("workerRight3.png",18,6);
this.box=initLable("box3.png",18,7);
addEvent();
}
private void addEvent() {
super.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int keycode = e.getKeyCode();
String workerImgpath = "workerRight3.png";
int x = 0, y = 0;
if (keycode == KeyEvent.VK_W || keycode == KeyEvent.VK_UP) {
y = -48;
workerImgpath = "workerUp3.png";
} else if (keycode == KeyEvent.VK_S || keycode == KeyEvent.VK_DOWN) {
y = 48;
workerImgpath = "workerDown3.png";
} else if (keycode == KeyEvent.VK_A || keycode == KeyEvent.VK_LEFT) {
x = -48;
workerImgpath = "workerLeft3.png";
} else if (keycode == KeyEvent.VK_D || keycode == KeyEvent.VK_RIGHT) {
x = 48;
}
worker.setBounds(worker.getBounds().x+x, worker.getBounds().y+y, 48, 48);
ImageIcon workerImag = new ImageIcon("imgs/" + workerImgpath);
worker.setIcon(workerImag);
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) {
}
});
}
private JLabel initLable(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+10*2+6+5+6];
ImageIcon wallsImag = new ImageIcon("imgs/wall3.png");
for (int i =0;i< walls.length;i++){
walls[i] = new JLabel(wallsImag);
}
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((4+i)*48,(4+i)*48,48,48);
}
for (int i= 0;i<6;i++){
panel.add(walls[index]);
walls[index++].setBounds(15*48,(3+i)*48,48,48);
}
}
private void initPanel(){
panel = new JPanel();
panel.setBackground(Color.PINK);
panel.setLayout(null);
super.setContentPane(panel);
}
}
上面只是一个文件,下面用一个方法来运行
package com.lyc1;
public class Run {
public static void main(String[] args) {
GameFrame gameFrame = new GameFrame("TXZ2.0");
gameFrame.setVisible(true);
}
}
但是有些图片格式需要自己找,我这里也有,想要的关注并私信我