JAVA简易对战游戏

目标:战斗系统完善,只需录入战斗的俩个角色即可开始战斗:

  • 1.对战时血量清零战斗结束,公布获胜角色。
  • 2.角色为单独模板,有自己的技能,与技能消耗。有自己的属性
  • 3.战斗系统只需录入双方角色即可
  • 4.玩家对战时,如果蓝量不足,系统自动转换为普通攻击

一.角色通用模板设计

                 父类:属性为:角色姓名,血量与蓝量。设立攻击抽象方法与技能抽象方法。



/**
 * @Title: FightingGame
 * @Author itmei
 * @Package com.mumu.dome712
 * @Date 2024/7/12 15:43
 * @description: 格斗游戏里的人物类 
 */
public abstract class Role {
    //游戏人物名
    private String name;
    //血量
    private int hp = 100;
    //蓝条
    private int blueDose =100;

    public int getBlueDose() {
        return blueDose;
    }

    public void setBlueDose(int blueDose) {
        this.blueDose = blueDose;
    }

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

    public String getName() {
        return name;
    }

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

    public int getHp() {
        return hp;
    }

    public void setHp(int hp) {
        this.hp = hp;
    }

    public abstract int attack(int nmb);

    public abstract int skill(int hp,int a);
}
1.乔峰 角色设计

继承角色模板,设置自己的攻击属性,重写父类攻击方法,与技能方法。

由于游戏有几率暴击,所以设置了普通攻击能产生暴击,产生暴击的方式可以通过随机数的放入随机产生暴击。

通过传入蓝量从而可以使用技能                                                                      、


/**
 * @Title: QiaoFeng
 * @Author itmei
 * @Package com.mumu.dome712.zuoye1
 * @Date 2024/7/12 15:52
 * @description: 游戏人物之一乔峰
 */
public class QiaoFeng extends Role {
    int  atk =6;

    public QiaoFeng(String name, int hp, int blueDose) {
        super(name, hp, blueDose);
    }

    /**
     *
     * @param maht 随机数放入,如果是1则可以暴击
     * @return
     */
    @Override
    public int attack(int maht) {
        int atk1 = this.atk;
        if (maht==1){
            System.out.println("乔峰开始攻击了");
            System.out.println("乔峰攻击出现了暴击,给予对手造成了"+atk1*2+"点伤害。");
            return (atk1*2);
        }else {
            System.out.println("乔峰开始攻击了,给予对手造成了"+atk1+"点伤害。");
            return atk1;
        }
    }

    @Override
    public int skill(int mp,int a) {
        int atk1=this.atk;
        System.out.println("乔峰消耗了50点内力。使用了自己的技能:降龙十八掌,给对手造成了"+atk1*3+"的伤害。");
        return atk1*3;
    }


}
     2.鸠摩智 角色设计

继承角色模板,设置自己的攻击属性,重写父类攻击方法,与技能方法。

由于游戏有几率暴击,所以设置了普通攻击能产生暴击,产生暴击的方式可以通过随机数的放入随机产生暴击。

通过传入蓝量从而可以使用技能

/**
 * @Title: JiuMoZhi
 * @Author itmei
 * @Package com.mumu.dome712.zuoye1
 * @Date 2024/7/12 16:17
 * @description: 游戏人物2-鸠摩智
 */
public class JiuMoZhi extends Role {
    int atk = 4;

    public JiuMoZhi(String name, int hp, int blueDose) {
        super(name, hp, blueDose);
        this.atk = atk;
    }

    /**
     *
     * @param math 随机数放入,如果是1或2则可以暴击
     * @return
     */
    @Override
    public int attack(int math) {
        int atk1 = this.atk;
        if (math == 1 || math == 2) {
            System.out.println("鸠摩智开始攻击了");
            System.out.println("鸠摩智攻击出现了暴击,给予对手造成了" + atk1 * 2 + "点伤害。");
            return atk1 * 2;
        } else {
            System.out.println("鸠摩智开始攻击了,给予对手造成了" + atk1 + "点伤害。");
            return atk1;
        }
    }

