java推箱子游戏源代码(含推箱子的判断)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//把盘子放到桌布上
zhuobu.add(componet);Βιβλιοθήκη Baidu
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,
ImageIcon img = new ImageIcon(imgPath);
//创建JLabel并把ImageIcon通过构造方法传参传入
//把食物放到盘子里
JLabel componet = new JLabel(img);
//设置盘子在桌布上的位置和大小
componet.setBounds(x, y, imgSize, imgSize);
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;
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())) {
} }
public void keyReleased(KeyEvent e) { }
public void keyTyped(KeyEvent e) { }}); }
/** * 设置内容面板 */
public void initContentPane() { zhuobu.setBackground(Color.red); zhuobu.setLayout(null); //调用父类的属性和方法 super.setContentPane(zhuobu);
} //添加中间障碍 耦合 解耦 for (int i = 0; i < loactions.length; i++) {
walls[index].setBounds(loactions[i][0]* imgSize, loactions[i][1]* imgSize, imgSize, imgSize);
第一个 Java 文件:
package xiaoA;
import java.awt.Color; import java.awt.HeadlessException; import java.awt.event.KeyEvent; import java.awt.event.KeyListener;
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++;
}
/**
* 把某个图片以组件的方式加入窗体
* @param imgPath 图片路径
* @param x
x
* @param y
y
* @param width 宽度
* @param height 高度
* @return
添加完的组件
*/
public void addComponent(int tag, String imgPath, int x, int y) {
//设置图片大小 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 :
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, "您赢啦!"); }
gameFrame.setVisible(true);
} }
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);
worker.setBounds(worker.getX() - xSpeed, worker.getY() ySpeed, worker.getWidth(), worker.getHeight());
} } //[3.2] 使工人可以推动箱子 if (worker.getBounds().intersects(box.getBounds())) {
相关文档
最新文档