Skip to content

教程:夺旗战

构建两队对抗的夺旗游戏。

你将学到

  • 队伍系统设置
  • 旗帜拾取和夺取逻辑
  • 距离检测触发器
  • 多队伍计分

最终效果

两队竞争偷取敌方旗帜并带回己方基地。

第一步:设置

mcrs
import "stdlib/teams.mcrs"
import "stdlib/effects.mcrs"

const RED_BASE_X: int = -50;
const BLUE_BASE_X: int = 50;
const BASE_Y: int = 64;
const WIN_SCORE: int = 3;

第二步:游戏状态

mcrs
struct GameState {
    running: int,
    red_score: int,
    blue_score: int,
    red_flag_taken: int,
    blue_flag_taken: int
}

第三步:队伍分配

mcrs
fn assign_teams() {
    let count: int = 0;
    foreach (p in @a) {
        if (count % 2 == 0) {
            team_join(p, "red");
        } else {
            team_join(p, "blue");
        }
        count = count + 1;
    }
}

第四步:旗帜拾取

mcrs
fn check_flag_pickup() {
    foreach (p in @a[team=blue]) {
        execute if entity p[x=-52..-48, y=62..68, z=-2..2] run {
            if (game.red_flag_taken == 0) {
                game.red_flag_taken = 1;
                tag_add(p, "has_flag");
                announce("§9蓝队 §f拿到了 §c红旗§f!");
                glow(p, 9999);
            }
        }
    }
}

第五步:夺旗得分

mcrs
fn check_flag_capture() {
    foreach (p in @a[team=blue, tag=has_flag]) {
        execute if entity p[x=45..55, y=62..68, z=-5..5] run {
            game.blue_score = game.blue_score + 1;
            announce("§9蓝队 §a得分!");
            tag_remove(p, "has_flag");
            place_flags();
        }
    }
}

完整代码

查看完整示例:capture_the_flag.mcrs

Released under the MIT License.