this is my code i dont know what is wrong with it, but I cant pass it
// Let’s make a game of Freeze Tag!
// game.tagged is used to count tagged archers.
game.tagged = 0;
ui.track(game, “tagged”);
var goal = game.addManualGoal(“Tag all archers.”);
// Spawn the archers.
game.spawnXY(“archer”, 12, 52);
game.spawnXY(“archer”, 12, 16);
game.spawnXY(“archer”, 24, 52);
game.spawnXY(“archer”, 24, 16);
var player = game.spawnPlayerXY(‘captain’, 68, 24);
player.maxSpeed = 40;
// Make the player bigger so it’s easier to tag archers.
player.scale = 2;
// Set up the archers’ speed and behavior properties onSpawn
function onSpawn(event) {
var unit = event.target;
unit.behavior = “Scampers”;
unit.maxSpeed = 8;
}
game.setActionFor(“archer”, “spawn”, onSpawn);
// The event handler for “collide” events.
function onCollide(event) {
// The event owner who has collided with something.
var unit = event.target;
// The object the unit collided with.
var other = event.other;
// Use behavior as a marker for the current frozen state.
// “Scampers” means the archer wasn’t yet tagged.
if (unit.behavior == “Scampers”) {
// If “other” is the player.
if (event.other == “player”) {
// Set unit.behavior to “Defends”:
unit.behavior = “Defends”;
// Increase game.tagged by 1:
game.tagged += 1;
}
}
if (unit.behavior == “Defends”) {
// If other’s type is “archer”:
if (other.type == “archer”) {
// Set unit.behavior to “Scampers”:
unit.behavior = “Scampers”;
}
// Reduce game.tagged by 1.
game.tagged -= 1;
}
}
// }
// Use setActionFor to assign onCollide to the “collide” event for "archer"s.
game.setActionFor(“archer”, “collide”, onCollide);
while (true) {
if (game.tagged >= 4) {
game.setGoalState(goal, true);
}
}
// Let's make a game of Freeze Tag!
// game.tagged is used to count tagged archers.
game.tagged = 0;
ui.track(game, "tagged");
var goal = game.addManualGoal("Tag all archers.");
// Spawn the archers.
game.spawnXY("archer", 12, 52);
game.spawnXY("archer", 12, 16);
game.spawnXY("archer", 24, 52);
game.spawnXY("archer", 24, 16);
var player = game.spawnPlayerXY('captain', 68, 24);
player.maxSpeed = 40;
// Make the player bigger so it's easier to tag archers.
player.scale = 2;
// Set up the archers' speed and behavior properties onSpawn
function onSpawn(event) {
var unit = event.target;
unit.behavior = "Scampers";
unit.maxSpeed = 8;
}
game.setActionFor("archer", "spawn", onSpawn);
// The event handler for "collide" events.
function onCollide(event) {
// The event owner who has collided with something.
var unit = event.target;
// The object the unit collided with.
var other = event.other;
// Use behavior as a marker for the current frozen state.
// "Scampers" means the archer wasn't yet tagged.
if (unit.behavior == "Scampers") {
// If "other" is the player.
if (event.other == "player") {
// Set unit.behavior to "Defends":
unit.behavior = "Defends";
// Increase game.tagged by 1:
game.tagged += 1;
}
}
if (unit.behavior == "Defends") {
// If other's type is "archer":
if (other.type == "archer") {
// Set unit.behavior to "Scampers":
unit.behavior = "Scampers";
}
// Reduce game.tagged by 1.
game.tagged -= 1;
}
}
// }
// Use setActionFor to assign onCollide to the "collide" event for "archer"s.
game.setActionFor("archer", "collide", onCollide);
while (true) {
if (game.tagged >= 4) {
game.setGoalState(goal, true);
}
}
I think I can help here…compare the two unit.behavior statements. You are increasing and decreasing as you should, but you are doing so at different levels.
One of the game.tagged increments needs to be moved.
if (unit.behavior == "Scampers") {
// If "other" is the player.
if (event.other == "player") {
// Set unit.behavior to "Defends":
unit.behavior = "Defends";
// Increase game.tagged by 1:
game.tagged += 1;
}
}
if (unit.behavior == "Defends") {
// If other's type is "archer":
if (other.type == "archer") {
// Set unit.behavior to "Scampers":
unit.behavior = "Scampers";
}
// Reduce game.tagged by 1.
game.tagged -= 1;
}
Notice how the final statement of each code block (game.tagged) don’t line up? They do need to match alignment.
A quick not aside from the problem: when you’re formatting javascript, put “javascript” straight away after the first three ```, with no space in between and it will make the comments actually commented out so not all the code is red.
e.g.
if (unit.behavior == "Defends") {
// If other's type is "archer":
if (other.type == "archer") {
// Set unit.behavior to "Scampers":
unit.behavior = "Scampers";
}
// Reduce game.tagged by 1.
game.tagged -= 1;
}
// Let's make a game of Freeze Tag!
// game.tagged is used to count tagged archers.
game.tagged = 0;
ui.track(game, "tagged");
var goal = game.addManualGoal("Tag all archers.");
// Spawn the archers.
game.spawnXY("archer", 12, 52);
game.spawnXY("archer", 12, 16);
game.spawnXY("archer", 24, 52);
game.spawnXY("archer", 24, 16);
var player = game.spawnPlayerXY('captain', 68, 24);
player.maxSpeed = 40;
// Make the player bigger so it's easier to tag archers.
player.scale = 2;
// Set up the archers' speed and behavior properties onSpawn
function onSpawn(event) {
var unit = event.target;
unit.behavior = "Scampers";
unit.maxSpeed = 8;
}
game.setActionFor("archer", "spawn", onSpawn);
// The event handler for "collide" events.
function onCollide(event) {
// The event owner who has collided with something.
var unit = event.target;
// The object the unit collided with.
var other = event.other;
// Use behavior as a marker for the current frozen state.
// "Scampers" means the archer wasn't yet tagged.
if (unit.behavior == "Scampers") {
// If "other" is the player.
if (event.other == "player") {
// Set unit.behavior to "Defends":
unit.behavior = "Defends";
// Increase game.tagged by 1:
game.tagged += 1;
}
}
if (unit.behavior == "Defends") {
// If other's type is "archer":
if (other.type == "archer") {
// Set unit.behavior to "Scampers":
unit.behavior = "Scampers";
}
// Reduce game.tagged by 1.
game.tagged -= 1;
}
}
// }
// Use setActionFor to assign onCollide to the "collide" event for "archer"s.
game.setActionFor("archer", "collide", onCollide);
while (true) {
if (game.tagged >= 4) {
game.setGoalState(goal, true);
}
}
Let’s name the two code blocks “Scampers” and “Defends”:
// Scampers
if (unit.behavior == "Scampers") {
// If "other" is the player.
if (event.other == "player") {
// Set unit.behavior to "Defends":
unit.behavior = "Defends";
// Increase game.tagged by 1:
game.tagged += 1;
}
}
// Defends
if (unit.behavior == "Defends") {
// If other's type is "archer":
if (other.type == "archer") {
// Set unit.behavior to "Scampers":
unit.behavior = "Scampers";
}
// Reduce game.tagged by 1.
game.tagged -= 1;
}
// Scampers
if (unit.behavior == "Scampers") {
// If "other" is the player.
if (event.other == "player") {
// Set unit.behavior to "Defends":
unit.behavior = "Defends";
// Increase game.tagged by 1:
game.tagged += 1;
}
}
// Defends
if (unit.behavior == "Defends") {
// If other's type is "archer":
if (other.type == "archer") {
// Set unit.behavior to "Scampers":
unit.behavior = "Scampers";
}
// Reduce game.tagged by 1.
game.tagged -= 1; //<---------this line is still in the wrong place
}
You need to make game.tagged -= 1 the final statement of the if (other.type == “archer”) loop. Right now, it is the final statement of the if (unit.behavior == “Defends”) loop.
// Let's make a game of Freeze Tag!
// game.tagged is used to count tagged archers.
game.tagged = 0;
ui.track(game, "tagged");
var goal = game.addManualGoal("Tag all archers.");
// Spawn the archers.
game.spawnXY("archer", 12, 52);
game.spawnXY("archer", 12, 16);
game.spawnXY("archer", 24, 52);
game.spawnXY("archer", 24, 16);
var player = game.spawnPlayerXY('captain', 68, 24);
player.maxSpeed = 40;
// Make the player bigger so it's easier to tag archers.
player.scale = 2;
// Set up the archers' speed and behavior properties onSpawn
function onSpawn(event) {
var unit = event.target;
unit.behavior = "Scampers";
unit.maxSpeed = 8;
}
game.setActionFor("archer", "spawn", onSpawn);
// The event handler for "collide" events.
function onCollide(event) {
// The event owner who has collided with something.
var unit = event.target;
// The object the unit collided with.
var other = event.other;
// Use behavior as a marker for the current frozen state.
// "Scampers" means the archer wasn't yet tagged.
if (unit.behavior == "Scampers") {
// If "other" is the player.
if (event.other == "player") {
// Set unit.behavior to "Defends":
unit.behavior = "Defends";
// Increase game.tagged by 1:
game.tagged += 1;
}
}
if (unit.behavior == "Defends") {
// If other's type is "archer":
if (other.type == "archer") {
// Set unit.behavior to "Scampers":
unit.behavior = "Scampers";
}
// Reduce game.tagged by 1.
game.tagged -= 1;
}
}
// }
// Use setActionFor to assign onCollide to the "collide" event for "archer"s.
game.setActionFor("archer", "collide", onCollide);
while (true) {
if (game.tagged >= 4) {
game.setGoalState(goal, true);
}
}