1、java推箱子讲解总共四个包,因为不能上传图片所以在第2个包中,导入图片(图片可以去网上下载一些)或者高手帮我解决一下。不用导入图片也能玩!(求大神)下面是整个游戏的代码:1:package com.sj.xzq;class BackUpInfo private int map; private int manX; private int manY; public BackUpInfo(int map, int manX, int manY) this.map = map; this.manX = manX; this.manY = manY; public int getMap() retu
2、rn map; public int getManX() return manX; public int getManY() return manY; 2:package com.sj.xzq;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.Stack;im
3、port javax.swing.JOptionPane;import javax.swing.JPanel;public class Game extends JPanel private LoadMap lm; private int level; private int manX, manY; private int lastImg = 2; private int map; / 地图所对应的二维数组 private int backMap; / 地图所对应的二维数组,这个数组用于保存上一步的地图信息 private static final int LEN = 30; / 图片的长 p
4、rivate static final int WIDTH = 30; / 图片的宽 private static final int SPEED = 30; / 移动速度,每次移动一格 private static Toolkit tk = Toolkit.getDefaultToolkit(); private static Image imgs = null; private Stack myStack = new Stack(); private BackUpInfo bp; static imgs = new Image tk.getImage(GameFrame.class.get
5、ClassLoader().getResource( imgs/0.gif), tk.getImage(GameFrame.class.getClassLoader().getResource( imgs/1.gif), tk.getImage(GameFrame.class.getClassLoader().getResource( imgs/2.GIF), tk.getImage(GameFrame.class.getClassLoader().getResource( imgs/3.GIF), tk.getImage(GameFrame.class.getClassLoader().ge
6、tResource( imgs/4.gif), tk.getImage(GameFrame.class.getClassLoader().getResource( imgs/5.GIF), tk.getImage(GameFrame.class.getClassLoader().getResource( imgs/6.GIF), tk.getImage(GameFrame.class.getClassLoader().getResource( imgs/7.GIF), tk.getImage(GameFrame.class.getClassLoader().getResource( imgs/
7、8.GIF), tk.getImage(GameFrame.class.getClassLoader().getResource( imgs/9.GIF) ; public Game(int level) this.setBounds(0, 0, 600, 600); this.setVisible(true); lm = new LoadMap(level); map = lm.getMap(); this.manX = lm.getManX(); this.manY = lm.getManY(); this.level = level; public void paint(Graphics
8、 g) for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) g.drawImage(imgsmapij, i * LEN, j * WIDTH, this); g.setColor(Color.BLUE); g.setFont(new Font(仿宋, Font.BOLD, 18); g.drawString(关卡: + level, 50, 50); / 响应键盘事件,松开键盘才响应 / 上下左右四个键,实现人物的移动。 public void keyReleased(KeyEvent e) int keycode = e.getKeyCo
9、de(); if (!isPass() switch (keycode) case KeyEvent.VK_UP: moveUp(); if (isPass() myStack.clear(); lm = new LoadMap(+level); map = lm.getMap(); this.manX = lm.getManX(); this.manY = lm.getManY(); break; case KeyEvent.VK_DOWN: moveDown(); if (isPass() myStack.clear(); lm = new LoadMap(+level); map = l
10、m.getMap(); this.manX = lm.getManX(); this.manY = lm.getManY(); break; case KeyEvent.VK_LEFT: moveLeft(); if (isPass() myStack.clear(); lm = new LoadMap(+level); map = lm.getMap(); this.manX = lm.getManX(); this.manY = lm.getManY(); break; case KeyEvent.VK_RIGHT: moveRight(); if (isPass() myStack.cl
11、ear(); lm = new LoadMap(+level); map = lm.getMap(); this.manX = lm.getManX(); this.manY = lm.getManY(); break; case KeyEvent.VK_SPACE: back(); break; default: break; / 实现人物的向上移动 private void moveUp() / 如果下一步是目标或者是草地,则移动到下一步 if (mapmanXmanY - 1 = 2 | mapmanXmanY - 1 = 4) backMap = new int2020; for (i
12、nt i = 0; i 20; i+) for (int j = 0; j 20; j+) backMapij = mapij;/ 保存上一步的地图信息 bp = new BackUpInfo(backMap, manX, manY); myStack.push(bp); mapmanXmanY = lastImg; / 先还原人物处的背景 lastImg = mapmanXmanY - 1;/ 保存人物下一步位置的背景 mapmanXmanY - 1 = 8;/ 移动人物到下一步 manY-; repaint(); else if (mapmanXmanY - 1 = 3 | mapmanX
13、manY - 1 = 9) backMap = new int2020; for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) backMapij = mapij;/ 保存上一步的地图信息 bp = new BackUpInfo(backMap, manX, manY); myStack.push(bp); / 如果下一步是箱子 if (mapmanXmanY - 2 = 2) / 箱子前面是草地 mapmanXmanY - 2 = 3; mapmanXmanY = lastImg; if (mapmanXmanY - 1 = 3) lastI
14、mg = 2; else lastImg = 4; mapmanXmanY - 1 = 8; manY-; repaint(); else if (mapmanXmanY - 2 = 4) / 箱子前面是目标 mapmanXmanY - 2 = 9;/ 把箱子移动到目标,换成另一种颜色的箱子 mapmanXmanY = lastImg; if (mapmanXmanY - 1 = 3) lastImg = 2; else lastImg = 4; mapmanXmanY - 1 = 8; manY-; repaint(); / 实现人物的向下移动 private void moveDown()
15、 / 如果下一步是目标或者是草地,则移动到下一步 backMap = new int2020; if (mapmanXmanY + 1 = 2 | mapmanXmanY + 1 = 4) for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) backMapij = mapij;/ 保存上一步的地图信息 bp = new BackUpInfo(backMap, manX, manY); myStack.push(bp); mapmanXmanY = lastImg; / 先还原人物处的背景 lastImg = mapmanXmanY + 1;/
16、 保存人物下一步位置的背景 mapmanXmanY + 1 = 5;/ 移动人物到下一步 manY+; repaint(); else if (mapmanXmanY + 1 = 3 | mapmanXmanY + 1 = 9) backMap = new int2020; for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) backMapij = mapij;/ 保存上一步的地图信息 bp = new BackUpInfo(backMap, manX, manY); myStack.push(bp); / 如果下一步是箱子 if (mapm
17、anXmanY + 2 = 2) / 箱子前面是草地 mapmanXmanY + 2 = 3; mapmanXmanY = lastImg; if (mapmanXmanY + 1 = 3) lastImg = 2; else lastImg = 4; mapmanXmanY + 1 = 5; manY+; repaint(); else if (mapmanXmanY + 2 = 4) / 箱子前面是目标 mapmanXmanY + 2 = 9;/ 把箱子移动到目标,换成另一种颜色的箱子 mapmanXmanY = lastImg; if (mapmanXmanY + 1 = 3) last
18、Img = 2; else lastImg = 4; mapmanXmanY + 1 = 5; manY+; repaint(); / 实现人物的左移 private void moveLeft() / 如果下一步是目标或者是草地,则移动到下一步 if (mapmanX - 1manY = 2 | mapmanX - 1manY = 4) backMap = new int2020; for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) backMapij = mapij;/ 保存上一步的地图信息 bp = new BackUpInfo(bac
19、kMap, manX, manY); myStack.push(bp); mapmanXmanY = lastImg; / 先还原人物处的背景 lastImg = mapmanX - 1manY;/ 保存人物下一步位置的背景 mapmanX - 1manY = 6;/ 移动人物到下一步 manX-; repaint(); else if (mapmanX - 1manY = 3 | mapmanX - 1manY = 9) backMap = new int2020; for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) backMapij = mapij;/ 保存上一步的地图信息
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1