我正在创建一个基于文本的演示RPG项目,我很难找到和/或找出使用角色的方法。快速形成一种算法,确定战斗中的攻击顺序。首先,我想对已经建立的相关算法进行任何输入或指导。否则,我可以使用我的算法想法的帮助。条款和代码如下。它仍然需要很多工作。提前谢谢!
- 我如何确定订单?
1)我在LinkedHashMap中按降序排列6个字符的速度(键值0中的最高速度)以保持顺序
2)使用最快的速度作为参考,我乘以一个因子,这个因子给出了我用来确定角色顺序的那个速度的一小部分。例如,假设最快速度为50,因子为0.1。这将产生5(50 * 0.1 = 5)的值。
3)现在我递归地减去从因子计算中收到的值来确定速度顺序。让我们说字符速度是char1 = 50,char2 = 40,char3 = 38,char4 = 33,char5 = 30,char6 = 25。我首先将最快的字符添加到另一个LinkedHashMap,然后我使用我的因子来接收一个新的值,基本上我做50-5来得到45.我检查第二个最快的字符(char2)是否有一个大于45的速度,如果是这样我将char2添加到地图中,否则我将先前添加的char添加到地图(char1)。然后我再次进行减法,45-5得到40并做同样的检查。我继续这个,直到我将所有字符添加到地图至少一次。我认为这是我的速度模式。我只需要重复这个模式,只是在字符死亡时将其修改。以下是基于我上面提供的示例的订单:
char1 w / 50 speed
char1 w / 50速度(再次)
char2 w / 40 speed
char3 w / 38 speed
char4 w / 33 speed
char5 w / 30 speed
char6 w / 25 speed
现在你看到我想要做的事情,我愿意接受建议。这是我编程的方法,假设我已经按速度订购了LinkedHashMap。
// stores entire speed pattern
LinkedHashMap<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();
// order un-ordered hashMap "list"
List<Entry<Integer, Integer>> list = new LinkedList<Entry<Integer, Integer>>(sortedMap.entrySet());
Collections.sort(list, new Comparator<Entry<Integer, Integer>>() {
@Override
public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
// maintaining insertion order with the help of LinkedList
Map<Integer, Integer> result = new LinkedHashMap<Integer, Integer>();
for (int i = 0; i < list.size(); i++) {
result.put(i, list.get(i).getValue());
}
int count = 0;
// note: totalChars = 6
// note: multiplierSpeedPattern = 0.1
double highestSpeed = result.get(0); // highest speed
while (Math.round(highestSpeed) > 0 && count < totalChars) {
double temp = highestSpeed;
highestSpeed = (double) (temp - (multiplierSpeedPattern * temp));
int roundedHighestSpeed = (int) Math.round(highestSpeed);
Log.i(TAG, "roundedHighestSpeed: " + roundedHighestSpeed);
Iterator iter = result.entrySet().iterator();
if (iter.hasNext()) {
if (result.get(0) > roundedHighestSpeed && result.get(1) < roundedHighestSpeed) {
map.put(count, result.get(count));
count++;
} else if (result.get(1) > roundedHighestSpeed && result.get(2) < roundedHighestSpeed) {
map.put(count, result.get(count));
count++;
} else if (result.get(2) > roundedHighestSpeed && result.get(3) < roundedHighestSpeed) {
map.put(count, result.get(count));
count++;
} else if (result.get(3) > roundedHighestSpeed && result.get(4) < roundedHighestSpeed) {
map.put(count, result.get(count));
count++;
} else if (result.get(4) > roundedHighestSpeed && result.get(5) < roundedHighestSpeed) {
map.put(count, result.get(count));
count++;
} else if (result.get(5) > roundedHighestSpeed) {
map.put(count, result.get(count));
count++;
} else {
map.put(count, result.get(count));
count++;
}
}
}
我的逻辑不正确,因为我需要以某种方式检查我是否已经在地图中添加了一个角色。对此有何帮助?
答案 0 :(得分:1)
不幸的是,我没有时间仔细阅读你的问题。然而,对于这类问题,通常会先对元素进行排序。
然而,LinkedHashMap保留了插入顺序,但没有对元素进行排序。使用TreeMap对顺序进行排序(用作键的实例的类必须实现Comparable,否则您将在运行时获得类转换异常)。
这应该可以完成大部分工作。有关算法的详细信息,我真的推荐这本伟大的书&#34;算法简介&#34; (由Cormen,Leierson,Rivest和Stein撰写)。它提供了很好的示例和解释以及各种算法。对于您的问题,请查看排序/扫描算法。