游戏中的任务系统的简单架构!

原创 2015年11月18日 10:54:02

         之所以 想到先写这个“任务系统”是被面试到了!

        废话不多少,上传不要代码!


“任务”的五种状态

/**
 * 任务状态
 * @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);
			}
		}
	}

}


小刚分享 望大家多多指点!


       

      

         

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

游戏任务系统的设计要素

关于任务设计,应包含以下两个方面,也就是任务的事件结构和逻辑结构。而任务系统的基本流程包括:触发任务、接受任务、进行任务、完成任务,共四个阶段组成。     任务的事件结构就如同记叙文一般,包含其中...

系统架构之一(RPG游戏常用架构)

本人从事软件开发多年,现将一些经典的系统架构设计

关于游戏架构设计的一些整理吧

在单位设计上必须冲头到尾贯彻面向对象的“继承”观念 先设计基础单位A ,再在之上扩展到所有的单位, 也就是说,所有的普通单位都可以追溯到一个起源的对象, 否则代码量会让你想死 然后就能获得所有...

unity游戏系统之-线性VS非线性 如何处理RPG游戏任务与剧情?

整理自知乎,文/李云柯 以往接触的日式RPG、MMORPG,任务和剧情的走向十分明确,分支任务很多——但是玩家仍然可以很明确地知道“这个任务是触发主线剧情的”、“我只要顺着这条指引就可以通关...

数据驱动编程 游戏GM的实现

在学习《Unix编程艺术》,作者在介绍Unix设计原则时,其中有一条为“表示原则:把知识叠入数据以求逻辑质朴而健壮”。 我对这个原则很有共鸣,所以先学习了数据驱动编程相关的内容,这里和大家分享出来和...

unity3d 网络游戏任务系统设计考良(待续)

unity3d 网络游戏任务系统设计考良   2013-08-23 10:18:49|  分类: unity3d |  标签:unity3d  |举报|字号 订阅 ...

[Unity实战]一个简单的任务系统(一)

原文链接:http://blog.csdn.net/lyh916/article/details/45767357 1.任务管理类与任务类是一对一的关系,而任务管理类与其他类是一对多的关系。对于...

unity3d 任务系统设计 mmo

unity3d 任务系统设计 mmo   2013-08-23 13:09:12|  分类: unity3d |  标签:unity3d  |举报|字号 订阅 ...

Unity中任务系统书写

任务系统一直是游戏中非常重要的系统,它一直伴随在游戏左右,玩家通过完任务去赚取装备,去升级,所以说任务系统是非常重要的,值得我们好好去架构。在手机中的任务系统没有PC端那么复杂,在Unity中由于有委...

[Unity实战]一个简单的任务系统(一)

1.任务管理类与任务类是一对一的关系,而任务管理类与其他类是一对多的关系。对于一对多,比较容易想到的就是观察者模式了。在观察者模式中,是观察者决定要监视的东西,而不是事件的发生者决定谁观察它。 2.对...
  • lyh916
  • lyh916
  • 2015-05-16 12:10
  • 6257
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)