首页 > 编程语言 >Java面向对象小游戏--文字版格斗游戏(附带全套源代码)->基于JavaBean

Java面向对象小游戏--文字版格斗游戏(附带全套源代码)->基于JavaBean

时间:2024-07-10 15:59:44浏览次数:16  
标签:Java String gender getName System 格斗游戏 源代码 public out

一、前言

java部分的基础学习已经完结,接下来给大家分享的大多为java相关的案例分析,也会有一些小项目,这点不要太过于担心,主要还是基础部分要打牢固。java部分的难点就在面向对象这一点,学习C语言的小伙伴们应该是第一次听说方法。这点也是和C语言相差巨大的地方,不过对于学习过python的小伙伴们应该会十分友好。

温馨提示一下:要好好运用工具

如果大家基础知识掌握的还不太行的话,一定要点击下方链接仔细观看欧❥(^_-)

运算符、判断、循环

数组、方法

双色球系统

二、JavaBean简单概括

概念

"JavaBean",它是Java语言中的一种特殊类别,通常用于在Java应用程序中作为可重用的软件组件。

特点

  • 属性封装:JavaBean通过私有的成员变量(字段)和公共的getter和setter方法来封装属性。这种做法使得属性可以被控制访问,从而提高了代码的安全性和可维护性。
  • 无参构造方法:JavaBean通常提供一个无参构造方法,使得它可以被Java的反射机制实例化。
  • 实现Serializable接口:为了支持Java的序列化机制,JavaBean通常实现Serializable接口,使得它可以在网络上传输或保存到磁盘。
  • 事件处理支持:JavaBean可以支持事件处理,通过添加事件监听器来响应特定的事件。
  • 命名约定:JavaBean的命名通常遵循一定的约定,例如属性名通过getter和setter方法命名的规则。
  • 应用场景:JavaBean常用于构建图形用户界面(GUI)应用程序、Web应用程序和企业级Java应用程序中的模型层,提供数据的封装和业务逻辑的处理。

三、Java面向对象知识点汇总

Java中的面向对象编程(Object-Oriented Programming, OOP)是其核心编程范式之一。

注:javabeen类似与C语言中的模块化编程,python中的方法

类与对象

  • 类(Class):类是对象的模板,定义了对象的属性(成员变量)和行为(方法)。
  • 对象(Object):对象是类的实例,具体化了类的定义,每个对象都有自己的状态(属性)和行为(方法)。

封装(Encapsulation)

  • 封装是面向对象的基本特征之一,通过将数据(成员变量)和操作数据的方法(成员方法)封装在一起,实现了对数据的隐藏和保护,提高了安全性和代码的复用性。

继承(Inheritance)

  • 继承允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以重用父类的代码,并且可以通过覆盖(重写)方法或者增加新的方法来扩展其功能。

多态(Polymorphism)

  • 多态是指同一个方法调用由于对象不同可能会产生不同的行为。Java中实现多态的方式包括方法重载(Overloading)和方法重写(Overriding)。

抽象类与接口

  • 抽象类(Abstract Class):抽象类不能被实例化,其目的是为了被子类继承,可以包含抽象方法和非抽象方法。
  • 接口(Interface):接口定义了一组方法的规范,但不包含实现。类可以实现接口来强制执行接口定义的方法。

重要概念

  • 构造方法(Constructor):用于初始化对象的特定实例。
  • this关键字:表示当前对象的引用,可以在类的方法中使用。
  • super关键字:表示父类的引用,用于调用父类的构造方法和成员方法。

其他关键词

  • final关键字:表示最终的、不可改变的意思,可以用来修饰类、方法和变量。
  • static关键字:表示静态的意思,可以用来修饰成员变量、成员方法、代码块和内部类等。
  • 包(Package):用来组织类和接口,避免命名冲突。

设计原则

  • 单一职责原则:一个类应该只有一个引起它变化的原因。
  • 开闭原则:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
  • 里氏替换原则:子类必须能够替换其基类。
  • 依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象。
  • 接口隔离原则:不应该强迫客户端依赖它们不使用的接口。
  • 迪米特法则:一个对象应该对其他对象有尽可能少的了解。