    @Override
    public int skill(int mp, int a) {
        int atk1 = this.atk;
        System.out.println("鸠摩智消耗了50点内力。使用了自己的技能:火焰刀,给对手造成了" + atk1 * 3 + "的伤害。");
        return atk1 * 3;
    }
}

 二.战斗系统设计

     1.攻击方式的选择
/**
     *
     * @param character 输入对象,判断名字
     *   选择攻击方式的方法
     */
    public void say(Role character) {
        System.out.println("请选择" + character.getName() + "的攻击方式。");
        System.out.println("1.普通攻击。");
        System.out.println("2.使用技能。");
    }
   2.战斗系统综合性设计   
战斗判断逻辑:
  攻击逻辑为回合制:  当一方攻击完毕后,另一方开始攻击,不断循环:一方血量归零则游戏结   束,即循环结束
  血量是否为0: 

血量为0或小于0:宣布获胜角色,结束此程序

血量大于0:选择攻击方式:普通攻击或放技能

蓝量与回蓝判断:

当使用普通攻击时,判断角色此刻回蓝有没有超过回蓝上限,如果超过则自动回复到最大蓝量 

如果没有超过,则正常回蓝。   

 使用技能时:先判断蓝量是否足够,如果足够则正常放技能。且回蓝正常     

 如果不足够:则调用普工攻击方法,正常回蓝。   

