JAVA练手小游戏——多线程知识点小练习——文字版勇者斗恶龙

目录

游戏设定

代码实现

DragonFightGame类

DragonFightGameDemo类

DragonFightGameThread类

实机演示


游戏设定

   游戏的目的是扮演传说中的勇者,打倒妄图控制世界的龙王,顺道救出被掳走的公主。完成游戏。

    游戏会随机存在四种操作:勇者攻击,恶龙攻击,勇者吃掉血药生命值恢复,勇者吃掉毒药攻击力提升,如果勇者在限定的回合内击败恶龙且不被恶龙击败,讨伐成功则可成功救出公主。讨伐失败则公主被恶龙掳走。

代码实现

DragonFightGame类

public class DragonFightGame {
    public static final int MAX_ROUND = 10;
    public  static final int MAX_HP = 100;
    public  static final int MAX_ATTACK = 20;
    public  static final int HEAL_HP = 30;
    public  static final int INCREASE_ATTACK = 5;


    public  int round = 1;
    public  int dragonHp = MAX_HP;
    public  int heroHp = MAX_HP;
    public  int heroAttack = MAX_ATTACK;
    public  String dragonName;
    public  String heroName;

    public DragonFightGame(String dragonName, String heroName) {
        this.dragonName = dragonName;
        this.heroName = heroName;
    }

    public synchronized void dragonAttack() {
        if (round > MAX_ROUND) {
            return;
        }
        int damage = (int) (Math.random() * MAX_ATTACK);
        heroHp -= damage;
        System.out.println(dragonName + "对" + heroName + "造成了" + damage + "点伤害");
        if (heroHp <= 0) {
            System.out.println(heroName + "被" + dragonName + "击败了");
            return;
        }
        round++;
    }

    public synchronized void heroAttack() {
        if (round > MAX_ROUND) {
            return;
        }
        int damage = heroAttack;
        dragonHp -= damage;
        System.out.println(heroName + "对" + dragonName + "造成了" + damage + "点伤害");
        if (dragonHp <= 0) {
            System.out.println(dragonName + "被" + heroName + "击败了");
            return;
        }
        round++;
    }

    public synchronized void useHeal() {
        if (round > MAX_ROUND) {
            return;
        }
        heroHp += HEAL_HP;
        if (heroHp > MAX_HP) {
            heroHp = MAX_HP;
        }
        System.out.println(heroName + "使用了恢复道具,恢复了" + HEAL_HP + "点生命值");
        round++;
    }

    public synchronized void useAttackBoost() {
        if (round > MAX_ROUND) {
            return;
        }
        heroAttack += INCREASE_ATTACK;
        System.out.println(heroName + "使用了攻击力提升道具,攻击力增加了" + INCREASE_ATTACK);
        round++;
    }
}

DragonFightGameDemo类

public class DragonFightGameDemo {
    public static void main(String[] args) {
        DragonFightGame game = new DragonFightGame("黑龙", "勇者");
        DragonFightGameThread dragonThread = new DragonFightGameThread(game, "黑龙线程");
        DragonFightGameThread heroThread = new DragonFightGameThread(game, "勇者线程");
        dragonThread.start();
        heroThread.start();
        while (game.round <= DragonFightGame.MAX_ROUND && game.dragonHp > 0 && game.heroHp > 0) {
            int action = (int) (Math.random() * 4);
            switch (action) {
                case 0:
                    game.dragonAttack();
                    break;
                case 1:
                    game.heroAttack();
                    break;
                case 2:
                    game.useHeal();
                    break;
                case 3:
                    game.useAttackBoost();
                    break;
            }
        }
        if(game.dragonHp<=0){
            System.out.println();
            System.out.println("勇者讨伐成功\n");
        }
        else{
            System.out.println();
            System.out.println("勇者讨伐失败\n");
        }
    }

}

DragonFightGameThread类

public class DragonFightGameThread extends Thread {
    private DragonFightGame game;
    private String name;

    public DragonFightGameThread(DragonFightGame game, String name) {
        this.game = game;
        this.name = name;
    }

    @Override
    public void run() {
        while (game.round <= DragonFightGame.MAX_ROUND && game.dragonHp > 0 && game.heroHp > 0) {
            int action = (int) (Math.random() * 4);
            switch (action) {
                case 0:
                    game.dragonAttack();
                    break;
                case 1:
                    game.heroAttack();
                    break;
                case 2:
                    game.useHeal();
                    break;
                case 3:
                    game.useAttackBoost();
                    break;
            }
        }
        System.out.println(name + "结束了游戏");
    }
}

实机演示

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值