首页 > 编程语言 >JAVA游戏源码:魔塔&大学生练手项目&java学习项目

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

时间:2024-08-03 23:16:37浏览次数:11  
标签:练手 JAVA int void 源码 playerBean gameFrame public

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

结尾语

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

标签:练手,JAVA,int,void,源码,playerBean,gameFrame,public
From: https://www.cnblogs.com/java-bigdata/p/18341288

相关文章

  • JavaFX 如何使用内置的对话框
    消息对话框(Alert)JavaFX的Alert类别其实就是我们熟知的MessageDialog,根据消息类型的不同,分为几种不同的AlertType,在显示时也会有不同的图标以及不同的按钮。分类可列表如下:None:不分类的消息。常用于显示使用说明。Information:一般的提示消息。常用于提示目前程序运行的状态,以......
  • JAVA游戏源码:仙剑奇侠传|大学生练手项目
    视频演示   源码搭建和讲解启动main入口://************************************************************************//************完整源码移步:gitee典康姆/hadluo/java_game01.git*********//***********************************************......
  • 基于Java的蛋糕甜品管理系统设计与实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • Java学习第五周
    packagecom.sxt;publicclassTestSwitch01{publicstaticvoidmain(String[]args){intgrade=(int)(Math.random()*4)+1;//大学的年级switch(grade){case1:System.out.println("大一");break;case2:System.out.println("大二");break;case3:......
  • 日撸Java三百行(day12:顺序表二)
    目录一、关于昨天的补充1.final关键字2.toString()方法二、今日代码实现1.顺序表的查找操作2.顺序表的插入操作3.顺序表的删除操作4.数据测试总结一、关于昨天的补充1.final关键字publicstaticfinalintMAX_LENGTH=10;在昨天的这行代码中,用到了final关键字......
  • JAVA游戏源码:天天酷跑
    学习java朋友们,福利来了,今天小编给大家带来了一款天天酷跑源码。注意:此源码仅供学习使用!!   源码搭建和讲解启动main入口://************************************************************************//************完整源码移步:gitee典康姆/hadluo/java_game01.......
  • 学习Java第五周
    本周学习一、类的继承1.继承特点修饰符classSubClassextendsSuperClass{//类定义部分}表明继承了SuperClass类。注:子类只能从被扩展的父类获得成员变量、方法和内部类(包括内部接口、枚举),不能获得构造器和初始化块。2.Java类只能有一个直接父类,实际上,Java类可以有......
  • Java【案例2-2】 小明都可以买什么
    案例介绍:编写一个智能购物计算小程序,在一家商店有书本、铅笔、橡皮、可乐、零食五种商品,商品价格如下表所示。商品名称价格书本12元铅笔1元橡皮2元可乐3元零食5元假如你带了20元,且必须购买一本书,剩余的钱还可以购买哪种商品,可以购买几件,购买完后又能......
  • 从零开始的JAVAday29~day35
    后续语法if()语法若满足()中的语法,则执行后面的语句。循环for(a;b;c)和while(c)语法for(a;c;b)语法意思为在循环前进行a语句每次循环结束后进行b语法,若满足c语句则再次循环。whlie(c)循环若满足c条件则循环。......
  • (Javaweb)Ajax,Axios,Vue
    目录一.Ajax 二.Axios 三.前端工程化四.接口文档的管理平台YAPI五.Vue项目六.Vue项目开发流程一.Ajax 1.通过Ajax从服务器端获取数据Ajax---JavaScript(网页行为)+XML(标记语言--用来存储数据) 客户端--浏览器 服务端在处理逻辑的时候,客户端处于等待状态等......