Java练习ArrayList的运用——勇者斗史莱姆

       现在有五个角色:勇者、法师、骑士、史莱姆、哥布林,他们各自具有的属性为姓名(name)、生命值(health)、基础攻击力(ATK)。

        首先,我们需要创建一个角色类(Role),为了方便日后查询角色状态,我们重写一些toString方法。当然,为了方便创建角色,构造方法别忘了写。

public class Role {
        private String name;//角色名字
        private double heath;//角色生命值
        private double ATK;//角色攻击力
        //重写方法方便打印对象信息
        @Override
        public String toString() {
            return "{" +
                    "name='" + name + '\'' +
                    ", heath=" + heath +
                    ", ATK=" + ATK +
                    '}';
        }
    //创建角色的构造方法
        public Role(String name, double heath, double ATK) {
            this.name = name;
            this.heath = heath;
            this.ATK = ATK;
        }

}

        接下来就是在测试类中创建五个角色,并将其加入对应的队伍中去。并写个遍历,分别输出玩家队伍和怪物队伍的信息。

 //创建角色
        Role braver = new Role("勇者", 100, 10);
        Role master = new Role("法师", 80, 15);
        Role knight = new Role("骑士", 300, 50);
        Role slim = new Role("史莱姆", 100, 5);
        Role goblin = new Role("哥布林", 200, 20);
        //创建玩家队伍
        ArrayList<Role> players = new ArrayList<>();
        //将角色添加进队伍
        players.add(braver);
        players.add(knight);//注意圣骑士的下标为1,下面要用
        players.add(master);//注意法师的下标为2,下面要用
        //输出玩家队伍信息
        System.out.println("全部角色有:");
        Iterator<Role> party = players.iterator();
        while (party.hasNext()) {
            System.out.println(party.next());
        }
        //创建怪物队伍
        ArrayList<Role> monster = new ArrayList<>();
        //将怪物塞进怪物队伍
        monster.add(slim);
        monster.add(goblin);
        //查看怪物信息
        System.out.println("怪物有:");
        Iterator<Role> monsterParty = monster.iterator();
        while (monsterParty.hasNext()) {
            System.out.println(monsterParty.next());
        }

        早期骑士加入勇者小队,作为教官训练勇者,但是骑士作为早期角色实力过于强悍,因此前期只要勇者和他的青梅竹马法师出发就行。作为美少女,法师觉得自己的名字不够可爱,于是将自己的队伍名称修改为魔法少女(队伍中一开始加入骑士,然后删除骑士角色。将队伍中法师元素的替换为修改为魔法少女元素)

//删除玩家队伍中下标为1的角色(圣骑士被踢了)
        players.remove(1);
//创建一个对象,用于替换之前的法师
        Role maHou = new Role("魔法少女", 80, 15);
//将下标为1的元素替换成maHou,因为骑士已经被踢出队伍,所以法师的下标为1
        players.set(1,maHou);
//打印现有队伍信息(这里用foreach进行遍历,之前都是使用迭代器)
        System.out.println("队伍中的角色有:");
        for (Role player : players) {
            System.out.println(player);
        }

        史莱姆和哥布林是好朋友,经常一起组队玩耍,修修哥布林式建筑。可有一天,哥布林突然不见了,史莱姆便踏上了寻找哥布林的旅途。如果不出意外的话,意外发生了,史莱姆遇到了勇者小队。(将史莱姆、哥布林加入怪物队伍,然后删除哥布林)

//删除怪物队伍中 goblin 角色(勇者击败的第一个怪物必须是史莱姆)
        monster.remove(goblin);
//遍历输出现有的怪物队伍信息
        System.out.println("遇到的怪物有:");
        for (Role i : monster) {
            System.out.println(i);
        }

        勇者小队和史莱姆相遇了!战斗开始!这里战斗系统我们这样设计:玩家小队先手攻击,小队中的每个角色的攻击对象为怪物小队中的随机一个,怪物小队后手攻击,攻击对象同样为玩家小队中的随机一个,玩家队伍中任意角色阵亡或史莱姆死亡,战斗结束。

        我们可以在测试类里,写一个队伍中角色轮流攻击另外一个队伍中的角色的方法:

    // 队伍对队伍的攻击
    public static void attack(ArrayList<Role> Roles, ArrayList<Role> DecRoles) {
        Iterator<Role> party = Roles.iterator();//创建迭代器,用于遍历
        while (party.hasNext()) {
            //随机一个数字,区间为被攻击队伍的人数。随机数决定攻击队伍中的角色
            int pIndex = new Random().nextInt(DecRoles.size());
            //存储遍历到的元素
            Role tempR = party.next();
            //输出攻击信息
            System.out.println(tempR.name + "攻击了" + DecRoles.get(pIndex).name);
            //get()方法获取对应下标的元素,然后修改被攻击对象的生命值
            DecRoles.get(pIndex).heath -= tempR.ATK;
        }
    }

        攻击方法写好了,下面就是 勇者大战史莱姆了。

//战斗开始
                             
//创建测试类对象,方便调用attack()方法

        SetMap setMap = new SetMap();

//战斗循环到有一方角色阵亡为止

        while (true) {

            //玩家队伍首先发起攻击

            setMap.attack(players, monster);

            //检测怪物是否存活,如果死亡,战斗结束,玩家获胜

            if (slim.heath <= 0) {
                System.out.println("史莱姆被击败了!");
                break;
            }

            //怪物对玩家进行反击

            setMap.attack(monster, players);

            //检测玩家是否存活,如果有角色死亡,游戏结束

            if (braver.heath <= 0 || master.heath <= 0) {
                System.out.println("游戏角色死亡!游戏结束!");
                break;
            }
           
        }

以上,就是勇者大战史莱姆的全部内容了,即用ArrayList实现增删查改功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值