【发布时间】:2020-11-14 02:15:31
【问题描述】:
我想为游戏编写后端。在这个游戏中有必须完成的任务。 例如:找到门 x 的钥匙。 任务数量不受限制,但(可能)不会超过 25 个。
如果在上面的示例中找到一个键,则应该可以解决链接在一起的任务。
我的第一次尝试: 任务.java
public class Task {
private int id;
private boolean solved;
private Task[] links;
private String name;
public Task(int id, String name, Task... links) {
this.id = id;
this.links = links;
this.name = name;
}
每次命令来解决任务时,所有链接的任务都将被检查是否解决。 也在Task.java中:
public boolean solve() {
if (this.links != null && links.length != 0) {
for (Task t : links) {
if (t.isSolved()) {
continue;
} else {
return false;
}
}
this.solved = true;
return true;
}
return false;
}
这似乎非常低效,我会发现很难注意所有任务状态。有没有更好的办法?
【问题讨论】:
-
您应该阅读一些关于过早优化的内容。除非您想每秒执行数百万次,否则检查 25 个对象什么都不是。你不应该这样做。一般来说,在发现一些性能问题之前不要进行优化。
-
扩展 @Amongalen 所说的:如果大约有 25 个任务,那么
Task.solve()将在一次播放中执行最多 25 次(假设一个任务没有不能解决两次)。这意味着在这种情况下,性能几乎完全无关紧要。 -
棘手的一点是这个后端将在 Raspberry Pi (3b) 上运行,并且执行速度在这里是一个相当大的限制因素(虽然你是对的,即使每秒检查 25 个对象也不是限制树莓派的)。但另一个问题是,前端会继续询问任务是否解决以显示“后续任务”。感谢@Amongalen 对过早优化的指出。我想我会试一试,看看我能取得什么成就。如果这对您来说可以,我愿意接受这个作为问题的答案 Joachim Sauer
-
你也可以和前端达成一个协议,这样就不需要检查后端是否已经知道任务是否解决了
-
@MarcosVasconcelos 你能详细说明一下吗?
标签: java performance optimization