回溯问题-can'I don’我不知道怎么做
Backtracking issue - can't figure out how to do this
我正在尝试制作一个小脚本(用于我正在设计的棋盘游戏:p),它取一个对象,其中包含英雄攻击伤害的1-4个随机对象和可能的目标,并通过计算每个可能的结果并权衡结果来计算英雄在攻击中的最佳移动。
这就是我的JavaScript对象的样子:
var usedAttacks = {
1: {
attack: 2,
attackableMonsters: Array(0, 1, 2)
},
2: {
attack: 1,
attackableMonsters: Array(0,1,3)
},
3:{
attack: 4,
attackableMonsters: Array(1,2,3)
}
}
usedAttacks
中的键指向进行攻击的英雄id,attack
是英雄可以造成的伤害,attackableMonsters
数组是一个数组,包含英雄可以攻击的怪物的id。
我想做的是测试给定场景的每个结果,并在每个测试结束时返回一个power
值,最后选择导致power
弹药数最少的场景。
Hero 1 -> Monster 0, Hero 2 -> Monster 0, Hero 3 -> Monster 1 = Power 10
Hero 1 -> Monster 0, Hero 2 -> Monster 0, Hero 3 -> Monster 2 = Power 11
Hero 1 -> Monster 0, Hero 2 -> Monster 0, Hero 3 -> Monster 3 = Power 8
Hero 1 -> Monster 0, Hero 2 -> Monster 1, Hero 3 -> Monster 1 = Power 10
...
力量是根据英雄攻击阶段结束时仍然活着的怪物的攻击力计算的。
我觉得这个问题必须通过一些基本的回溯来解决,但我就是不知道如何用javascript开始解决它。我不需要一个完整的解决方案,如果有人能提供一些基本的指导,我可以开始开发我自己的解决方案。我将不胜感激!
可能是这样的东西:
我们需要一个数组,其中包含我们将使用索引访问的所有怪物id:
var monsters = [ /* all the monster IDs*/ ];
我们初始化一个target
对象,其中包含英雄密钥和怪物值:
var target = {};
var numHeroes = 0;
for ( var i in usedAttacks )
numHeroes++,
target[i] = 0; // monsters array index.
并用第一个解决方案初始化最佳解决方案:
var minPower = calcPower( target ),
bestSolution = clone( target ); // store a copy, we don't want the solution changed.
function clone(obj) { return JSON.parse( JSON.stringify(obj) ); }
然后我们迭代所有怪物和英雄的组合:
for ( var k = 1; i < monsters.length * numHeroes; k++) {
我们增加怪物,类似于携带的增量:
for ( var i in usedAttacks ) // iterate hero IDs
if ( target[i] + 1 >= monsters.length )
target[i] = 0; // wrap around: carry (no break)
else {
target[i]++ // no wrap:
break; // abort.
}
我们将与最佳解决方案进行比较,并可能进行更新:
var p = calcPower( target );
if ( p < minPower ) {
minPower = p;
bestSolution = clone( target );
}
}
相关文章:
- 元素在我的代码中不会.fadeTo.Don'I don’我不知道;s错误的JavaScript、JQuery、H
- Steam Web API:I'我不知道该如何处理这个看起来像哈希的url来生成图像
- 这个旋钮没有更新;我不知道为什么
- 我不知道为什么我的代码是错误的?又有什么错
- 我不知道我的编码有什么问题.(JavaScript)
- I'我不知道为什么我的代码没有'不起作用
- sqlite查询返回错误-can'我不知道为什么
- 我不知道此代码中的这些符号是什么意思.十进制到二进制
- 我不知道如何正确地将REST响应对象传递给ReactJS子组件
- 我没有'我不知道为什么我的jqGrid子网格没有'不要给我看数据
- 用Javascript更改Kendo TreeView节点名称-我不'I don’我不知道怎么做
- 我可以'I don’我不知道我在做什么;m缺失,除了一个选项外,代码可以100%工作
- JQuery Quickfix:我不;I don’我不知道怎么称呼它
- 回溯问题-can'I don’我不知道怎么做
- Don'我不知道如何发送带有get请求参数的字符串
- 无法't更新流星中的文档,找到了修复程序,但没有;I don’我不知道怎么用.我该把它放在哪里
- three.js;无法读取属性'位置'of undefined和don'我不知道为什么
- 我的javascript输出与预期输出不匹配.我没有'I don’我不知道我哪里错了
- 我没有'I don’我不知道;It’联系表格有问题
- 引导程序:don'I don’我不知道如何制作时尚的大菜单