话说有一个叫IGame的游戏公司,正在开发一款ARPG游戏(动作&角色扮演类游戏,如魔兽世界、梦幻西游这一类的游戏)。一般这类游戏都有一个基本的功能,就是打怪(玩家攻击怪物,借此获得经验、虚拟货币和虚拟装备),并且根据玩家角色所装备的武器不同,攻击效果也不同。这天,IGame公司的开发小组正在开会对打怪功能中的某一个功能点如何实现进行讨论,他们面前的大屏幕上是这样一份需求描述的ppt
创建怪物
package com.lx.test;
/**
* 怪物类
* @author Administrator
*
*/
public class GuaiWu {
//定义一个保存怪物名称的变量
private String gw_name;
//定义一个保存怪物血量的变量
private int gw_hp;
public GuaiWu() {}
public GuaiWu(String gw_name,int gw_hp) {
this.gw_name=gw_name;
this.gw_hp=gw_hp;
}
public String getGw_name() {
return gw_name;
}
public void setGw_name(String gw_name) {
this.gw_name = gw_name;
}
public int getGw_hp() {
return gw_hp;
}
public void setGw_hp(int gw_hp) {
this.gw_hp = gw_hp;
}
/**
* 怪物自身的掉血操作
* @param hp
*/
public void diaoxue(int hp) {
while(true) {
//判断怪物的死活
if(this.gw_hp<=0) {
System.out.println("怪物-"+this.gw_name+",已经死亡!");
return;
}
this.gw_hp=this.gw_hp-hp;
if(this.gw_hp<=0){
System.out.println("怪物\""+this.gw_name+"\",已经死亡,无需攻击!!!");
}else {
System.out.println("怪物\""+this.gw_name+"\",损失"+hp+"hp,剩余"+this.gw_hp+"hp,仍可继续攻击!!!");
}
}
}
public void getInfo() {
System.out.println(gw_name+" "+gw_hp);
}
}
创建角色
package com.lx.test;
/**
* 角色类
* @author DELL
*
*/
public class JueSe {
//定义一个保存角色的名称
private String js_name;
//定义一个保存武器的变量
private GongJiInterface wuqi;
public JueSe(String js_name,GongJiInterface wuqi) {
this.js_name = js_name;
this.wuqi = wuqi;
}
public String getJs_name() {
return js_name;
}
public void setJs_name(String js_name) {
this.js_name = js_name;
}
public GongJiInterface getWuqi() {
return wuqi;
}
public void setWuqi(GongJiInterface wuqi) {
this.wuqi = wuqi;
}
public void getJsInfo() {
System.out.println(js_name+" "+wuqi);
}
/**
* 打怪物
*/
public void daGuai(GuaiWu gw) {
this.wuqi.gongji(gw);
}
}
打怪的方法
package com.lx.test;
public interface GongJiInterface {
//打怪方法
void gongji(GuaiWu gw);
}
测试类
package com.lx.test;
public class Test {
public static void main(String[] args) {
GuaiWu gw1=new GuaiWu("巡城小妖",500);
GuaiWu gw2=new GuaiWu("城主",1500);
GuaiWu gw3=new GuaiWu("幽冥王",5000);
gw1.getInfo();
gw2.getInfo();
gw3.getInfo();
JueSe js1=new JueSe("初出茅庐小剑客", new MuJian());
JueSe js2=new JueSe("一代宗师老剑圣", new MoJian());
JueSe js3=new JueSe("剑仙", new YiTianTuLongJian());
js1.getJsInfo();
js2.getJsInfo();
js3.getJsInfo();
js1.daGuai(gw1);
js2.daGuai(gw2);
js3.daGuai(gw3);
}
}
木剑
package com.lx.test;
public class MuJian implements GongJiInterface{
@Override
public void gongji(GuaiWu gw) {
gw.diaoxue(20);
}
}
铁剑
package com.lx.test;
public class TieJian implements GongJiInterface{
@Override
public void gongji(GuaiWu gw) {
gw.diaoxue(50);
}
}
魔剑
package com.lx.test;
public class MoJian implements GongJiInterface{
@Override
public void gongji(GuaiWu gw) {
int random=((int)(Math.random()*10))+1;
if(random>5) {
System.out.println("产生暴击!!");
gw.diaoxue(200);
}else {
gw.diaoxue(100);
}
}
}
倚天屠龙剑
package com.lx.test;
public class YiTianTuLongJian implements GongJiInterface{
@Override
public void gongji(GuaiWu gw) {
int random=((int)(Math.random()*10))+1;
if(random>4) {
System.out.println("产生暴击!!");
gw.diaoxue(2000);
}else {
gw.diaoxue(1000);
}
}
}