一、设计分析
在手机游戏“愤怒的小鸟中”,有多种角色。我们以主角小鸟为例。当弹弓拉到极限后,小鸟就会飞出去进行攻击,这说明,小鸟都有飞的行为,即一个方法fly()同时飞的行为都是一样的。同时,小鸟发射出来的时候都会叫,但明显的是每个小鸟的叫声是不一样的,我们通过设计接口来实现让不同的小鸟拥有不同的叫声。
并且,在这款游戏中,每个小鸟都是有他们独特的攻击方式的。结合这些特点我们可以考虑使用接口来实现,那么我们接下来就来实现这个小游戏吧!
二代码实现
1.定义鸟叫的接口
//定义鸟叫的接口
public interface AngryBird {
public void shout();//鸟叫的抽象方法
}
2.接下来确定接口的实现类。就是让各个鸟类实现接口,但这样的做法就是会导致代码冗余。实际的做法就是将各种鸟叫的方式作为接口的实现类。
定义类来描述“嗷嗷叫”、“喳喳叫”两种鸟叫的方式,并实现鸟叫的接口
package agb;
public class ZhaShout implements AngryBird {
@Override
public void shout() {
System.out.println("渣渣__");
}
}
package agb;
public class AoShut implements AngryBird {
@Override
public void shout() {
System.out.println("┗|`O′|┛ 嗷~~__");
}
}
3.在鸟的抽象类中将接口作为属性,通过属性调用该接口的方法
package agb;
public abstract class Bird {
AngryBird shout_ability;
public Bird(AngryBird shout_ability){
this.shout_ability=shout_ability;
}
public void shout(){
shout_ability.shout();//调用接口的方法
}
public void fly(){
System.out.println("弹射飞");
}
public abstract void attack();
}
4.写出几种鸟类的子类来继承鸟类来输出独有的方法
炸弹鸟
package agb;
public class BombBird extends Bird{
public BombBird(AngryBird shout_ability) {
super(shout_ability);
}
//重写攻击方法
@Override
public void attack() {
System.out.println("炸弹攻击");
}
}
分裂鸟
package agb;
public class SplitBird extends Bird{
public SplitBird(AngryBird shout_ability) {
super(shout_ability);
}
@Override
public void attack() {
System.out.println("分裂攻击");
}
}
5.建立测试类,通过多态来输出各种方法
package agb;
public class Test {
public static void main(String[] args) {
AngryBird ao_shout = new AoShut();
AngryBird zha_shout = new ZhaShout();
Bird bomb =new BombBird(zha_shout);
Bird split = new SplitBird(ao_shout);
bomb.fly();
bomb.attack();
bomb.shout();
System.out.println("*********************");
split.fly();
split.attack();
split.fly();
split.shout();
}
}
输出结果:
弹射飞
炸弹攻击
渣渣__
*********************
弹射飞
分裂攻击
弹射飞
┗|`O′|┛ 嗷~~__
ok。这样,一个简单的愤怒的小鸟的游戏就能够通过控制台输出了,大家也可以试一试将代码改变一下,使得游戏变得更加有趣!