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

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

“任务”的五种状态

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

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

游戏中的任务系统的简单架构!相关推荐

  1. php封装webservice_四种php中webservice实现的简单架构方法及实例

    一:PHP本身的SOAP 所有的webservice都包括服务端(server)和客户端(client). 要使用php本身的soap首先要把该拓展安装好并且启用.下面看具体的code 首先这是服务端 ...

  2. UE4 在游戏中使用Slate

    在游戏中使用Slate Slate用户界面架构 概述 Slate控件可以用于在游戏中创建平头显示信息(HUD)或其他用户界面(UI)元素, 比如菜单.您一般可以创建一个或多个 容器 控件,每个容器可以 ...

  3. 23种设计模式在MMORPG游戏中的应用

    设计原则和设计模式是软件工程领域的两个重要概念,设计原则提供了编写高质量.可维护代码的指导思想,而设计模式则为特定问题提供了经过验证的解决方案.下面是7大设计原则和23种设计模式的总结: 7大设计原则 ...

  4. 游戏中的人工智能AI设计

    因为在现在的项目中花了很大精力设计和制作怪物AI和技能,所以在这里也做个小总结. 什么叫做游戏中的AI        游戏中的AI可以简单的理解为计算机控制的智能角色,这些智能角色能够通过周遭环境或者 ...

  5. 游戏中的机器学习——通过创造AI来掌控虚拟世界

    作者 | CDA数据分析师 出品 | CDA数据科学研究院 在虚拟世界中,人工智能正变得越来越聪明.越来越智能.游戏中最早出现的人工智能实例是在1952年,当时英国一名孤独的研究生创建了一个基于规则的 ...

  6. 【游戏设计】任务系统进化论

    引言 近来在新的项目中负责开发任务系统,起初自己做了一份设计,后来经与同事的交流,发现从系统设计上还有诸多可以改善的空间,这里加以记录. 背景&需求 MMORPG游戏中的任务系统远了说从< ...

  7. Unity3D游戏开发中的人工智能AI 简单实例

          今天我想说的是游戏中的人工智能.人工智能这个东西在游戏中是非常重要的,人工智能说简单了就是根据随机的数字让敌人执行一些动作或逻辑,说难了TA需要一个非常复杂的算法,本文我主要说说Unity ...

  8. java erlang 游戏_游戏中最近可达点(用erlang写一个简单算法)

    游戏中有点击障碍点,人物走到离障碍物最近点的算法.我这给一个简单的算法,这个问题可以复杂化,另外这个问题应该由客户端来完成. 如图,玩家在b点,点击了a点,a在一个障碍区(红色,玩家只能在障碍区外移到 ...

  9. 《MFC游戏开发》笔记九 游戏中的碰撞判定初步怪物运动简单AI

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9374935 作者:七十一雾央 新浪微博:http:// ...

最新文章

  1. httpbin.org的使用
  2. 迁移学习简介(tranfer learning)
  3. QuorumPeerConfig.parse
  4. NCH MixPad Masters for Mac - 录音和混音软件
  5. Lightroom Classic 教程,如何在 Lightroom 中更高效的获取快速提示?
  6. [恢]hdu 2003
  7. 文件编码 ANSI、GBK、GB2312、MS936、MS932、SJIS、Windows-31 、EUC-JP 、EBCDIC 等等之间的区别与联系
  8. vsftpd 虚拟用户详细配置
  9. 精英网络技术论坛免杀基础
  10. Odoo----的消息系统 - Mail 模块 - Discuss 应用
  11. 解决UmengSDK社会化分享过程中微信,QQ,新浪微博分享不成功的问题
  12. 计算机系统时间显示不准确的原因,电脑时间总是不对原因 电脑时间总是不对三种解决方案...
  13. How to change exchange rate in miro manually?
  14. Centos 7 安装 jq json 插件以及使用方法
  15. 阿里五年测试工程师的一些小建议,让你少走弯路
  16. 计算机辅助翻译技术的好处,计算机辅助翻译原理与实践
  17. 【Java程序设计】GUI程序设计(设计封装矩形类、利用监听事件对textField进行读取和输入)
  18. 如何将AD类型的封装导成Allegro库中的封装
  19. 淘宝无线端店铺权重提升方法技巧步骤
  20. Excel 去除重复项的几种常用技巧

热门文章

  1. matlab 除去振动,Matlab讨论区 - 声振论坛 - 振动,动力学,声学,信号处理,故障诊断 - Powered by Discuz!...
  2. 网站后台采集列表的成功经验分享
  3. Go简明教程-7dayGo
  4. java关闭tomcat服务器端口_关闭tomcat端口号
  5. java 泛型使用场景_泛型的使用场景,可以作用在什么位置,使用泛型有什么好处...
  6. Macbook搭建vue开发环境
  7. 随机生成中文的java代码
  8. 12张手绘图,终于搞懂了微服务架构
  9. 《自拍教程79》荣耀V20,通过Python实现自动化语音测试
  10. python中pivot函数用法_如何使用Pivot函数重塑此数据帧?