Java模拟植物大战僵尸(交互)

结构与核心

1、结构较为简单,直接建立三个类

  • 植物类
  • 测试类
  • 僵尸类

即可(如下图)

2、核心:通过持有对方对象的引用作为自身成员变量来实现交互

在这里插入图片描述

Test类
package com.cskaoyan.plantVSzombie;

/*
在java的实际开发中
通过持有对方对象的引用作为自身成员变量
实现交互、完成功能
* */
public class Test {
    public static void main(String[] args) {
        //分别创建植物和僵尸的对象
        Plant p = new Plant("豌豆射手",1000,200,300);
        Zombie z = new Zombie("铁桶僵尸",1000,300,400);

        //给持有的引用赋值
        //植物类里面的僵尸 --> z
        p.plantZ = z;
        //僵尸类里面的植物 --> p
        z.zombieP = p;

        System.out.println("Game Start!呜呜呜,僵尸来了,歪比巴布!");

        //僵尸移动  植物攻击 僵尸被攻击
        z.move();;
        p.attack();
        z.beAttacked();

        System.out.println("经过长途跋涉,僵尸接近了植物!");

        //僵尸接近植物 僵尸攻击 植物被攻击
        z.attack();
        p.beAttacked();

        System.out.println("a few years later...");
        System.out.println("植物牺牲了,小推车也牺牲了,僵尸攻破了你的后花园!");

        z.eat();
        System.out.println("Game Over! GG");
    }
}
僵尸类
package com.cskaoyan.plantVSzombie;

/*
 *  植物大战僵尸
 *  僵尸类
 *
 *  */
public class Zombie {
    //成员变量
    //僵尸名
    String name;
    //血量
    int hp;
    //破坏力
    int damageValue;
    //移动速度
    int speed;

    //在僵尸类中持有植物对象的引用作为自身成员变量
    //作用:交互
    Plant zombieP;

    //构造器 用于在"出厂"的时候就给对象赋值
    public Zombie(String name, int hp, int damageValue, int speed) {
        this.name = name;
        this.hp = hp;
        this.damageValue = damageValue;
        this.speed = speed;
        this.zombieP = zombieP;
    }

    //僵尸可以移动
    public void move(){
        System.out.println(name + "正在以" + speed + "的速度向" + zombieP.name + "移动");
        //等价写法 上面的写法省略了this关键字
        //System.out.println(this.name + "正在以" + this.speed + "的速度向" + zombieP.name + "移动");
    }

    //僵尸可以攻击植物
    public void attack(){
        System.out.println(name + "正在攻击" + zombieP.name);
        //等价写法 上面的写法省略了this关键字
        //System.out.println(this.name + "正在攻击" + zombieP.name);
    }

    //僵尸可以被攻击
    public void beAttacked(){
        System.out.println(name + "正在被" + zombieP.name + "攻击,剩余" + (hp - zombieP.damageValue) + "点血量!");
        //System.out.println(this.name + "正在被" + zombieP.name + "攻击,剩余" + (this.hp - zombieP.damageValue) + "点血量!");
    }

    //僵尸打败植物之后,可以吃掉你
    public void eat(){
        System.out.println(name + "吃掉了你的脑子,真香~");
        //System.out.println(this.name + "吃掉了你的脑子,真香~");
    }
}
植物类
package com.cskaoyan.plantVSzombie;

/*
  植物大战僵尸
  植物类
 */
public class Plant {
    //成员变量
    //如"豌豆射手"
    String name;
    //血量
    int hp;
    //破坏力
    int damageValue;
    //需要的阳光
    int price;

    //持有僵尸对象的引用作为自身成员变量
    //成员变量如果是引用数据类型,存的是对象的引用
    Zombie plantZ;

    //构造器 用于在"出厂"的时候就给对象赋值
    public Plant(String name, int hp, int damageValue, int price) {
        this.name = name;
        this.hp = hp;
        this.damageValue = damageValue;
        this.price = price;
        this.plantZ = plantZ;
    }

    //植物可以攻击
    public void attack(){
        System.out.println(name + "正在攻击" + plantZ.name);
        //等价写法 上面的写法省略了this关键字
        //System.out.println(this.name + "正在攻击" + plantZ.name);
    }

    //植物可以被攻击
    public void beAttacked(){
        System.out.println(name + "正在被" + plantZ.name + "攻击,剩余" + (hp - plantZ.damageValue) + "点血量!");
        //等价写法 上面的写法省略了this关键字
        //System.out.println(this.name + "正在被" + plantZ.name + "攻击,剩余" + (this.hp - plantZ.damageValue) + "点血量!");
    }
}
打印结果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值