【发布时间】:2017-01-28 10:58:19
【问题描述】:
我正在编写一个小游戏;我有一个怪物向量,一个怪物可以对所有其他怪物造成伤害。我需要一个函数来获取所有怪物的向量和对正在攻击的怪物的引用。
我明白为什么这在 Rust 的类型系统中是不可能的:我需要对向量的可变引用和对怪物的可变引用,但这是不可能的,因为怪物属于向量。我找不到解决方法。
struct Monster {
life: i32,
}
// give 1 damage to all except me
// increase my life by 1
fn give_1_damage(me: &mut Monster, all: &mut Vec<Monster>) {
for m in all {
m.life -= 1;
}
me.life += 2;
}
fn main() {
let mut a = vec![Monster { life: 3 }, Monster { life: 3 }];
let ref mut b = &mut a[0];
give_1_damage(b, &mut a);
}
Lukas Kalbertodt proposes 传递向量中怪物的偏移量。这很好用,谢谢!但其实我的代码比较复杂:
struct Monster {
life: i32,
}
struct Game {
player1: Vec<Monster>,
player2: Vec<Monster>,
}
fn give_1_damage(player_idx: usize, monster_idx: usize, game: &mut Game) {
// ...
}
我知道可以通过玩家的索引和怪物的索引,但我发现这很难看。我真的需要通过player_idx 和monster_idx 而我之前知道哪个怪物正在攻击并且我可以参考它吗?
【问题讨论】:
-
您的后续问题没有任何区别,您仍然可以调用与 Lukas 或 DK 相同的函数。提供:
give_1_damage(0, &mut game.player1);或give_1_damage(0, &mut game.players[player_idx]);如果它实际上是一个数组。
标签: rust