四、JavaBeen部分代码讲解

    private String name;
    private int blood;
    private char gender;
    private String face;
    //面部描述
    String[] boyfaces={"眉清目秀","一表人才","神采奕奕","目光炯炯","英姿飒爽","目不斜视","容光焕发","神情自若","面如冠玉","眉飞色舞"};
    String[] girlfaces={"姹紫嫣红","姣好靓丽","柳眉星眼","芙蓉出水","明眸皓齿","冰清玉洁","红颜白发","笑逐颜开","美若天仙","闭月羞花"};
    //攻击描述
    String[] attack_dasc={
            "%s刀光剑影,无声无息地一击打中了%s",
            "%s提取方法…招招势如破竹,迅猛无比打向%s",
            "%s手起刀落,锋利如鹰击长空,击中%s",
            "%s招招精准,步步为营,势不可挡。功向%s",
            "%s突如其来,快如闪电,令%s防不胜防。"
    };
    //受伤描述
    String[] hurt_dasc={
            "结果%s退了半步,毫发无伤",
            "结果%s造成了一处瘀伤。",
            "结果%s皮开肉绽,伤痕累累。",
            "结果%s受伤虽重,仍孜孜不倦地站立。",
            "结果%s脸色苍白,连退好几步",
            "结果%s受到内伤,气息奄奄。",
            "结果%s一声惨叫,像烂泥班塌了下去"
    };

成员变量定义

这些是角色的基本属性:

  • private String name;
  • private int blood;
  • private char gender;
  • private String face;
  • name 是角色的名字,类型为字符串。
  • blood 是角色的血量,类型为整数。
  • gender 是角色的性别,类型为字符(通常用 'M' 或 'F' 表示男性或女性)。
  • face 是角色的面部特征,类型为字符串。

面部描述数组

这两个数组存储了男性角色和女性角色的面部描述,每个描述是一个字符串,描述了角色的外貌特征。

  • String[] boyfaces = {...};
  • String[] girlfaces = {...};

攻击描述数组

这个数组包含了角色进行攻击时的描述模板,使用了占位符 %s 来表示攻击者和被攻击者的名字。这些描述字符串似乎是为了在游戏或者故事情节中描绘战斗或攻击的场景。

  • String[] attack_dasc = {...};

注:这里的占位符和C语言中的用法类似使用占位符的时候要看清是printf而不是println

受伤描述数组

这个数组包含了角色受伤时的描述模板,同样使用了 %s 占位符表示受伤的角色。这些描述用于描述角色在战斗中或者遭遇意外时的反应和状态。

  • String[] hurt_dasc = {...};
