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

原创 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);
			}
		}
	}

}


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


       

      

         

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

游戏任务系统的设计要素

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

《游戏脚本的设计与开发》-(RPG部分)3.5 游戏背包和任务系统

背包系统在游戏中是必不可少的,在游戏中,所有获得的物品都会储存在背包里面。背包的种类,我一般将它分成两大类,一种是类似于《吞食天地》的“个人背包”,在游戏中每个人物都有一个背包,每个人的背包都互不影响...
  • lufy_Legend
  • lufy_Legend
  • 2014年03月24日 11:29
  • 30820

游戏任务系统设计思路

一.为什么要设计任务系统 1. 体现世界观世界观 指主线剧情,历史背景,塑造主角的成长历程。 WOW中的任务虽然不是必须完成的,但是顺着部落主线的剧情延伸至南海镇的任务却是很明显的主...
  • ybhjx
  • ybhjx
  • 2016年01月25日 18:37
  • 2001

游戏任务系统设计思路

http://www.woshipm.com/pd/34680.html <img src="http://image.woshipm.com/wp-files/2013/07/f7633...
  • kenkao
  • kenkao
  • 2015年12月16日 16:13
  • 2760

MMORPG开发杂谈(一):任务系统设计

        最近一直在思考MMORPG的任务系统的设计。以下是需要达到的几个设计目标:1.       任务逻辑与程序逻辑完全脱离;2.       服务器端程序和客户端程序提供有限的功能之后,可...
  • yanonsoftware
  • yanonsoftware
  • 2006年07月11日 11:27
  • 7847

游戏任务系统设计

  • 2014年08月06日 10:31
  • 7.67MB
  • 下载

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

1.任务管理类与任务类是一对一的关系,而任务管理类与其他类是一对多的关系。对于一对多,比较容易想到的就是观察者模式了。在观察者模式中,是观察者决定要监视的东西,而不是事件的发生者决定谁观察它。 2.对...
  • lyh916
  • lyh916
  • 2015年05月16日 12:10
  • 7382

unity3d 任务系统设计 mmo

unity3d 任务系统设计 mmo   2013-08-23 13:09:12|  分类: unity3d |  标签:unity3d  |举报|字号 订阅 最近...
  • chaixinke
  • chaixinke
  • 2014年11月13日 23:46
  • 2616

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

原文链接:http://blog.csdn.net/lyh916/article/details/45767357 1.任务管理类与任务类是一对一的关系,而任务管理类与其他类是一对多的关系。对于...
  • qq_35135955
  • qq_35135955
  • 2016年07月01日 10:33
  • 929

Unity中任务系统书写

任务系统一直是游戏中非常重要的系统,它一直伴随在游戏左右,玩家通过完任务去赚取装备,去升级,所以说任务系统是非常重要的,值得我们好好去架构。在手机中的任务系统没有PC端那么复杂,在Unity中由于有委...
  • hany3000
  • hany3000
  • 2015年02月14日 10:27
  • 1670
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:游戏中的任务系统的简单架构!
举报原因:
原因补充:

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