[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; // 返回包含按钮的面板
    }

}
相关推荐
卷Java8 分钟前
Python字典:键值对、get()方法、defaultdict,附通讯录实战
开发语言·数据库·python
liuyao_xianhui8 分钟前
优选算法_翻转链表_头插法_C++
开发语言·数据结构·c++·算法·leetcode·链表·动态规划
happy_baymax11 分钟前
三电平矢量表达式MATLAB实现
开发语言·matlab
xyq202411 分钟前
jEasyUI 创建 XP 风格左侧面板
开发语言
赫瑞13 分钟前
Java中的最长公共子序列——LCS
java·开发语言
哈罗哈皮16 分钟前
trea也很强,我撸一个给你看(附教程)
前端·人工智能·微信小程序
于先生吖16 分钟前
零基础开发国际版同城出行平台 JAVA 顺风车预约系统实战教学
java·开发语言
代码雕刻家17 分钟前
2.22.StringBuffer类的常见用法、
java·开发语言
yhole18 分钟前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
就是个名称26 分钟前
echart绘制天顶图
linux·前端·javascript