/**
     *
     * @param character1 角色1
     * @param character2 角色2
     */
    public void Battle(Role character1, Role character2) {
        Random random = new Random();
        Scanner input = new Scanner(System.in);
        //乔峰的血量和蓝量
        int hp1 = character1.getHp();
        int mp1 = character1.getBlueDose();
        //鸠摩智的血量和蓝量
        int hp2 = character2.getHp();
        int mp2 = character2.getBlueDose();
        //乔峰每回合能增加的蓝量
        int addmp1 = 15;
        //鸠摩智每回合能增加的蓝量
        int addmp2 = 20;

        while (hp1 > 0 && hp2 > 0) {
            //定义俩个随机数,为随机暴击的数
            int math = random.nextInt(10);
            int math2 = random.nextInt(10);

            //乔峰开始攻击,选择攻击方式
            this.say(character1);
            //输入1.2来选择攻击方式
            int nmb = input.nextInt();
            System.out.println("乔峰开始攻击了");
            //用if判断是使用普通攻击还是技能
            if (nmb == 1) {
                //攻击到鸠摩智,鸠摩智血量下降
                hp2 = hp2 - character1.attack(math);
                //每回合自动回蓝,判断乔峰的蓝量有没有超过蓝量上限。
                if (mp1 > 0 && mp1 < 85) {
                    mp1 = mp1 + 15;
                } else {
                    mp1 = character1.getBlueDose();
                }
                System.out.println("此时" + character2.getName() + "还剩" + hp2 + "的血量");
                System.out.println("此时" + character1.getName() + "还剩" + mp1 + "的蓝量");
                System.out.println("");
                //判断对手血量是否小于等于0
                if (hp2 <= 0) {
                    System.out.println(character1.getName() + "ko了" + character2.getName());
                    System.out.println("恭喜乔峰获得了胜利。");
                    System.exit(0);
                }
            } else if (nmb == 2) {
                //先判断乔峰此时蓝量是否够使用技能
                if (mp1 < 50) {
                    //乔峰蓝量不足,无法发动技能,自动普通攻击
                    System.out.println("对不起,内力不足,乔峰无法发动技能。");
                    character1.attack(math);
                    mp1 = mp1 + 15;
                    System.out.println("此时" + character2.getName() + "还剩" + hp2 + "的血量");
                    System.out.println("此时" + character1.getName() + "还剩" + mp1 + "的蓝量");
                    System.out.println("");
                    //判断对手血量是否小于等于0
                    if (hp2 <= 0) {
                        System.out.println(character1.getName() + "ko了" + character2.getName());
                        System.out.println("恭喜乔峰获得了胜利。");
                        break;
                    }
                } else {
                    //乔峰蓝量足以发动技能
                    //攻击到鸠摩智,鸠摩智血量下降
                    hp2 = hp2 - character1.skill(mp1, math);
                    //乔峰开始回蓝
                    mp1 = mp1 - 50 + 15;
                    System.out.println("此时" + character2.getName() + "还剩" + hp2 + "的血量");
                    System.out.println("此时" + character1.getName() + "还剩" + mp1 + "的蓝量");
                    System.out.println("");
                    //判断对手血量是否小于等于0
                    if (hp2 <= 0) {
                        System.out.println(character1.getName() + "ko了" + character2.getName());
                        System.out.println("恭喜乔峰获得了胜利。");
                        break;
                    }
                }
            }
            //鸠摩智开始攻击,选择攻击方式
            this.say(character2);
            //输入1.2来选择攻击方式
            int nmb2 = input.nextInt();
            System.out.println("鸠摩智开始攻击了");

            //用if判断是使用普通攻击还是技能
            if (nmb2 == 1) {
                //攻击到乔峰,乔峰智血量下降
                hp1 = hp1 - character1.attack(math2);
                //每回合自动回蓝,判断乔峰的蓝量有没有超过蓝量上限。
                if (mp1 > 0 && mp2 < 80) {
                    mp2 = mp2 + 20;
                } else {
                    mp2 = character2.getBlueDose();
                }
                System.out.println("此时" + character1.getName() + "还剩" + hp1 + "的血量");
                System.out.println("此时" + character2.getName() + "还剩" + mp2 + "的蓝量");
                System.out.println("");
                //判断对手血量是否小于等于0
                if (hp1 <= 0) {
                    System.out.println(character2.getName() + "ko了" + character1.getName());
                    System.out.println("恭喜鸠摩智获得了胜利。");
                    break;
                }
            } else if (nmb2 == 2) {
                //先判断鸠摩智此时蓝量是否够使用技能
                if (mp2 < 50) {
                    //鸠摩智蓝量不足,无法发动技能,自动普通攻击
                    System.out.println("对不起,内力不足,鸠摩智无法发动技能。");
                    character2.attack(math2);
                    mp2 = mp2 + 20;
                    System.out.println("此时" + character1.getName() + "还剩" + hp1 + "的血量");
                    System.out.println("此时" + character2.getName() + "还剩" + mp2 + "的蓝量");
                    System.out.println("");
                    //判断对手血量是否小于等于0
                    if (hp1 <= 0) {
                        System.out.println(character2.getName() + "ko了" + character1.getName());
                        System.out.println("恭喜鸠摩智获得了胜利。");
                        break;
                    }
                } else {
                    //鸠摩智蓝量足以发动技能
                    //攻击到乔峰,乔峰血量下降
                    hp1 = hp1 - character2.skill(mp1, math2);
                    //鸠摩智开始回蓝
                    mp2 = mp2 - 50 + 25;
                    System.out.println("此时" + character1.getName() + "还剩" + hp1 + "的血量");
                    System.out.println("此时" + character2.getName() + "还剩" + mp2 + "的蓝量");
                    System.out.println("");
                    //判断对手血量是否小于等于0
                    if (hp1 <= 0) {
                        System.out.println(character2.getName() + "ko了" + character1.getName());
                        System.out.println("恭喜鸠摩智获得了胜利。");
                        break;
                    }
                }
            }
        }
    }

  三.测试

  创建角色对象,调用战斗系统开始游玩。


import java.util.Random;

/**
 * @Title: Test
 * @Author itmei
 * @Package com.mumu.dome712.zuoye1
 * @Date 2024/7/12 16:44
 * @description: 测试类
 */
public class Test {
    public static void main(String[] args) {
        Random random =new Random();
        Role qiaofeng =new QiaoFeng("乔峰",100,100);
        Role jiumozhi =new JiuMoZhi("鸠摩智",100,100);
        CombatSystem combatSystem =new CombatSystem();
        System.out.println("游戏即将开始。");
        combatSystem.Battle(qiaofeng,jiumozhi);
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值