基于组合方式的任务系统(部分)

制作任务的时候经常会有这种情况。
某个任务,有时有杀XX怪物,有时有收集XX物品,有时有限定XX时间内.

如果有这么这些组合的话… 1.杀怪+收集, 2.杀怪+时限, 3.收集+时限, 4.收集+杀怪+时限 etc…

显然就跟排列组合一样了,任务的类型成几何级增长。 那么,很多人一定会这么写吧 !?
if…else if.. else if… or switch case… case … case..
这样写将大量浪费时间,不灵活。。

我们为什么不写个自动组合的任务模式呢?

so~就有了如下这个例子~~大家自行理解吧,应该都能看懂的。

[cc lang=”actionscript3″ no-wrap=”false”]
//参数定义
const NONE : int = 0;
const KILL : int = 1;
const TIME : int = 64;
const ITEM : int = 8;

//组合数组集合
var data : Array = [0,1,2,4,8,16,32,64,128,256];

//任务 在限定时间内杀怪
var target : int = 65; //KILL + TIME
var result : Array = getResult(target);
result.sort(Array.NUMERIC);

//输出结果
trace(getContent(result)); //杀死小白兔.时限:5分钟.

//任务 在限定时间内杀怪并手收集物品
target = 73; //KILL + ITEM + TIME
result = getResult(target);
result.sort(Array.NUMERIC);

//输出结果
trace(getContent(result)); //杀死小白兔.收集兔毛.时限:5分钟.

//解析集合
function getResult(content : int) : Array
{
var res : Array = [];
for each(var i : int in data){
if((content & i ) == i) res.push(i);
}
return res;
}

//输出内容
function getContent(data : Array) : String
{
var content : String = “”;
for each(var i : int in result){
switch(i){
case NONE:
break;
case KILL:
content += kill;
break;
case TIME:
content += time;
break;
case ITEM:
content += item;
break;
}
}
return content;
}

function get kill() : String
{
return “杀死小白兔.”;
}

function get time() : String
{
return “时限:5分钟.”;
}

function get item() : String
{
return “收集兔毛.”;
}
[/cc]

发表评论

电子邮件地址不会被公开。 必填项已用*标注