[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);// 设置布局管理器为 BorderLayoutsetLayout(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);// 设置布局管理器为 BorderLayoutsetLayout(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() + " 战斗!");// 循环战斗直到一方血量为0while (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);// 设置布局管理器为 BorderLayoutsetLayout(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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void actionPerformed(ActionEvent e) {// 更新 PersonA 的 name 属性PersonA.name = textField.getText();// 更新显示 PersonA 信息的 JLabelupdatePersonLabel();// 关闭对话框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);// 设置布局管理器为 BorderLayoutsetLayout(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() {@Overridepublic 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() {@Overridepublic void actionPerformed(ActionEvent e) {BattleField battlefield2 = new BattleField();battlefield2.fight(Person, Dragon); // 传递 Dragon 对象}});buttonPanel.add(VsDragon);buttonPanel.setVisible(true);return buttonPanel; // 返回包含按钮的面板}}
相关文章:
[Java][项目][战斗逻辑]基于JFrame的文字游戏
项目注解: Core:启动文件 AttributeBean:玩家属性 BackpackedBean:背包设计(未完成) BackpackedFrame:背包页面(未完成) BattleField:战斗逻辑(核心&…...
顺序表和链表面试题
文章目录 顺序表(1)原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。(2)删除有序数组中的重复项(3)合并两个有序数组 链表(1)删除链表中等于给定值 val 的所有节点(2)反转一个单链表(3) 合并两个有序链表(4)链表的中间结点(5)链表中…...
树_二叉搜索树累加求和
//给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 // node.val 的值之和。 // // 提醒一下,二叉搜索树满足下列约束…...
gcc编译流程概述
前言 本篇文章介绍gcc编译器编译C文件的流程概述 比如我们创建了一个.c文件hello_gcc.c #include <stdio.h> int main() {printf("Hello gcc!!!\n");return 0; }最简单的方式就是在终端使用命令 gcc hello_gcc.c -o hello_gcc // 编译、汇编、链接 ./hello_…...
【web安全】ssrf漏洞的原理与使用
前言 菜某对ssrf漏洞的总结。 ssrf的作用 主要作用:访问外界无法访问的内网进行信息收集。 1.进行端口扫描,资源访问 2.指纹信息识别,访问相应的默认文件 3.利用漏洞或者和payload进一步运行其他程序 4.get类型漏洞利用,传参数…...
佳易王会员管理软件店铺积分以及积分兑换系统
一、佳易王会员管理软件大众版 部分功能简介: 1、会员信息登记 :可以直接使用手机号登记,也可以使用实体卡片,推荐用手机号即可。 2、会员卡类型 :可以自由设置卡的类型,比如:充值卡、计次卡、…...
Django回顾【二】
目录 一、Web框架 二、WSGI协议 三、 Django框架 1、MVC与MTV模型 2、Django的下载与使用 补充 3、启动django项目 补充 5、 Django请求生命周期 四、路由控制 1、路由是什么? 2、如何使用 3、path详细使用 4、re_path详细使用 5、反向解析 6、路由…...
[Ubuntu 18.04] RK3399搭建SSH服务实现远程访问
SSH(Secure Shell)是一种网络协议和软件,用于安全地远程登录到计算机并进行网络服务的加密通信。它提供了加密的认证和安全的数据传输,使得在不安全的网络中进行远程管理和访问变得更加安全。 以下是 SSH 服务的一些关键特点和用途: 安全认证:SSH 使用公钥/私钥加密技术…...
Linux进程间通信之共享内存
📟作者主页:慢热的陕西人 🌴专栏链接:Linux 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容讲解共享内存原理和相关接口的介绍,以及一个…...
lv11 嵌入式开发 RTC 17
目录 1 RTC简介 编辑2 Exynos4412下的RTC控制器 2.1 概述 2.2 特征 2.3 功能框图 3 寄存器介绍 3.1 概述 3.2 BCD格式的年月日寄存器 3.3 INTP中断挂起寄存器 3.4 RTCCON控制寄存器 3.5 CURTICCNT 作为嘀嗒定时器使用的寄存器 4 RTC编程 5 练习 1 RTC简介 RTC(…...
c语言指针详解(上)
目录 一、指针的基本概念和用法 二、指针运算 2.1 指针的自增和自减运算 2.2 指针的自增和自减运算 三、数组和指针 四、指针和函数 4.1 在函数中使用指针作为参数和返回值 4.1.1 使用指针作为函数参数 4.1.2 使用指针作为函数返回值 4.2 指针参数的传值和传引用特性 4.2.1 指针…...
如何删除mac苹果电脑上面的流氓软件?
在使用苹果电脑的过程中,有时候我们也会遇到一些不需要的软件。无论是因为不再需要,或者是为了释放磁盘空间,删除这些软件是很重要的。本文将为大家介绍怎样删除苹果电脑上的软件! CleanMyMac X全新版下载如下: https://wm.make…...
WordPress(11)给文章添加预计阅读时长
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、文件配置二、代码块1.引入库2.配置 single.php三、效果图前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了…...
周周爱学习之快速排序
快速排序,顾名思义,快速排序是一种速度非常快的一种排序算法 平均时间复杂度为O(),最坏时间复杂度为O()数据量较大时,优势非常明显属于不稳定排序 1.算法描述 每一轮排序选择一个基准点(pivot)进行分区 让小于基准点…...
国产接口测试工具APIpost
说实话,了解APIpost是因为,我的所有接口相关的文章下,都有该APIpost水军的评论,无非就是APIpost是中文版的postman,有多么多么好用,虽然咱也还不是什么啥网红,但是不知会一声就乱在评论区打广告…...
MySQL电商管理系统练习题及答案
一 、表结构 用户表(user):id(主键)、username、password、email、phone、age商品表(product):id(主键)、name、price、stock、description订单表(order):id(主键)、user_id(外键,关联用户表)、total_price、status、create_time…...
每日3道PWN(第二天)
ciscn_2019_n_1 参考: [BUUCTF-pwn]——ciscn_2019_n_1-CSDN博客 [BUUCTF]PWN5——ciscn_2019_n_1_ciscn_2019_n_4-CSDN博客 BUUCTF—ciscn_2019_n_1 1-CSDN博客 checksec一下 64位栈溢出 按f5查看main函数,双击可疑函数 发现含有命令执行的且发现fl…...
SAP STMS传输请求
一、概述 一般SAP项目上都会有六套系统,分别是: 测试环境-DEV系统 主要由100:沙盘系统:用于业务顾问配置 200:开发系统:用于开发ABAP写代码 300:测试系统:主要是单元测试、顾问自己…...
L1-009:N个数求和
目录 ⭐题目描述⭐ ⭐分析 ⭐程序代码 运行结果 ⭐文案分享⭐ ⭐题目描述⭐ 本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。 输入格式: 输入第一行给出…...
当发送“Hello,World”时,channel发生了什么?
一、Netty概述 1.Netty是什么? Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。 2.Netty的地位怎么样? Netty 在 Java 网络应用框架中的地位就好比:Spring 框架在 JavaEE …...
服务器运行情况及线上排查问题常用命令
一、top命令 指令行: top返回: 返回分为两部分 (一)系统概览,见图知意 以下是几个需要注意的参数 1、load average: 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分…...
Hadoop学习笔记(HDP)-Part.18 安装Flink
目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …...
LeetCode56. 合并区间
🔗:【贪心算法,合并区间有细节!LeetCode:56.合并区间-哔哩哔哩】 class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if(intervals.size()0){return intervals;…...
解决typescript报错:找不到名称xxx
现象: 原因:在同时导入默认导出和命名导出时,默认导出必须放在命名导出之前 下面的就是原始文件: 默认导出指: export default导出类型, import时无需大括号 命名导出指: 仅有export关键字…...
UVM中封装成agent
在验证平台中加入monitor时,看到driver和monitor之间的联系:两者之间的代码高度相似。其本质是因为二者 处理的是同一种协议,在同样一套既定的规则下做着不同的事情。由于二者的这种相似性,UVM中通常将二者封装在一起,…...
OSI七层模型与TCP/IP四层模型
一、OSI七层模型简述 OSI 模型的七层是什么?在 OSI 模型中如何进行通信?OSI 模型有哪些替代方案? TCP/IP 模型关于专有协议和模型的说明 二、七层模型详解(DNS、CDN、OSI) 状态码DNS nslookup命令 CDN whois命令 …...
QT 中 QProgressDialog 进度条窗口 备查
基础API //两个构造函数 QProgressDialog::QProgressDialog(QWidget *parent nullptr, Qt::WindowFlags f Qt::WindowFlags());QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *…...
学习ShardingSphere前置知识
学习ShardingSphere前置准备知识 一. SPI SPI(Service Provider Interface)是一种Java的扩展机制,用于实现组件之间的松耦合。在SPI模型中,服务提供者(Service Provider)定义了一组接口,而服务…...
读书笔记-《数据结构与算法》-摘要3[选择排序]
选择排序 核心:不断地选择剩余元素中的最小者。 找到数组中最小元素并将其和数组第一个元素交换位置。在剩下的元素中找到最小元素并将其与数组第二个元素交换,直至整个数组排序。 性质: 比较次数(N-1)(N-2)(N-3)…21~N^2/2交换次数N运行…...
Arduino驱动MLX90614红外测温传感器(温湿度传感器)
目录 1、传感器特性 2、测量方法 3、硬件原理图 4、控制器和传感器连线图...
网站上的报名表链接是怎么做的/抖音广告怎么投放
模板介绍 本套管理好自己的健康下载PPT模板,模板编号:P87161,大小10MB,共27页,比例为16:9,由封面、目录、转场页、内容、结尾5个部分构成。 内含青色,橙色,灰色多种配色,精美风格设计,动态播放效果,精美实用。 一份设…...
网络推广发展/杭州seo推广公司
zookeeper是干嘛的呢 Zookeeper的作用1.可以为客户端管理少量的数据kvkey:是以路径的形式表示的,那就意味着,各key之间有父子关系,比如/ 是顶层key用户建的key只能在/ 下作为子节点,比如建一个key: /aa 这个…...
泉州做网站公司/网络推广电话销售技巧和话术
SQL数据库语言解释 COLUMN_SCHOOL_ID " interger," 切记表名和列名还有列名和类型要空格隔开并且结尾要加逗号。 一般drop table if exists是数据库里面的,后面接表名如:drop table if exists xxx_book 如果数据库中存在xxx_book表&…...
做网站选什么系统/域名注册流程
本篇教程通过PHPstudy安装Mysql数据库。什么是phpstudy?phpStudy是一个PHP调试环境的程序集成包。该程序包集成最新ApachePHPMySQLphpMyAdminZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。该程序不…...
上海外包公司网站建设/看书网站排名
一、什么是命令式 命令(Command)模式又叫作动作(Action)模式或事务(Transaction)模式,是一种对象的行为模式。将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作…...
建设中小企业网站/互动营销策略
but we cant use it unless you put visual studio in 64bit mode.最近装dlib时候遇到这个问题,很简单就能解决掉 Visual Studio用户通常应该以64位模式执行所有操作。默认情况下,Visual Studio是32位,在其输出和自己的执行中都是如此&…...