[Java][项目][战斗逻辑]基于JFrame的文字游戏

项目注解:

Core:启动文件

复制代码
AttributeBean:玩家属性
复制代码
BackpackedBean:背包设计(未完成)
复制代码
BackpackedFrame:背包页面(未完成)
复制代码
BattleField:战斗逻辑(核心)
复制代码
MainFrame:主界面(第一个启动的界面)
复制代码
MobsBean:怪物属性
复制代码
MobsFrame:打怪界面
java 复制代码
public class AttributeBean {
    String name;
    int Blood = 100;
    int Magic = 100;
    int Damage = 10;

    public AttributeBean() {
    }

    public AttributeBean(String name, int Blood, int Magic, int Damage) {
        this.name = name;
        this.Blood = Blood;
        this.Magic = Magic;
        this.Damage = Damage;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return Blood
     */
    public int getBlood() {
        return Blood;
    }

    /**
     * 设置
     * @param Blood
     */
    public void setBlood(int Blood) {
        this.Blood = Blood;
    }

    /**
     * 获取
     * @return Magic
     */
    public int getMagic() {
        return Magic;
    }

    /**
     * 设置
     * @param Magic
     */
    public void setMagic(int Magic) {
        this.Magic = Magic;
    }

    /**
     * 获取
     * @return Damage
     */
    public int getDamage() {
        return Damage;
    }

    /**
     * 设置
     * @param Damage
     */
    public void setDamage(int Damage) {
        this.Damage = Damage;
    }

    public String toString() {
        return "AttributeBean{name = " + name + ", Blood = " + Blood + ", Magic = " + Magic + ", Damage = " + Damage + "}";
    }
}
java 复制代码
public class BackpackedBean {
}
java 复制代码
import com.sun.tools.javac.Main;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class BackpackedFrame extends JFrame {

    public BackpackedFrame() {
        super("背包页面");
        setAlwaysOnTop(true);
        setSize(400, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        // 设置布局管理器为 BorderLayout
        setLayout(new BorderLayout());

        JLabel ad = new JLabel("<html>欢迎来到背包界面<br>这里会储存一些你的装备和道具<br>相信你可以越来越强大的!</html>", SwingConstants.CENTER);
        add(ad, BorderLayout.NORTH); // 将广告标签放置在窗口的顶部



        MobsBean zombie = new MobsBean("僵尸Lv1",100,2);
        MobsBean Dragon = new MobsBean("巨龙Lv5",400,10);



        setVisible(true);
    }



}
java 复制代码
import com.sun.tools.javac.Main;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class BackpackedFrame extends JFrame {

    public BackpackedFrame() {
        super("背包页面");
        setAlwaysOnTop(true);
        setSize(400, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        // 设置布局管理器为 BorderLayout
        setLayout(new BorderLayout());

        JLabel ad = new JLabel("<html>欢迎来到背包界面<br>这里会储存一些你的装备和道具<br>相信你可以越来越强大的!</html>", SwingConstants.CENTER);
        add(ad, BorderLayout.NORTH); // 将广告标签放置在窗口的顶部



        MobsBean zombie = new MobsBean("僵尸Lv1",100,2);
        MobsBean Dragon = new MobsBean("巨龙Lv5",400,10);



        setVisible(true);
    }



}
java 复制代码
import javax.swing.*;

public class BattleField {

    /**
     * 执行战斗逻辑
     * @param player 玩家对象
     * @param mob 怪物对象
     */
    public void fight(AttributeBean player, MobsBean mob)  {
        // 输出战斗开始信息
        System.out.println(player.getName() + " 开始与 " + mob.getName() + " 战斗!");

        // 循环战斗直到一方血量为0
        while (player.getBlood() > 0 && mob.getBlood() > 0) {
            // 玩家攻击怪物
            mob.setBlood(mob.getBlood() - player.getDamage());
            System.out.println(player.getName() + " 攻击了 " + mob.getName() + ", " + mob.getName() + " 剩余血量: " + mob.getBlood());

            // 如果怪物血量为0,跳出循环
            if (mob.getBlood() <= 0) {
                break;
            }

            // 怪物反击玩家
            player.setBlood(player.getBlood() - mob.getDamage());
            System.out.println(mob.getName() + " 反击了 " + player.getName() + ", " + player.getName() + " 剩余血量: " + player.getBlood());
        }

        // 判断胜利方
        if (player.getBlood() > 0) {
            System.out.println(player.getName() + " 获得了胜利!");
            // 增加玩家生命值和攻击力
            player.setBlood(player.getBlood() + 20); // 假设战斗胜利增加20点生命值
            player.setDamage(player.getDamage() + 5); // 假设战斗胜利增加5点攻击力
            System.out.println(player.getName() + " 的属性提升了!当前生命值: " + player.getBlood() + ", 当前攻击力: " + player.getDamage());
        } else {
            System.out.println(player.getName() + " 被击败了!");
        }
    }
}
java 复制代码
public class Core
{
    public static void main(String[] args){
        new MainFrame();


    }
}
java 复制代码
import com.sun.tools.javac.Main;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MainFrame extends JFrame {
    AttributeBean PersonA = new AttributeBean();
    JLabel Person = new JLabel(
            "<html>冒险者的姓名是:" + PersonA.name +
                    "<br>当前生命值:" + PersonA.Blood +
                    "<br>当前魔力值:" + PersonA.Magic +
                    "<br>当前攻击力:" + PersonA.Damage + "<html>",
            SwingConstants.CENTER
    );


    public MainFrame() {
        super("归墟之境v1.0 ByXiaoyongcai");
        setAlwaysOnTop(true);
        setSize(400, 400);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 设置布局管理器为 BorderLayout
        setLayout(new BorderLayout());

        JLabel ad = new JLabel("<html>欢迎来到 归墟之境<br>当前版本为V1.0<br>制作者敬上</html>", SwingConstants.CENTER);
        add(ad, BorderLayout.NORTH); // 将广告标签放置在窗口的顶部
        add(Person, BorderLayout.CENTER); // 将角色信息标签放置在窗口的中央


        Button();//我调用了下面的Button方法


        setVisible(true);
        AttributeBean s1 = new AttributeBean("张三",100,1,1);
    }

    public void Button() {
        JPanel buttonPanel = new JPanel();
        JButton toMobsButton = new JButton("进入怪物世界");
        toMobsButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 在创建 MobsFrame 实例时传递 PersonA 对象
                MobsFrame mobsFrame = new MobsFrame(PersonA);
                mobsFrame.setVisible(true);
                // 如果需要,可以隐藏或关闭当前界面
                // MainFrame.this.setVisible(false);
                // MainFrame.this.dispose();
            }
        });
        buttonPanel.add(toMobsButton);

        JButton toBackpackButton = new JButton("进入背包界面");
        toBackpackButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 创建 BackpackFrame 界面的实例
                BackpackedFrame backpackFrame = new BackpackedFrame();
                // 设置 BackpackFrame 界面的可见性为 true,从而显示它
                backpackFrame.setVisible(true);
                // 如果需要,可以隐藏或关闭当前界面
                // MainFrame.this.setVisible(false);
                // MainFrame.this.dispose();
            }
        });
        buttonPanel.add(toBackpackButton);

        JButton button = new JButton("修改用户名");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                showDialog();
            }
        });
        buttonPanel.add(button);
        add(buttonPanel, BorderLayout.SOUTH);


    }

    private void showDialog() {
        // 创建一个模态对话框
        JDialog dialog = new JDialog(this, "输入弹窗", true);
        dialog.setSize(250, 150);
        dialog.setLayout(new FlowLayout());
        dialog.setLocationRelativeTo(this);

        // 创建文本框
        JTextField textField = new JTextField(10);
        dialog.add(textField);

        JButton confirmButton = new JButton("确认");
        confirmButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 更新 PersonA 的 name 属性
                PersonA.name = textField.getText();
                // 更新显示 PersonA 信息的 JLabel
                updatePersonLabel();
                // 关闭对话框
                dialog.dispose();
            }
        });
        dialog.add(confirmButton);

        // 显示对话框
        dialog.setVisible(true);
    }

    // 新增一个方法来更新 Person 标签
    private void updatePersonLabel() {
        Person.setText(
                "<html>冒险者的姓名是:" + PersonA.name +
                        "<br>当前生命值:" + PersonA.Blood +
                        "<br>当前魔力值:" + PersonA.Magic +
                        "<br>当前攻击力:" + PersonA.Damage + "<html>"
        );


    }
}
java 复制代码
public class MobsBean {
    String name;
    int blood;
    int damage;

