Java控制台游戏~600行代码实现打怪小游戏

本文介绍了一个使用Java编写的控制台打怪小游戏,游戏包含英雄属性、怪物属性、装备技能等元素,并通过随机事件增加趣味性。作者详细阐述了实现过程,包括创建各类角色、定义属性、实现攻击技能,以及编写循环和随机事件。文章还展示了游戏的效果预览和部分关键代码。
摘要由CSDN通过智能技术生成

Java控制台游戏~600行代码实现打怪小游戏(多图预警)

一,先放个启动界面(一些英雄,怪物技能介绍跟装备属性都写在里边):
在这里插入图片描述在这里插入图片描述

二,在这个简单的小游戏里,你可以体验到:

1.打怪:

在这里插入图片描述

2.随机玩法寻宝:
在这里插入图片描述在这里插入图片描述
3.英雄/Boos怪物/装备技能:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述and其他
三,实现过程:
1.创建Hero类定义英雄属性

String name;//名称
    int hp;//生命值
    int MaxHp;//最大生命值
    int attackNum;//攻击力
    int skillType;//技能标号
    String skill;//技能描述
    int skillTimes;//技能可用次数
    boolean enable;//是否可用
    boolean Luckly;//幸运属性(曹操专属)
    String skillName;//技能名
    int weaponSkill;//武器技能标号(寒冰剑专属)
    boolean zqUsed;//再起是否可用(孟获专属)

2.创建Monster类定义怪物属性:

String name;//名称
    int hp;//生命值
    int MaxHp;//最大生命值
    int attackNum;//攻击力
    int skillType;//技能标号
    String skill;//技能描述
    String skillName;//技能名
    int skillTimes;//技能可用次数
    boolean sfUsed;//神愤是否可用(神鬼无双吕布专属)

3,创建Weapon类定义装备属性:

String name;//名称
    int damage;//伤害
    int addHp;//血量增值
    int addVihp;//村庄血量增值
    String skill;//技能描述
    String skillName;//技能名
    int skillType;//技能标号

4,创建Village类定义村庄属性:

int hp;

5,Hero类,Monster类,Weapon类分别实现相关攻击和技能方法

//英雄攻击方法
    public void attack(int hattackNum, Monster mo, Hero he, Weapon[] arrWeapon, Village vi, Monster[] arrMonster){
   
        Scanner sc = new Scanner(System.in);
        Random r = new Random();
        if (he.weaponSkill!=0){
   //不为默认值0则说明该英雄被拥有技能的武器赋过值(weaponType),则执行该武器技能(weaponSkill);
            switch (he.weaponSkill){
   
                case 1:
                    System.out.println("您是否发动"+arrWeapon[4].name+"技能【"+arrWeapon[4].skill+"】?(键入“Q”发动技能,或按回车取消)");
                    String w = sc.nextLine();
                    int addVhp;
                    if ("Q".equals(w) || "q".equals(w)) {
   //执行技能
                        if ((attackNum/2)>50){
   
                            addVhp=50;
                        }else {
   
                            addVhp=(attackNum/2);
                        }
                        vi.hp=vi.hp+addVhp;
                        System.out.println("您取消了伤害并为村庄回复"+(he.Luckly==false? addVhp:addVhp/2)+"点生命值");//判断是否触发曹操技能
                        System.out.println("!!!现在村庄的生命值是"+vi.hp);
                    } else {
   
                        mo.hp = mo.hp - hattackNum;
                        System.out.println(mo.name + "受到" + hattackNum + "点伤害,血量为" + mo.hp + "...");
                        if (mo.skillType==1){
   //神吕布技能时机
                            mo.skills(mo, arrMonster);
                            int damage = r.nextInt(51);
                            he.hp=he.hp-damage;
                            System.out.println(he.name + "受到" + damage + "点伤害,血量为" + he.hp + "...");
                        }
                    }
            }
        }else {
   
            mo.hp = mo.hp - hattackNum;
            System.out.println(mo.name + "受到" + hattackNum + "点伤害,血量为" + mo.hp + "...");
            if (mo.skillType==1){
   //神吕布技能时机
                mo.skills(mo, arrMonster);
                int damage = r.nextInt(51);
                he.hp=he.hp-damage;
                System.out.println(he.name + "受到" + damage + "点伤害,血量为" + he.hp + "...");
            }
        }
    }

    //英雄技能方法
    public void skills(Hero he,Monster mo){
   
        switch (skillType){
   
            case 1:
                System.out.println(he.name+"发动了技能"+he.skillName);
                System.out.println(he.skill);
                int AddAttack=((mo.MaxHp-mo.hp)/100)*50;
                mo.hp=mo.hp-(AddAttack+300);
                System.out.println(mo.name+"受到"+(AddAttack+300)+"点伤害,血量为"+mo.hp+"...");
                he.skillTimes=0;//技能次数用尽
                break;
            case 2:
                System.out.println(he.name+"发动了技能"+he.skillName);
                System.out.println(he.skill);
                int Attack= (int)((he.MaxHp)*0.4);
                mo.hp=mo.hp-Attack;
                he.hp=he.hp-(Attack/2);
                System.out.println("黄忠扣除了"+(Attack/2)+"点生命值,血量为"+he.hp+"...");
                System.out.println(mo.name+"受到"+Attack+"点伤害,血量为"+mo.hp+"...");
                he.skillTimes--;//技能次数减一
                break;
            case 3:
                System.out.println(he.name+"发动了技能"+he.skillName);
                System.out.println(he.skill);
                break;
            case 4:
                System.out.println(he.name+"发动了技能"+he.skillName);
                System.out.println(he.skill);
                he.hp=500;
                he.attackNum=120;
                he.zqUsed=false;//再起技能用尽
                break;
        }

6,定义Play类写入循环实现回合制

int num = 1;//回合数
        while(true) {
   
            if (mo.hp<=0&&mo.sfUsed==false) {
   
                System.out.println("您的英雄" + he.name + "战胜了怪物,成功守卫村庄!!!");
                isWin = true;
                break;
            }else if (mo.hp<=0&&mo.sfUsed==true){
   //神愤技能时机
                mo.skills(mo, arrMonster);
                System.out.println("您的对手"+mo.name+"已替换成"+arrMonster[2].name);
                mo.sfUsed=false;
                mo=arrMonster[2];
            }
            if(vi.hp<=0||he.hp<=0){
   
                break;
            }else{
   
                if (he.hp > 0 && vi.hp > 0||he.zqUsed==true) {
   
                    System.out.println("*******************************************************************************");
                    System.out.println("第" + num + "回合");

7,循环体内调用相关攻击,技能方法

public void skills(Hero he,Monster mo){
   
        switch (skillType){
   
            case 1:
                System.out.println(he.name+"发动了技能"+he.skillName);
                System.out.println(he.skill);
                int AddAttack=((mo.MaxHp-mo.hp)/100)*50;
                mo.hp=mo.hp-(AddAttack+300);
                System.out.println(mo.name+"受到"+(AddAttack+300
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值