Bootstrap

JAVA游戏源码:魔塔&大学生练手项目&java学习项目

学习java朋友们,福利来了,今天小编给大家带来了一款魔塔源码。注意:此源码仅供学习使用!!

视频演示

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() {

            @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 键:获得道具【圣光徽】后,打开 预测功能 面板。

结尾语

我是分享好物+教程+源码 的老罗,欢迎关注,更多精品源码!

;