之所以 想到先写这个“任务系统”是被面试到了!
废话不多少,上传不要代码!
“任务”的五种状态
/**
* 任务状态
* @author kevin chen
* @Description: TODO
* @date 2015年10月21日 下午8:20:39
*/
public class TaskState {
/**0 不可接状态*/
public static final int cannotAccept = 0;
/**1 可接 但还未接的状态*/
public static final int canAccept = 1;
/**2 已接 正在进行中*/
public static final int doTasking = 2;
/**3 完成 未领奖*/
public static final int completeTask = 3;
/**4 完成 已领奖*/
public static final int finishTask = 4;
}
“任务”对象的实体
/**
* 任务实体 需要持久化的
* @author kevin chen
* @Description: TODO
* @date 2015年10月21日 下午8:51:16
*/
public class Task {
/**任务id*/
private int taskId;
/**任务状态*/
private int taskState;
/**任务进度*/
private int progress;
/**任务配置表*/
private transient Tasktemplate tasktemplate;
/**任务目标实体*/
private transient ITarget target;
public Task(int taskId, int taskState) {
this.taskId = taskId;
this.taskState = taskState;
this.tasktemplate = DataManager.getSingleData(GameConfigTable.tasktemplate, this.taskId);
this.target = TargetType.getITargetById(this.tasktemplate.getTargetType());
}
public Tasktemplate getTasktemplate() {
return tasktemplate;
}
public int getTaskId() {
return taskId;
}
public void setTaskId(int taskId) {
this.taskId = taskId;
}
public int getTaskState() {
return taskState;
}
public void setTaskState(int taskState) {
this.taskState = taskState;
}
public int getProgress() {
return progress;
}
public void setProgress(int progress) {
this.progress = progress;
}
public int getTaskType(){
return this.tasktemplate.getTaskType();
}
public ITarget getTarget() {
return target;
}
/**下一个任务*/
public int getNextTaskId(){
return this.tasktemplate.getPostTaskId();
}
}
public interface ITarget {
/**任务进行中 检查是否完成*/
boolean checkTaskComplete(Hero hero,Task task);
}
在任务配置表中 表示任务目的的参数 要与枚举的下标一致
public enum TargetType {
/**0 none*/
Null(null),
/**1 打怪*/
HitMonster(new HitMonsterTarget()),
/**2 采集*/
Collect(new CollectTarget()),
/**3 收集*/
Gather(new GatherTarget()),
/**4 通关*/
PassKa(new PassKaTarget()),
/**5 对话*/
DialogTarget(new DialogTarget()),
/**6 送物品*/
GiveItem(new GiveItemTarget()),
/**7 护送*/
Escort(new EscortTarget()),
/**8 使用物品*/
UseItem(new UseItemTarget()),
/**9 特殊*/
Special(new SpecialTarget()),
;
private ITarget target;
private TargetType (ITarget target){
this.target = target;
}
public ITarget getTarget() {
return target;
}
/**获得任务目的的具体实体对象 在构造任务实体对象的时候调用*/
public static ITarget getITargetById(int targetId){
TargetType[] values = TargetType.values();
TargetType targetType = values[targetId];
return targetType.getTarget();
}
}
public class Hero {
/**
* 当前正在做的任务 (其中主线任务只有一条,支线任务,日常任务可以多条) 需持久化
*/
private List<Task> doingTasks = new ArrayList<Task>();
/**
* 所有要求记录已完成的任务 需持久化
*/
private List<Task> finishTasks = new ArrayList<Task>();
public List<Task> getDoingTasks() {
return doingTasks;
}
}
任务的业务逻辑处理 采用的静态方法
/**
* 任务相关的逻辑处理
* @author kevin chen
* @Description: TODO
* @date 2015年10月22日 上午11:45:48
*/
public class TaskManager {
/**
* 当前玩家是否满足任务的等级要求
* @param hero
* @param tasktemplate
* @return true:满足 false:不满足
*/
public static boolean isEnoughTaskLevel(Hero hero,Tasktemplate tasktemplate){
return true;
}
/**
* 更新某个任务
* @param hero
* @param task
*/
public static void updateTaskMsg(Hero hero,Task task){
}
/**
* 任务进行中 判断任务是否完成!
* 该方法供相关任务所设计到的各个模块调用!
* @param hero
*/
public static void checkTask(Hero hero){
List<Task> doingTasks = hero.getDoingTasks();
for (Iterator<Task> iterator = doingTasks.iterator(); iterator.hasNext();) {
Task task = iterator.next();
ITarget target = task.getTarget();
boolean complete = target.checkTaskComplete(hero, task);
if(complete){
updateTaskMsg(hero, task);
}
}
}
}
小刚分享 望大家多多指点!