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

}
相关推荐
芒果披萨11 分钟前
El表达式和JSTL
java·el
q5673152312 分钟前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash
吕彬-前端27 分钟前
使用vite+react+ts+Ant Design开发后台管理项目(五)
前端·javascript·react.js
学前端的小朱30 分钟前
Redux的简介及其在React中的应用
前端·javascript·react.js·redux·store
许野平37 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
guai_guai_guai39 分钟前
uniapp
前端·javascript·vue.js·uni-app
也无晴也无风雨40 分钟前
在JS中, 0 == [0] 吗
开发语言·javascript
狂奔solar1 小时前
yelp数据集上识别潜在的热门商家
开发语言·python
duration~1 小时前
Maven随笔
java·maven
zmgst1 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql