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

项目注解:

Core:启动文件

AttributeBean:玩家属性
BackpackedBean:背包设计(未完成)
BackpackedFrame:背包页面(未完成)
BattleField:战斗逻辑(核心)
MainFrame:主界面(第一个启动的界面)
MobsBean:怪物属性
MobsFrame:打怪界面
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 + "}";
    }
}

public class BackpackedBean {
}
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);
    }



}


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);
    }



}


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() + " 被击败了!");
        }
    }
}
public class Core
{
    public static void main(String[] args){
        new MainFrame();


    }
}
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>"
        );


    }
}

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

}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/222771.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中庸行者 - 华为机试真题题解

给定一个m * n的整数矩阵作为地图&#xff0c;短阵数值为地形高度&#xff1b; 中庸行者选择地图中的任意一点作为起点&#xff0c;尝试往上、下、左、右四个相邻格子移动; 移动时有如下约束: 中庸行者只能上坡或者下坡&#xff0c;不能走到高度相同的点不允许连续上坡或者连续…

SpectralGPT: Spectral Foundation Model 论文翻译3

遥感领域的通用大模型 2023.11.13在CVPR发表 原文地址&#xff1a;[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) E.消融研究 在预训练阶段&#xff0c;我们对可能影响下游任务表现的各种因素进行了全面研究。这些因素包括掩蔽比、ViT patch大小、数据规…

matplotlib学习

显示两个figure 坐标上刻度修改 plt.xlim() 下标范围 plt.xticks() 替换新的下标 图例显示 散点图 subplot多合一显示

LDAP协议和AD活动目录的讲解

目录 LDAP协议 LDAP基本概念 LDAP目录的数据结构 LDAP交互过程以及相关报文 AD&#xff08;Active Directory&#xff09; AD基本概念 AD域与工作组、本地组的区别 AD DS&#xff08;AD域服务&#xff09; 信任关系 组策略和安全组 LDAP协议 LDAP基本概念 LDAP&…

2023年【高压电工】考试报名及高压电工试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 高压电工考试报名考前必练&#xff01;安全生产模拟考试一点通每个月更新高压电工试题及解析题目及答案&#xff01;多做几遍&#xff0c;其实通过高压电工理论考试很简单。 1、【单选题】 12m电杆埋设深度宜()。&…

每天一点python——day88

#每天一点Python——88 #编程两大思想【面向过程与面向对象】 #如图&#xff1a; 面向过程的线性思维&#xff1a; 类似于做菜一步步的来&#xff0c;先怎么样怎么样&#xff0c;再怎么样 如果不一步步的来&#xff0c;例如先炒菜再点火&#xff0c;这样是做不好的 面向对象&a…

MySQL系列(一):索引篇

为什么是B树&#xff1f; 我们推导下&#xff0c;首先看下用哈希表做索引&#xff0c;是否可以满足需求。如果我们用哈希建了索引&#xff0c;那么对于如下这种SQL&#xff0c;通过哈希&#xff0c;可以快速检索出数据&#xff1a; select * from t_user_info where id1;但是这…

十年前端之离别的旋律

在一家名叫“梦想家”的小公司里&#xff0c;有一个普通的程序员&#xff0c;他的名字叫做小帅。每天默默地坐在角落里&#xff0c;默默地写着代码&#xff0c;默默地为公司付出。他的眼睛里总是充满了对工作的热爱和对生活的热情&#xff0c;但他的内心却隐藏着一个秘密&#…

R语言学习

Part1阶段1&#xff1a;入门基础 1安装R和RStudio&#xff1a; 下载并安装R&#xff1a;https://cran.r-project.org/ 下载并安装RStudio&#xff1a;https://www.rstudio.com/products/rstudio/download/ 2Hello World&#xff1a; 学习如何在R中输出"Hello, World!"…

Vue2、Vue3的Diff算法比较

前言 diff算法是vue更新dom前&#xff0c;比较新旧vdom的一种优化方式 特点&#xff1a; 只会在同一级比较 从两边往中间收拢 差别 vue2 和 vue3的差别在于处理完头尾节点后&#xff0c;对设于节点的处理方式vue2 是遍历旧节点&#xff0c;将旧节点映射到map里&#xff0…

