java推箱子游戏源代码(含推箱子的判断)
第一个Java文件:
package xiaoA;
import java.awt.Color;
import java.awt.HeadlessException; 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 GameFrame extends JFrame {
JPanel zhuobu = new JPanel();
//工人
JLabel worker = null;
//箱子
JLabel box = null;
//目的地
JLabel goal = null;
JLabel[] walls = null;
public static final int SPEED = 12;
//设置图片大小
int imgSize = 48;
public void setImgSize(int imgSize){
this.imgSize = imgSize;
}
public GameFrame(String title) throws HeadlessException {
super(title);
//构造方法中调用本类的其它方法
this.initContentPane();
this.addKeyListener(new KeyListener() {
//键盘按下事件
public void keyPressed(KeyEvent e) {
//[2.5] 使工人可以移动
int xSpeed = 0, ySpeed = 0;
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT :
xSpeed = -SPEED;
worker.setIcon(new ImageIcon("image/workerUp.gif"));
break;
case KeyEvent.VK_RIGHT :
xSpeed = SPEED;
worker.setIcon(new ImageIcon("image/workerUp.gif"));
break;
case KeyEvent.VK_UP :
ySpeed = -SPEED;
worker.setIcon(new ImageIcon("image/workerUp.gif"));
break;
case KeyEvent.VK_DOWN :
ySpeed = SPEED;
worker.setIcon(new ImageIcon("image/workerUp.gif"));
break;
default:
return;
}
worker.setBounds(worker.getX() + xSpeed, worker.getY() + ySpeed, worker.getWidth(), worker.getHeight());
//[2.7] 判断工人是否撞到墙壁
for (int i = 0; i < walls.length; i++) {
if (worker.getBounds().intersects(walls[i].getBounds())) {
worker.setBounds(worker.getX() - xSpeed, worker.getY() - ySpeed, worker.getWidth(), worker.getHeight());
}
}
//[3.2] 使工人可以推动箱子
if (worker.getBounds().intersects(box.getBounds())) {
box.setBounds(box.getX() + xSpeed, box.getY() + ySpeed, box.getWidth(), box.getHeight());
//[3.3] 判断箱子是否撞到墙壁
for (int i = 0; i < walls.length; i++) {
if (box.getBounds().intersects(walls[i].getBounds())) {
worker.setBounds(worker.getX() - xSpeed, worker.getY() - ySpeed, worker.getWidth(), worker.getHeight());
box.setBounds(box.getX() - xSpeed, box.getY() - ySpeed, box.getWidth(), box.getHeight());
}
}
//[3.4] 判断是否胜利
if (box.getX()==goal.getX() && box.getY()==goal.getY()) {
JOptionPane.showMessageDialog(null, "您赢啦~");
}
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}});
}
/**
* 设置内容面板
*/
public void initContentPane() {
zhuobu.setBackground(Color.red);
zhuobu.setLayout(null);
//调用父类的属性和方法
super.setContentPane(zhuobu);
}
/**
* 把某个图片以组件的方式加入窗体
* @param imgPath 图片路径
* @param x x
* @param y y
* @param width 宽度
* @param height 高度
* @return 添加完的组件
*/
public void addComponent(int tag, String imgPath, int x, int y) {
ImageIcon img = new ImageIcon(imgPath);
//创建JLabel并把ImageIcon通过构造方法传参传入
//把食物放到盘子里
JLabel componet = new JLabel(img);
//设置盘子在桌布上的位置和大小
componet.setBounds(x, y, imgSize, imgSize);
//把盘子放到桌布上
zhuobu.add(componet);
switch (tag) {
case 1:
box = componet;
break;
case 2:
goal = componet;
break;
case 3:
worker = componet;
break;
}
}
public void addWall(String imgPath, int[][] loactions) {
ImageIcon wallImg = new ImageIcon(imgPath);
walls = new JLabel[66 + loactions.length];
for (int i = 0; i < walls.length; i++) {
//创建没每一个围墙,他们使用的是同一个图片
walls[i] = new JLabel(wallImg);
}
for (int i = 0; i < walls.length; i++) {
//创建没每一个围墙,他们使用的是同一个图片
walls[i] = new JLabel(wallImg);
}
int index = 0;
/*分别设置各个图片位置*/
for (int i = 0; i < 14; i++) {
//左边墙
walls[index].setBounds(0, i * imgSize, imgSize, imgSize);
zhuobu.add(walls[index]);
index++;
//右边墙
walls[index].setBounds(20 * imgSize, i * imgSize, imgSize,
imgSize);
zhuobu.add(walls[index]);
index++;
}
for (int i = 0; i < 19; i++) {
//上边墙
walls[index].setBounds((i + 1) * imgSize, 0, imgSize,
imgSize);
zhuobu.add(walls[index]);
index++;
//下边墙
walls[index].setBounds((i + 1) * imgSize, 13 * imgSize, imgSize,
imgSize);
zhuobu.add(walls[index]);
index++;
}
//添加中间障碍 耦合 解耦
for (int i = 0; i < loactions.length; i++) {
walls[index].setBounds(loactions[i][0]* imgSize, loactions[i][1]* imgSize, imgSize, imgSize);
zhuobu.add(walls[index]);
index++;
}
}
}
第二个Java文件:
public class Run {
public static void main(String[] args) {
GameFrame gameFrame = new GameFrame("推箱子游戏 …");
//设置大小
gameFrame.setBounds(100, 50, 21 * 48 + 5, 14 * 48 + 25);
//窗体大小不可变
gameFrame.setResizable(false);
gameFrame.setImgSize(48);
gameFrame.addComponent(3, "workerUp.png", 400, 100);
gameFrame.addComponent(1, "box.png", 160, 60);
gameFrame.addComponent(2, "goal.png", 80, 520);
int[][] wallLocations ={
{4, 5},{5, 5},{6, 5},{7, 5},
{8, 5},{9, 5},{10, 5},{6, 8},
{7, 8},
{8, 8},
{9, 8},
{10, 8},
{11, 5}
};
gameFrame.addWall("wall.png", wallLocations);
gameFrame.setVisible(true);
}
}
本文档为【java推箱子游戏源代码(含推箱子的判断)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。