基于swing开发的推箱子游戏的设计与实现(编辑修改稿)内容摘要:

GameFrame extends JFrame { private GamePanel gp = new GamePanel()。 private ImageUtil iu = new ImageUtil()。 // 加载图片的工具 public GameFrame() { init()。 } public void init() { (gp)。 // 加 入画纸 (540 + 4, 440 + 62)。 ()。 (().createCustomCursor( (), new Point(26, 29), aaa))。 (false)。 // 不能改变窗体大小 邵阳学院毕业设计(论文) 7 (false)。 (英雄传说 II吕季干 )。 // 加一个监听器,保镖 ,匿名类 :匿名类的格式 new 接口名(){ 接口中的方法的实现 } (new KeyListener() { @Override public void keyPressed(KeyEvent arg0) { // TODO Autogenerated method stub switch (()) { // 0=向下 1=向左 2=向右 3=向上 case 39:// (英雄向右 )。 (2)。 break。 case 40:// (英雄向下 )。 (0)。 break。 case 38:// (英雄向上 )。 (3)。 break。 case 37:// (英雄向左 )。 (1)。 break。 } } @Override public void keyReleased(KeyEvent arg0) { // TODO Autogenerated method stub } @Override public void keyTyped(KeyEvent arg0) { // TODO Autogenerated method stub 邵阳学院毕业设计(论文) 8 } })。 (true)。 } public static void main(String[] args) { // TODO Autogenerated method stub new GameFrame()。 } } 游戏区 这个区域主要完成游戏界面的大小等元素。 :(600, 500)。 : : package frame。 import。 import。 import。 import。 public class GamePanel extends JPanel { private static final long serialVersionUID = 6792476564904637059L。 邵阳学院毕业设计(论文) 9 private Image backImage。 // 背景图片 private Image me。 private ImageUtil iu = new ImageUtil()。 // 加载图片的工具 private Hero hero = new Hero(this)。 private Maps map = new Maps(this)。 public Maps getMap() { return map。 } public void setMap(Maps map) { = map。 } public GamePanel() { (600, 500)。 ()。 backImage = ()。 // 初始化背景图片 // heroImage = ()。 //英雄的图片 // me=(慧灵 .jpg)。 new D().start()。 // 启动线程 } @Override public void paint(Graphics g) { (backImage, 0, 0, , this)。 // 画出背景图片 (me, 0, 0, null)。 boolean yes6 = (g)。 // 画地图 if (yes6) { // 到下一关 ()。 (g)。 // 画地图 } // 画英雄 邵阳学院毕业设计(论文) 10 (g)。 // 调用英雄的的画的方法,将并将画笔 g 传递过去,画出英雄 } // 该 方法用于改变英雄运行的方向 public void setHeroF(int f) { (f)。 // 将方向的改传给英雄 (true)。 // 因为按了键所以可以移动 } // 使用线程来完成 ,内部类 :写在类里面的类 class D extends Thread { public void run() {// 方法必须这么写 while (true) { try { (40)。 } catch (InterruptedException e) { // TODO Autogenerated catch block ()。 } ()。 // 调用这个 D 对象外面的repaint() } } } public Hero getHero() { return hero。 } public void setHero(Hero hero) { = hero。 } } 邵阳学院毕业设计(论文) 11 图片加载区 这个区域主要负责加载各类型的图片,使界面变得美观等条件。 图片加载区总代码: package frame。 import。 import。 import。 import。 public class ImageUtil { public Image getImage(String imageUrl) { Image image = null。 try { // 会将图片加载在内存中 image = (().getClassLoader() .getResourceAsStream(image/ + imageUrl))。 } catch (IOException e) { // TODO Autogenerated catch block ()。 } return image。 } } 英雄变化区 这个区域主要负责英雄的变化,如下: : // 存放英雄起始位置的坐标 private int heroX = 200。 private int heroY = 200。 : 邵阳学院毕业设计(论文) 12 private int f = 0。 // 0=向下 1=向左 2=向右 3=向上 : public void draw(Graphics g) { if (isMoving) { moving()。 // 移动英雄 } // (heroImage, 0, 0, 32, 32, 200, 200, 232, 232, this)。 // 在屏幕上的左上角的 X, Y 和 屏幕上的右下角 X,Y,之间, // 图片的左上角 X,Y,图片上右下角 // (heroImage, heroX, heroY, heroX+32, heroY+32,0,0,32,32, // null)。 //向下 (heroImage, heroX, heroY, heroX + 32, heroY + 32, 0, 32 * f, 32, 32 * (f + 1), null)。 // 控制上下左右的图片 } : public void moving() { switch (f) { case 0: if (peng()) { heroY += 32。 } break。 case 1: if (peng()) { heroX = 32。 } break。 case 2: if (peng()) { 邵阳学院毕业设计(论文) 13 heroX += 32。 } break。 case 3: if (peng()) { heroY = 32。 } break。 } isMoving = false。 // 每移动一次就停止 // (现在英雄的坐标是 :+heroX++heroY)。 } ,返回能走还是不 能走 public boolean peng() { // 1. 得到英雄在地图中的位置 int row = (heroY 100) / 32。 int column = (heroX 100) / 32。 // 2. 根椐英雄的位置及行进的方向 ,判断地图上是否可以行走 switch (f) { // 0=向下 1=向左 2=向右 3=向上 case 0: // 得到地图对象中的地图数组 if (().getMap()[row + 1][column] == 2 || ().getMap()[row + 1][column] == 6) { return true。 } if (().getMap()[row + 1][column] == 10) { // 前面是魔王 if (().getMap()[row + 2][column] == 2) { // 前面前面是地板 ().getMap()[row + 1][column] = 2。 邵阳学院毕业设计(论文) 14 ().getMap()[row + 2][column] = 10。 return true。 } if (().getMap()[row + 2][column] == 6) { // 前面前面是笼子 ().getMap()[row + 1][column] = 2。 ().getMap()[row + 2][column] = 14。 return true。 } } if (().getMap()[row + 1][column] == 14) { // 前面是带笼子魔王 if (().getMap()[row + 2][column] == 2) { // 前面前面是地板 ().getMap()[row + 1][column] = 6。 // 前面就变成笼子 ().getMap()[row + 2][column] = 10。 // 前面的前面变成了魔王 return true。 } if (().getMap()[row + 2][column] == 6) { // 前面前面是笼子 ().getMap()[row + 1][colu。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。