游戏中的任务系统的简单架构!
之所以 想到先写这个“任务系统”是被面试到了!
废话不多少,上传不要代码!
“任务”的五种状态
/*** 任务状态* @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);}}}}
小刚分享 望大家多多指点!
游戏中的任务系统的简单架构!相关推荐
- php封装webservice_四种php中webservice实现的简单架构方法及实例
一:PHP本身的SOAP 所有的webservice都包括服务端(server)和客户端(client). 要使用php本身的soap首先要把该拓展安装好并且启用.下面看具体的code 首先这是服务端 ...
- UE4 在游戏中使用Slate
在游戏中使用Slate Slate用户界面架构 概述 Slate控件可以用于在游戏中创建平头显示信息(HUD)或其他用户界面(UI)元素, 比如菜单.您一般可以创建一个或多个 容器 控件,每个容器可以 ...
- 23种设计模式在MMORPG游戏中的应用
设计原则和设计模式是软件工程领域的两个重要概念,设计原则提供了编写高质量.可维护代码的指导思想,而设计模式则为特定问题提供了经过验证的解决方案.下面是7大设计原则和23种设计模式的总结: 7大设计原则 ...
- 游戏中的人工智能AI设计
因为在现在的项目中花了很大精力设计和制作怪物AI和技能,所以在这里也做个小总结. 什么叫做游戏中的AI 游戏中的AI可以简单的理解为计算机控制的智能角色,这些智能角色能够通过周遭环境或者 ...
- 游戏中的机器学习——通过创造AI来掌控虚拟世界
作者 | CDA数据分析师 出品 | CDA数据科学研究院 在虚拟世界中,人工智能正变得越来越聪明.越来越智能.游戏中最早出现的人工智能实例是在1952年,当时英国一名孤独的研究生创建了一个基于规则的 ...
- 【游戏设计】任务系统进化论
引言 近来在新的项目中负责开发任务系统,起初自己做了一份设计,后来经与同事的交流,发现从系统设计上还有诸多可以改善的空间,这里加以记录. 背景&需求 MMORPG游戏中的任务系统远了说从< ...
- Unity3D游戏开发中的人工智能AI 简单实例
今天我想说的是游戏中的人工智能.人工智能这个东西在游戏中是非常重要的,人工智能说简单了就是根据随机的数字让敌人执行一些动作或逻辑,说难了TA需要一个非常复杂的算法,本文我主要说说Unity ...
- java erlang 游戏_游戏中最近可达点(用erlang写一个简单算法)
游戏中有点击障碍点,人物走到离障碍物最近点的算法.我这给一个简单的算法,这个问题可以复杂化,另外这个问题应该由客户端来完成. 如图,玩家在b点,点击了a点,a在一个障碍区(红色,玩家只能在障碍区外移到 ...
- 《MFC游戏开发》笔记九 游戏中的碰撞判定初步怪物运动简单AI
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9374935 作者:七十一雾央 新浪微博:http:// ...
最新文章
- httpbin.org的使用
- 迁移学习简介(tranfer learning)
- QuorumPeerConfig.parse
- NCH MixPad Masters for Mac - 录音和混音软件
- Lightroom Classic 教程,如何在 Lightroom 中更高效的获取快速提示?
- [恢]hdu 2003
- 文件编码 ANSI、GBK、GB2312、MS936、MS932、SJIS、Windows-31 、EUC-JP 、EBCDIC 等等之间的区别与联系
- vsftpd 虚拟用户详细配置
- 精英网络技术论坛免杀基础
- Odoo----的消息系统 - Mail 模块 - Discuss 应用
- 解决UmengSDK社会化分享过程中微信,QQ,新浪微博分享不成功的问题
- 计算机系统时间显示不准确的原因,电脑时间总是不对原因 电脑时间总是不对三种解决方案...
- How to change exchange rate in miro manually?
- Centos 7 安装 jq json 插件以及使用方法
- 阿里五年测试工程师的一些小建议,让你少走弯路
- 计算机辅助翻译技术的好处,计算机辅助翻译原理与实践
- 【Java程序设计】GUI程序设计(设计封装矩形类、利用监听事件对textField进行读取和输入)
- 如何将AD类型的封装导成Allegro库中的封装
- 淘宝无线端店铺权重提升方法技巧步骤
- Excel 去除重复项的几种常用技巧
热门文章
- matlab 除去振动,Matlab讨论区 - 声振论坛 - 振动,动力学,声学,信号处理,故障诊断 - Powered by Discuz!...
- 网站后台采集列表的成功经验分享
- Go简明教程-7dayGo
- java关闭tomcat服务器端口_关闭tomcat端口号
- java 泛型使用场景_泛型的使用场景,可以作用在什么位置,使用泛型有什么好处...
- Macbook搭建vue开发环境
- 随机生成中文的java代码
- 12张手绘图,终于搞懂了微服务架构
- 《自拍教程79》荣耀V20,通过Python实现自动化语音测试
- python中pivot函数用法_如何使用Pivot函数重塑此数据帧?