npm : 无法加载文件 D:\nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本。

今天在使用vscode下载项目的依赖时&#xff0c;输入 pnmp install,结果报错: npm : 无法加载文件 D:\nodejs\node_global\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。原因&#xff1a; 因为在此系统上禁止运行脚本&#xff0c;也就是说没有权限&#xff0c;查一下&#…

每天一点python——day87

#每天一点Python——87 #Pycharm程序调试 #例&#xff1a;【我想输出1-10】 i1 while i<10:print(i) #会一直输出1{我想输出一到十&#xff0c;但是他一直输出1}【如果想找到问题出现在什么地方&#xff1a;就需要一步步调试】 #那么怎么调试呢 #前面声明是没有错的&#x…

Java——面试:异常处理所用到的关键字有哪些?具体有什么作用?

1.异常处理所用到的关键字有哪些&#xff1f; Java异常处理所使用的到的关键字有&#xff1a;try、catch、finally、throw、throws五个 2.具体有什么作用&#xff1f; try&#xff1a;用于捕获异常&#xff0c;后面必须跟一个或多个catch块或者一个finally块&#xff1b;捕获到…

AdaBoost 详解

AdaBoost Boosting Boosting 是指&#xff0c;仅通过训练精度比随机猜想&#xff08;50%&#xff09;稍高的学习器&#xff0c;通过集成的方式过建出强学习器。 其中boosting中最有名的是AdaBoost算法。AdaBoost是英文"Adaptive Boosting"&#xff08;自适应增强&…

祸害了人民3年的新冠消失了,但有些奇怪现象,让人百思不得其解

真是没想到啊&#xff0c;祸害我们3年的新冠病毒突然就消失了&#xff0c;但是紧接着呢&#xff0c;却有一个非常奇怪的现象出现了&#xff0c;真的是令人百思不得其解&#xff01; 新冠病毒&#xff0c;于2020年的开始&#xff0c;可以说根本就没有任何缓冲期&#xff0c;一开…

微信小程序基础bug

1.苹果11手机小程序请求数据不显示 设置-》隐私-》分析与改进-》开启 ”与开发者共享“ 2.<navigator>组件回退delta不成功 tabBar 页面是不能实现后退的效果的. 因为, 当我们跳转到 tabBar 页面&#xff0c;会关闭其他所有非tabBar 页面,所以当处于 tabBar 页面时, 无…

redhat修改root密码

系统环境 redhat版本redhat7.6 1.在当前界面按e键进入进行编辑 2.在rhgb quite 后面加入 rd.break&#xff0c;按住ctrlx使用更改的参数引导系统 3. 挂载文件系统 3.1 进入此界面后挂载文件 mount -o remount,rw /sysroot4. 更改系统文件的root chroot /sysroot5. 修改密码…

IDEA Maven 配置国内源

基本步骤 分别设置下图的两个&#xff0c;一个是对当前项目的设置&#xff0c;一个是对以后创建的项目设置&#xff0c;这样以后就不用重新配置了。 将下面的两个勾选上 注意&#xff0c;两个地方&#xff0c;Settings 和 Settings for New Projects 的勾都要勾上。 前往 User…

【技术分享】ORACLE数据库相关操作

【赠送】IT技术视频教程&#xff0c;白拿不谢&#xff01;思科、华为、红帽、数据库、云计算等等https://xmws-it.blog.csdn.net/article/details/117297837?spm1001.2014.3001.5502[欢迎关注微信公众号&#xff1a;厦门微思网络] -- 截断表 TRUNCATE TABLE TABLE_NAME; -- …

排序:直接插入排序希尔排序

目录 排序&#xff1a; 概念&#xff1a; 直接插入排序&#xff1a; 代码的实现&#xff1a; 代码解析&#xff1a; 总结&#xff1a; 希尔排序&#xff1a; 代码实现&#xff1a; 预排序&#xff1a; 代码优化&#xff1a; gap 的 本质 &#xff1a; 直接…
最新文章