模拟射击文字类游戏
题目:一个简单的对象设计实验:开枪射击。
思路:对象有人、枪、弹夹,
人是用枪发射弹夹中;子弹在弹夹中,弹夹在枪中,枪在人手中。
因为题目中的人、枪、弹夹并没有给予诸如“子弹的型号、大小等或者枪的类型又或者是弹夹的形状等”详细的说明,所以这里的人、枪、弹夹都是抽象的,忽略掉了子弹和弹夹和枪,它们之间存在的兼容性问题,也就是从广义上讲的“弹夹装子弹,手枪发射弹夹中的子弹”。
那么,在建立的工程中创造四个类,分别是:Main、People、Gun、Bullet_Box
Main主要用于执行程序(不多说)
People(人类)
Gun(枪类)
Bullet_Box(弹夹类)
这里并不需要单独给子弹抽象出一个类,以为子弹仅仅需要被发射就可以了,暂时不需要考虑子弹的伤害等特性,所以可以把子弹作为弹夹类中的成员变量存在着,并且在弹夹类中定义一个方法来查看子弹数量(这也比较符合实际情况)
源码:
1 public class Bullet_Box { // 弹夹类 2 private int bullet_count; // 子弹数量 3 4 public Bullet_Box() { // 构造方法 5 this.bullet_count = 0; // 初始化子弹数量 6 } 7 8 public void Add_bullet(int bullet_count) { // 添加子弹方法 9 this.bullet_count = bullet_count; 10 } 11 12 public int See_bullet() { // 查看子弹方法 13 return this.bullet_count; 14 } 15 }
1 public class Gun { // 枪类 2 private Bullet_Box bullet_Box; 3 4 public Gun(Bullet_Box bullet_box) { // 构造方法 5 this.bullet_Box = bullet_box; 6 } 7 8 public void Shoot() { // 射击方法 9 if (this.bullet_Box.See_bullet() > 0) { 10 this.bullet_Box.Add_bullet(this.bullet_Box.See_bullet() - 1); 11 System.out.println("砰—— " + "当前子弹数量: " + this.bullet_Box.See_bullet() + " 发"); 12 } else { 13 System.out.println("子弹数量不足!"); 14 } 15 } 16 }
1 public class People { // 人类 2 private Gun gun; 3 4 public People(Gun gun) { // 构造方法 5 this.gun = gun; 6 } 7 8 public void StartFire() { // 开枪 9 this.gun.Shoot(); 10 } 11 12 }
1 public class Main { 2 public static void main(String[] args) throws InterruptedException { 3 Bullet_Box bullet_Box = new Bullet_Box(); 4 bullet_Box.Add_bullet(5); 5 Gun gun = new Gun(bullet_Box); 6 People people = new People(gun); 7 8 while (true) { 9 people.StartFire(); 10 Thread.sleep(1000); 11 } 12 } 13 }
运行结果:
动态效果:
【敬畏能量 敬畏自然】