学习java朋友们,福利来了,今天小编给大家带来了一款魔塔源码。注意:此源码仅供学习使用!!
视频演示
源码搭建和讲解
启动main入口:
//************************************************************************
// ************完整源码移步: gitee典康姆/hadluo/java_game01.git *********
//************************************************************************
public class Main {public static void main(String[] args) {gamePanel = new MTGame();gamePanel.setPreferredSize(new Dimension(GAME_PIX_72 * 18, GAME_PIX_72 * 13));gamePanel.add(forecastLPane);gamePanel.add(jumpLPane);gamePanel.add(battleLPane);gamePanel.add(msgLPane);gamePanel.add(timeLabel);gameFrame.addKeyListener(new KeyListener() {@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyPressed(KeyEvent e) {if (!MTGame.inConversation)switch (e.getKeyCode()) {case VK_DOWN: // 键盘 ↓if (playerBean_1.getPosY() + 1 < 11 && playerBean_1.getPosY() + 1 >= 0) {playerBean_1.setToward(1);interaction(playerBean_1.getPosX(), playerBean_1.getPosY() + 1);MTGame.gameFrame.repaint();}break;case VK_RIGHT: // 键盘 →if (playerBean_1.getPosX() + 1 < 11 && playerBean_1.getPosX() + 1 >= 0) {playerBean_1.setToward(2);interaction(playerBean_1.getPosX() + 1, playerBean_1.getPosY());MTGame.gameFrame.repaint();}break;case VK_UP: // 键盘 ↑if (playerBean_1.getPosY() - 1 < 11 && playerBean_1.getPosY() - 1 >= 0) {playerBean_1.setToward(3);interaction(playerBean_1.getPosX(), playerBean_1.getPosY() - 1);MTGame.gameFrame.repaint();}break;case VK_LEFT: // 键盘 ←if (playerBean_1.getPosX() - 1 < 11 && playerBean_1.getPosX() - 1 >= 0) {playerBean_1.setToward(0);interaction(playerBean_1.getPosX() - 1, playerBean_1.getPosY());gameFrame.repaint();}break;case VK_J: // 键盘 Jif (ItemsBean.isHasJump) {displayJump();}break;case VK_L: // 键盘 Lif (ItemsBean.isHasForecast) {displayForecast();}break;}else if (e.getKeyCode() == e.VK_L)//bug{inConversation = false;forecastLPane.removeAll();forecastLPane.setVisible(false);}}@Overridepublic void keyReleased(KeyEvent e) {}});gameFrame.setContentPane(gamePanel);gameFrame.setResizable(false);gameFrame.pack();gameFrame.setLocationRelativeTo(null);gameFrame.setVisible(true);gameFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}
}
怪物对象
public class MonsterBean implements Serializable {@Deprecatedprivate int id; // Deprecatedprivate int hp; // 生命值private int attack; // 攻击力private int defend; // 防御力private int money; // 金钱private int exp; // 经验private String name; // 怪物名public MonsterBean(int id, int hp, int attack, int defend, int money, int exp, String name) {this.id = id;this.hp = hp;this.attack = attack;this.defend = defend;this.money = money;this.exp = exp;this.name = name;}public int getHp() {return hp;}public int getAttack() {return attack;}public int getDefend() {return defend;}public int getMoney() {return money;}public int getExp() {return exp;}public String getName() {return name;}// public void setHp(int hp) {
// this.hp = hp;
// }
//
// public void setAttack(int attack) {
// this.attack = attack;
// }
//
// public void setDefend(int defend) {
// this.defend = defend;
// }
//
// public void setMoney(int money) {
// this.money = money;
// }
//
// public void setExp(int exp) {
// this.exp = exp;
// }
//
// public void setName(String name) {
// this.name = name;
// }
}
运行工具
代码是一个普通的java工程,我们直接导入到eclipse或者idea就可以运行了。
设计思想
- 关于 static 关键字使用。游戏中全局数据使用 static 修饰。数据预设部分为方便也使用 static。
- package 划分:bean 为实体类;util 为具体功能类;data 为数据源。
- 地图数据:MapData(26层的初始地形,对应资源文件)
- 怪物数据:MonsterData(33种怪物,id、名字、生命、攻击、防御、金钱、经验)
- 图片数据:ImageData(统一获取资源文件,转为 static)
- 对话数据:DialogData(全部对话数据)
- 地图动画:通过 Timer 交替引用资源文件实现
操作方式
- 方向键:人物移动;
- 空格键:确认;
- W S 键:商店、老人、商人、楼层跳跃事件的 光标上下移动;
- J 键:获得道具【风之罗盘】后,打开 楼层跳跃 面板;
- L 键:获得道具【圣光徽】后,打开 预测功能 面板。
结尾语
我是分享好物+教程+源码 的老罗,欢迎关注,更多精品源码!