面向对象综合训练1

面向对象综合训练1

原视频参见:
https://www.bilibili.com/video/BV17F411T7Ao?p=91&vd_source=f1cd818514f39c67988fb38552278ca2

package OOP;

public class Game {
    public static void main(String[] args) {
        //创建人物
        //这里人物的外貌与性别有关,因此直接传入3个参数即可,并且性别随机确定的,具体参见构造函数的部分
        Roal r1=new Roal("乔峰",100,'男');
        Roal r2=new Roal("鸠摩智",100,'男');

        //调用方法,展示人物信息
        r1.showRoalInfo();
        r2.showRoalInfo();

        //采用回合制,直到有一方血量为0才推退出
        while(true){
            r1.attack(r2);
            //当一方血量为0时结束
            if(r2.getBlood()==0){
                System.out.println(r1.getName()+"KO了"+r2.getName());break;}
            r2.attack(r1);
            if(r1.getBlood()==0){
                System.out.println(r2.getName()+"KO了"+r1.getName());break;}
        }
    }
}

package OOP;

import java.util.Random;

public class Roal {
    //人物有4个属性,都是私有的,需要通过调用方法才能访问
    private String name;
    private int blood;
    private char gender;
    private String face;

    //空参构造
    public Roal() {
    }
    //实参构造,只用输入3个参数
    public Roal(String name, int blood,char gender) {
        this.name = name;
        this.blood = blood;
        this.gender=gender;
        //外貌通过调用方法来确定,需要传入性别参数
        setFace(gender);
    }
    //get and set相关方法
    public String getName() {
        return name;
    }
    public int getBlood() {
        return blood;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setBlood(int blood) {
        this.blood = blood;
    }
    public char getGender() {return gender;}
    public void setGender(char gender) {this.gender = gender;}

    public String getFace() {
        return face;
    }
    //外貌的set方法有点不太一样,通过传入gender参数以及随机数来确定的
    public void setFace(char gender) {
        //此处为外貌相关描述字符串组
        String[] boyfaces = {"风流俊雅", "气宇轩昂", "相貌英俊", "五官端正", "相貌平平", "一塌糊涂", "面目狰狞"};
        String[] girlfaces = {"美奂绝伦", "沉鱼落雁", "婷婷玉立", "身材娇好", "相貌平平", "相貌简陋", "惨不忍睹"};

        Random r = new Random();
        //长相是随机的,调用了随机数方法
        if (gender == '男') {
            //产生的index与数组的长度一致,且都从0开始,直接赋值即可,下同
            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 void attack(Roal roal) {
        //attack 攻击描述:

        String[] attacks_desc = {
                "%s使出了一招【背心钉】,转到对方的身后,一掌向%s背心的灵台穴拍去。",
                "%s使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向%s。",
                "%s大喝一声,身形下伏,一招【劈雷坠地】,捶向%s双腿。",
                "%s运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向%s。",
                "%s阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向%s。",
                "%s上步抢身,招中套招,一招【劈挂连环】,连环攻向%s。"
        };
        //通过随机数来产生随机的攻击方式
        Random r=new Random();
        int index=r.nextInt(attacks_desc.length);
        //前者为this.getName(),表示为方法的调用者,后者为roal.getName,是传入的参数
        System.out.printf(attacks_desc[index],this.getName(),roal.getName());

        //injured 受伤描述:
        String[] injureds_desc = {
                "结果%s退了半步,毫发无损",
                "结果给%s造成一处瘀伤",
                "结果一击命中,%s痛得弯下腰",
                "结果%s痛苦地闷哼了一声,显然受了点内伤",
                "结果%s摇摇晃晃,一跤摔倒在地",
                "结果%s脸色一下变得惨白,连退了好几步",
                "结果『轰』的一声,%s口中鲜血狂喷而出",
                "结果%s一声惨叫,像滩软泥般塌了下去"
        };


        //定义随机造成的伤害,为1-20点
        int hurt = r.nextInt(20) + 1;
        //修改被攻击者的血量
        int remainBlood = roal.getBlood() - hurt;
        //通过三元运算符,对血量为负的情况进行处理
        remainBlood = remainBlood < 0 ? 0 : remainBlood;
        roal.setBlood(remainBlood);

        //根据血量输出相应的受伤描述
        if(roal.getBlood()>90){
            System.out.printf(injureds_desc[0],roal.getName());
        }else if(roal.getBlood()>70){
            System.out.printf(injureds_desc[1],roal.getName());
        }else if(roal.getBlood()>50){
            System.out.printf(injureds_desc[2],roal.getName());
        }else if(roal.getBlood()>40){
            System.out.printf(injureds_desc[3],roal.getName());
        }else if(roal.getBlood()>30){
            System.out.printf(injureds_desc[4],roal.getName());
        }else if(roal.getBlood()>20){
            System.out.printf(injureds_desc[5],roal.getName());
        } else if(roal.getBlood()>10){
            System.out.printf(injureds_desc[6],roal.getName());
        }else{
            System.out.printf(injureds_desc[7],roal.getName());
        }
        //print在java中并不包含换行符,需要额外进行换行
        System.out.println("");

    }
    //对人物四个属性进行输出
    public void showRoalInfo(){
        System.out.println("人物信息:");
        System.out.println("姓名:"+getName());
        System.out.println("血量:"+getBlood());
        System.out.println("性别:"+getGender());
        System.out.println("外貌:"+getFace());
    }
}

输出结果:

人物信息:
姓名:乔峰
血量:100
性别:男
外貌:五官端正
人物信息:
姓名:鸠摩智
血量:100
性别:男
外貌:风流俊雅
乔峰阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向鸠摩智。结果给鸠摩智造成一处瘀伤
鸠摩智阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向乔峰。结果给乔峰造成一处瘀伤
乔峰运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向鸠摩智。结果给鸠摩智造成一处瘀伤
鸠摩智大喝一声,身形下伏,一招【劈雷坠地】,捶向乔峰双腿。结果一击命中,乔峰痛得弯下腰
乔峰大喝一声,身形下伏,一招【劈雷坠地】,捶向鸠摩智双腿。结果一击命中,鸠摩智痛得弯下腰
鸠摩智使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向乔峰。结果一击命中,乔峰痛得弯下腰
乔峰阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向鸠摩智。结果一击命中,鸠摩智痛得弯下腰
鸠摩智运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向乔峰。结果乔峰痛苦地闷哼了一声,显然受了点内伤
乔峰运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向鸠摩智。结果一击命中,鸠摩智痛得弯下腰
鸠摩智大喝一声,身形下伏,一招【劈雷坠地】,捶向乔峰双腿。结果乔峰脸色一下变得惨白,连退了好几步
乔峰使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向鸠摩智。结果鸠摩智痛苦地闷哼了一声,显然受了点内伤
鸠摩智使出了一招【背心钉】,转到对方的身后,一掌向乔峰背心的灵台穴拍去。结果『轰』的一声,乔峰口中鲜血狂喷而出
乔峰大喝一声,身形下伏,一招【劈雷坠地】,捶向鸠摩智双腿。结果鸠摩智痛苦地闷哼了一声,显然受了点内伤
鸠摩智使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向乔峰。结果乔峰一声惨叫,像滩软泥般塌了下去
乔峰上步抢身,招中套招,一招【劈挂连环】,连环攻向鸠摩智。结果鸠摩智摇摇晃晃,一跤摔倒在地
鸠摩智阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向乔峰。结果乔峰一声惨叫,像滩软泥般塌了下去
鸠摩智KO了乔峰
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
面向对象的随机森林代码通常由多个类组成,其中包括策树类、随机森林类和主程序类。下面是一个单的面向对象随机森林代码示例: 首先是决策树类(DecisionTree)的代码: ```python class DecisionTree: def __init__(self, max_depth=None): self.max_depth = max_depth def fit(self, X, y): # 决策树的训练过程 # ... def predict(self, X): # 决策树的预测过程 # ... ``` 接下来是随机森林类(RandomForest)的代码: ```python class RandomForest: def __init__(self, n_estimators=100, max_depth=None): self.n_estimators = n_estimators self.max_depth = max_depth self.trees = [] def fit(self, X, y): for _ in range(self.n_estimators): tree = DecisionTree(max_depth=self.max_depth) # 随机选择样本和特征进行训练 # ... tree.fit(X_sample, y_sample) self.trees.append(tree) def predict(self, X): predictions = [] for tree in self.trees: predictions.append(tree.predict(X)) # 综合所有决策树的预测结果 # ... return predictions ``` 最后是主程序类(Main)的代码: ```python class Main: def __init__(self): self.rf = RandomForest() def run(self): # 加载数据集 # ... # 划分训练集和测试集 # ... # 训练随机森林模型 self.rf.fit(X_train, y_train) # 预测测试集 predictions = self.rf.predict(X_test) # 计算准确率等评估指标 # ... ``` 这是一个简单的面向对象随机森林代码示例,其中决策树类(DecisionTree)用于构建单个决策树,随机森林类(RandomForest)用于构建多个决策树并进行集成预测,主程序类(Main)用于组织整个流程。具体的代码实现可能会根据不同的编程语言和库有所差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值