    public MobsBean() {
    }

    public MobsBean(String name, int blood, int damage) {
        this.name = name;
        this.blood = blood;
        this.damage = damage;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return blood
     */
    public int getBlood() {
        return blood;
    }

    /**
     * 设置
     * @param blood
     */
    public void setBlood(int blood) {
        this.blood = blood;
    }

    /**
     * 获取
     * @return damage
     */
    public int getDamage() {
        return damage;
    }

    /**
     * 设置
     * @param damage
     */
    public void setDamage(int damage) {
        this.damage = damage;
    }

    public String toString() {
        return "MobsBean{name = " + name + ", blood = " + blood + ", damage = " + damage + "}";
    }
}
java 复制代码
import com.sun.tools.javac.Main;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MobsFrame extends JFrame {
    AttributeBean Person = new AttributeBean();

    MobsBean zombie = new MobsBean("僵尸Lv1", 100, 2);
    MobsBean Dragon = new MobsBean("巨龙Lv5", 300, 10);

    public MobsFrame(AttributeBean person) {
        super("对战界面");
        this.Person = person;
        setAlwaysOnTop(true);
        setSize(300, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        // 设置布局管理器为 BorderLayout
        setLayout(new BorderLayout());

        JLabel ad = new JLabel("<html>欢迎来到对战之森<br>点击按钮VS怪物吧<br>相信你的实力</html>", SwingConstants.CENTER);
        add(ad, BorderLayout.NORTH); // 将广告标签放置在窗口的顶部


        // 创建战场并开始战斗
        add(Button(), BorderLayout.CENTER);


        setVisible(true);
    }

    public JPanel Button() {
        JPanel buttonPanel = new JPanel();
        JButton Vswolf = new JButton("挑战僵尸Lv1");
        Vswolf.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                BattleField battlefield = new BattleField();
                battlefield.fight(Person, zombie); // 传递 zombie 对象
            }
        });
        buttonPanel.add(Vswolf);

        JButton VsDragon = new JButton("挑战巨龙Lv5");
        VsDragon.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                BattleField battlefield2 = new BattleField();
                battlefield2.fight(Person, Dragon); // 传递 Dragon 对象
            }
        });
        buttonPanel.add(VsDragon);
        buttonPanel.setVisible(true);


        return buttonPanel; // 返回包含按钮的面板
    }

}
相关推荐
腾讯TNTWeb前端团队5 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
mghio6 小时前
Dubbo 中的集群容错
java·微服务·dubbo
范文杰8 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪8 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪8 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy9 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom9 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom10 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom10 小时前
React与Next.js:基础知识及应用场景
前端·面试·github