两个阵营互打的回合制游戏

这篇博客介绍了一个两个阵营互打的回合制游戏设计,包括游戏生物基类Sprite及其四个子类:Hero、Archer、Goblin和GoblinHunter。每个角色具有共同属性如名字、等级、生命值等,并实现了IFighter接口。游戏采用回合制战斗,角色按攻速轮流攻击,有机会触发暴击。文章还涉及阵营、近远程和角色状态的枚举类,以及战场类和测试部分。欢迎读者提供反馈和改进建议。
摘要由CSDN通过智能技术生成

两个阵营互打的回合制游戏

  1. 定义一个游戏生物基类(Sprite)
  2. 下面有4种继承:英雄(Hero),远程-弓箭手(Archer),哥布林(Goblin),远程-哥布林投矛手(GoblinHunter)
  3. 共有的属性:名字(name),等级(lv),生命(hp),攻击力(atk),防御力(defense),攻速(speed),暴击(cri率),立场(Stand)对应(红方=Red,蓝方Blue),远程、近程(range)对应(近战=Near,远程=Far)
  4. 把4个角色都定义接口叫IFighter
  5. 加入角色可以进行自动战斗,攻速为每多少回合攻击一次,每回合都有机会产生暴击(暴击=伤害*2),战斗采用回合制,每个回合角色都有一次攻击机会,对打优先打对方近战类,当近战类死了再打远程
  6. 设定X回合,战斗过程输出文字战报

1.写一个基类也就是父类Sprite

public abstract class Sprite {
   

    protected String name;
    protected int lv;
    protected int hp;
    protected int maxhp;
    protected int atk;
    protected int defense;
    protected int speed;
    protected double cri;
    protected StandEnum stand;
    protected RangeEnum range;
    protected StatusEnum status;
    protected int count = 0;

    public Sprite(String name, int lv, int maxhp, int atk, int defense, int speed, double cri, StandEnum stand, RangeEnum range) {
   
        this.name = name;
        this.lv = lv;
        this.maxhp = maxhp;
        this.hp = this.maxhp;
        this.atk = atk;
        this.defense = defense;
        this.speed = speed;
        this.cri = cri;
        this.stand = stand;
        this.range = range;
        this.status = StatusEnum.NORMAL;
    }
    
    /**
     *战斗的处理函数
     */
    public void fighting(IFighter enemy) {
   
        int damage = this.atk;//伤害值
        boolean isCritical = Math.random() < cri;//比随机数大,说明暴击生效。比随机数小,说明暴击没生效
        enemy.damage(damage, isCritical);//将伤害值和暴击率传入伤害计算函数内
        this.status = StatusEnum.CD;//攻击完后,进入CD状态,无法攻击
    }

    /**
     *计算伤害值
     */
    public int damage(int damage, boolean isCritical) {
   //讲伤害值和暴击传入
        damage = damage - defense;//伤害值减去防御值得到最终伤害
        damage = damage > 0 ? damage : 0;//伤害值大于0时,等于伤害值,伤害值不大于0时,等于0
        if (isCritical) {
   //暴击生效
            damage *= 2;//暴击值
            System.out.println(name + "被暴击");
        }
        hp = hp - damage;//被攻击后,剩余生命值
        if (hp <= 0) {
   
            hp = 0;
            this.status = StatusEnum.DIE;//当血量小于0时,属于死亡状态
            System.out.println(name + "阵亡");
        }
        System.out.println("[" + name + "]受到伤害:" + damage + " (" + hp + "/
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值