JAVA游戏源码:魔塔+大学生练手项目+java学习项目
学习java朋友们,福利来了,今天小编给大家带来了一款魔塔源码。注意:此源码仅供学习使用!!

视频演示
https://githubs.xyz/show/212.mp4
源码搭建和讲解
代码采用原生java类库编写, 利用java swing作为界面框架,完整源码获取地址:
githubs点xyz/product/212
源码直接导入到eclipse或者idea就可以直接运行了。启动main入口:
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() { @Override public void keyTyped(KeyEvent e) { } @Override public 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: // 键盘 J if (ItemsBean.isHasJump) { displayJump(); } break; case VK_L: // 键盘 L if (ItemsBean.isHasForecast) { displayForecast(); } break; } else if (e.getKeyCode() == e.VK_L)//bug { inConversation = false; forecastLPane.removeAll(); forecastLPane.setVisible(false); } } @Override public 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 { @Deprecated private int id; // Deprecated private 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 键:获得道具【圣光徽】后,打开 预测功能 面板。
结尾语
源码仅供学习参考

浙公网安备 33010602011771号