结构与核心
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) + "点血量!");
}
}