首页 > 其他分享 >面向对象综合训练

面向对象综合训练

时间:2024-10-20 09:44:05浏览次数:6  
标签:鸠摩智 role1 训练 血量 乔峰 public 面向对象 伤害 综合

练习 1: 文字版格斗游戏

最原始的写法:

Javabean 类:

import java.util.Random;

public class Role {
    private int blood;
    private String name;

    public Role() {
    }

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

    public int getBlood() {
        return blood;
    }

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

    public String getName() {
        return name;
    }

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

    // 攻击方法
    // 调用方法的对象攻击该方法的形参
    public void attack(Role role) {
        // 计算造成的伤害
        // 伤害是一个随机数, 范围是 [1, 20]
        Random r = new Random();
        // 得到造成的伤害
        int hurt = r.nextInt(20) + 1;
        // 获取被攻击者原来的血量
        int currentBlood = role.getBlood();
        // 计算被攻击者现在剩余的血量
        int remainBlood = currentBlood - hurt;
        // 当前血量低于造成的伤害时, 剩余血量将变为负数, 显然不可能, 此时将其赋值为 0
        remainBlood = remainBlood > 0 ? remainBlood : 0;
        // 将剩余血量赋值给被攻击的对象
        role.setBlood(remainBlood);
        // 打印攻击的过程
        System.out.println(this.getName() + "打了" + role.getName() + "一下, 造成了 " + hurt + " 点伤害, " +
                role.getName() + "还剩下 " + role.getBlood() + " 点血量.");
    }
}

测试类:

public class GameTest {
    public static void main(String[] args) {
        // 创建一个角色
        Role role1 = new Role(100, "乔峰");
        // 创建另一个角色
        Role role2 = new Role(100, "鸠摩智");
        // 开始格斗, 回合制游戏
        while (true) {
            // role1 先攻击 role2
            role1.attack(role2);
            // 判断 role2 剩余血量, 从而决定循环是否继续
            if (role2.getBlood() == 0) {
                System.out.println(role1.getName() + "K.O. 了" + role2.getName());
                break;
            }

            // 回合制游戏, 轮到 role2 攻击 role1 了
            // role2 攻击 role1
            role2.attack(role1);
            // 判断 role1 剩余血量, 从而决定循环是否继续
            if (role1.getBlood() == 0) {
                System.out.println(role2.getName() + "K.O. 了" + role1.getName());
                break;
            }
        }
    }
}

执行结果:

乔峰打了鸠摩智一下, 造成了 17 点伤害, 鸠摩智还剩下 83 点血量.
鸠摩智打了乔峰一下, 造成了 9 点伤害, 乔峰还剩下 91 点血量.
乔峰打了鸠摩智一下, 造成了 6 点伤害, 鸠摩智还剩下 77 点血量.
鸠摩智打了乔峰一下, 造成了 1 点伤害, 乔峰还剩下 90 点血量.
乔峰打了鸠摩智一下, 造成了 11 点伤害, 鸠摩智还剩下 66 点血量.
鸠摩智打了乔峰一下, 造成了 18 点伤害, 乔峰还剩下 72 点血量.
乔峰打了鸠摩智一下, 造成了 4 点伤害, 鸠摩智还剩下 62 点血量.
鸠摩智打了乔峰一下, 造成了 7 点伤害, 乔峰还剩下 65 点血量.
乔峰打了鸠摩智一下, 造成了 12 点伤害, 鸠摩智还剩下 50 点血量.
鸠摩智打了乔峰一下, 造成了 4 点伤害, 乔峰还剩下 61 点血量.
乔峰打了鸠摩智一下, 造成了 19 点伤害, 鸠摩智还剩下 31 点血量.
鸠摩智打了乔峰一下, 造成了 13 点伤害, 乔峰还剩下 48 点血量.
乔峰打了鸠摩智一下, 造成了 7 点伤害, 鸠摩智还剩下 24 点血量.
鸠摩智打了乔峰一下, 造成了 20 点伤害, 乔峰还剩下 28 点血量.
乔峰打了鸠摩智一下, 造成了 19 点伤害, 鸠摩智还剩下 5 点血量.
鸠摩智打了乔峰一下, 造成了 1 点伤害, 乔峰还剩下 27 点血量.
乔峰打了鸠摩智一下, 造成了 8 点伤害, 鸠摩智还剩下 0 点血量.
乔峰K.O. 了鸠摩智