public Role() {//空参

    }

    public Role(String name, int blood,char gender) {
        this.name = name;
        this.blood = blood;
        this.gender = gender;
        setFace(gender);
    }

    public String getFace() {
        return face;
    }

    public void setFace(char gender) {
        Random r = new Random();
        if(gender=='男'){
            int index = r.nextInt(boyfaces.length);
            this.face = boyfaces[index];
        }else if(gender=='女'){
            int index = r.nextInt(girlfaces.length);
            this.face = girlfaces[index];
        }else{
            this.face = "抽象";
        }
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getBlood() {
        return blood;
    }

    public void setBlood(int blood) {
        this.blood = blood;
    }

构造方法

在这个构造方法中:

  • public Role() {}:空参构造方法,没有任何参数,可能用于创建对象实例时的默认初始化。

  • public Role(String name, int blood, char gender):带参数的构造方法,用来初始化角色对象的属性。

    • name:角色的名字。
    • blood:角色的血量。
    • gender:角色的性别('男' 或 '女')。
  • 将传入的 namebloodgender 分别赋值给对象的对应属性。
  • 调用 setFace(gender) 方法来根据性别设定角色的面部描述。

成员变量

  • private String name;:角色名字。
  • private int blood;:角色血量。
  • private char gender;:角色性别。
  • private String face;:角色面部描述。

方法

  • public String getFace()public void setFace(char gender):用于获取和设置角色的面部描述。

    • setFace(char gender) 方法根据传入的性别参数选择性别对应的面部描述,并将其赋值给 face 属性。
  • public char getGender()public void setGender(char gender):用于获取和设置角色的性别。

  • public String getName()public void setName(String name):用于获取和设置角色的名字。

  • public int getBlood()public void setBlood(int blood):用于获取和设置角色的血量。

面部描述数组和随机选择

  • boyfaces 和 girlfaces 分别存储了男性和女性角色的面部描述。
  • setFace(char gender) 方法根据传入的性别参数选择性别对应的面部描述数组,并随机选取一个面部描述赋给 face 属性。
//定义一个方法用于攻击别人
    //方法的调用者去攻击参数
    public void attack(@org.jetbrains.annotations.NotNull Role role) {
        //攻击方式
        Random r = new Random();
        int index = r.nextInt(attack_dasc.length);
        String attack_fun =attack_dasc[index];

        //输出一个攻击效果
        System.out.printf(attack_fun,this.getName(),role.getName());
        System.out.println();

        //伤害1-20
        Random ran = new Random();
        int hurt = ran.nextInt(20) + 1;

        //剩余的血量
        int remainBlood = role.getBlood() - hurt;
        remainBlood = remainBlood > 0 ? remainBlood : 0;
        role.setBlood(remainBlood);

        //输出一下结果

        //受伤的描述
        if(remainBlood>=80){
            System.out.printf(hurt_dasc[0],role.getName());
        }else if(remainBlood>=70){
            System.out.printf(hurt_dasc[1],role.getName());
        }else if(remainBlood>=60){
            System.out.printf(hurt_dasc[2],role.getName());
        }else if(remainBlood>=50){
            System.out.printf(hurt_dasc[3],role.getName());
        }else if(remainBlood>=40){
            System.out.printf(hurt_dasc[4],role.getName());
        }else if(remainBlood>=30){
            System.out.printf(hurt_dasc[5],role.getName());
        }else{
            System.out.printf(hurt_dasc[6],role.getName());
        }
        System.out.println();

    }

    public void showRoleInfo(){
        System.out.println("姓名为:"+getName());
        System.out.println("血量为:"+getBlood());
        System.out.println("性别为:"+getGender());
        System.out.println("长相为:"+getFace());
    }

attack(Role role) 方法:

  • 这个方法用于让当前角色对象攻击另一个角色对象 role
  • 首先,从 attack_dasc 数组中随机选择一种攻击方式,并将选择结果存储在 attack_fun 变量中。
  • 使用 System.out.printf 方法输出攻击效果,其中 %s 标记会分别被当前角色的名字 this.getName() 和被攻击角色的名字 role.getName() 替换。
  • 然后,通过生成一个随机数(1到20之间)来计算造成的伤害 hurt
  • 计算被攻击角色剩余的血量 remainBlood,并将其更新到 role 对象中。
  • 根据剩余血量的不同范围,选择合适的受伤描述从 hurt_dasc 数组中输出。

showRoleInfo() 方法:

  • 这个方法用于显示当前角色对象的信息,包括姓名、血量、性别和长相。
  • 使用 System.out.println 分别输出角色的姓名(getName())、血量(getBlood())、性别(getGender())、长相(getFace())。

五、Java部分代码讲解

package day4;

public class text1 {
    public static void main(String []args){
        //案例、文字格斗游戏
        Role r1=new Role("狼叔",100,'男');
        Role r2=new Role("鲨鱼妹",100,'女');

        //展示角色信息
        r1.showRoleInfo();
        r2.showRoleInfo();
        //开始战斗
        while (true){
            //r1攻击r2
            r1.attack(r2);
            if (r2.getBlood() == 0){
                System.out.println(r1.getName()+"击败了"+r2.getName());
                break;
            }
            //r2攻击r1
            r2.attack(r1);
            if (r1.getBlood() == 0){
                System.out.println(r2.getName()+"击败了"+r1.getName());
                break;
            }
        }
    }
}

Role 类

  • 每个角色有姓名、血量和性别等属性。
  • 角色具有 attack(Role role) 方法用于攻击另一个角色,并在攻击时产生随机的攻击效果和伤害。

text1 类

  • main 方法
    • 创建了两个角色对象 r1 和 r2,分别命名为 "狼叔" 和 "鲨鱼妹",初始化血量为 100,并指定性别。
    • 调用 showRoleInfo() 方法展示两个角色的初始信息(姓名、血量、性别)。
    • 使用 while 循环来模拟战斗的过程,直到其中一个角色的血量降到或者低于 0。
    • 在循环中,先让 r1 攻击 r2,然后检查 r2 的血量是否降到 0。如果是,输出 r1 击败 r2 的信息,并结束战斗。
    • 然后让 r2 攻击 r1,并检查 r1 的血量。如果 r1 的血量降到 0,输出 r2 击败 r1 的信息,并结束战斗。

战斗过程

  • 每个角色的攻击和受伤效果是随机的,通过 Random 类来生成随机数,因此每次运行的战斗结果可能不同。
  • 当一个角色的血量降到 0 或以下时,战斗结束,并输出哪个角色击败了另一个角色的信息。

六、全套源代码展示

Java部分

package day4;

public class text1 {
    public static void main(String []args){
        //案例、文字格斗游戏
        Role r1=new Role("狼叔",100,'男');
        Role r2=new Role("鲨鱼妹",100,'女');

        //展示角色信息
        r1.showRoleInfo();
        r2.showRoleInfo();
        //开始战斗
        while (true){
            //r1攻击r2
            r1.attack(r2);
            if (r2.getBlood() == 0){
                System.out.println(r1.getName()+"击败了"+r2.getName());
                break;
            }
            //r2攻击r1
            r2.attack(r1);
            if (r1.getBlood() == 0){
                System.out.println(r2.getName()+"击败了"+r1.getName());
                break;
            }
        }
    }
}

javabeen部分

package day4;

import java.util.Random;

public class Role {
    private String name;
    private int blood;
    private char gender;
    private String face;
    //面部描述
    String[] boyfaces={"眉清目秀","一表人才","神采奕奕","目光炯炯","英姿飒爽","目不斜视","容光焕发","神情自若","面如冠玉","眉飞色舞"};
    String[] girlfaces={"姹紫嫣红","姣好靓丽","柳眉星眼","芙蓉出水","明眸皓齿","冰清玉洁","红颜白发","笑逐颜开","美若天仙","闭月羞花"};
    //攻击描述
    String[] attack_dasc={
            "%s刀光剑影,无声无息地一击打中了%s",
            "%s提取方法…招招势如破竹,迅猛无比打向%s",
            "%s手起刀落,锋利如鹰击长空,击中%s",
            "%s招招精准,步步为营,势不可挡。功向%s",
            "%s突如其来,快如闪电,令%s防不胜防。"
    };
    //受伤描述
    String[] hurt_dasc={
            "结果%s退了半步,毫发无伤",
            "结果%s造成了一处瘀伤。",
            "结果%s皮开肉绽,伤痕累累。",
            "结果%s受伤虽重,仍孜孜不倦地站立。",
            "结果%s脸色苍白,连退好几步",
            "结果%s受到内伤,气息奄奄。",
            "结果%s一声惨叫,像烂泥班塌了下去"
    };

    public Role() {//空参

    }

    public Role(String name, int blood,char gender) {
        this.name = name;
        this.blood = blood;
        this.gender = gender;
        setFace(gender);
    }

    public String getFace() {
        return face;
    }

    public void setFace(char gender) {
        Random r = new Random();
        if(gender=='男'){
            int index = r.nextInt(boyfaces.length);
            this.face = boyfaces[index];
        }else if(gender=='女'){
            int index = r.nextInt(girlfaces.length);
            this.face = girlfaces[index];
        }else{
            this.face = "抽象";
        }
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getBlood() {
        return blood;
    }

    public void setBlood(int blood) {
        this.blood = blood;
    }

    //定义一个方法用于攻击别人
    //方法的调用者去攻击参数
    public void attack(@org.jetbrains.annotations.NotNull Role role) {
        //攻击方式
        Random r = new Random();
        int index = r.nextInt(attack_dasc.length);
        String attack_fun =attack_dasc[index];

        //输出一个攻击效果
        System.out.printf(attack_fun,this.getName(),role.getName());
        System.out.println();

        //伤害1-20
        Random ran = new Random();
        int hurt = ran.nextInt(20) + 1;

        //剩余的血量
        int remainBlood = role.getBlood() - hurt;
        remainBlood = remainBlood > 0 ? remainBlood : 0;
        role.setBlood(remainBlood);

        //输出一下结果

        //受伤的描述
        if(remainBlood>=80){
            System.out.printf(hurt_dasc[0],role.getName());
        }else if(remainBlood>=70){
            System.out.printf(hurt_dasc[1],role.getName());
        }else if(remainBlood>=60){
            System.out.printf(hurt_dasc[2],role.getName());
        }else if(remainBlood>=50){
            System.out.printf(hurt_dasc[3],role.getName());
        }else if(remainBlood>=40){
            System.out.printf(hurt_dasc[4],role.getName());
        }else if(remainBlood>=30){
            System.out.printf(hurt_dasc[5],role.getName());
        }else{
            System.out.printf(hurt_dasc[6],role.getName());
        }
        System.out.println();

    }

    public void showRoleInfo(){
        System.out.println("姓名为:"+getName());
        System.out.println("血量为:"+getBlood());
        System.out.println("性别为:"+getGender());
        System.out.println("长相为:"+getFace());
    }
}

标签:Java,String,gender,getName,System,格斗游戏,源代码,public,out
From: https://blog.csdn.net/2302_80329073/article/details/140308378

相关文章

  • Java面向对象基础篇综合训练(附带全套源代码及逐语句分析)->基于javabeen
    一、前言还是那句话面向对象是Java的重点,同时也是难点,小编会在此部分分享一些综合型的案例,难度从易到难,本篇文章只是一些基础的操作,综合能力并不是太高。大家可以试着观看一遍自己去打开编译器尝试一下。不知道有多少读者是跟着小编进行学习的,今天是学习Java的第五天,希望大家......
  • JavaScript如何将字符串形式里的img图片添加属性
    方法一:使用正则表达式以下例子中将会在img图片中添加crossorigin属性lethtml=`<p>打撒抠脚大汉噶刷卡机很大凯撒</p><p>规范化是的冯绍峰东风浩荡试试</p><imgsrc="http://s3.v.360xkw.com/yzb/photos/1688536327316_ca0e2e3d.jpg"alt=""......
  • Java计算机毕业设计生鲜仓储管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着生鲜电商的蓬勃发展和消费者对食品新鲜度、安全性的日益重视,生鲜仓储管理成为了保障供应链顺畅与产品质量的关键环节。然而,传统的生鲜仓储管理模......
  • Java-常用API
    1-JavaAPI:指的就是JDK中提供的各种功能的Java类。2-Scanner基本使用Scanner:一个简单的文本扫描程序,可以获取基本类型数据和字符串数据构造方法:Scanner(InputStreamsource):创建Scanner对象System.in:对应的是InputStream类型,可以表示键盘输入Scannersc=n......
  • Java后端tlias员工部门管理-员工管理下-MyBatis-4
    当我们完成了员工管理的分页查询,那么接下来就要完成员工管理的批量删除、新增员工、根据ID查询员工、根据ID修改员工功能。下图是最终完成的示例 批量删除批量删除也是查询语句,所以我们在EmpMapper只需要编写方法,而不需要在上面编写复杂的查询语句,而是在EmpMapper.xml编写......
  • Java后端tlias员工部门管理-前后端联调-阿里云OSS-5
    当完成了员工和部门管理的两大模块的所有基本功能,那么我们接下来就先进行yml文件配置。Yml文件配置为什么要换我们需要把这个application.properties配置文件改成application.yml,因为对比了其他的配置文件的格式,有诸如一下优点中文变成???那么我们进入application.proper......
  • 面试官:Java对象引用都有哪些类型?
    哈喽,大家好......
  • Java计算机毕业设计的电影院管理系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着文化娱乐产业的蓬勃发展,电影院作为人们休闲娱乐的重要场所,其管理效率和用户体验成为影响行业竞争力的关键因素。传统的电影院管理方式往往依赖于......
  • JavaSE语法 | 初识Java!!!
    初识Java一、Java开发环境二、初步认识Java的main方法2.1main方法的实现2.2运行Java程序三、注释四、标识符五、关键字一、Java开发环境IDEA版本:IntelliJIDEACommunityEdition2022.3.3JDK17Windows11二、初步认识Java的main方法2.1main方法的实现main......
  • Java虚拟机(JVM)修复
    一、确定问题原因首先,需要明确Java虚拟机出现问题的具体原因。这可以通过以下方式进行:查看错误日志:JVM和Java应用程序会生成日志文件,这些文件记录了运行时的详细信息,包括错误信息和系统警告。通过查看这些日志,可以获得导致JVM故障的线索。使用调试工具:如jstack、jmap、jconsole......