标签:鸠摩智,role1,训练,血量,乔峰,public,面向对象,伤害,综合
From: https://www.cnblogs.com/Chengkai730/p/18486954

相关文章

  • 【Java】Java面向对象与方法
    1.基本方法1.1.基本定义在Java中,方法即为函数,Java中的方法定义遵循下面的通用格式修饰符返回值方法名(形参列表){方法体}对于基本方法的定义,遵循下面的结构publicstatic返回类型方法名(形参列表){方法体}是否需要返回类型和形参列表需要看该......
  • 时序约束和综合+跨时钟产生的问题+spyglass的使用+SOC设计问题
    时序约束和综合时钟频率#时钟单位为ns,2ns对应500M时钟频率create_clock-period2[getportsclk]skew#设置时钟的skew,即上升沿之间的误差,当前设置为0.3nsset_clock_uncertainty-setup0.3[get_clocksCLK]transition#设置时钟上升沿的转化时间set_clock_transi......
  • 代码随想录算法训练营day20| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树
    学习资料:https://programmercarl.com/0669.修剪二叉搜索树.html#算法公开课学习记录:669.修剪二叉搜索树(直接在原函数上操作,要根据情况用root的左右子树递归,因为子树中有满足条件的;前序:根左右)点击查看代码#Definitionforabinarytreenode.#classTreeNode:#def_......
  • 代码随想录算法训练营 | 647. 回文子串,516.最长回文子序列
    647.回文子串题目链接:647.回文子串文档讲解︰代码随想录(programmercarl.com)视频讲解︰回文子串日期:2024-10-19想法:本题精髓在于dp[i][j]表示的是s[i,j]这个子字符串是不是回文的,是Boolean类型,s[i]s[j]不等时,肯定不回文;s[i]s[j]相等时,开始看ij的大小,ij大小相等那么表示单个字......
  • 面向对象(下)
    面向对象(下)1、继承继承概述:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。通过extends关键字可以实现类与类的继承class子类名extends父类名{}单独的这个类称为父类,基类或者超类;这多个类可以称为......
  • 面向对象(上)
    第四章面向对象(上)1、面向对象思想概述1、面向对象与面向过程的区别?面向过程的思想:代表语言C语言功能开发中的每一步都是自己参与的面向对象的思想:代表语言java语言指的是不断地创建对象,指挥对象事情过程2、举例现实生活中的例子:接水:面向过程的思想:自己拿......
  • Java面向对象学习1019-1
    Java面向对象基础1:  面向对象编程是什么,和面向过程有什么区别?  面向对象编程OOP(ObjectOrientedPrograming)是一种程序设计方法,其本质是模仿人的思维来解决问题,把客观世界的实体抽象为对象。不同于面向过程编程POP(ProcedureOrientedPrograming)以过程为中心,关注......
  • 代码随想录算法训练营第四天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点
    1.leetcode24两两交换链表中的节点题目链接:24.两两交换链表中的节点-力扣(LeetCode)文章链接:代码随想录(programmercarl.com)视频链接:帮你把链表细节学清楚!|LeetCode:24.两两交换链表中的节点_哔哩哔哩_bilibili1.1代码这个代码是用循环的思路来进行判断的,写的过程挺......
  • 137,[复杂递归+时间日期]SQL训练之,力扣,1384. 按年度列出销售总额
    学习:知识的初次邂逅复习:知识的温故知新练习:知识的实践应用目录一,原题力扣链接二,题干三,建表语句四,分析五,SQL解答六,验证七,知识点总结一,原题力扣链接.-力扣(LeetCode)二,题干Product 表:+---------------+---------+|ColumnName|Type|+------------......
  • 使用飞浆ai训练yolov5
    使用飞浆ai训练yolov5飞浆ai创建项目安装环境数据集训练在yolov5目录下创建一个data.yaml,可改名因为包安装不在python的路径下,需要在py文件中添加如下命令可以导入包的位置然后可以再终端中执行训练命令参数:训练结束预测数据参数最简单的检测命令创新、修改飞浆ai......