Game Development 2 Level 27 "Game Of Coins Step 3: Enemies"

So I’ve been stuck in this level for a while. My struggle is that I’m only missing one goal to pass the level and it is “Scouts should be able to one hit the hero”. Here is the code:


// The game layout and items. Scroll down.
game.spawnXY("forest", 16, 16);
game.spawnXY("forest", 32, 16);
game.spawnXY("forest", 48, 16);
game.spawnXY("forest", 64, 16);
game.spawnXY("forest", 16, 32);
game.spawnXY("forest", 32, 32);
game.spawnXY("forest", 48, 32);
game.spawnXY("forest", 64, 32);
game.spawnXY("forest", 16, 48);
game.spawnXY("forest", 32, 48);
game.spawnXY("forest", 48, 48);
game.spawnXY("forest", 64, 48);

game.spawnXY("bronze-coin", 16, 8);
game.spawnXY("bronze-coin", 24, 8);
game.spawnXY("bronze-coin", 32, 8);
game.spawnXY("bronze-coin", 48, 8);
game.spawnXY("bronze-coin", 56, 8);
game.spawnXY("bronze-coin", 64, 8);
game.spawnXY("bronze-coin", 72, 8);

game.spawnXY("bronze-coin", 8, 16);
game.spawnXY("bronze-coin", 24, 16);
game.spawnXY("bronze-coin", 40, 16);
game.spawnXY("bronze-coin", 56, 16);
game.spawnXY("bronze-coin", 72, 16);

game.spawnXY("bronze-coin", 8, 24);
game.spawnXY("bronze-coin", 16, 24);
game.spawnXY("bronze-coin", 24, 24);
game.spawnXY("bronze-coin", 32, 24);
game.spawnXY("bronze-coin", 40, 24);
game.spawnXY("bronze-coin", 48, 24);
game.spawnXY("bronze-coin", 56, 24);
game.spawnXY("bronze-coin", 64, 24);
game.spawnXY("bronze-coin", 72, 24);

game.spawnXY("bronze-coin", 24, 32);
game.spawnXY("bronze-coin", 56, 32);

game.spawnXY("bronze-coin", 8, 40);
game.spawnXY("bronze-coin", 16, 40);
game.spawnXY("bronze-coin", 24, 40);
game.spawnXY("bronze-coin", 32, 40);
game.spawnXY("bronze-coin", 40, 40);
game.spawnXY("bronze-coin", 48, 40);
game.spawnXY("bronze-coin", 56, 40);
game.spawnXY("bronze-coin", 64, 40);
game.spawnXY("bronze-coin", 72, 40);

game.spawnXY("bronze-coin", 8, 48);
game.spawnXY("bronze-coin", 24, 48);
game.spawnXY("bronze-coin", 40, 48);
game.spawnXY("bronze-coin", 56, 48);
game.spawnXY("bronze-coin", 72, 48);

game.spawnXY("bronze-coin", 8, 56);
game.spawnXY("bronze-coin", 16, 56);
game.spawnXY("bronze-coin", 24, 56);
game.spawnXY("bronze-coin", 32, 56);
game.spawnXY("bronze-coin", 48, 56);
game.spawnXY("bronze-coin", 56, 56);
game.spawnXY("bronze-coin", 64, 56);
game.spawnXY("bronze-coin", 72, 56);

game.spawnXY("mushroom", 40, 8);
game.spawnXY("mushroom", 8, 32);
game.spawnXY("mushroom", 72, 32);
game.spawnXY("mushroom", 40, 56);

game.score = 1000;
ui.track(game, "time");
ui.track(game, "score");
// Lets simplify the game while we don't have power-ups.
game.addCollectGoal(10);
game.addSurviveGoal();

var player = game.spawnPlayerXY("knight", 8, 8);
player.maxSpeed = 32;

function onCollect(event) {
    var player = event.target;
    var item = event.other;
    if (item.type == "bronze-coin") {
        game.score += 1;
    }
    if (item.type == "mushroom") {
        game.score += 5;
    }
}

player.on("collect", onCollect);

// Spawn a monster "generator" in the center:
game.spawnXY("generator", 40, 32);
// Set the generator spawnType to “scout”.
"generator".spawnType = "scout";
// Set the generator spawnDelay to 6 (or greater).
"generator".spawnDelay >= 6;

// This function configures new spawned scouts.
function onSpawn(event) {
    var unit = event.target;
    unit.maxSpeed = 8;
    // Set the unit's attackDamage to a value that
    // is greater than or equal to the player's maxHealth.
    unit.attackDamage >= player.maxHealth;
}

// Set the handler for "scout"s' "spawn" event to onSpawn
game.setActionFor("scout", "spawn", onSpawn);

function checkTimeScore() {
    game.score -= 0.5;
    if (game.score < 0) {
        game.score = 0;
    }
}

while (true) {
    checkTimeScore();
}
// Win the game.```

I've also tried another method that essentially make the scouts one hit the player by using:
```player.maxHealth = 1;```
But still. The last goal won't ligth up.

Could this perhaps be a bug or am I doing things the way they aren't supposed to be done?
Thanks in advance.

Howdy and welcome to the forum!

First problem is that you need to define a variable name as your generator. With this, you can then set/change attributes. You have:

// Spawn a monster "generator" in the center:
game.spawnXY("generator", 40, 32);
// Set the generator spawnType to “scout”.
"generator".spawnType = "scout";
// Set the generator spawnDelay to 6 (or greater).
"generator".spawnDelay >= 6;

“generator” is actually a literal string, not a variable…it will never change. Instead, define a variable to equal the generator, like:

gen = game.spawnXY() // you know the proper code for this

Then, where ever you have “generator”, replace this with the variable name you came up with.

Second problem:

// is greater than or equal to the player's maxHealth.

is perhaps a bit misleading. The statement you use is using a comparative, rather than a definitive function. Instead of “>=”, as implied by the comments, you should use just “=”. The first is used to compare one value against another; the second assigns a value.

1 Like

Yup. that worked.
You’ve saved me from the danger of losing computer science and the school year together with it!

1 Like

Glad to hear…good luck with your studies too! :slightly_smiling_face:

Wow @dedreous your so good at code u solve everyone’s problems

1 Like

Thanks Jeremy…I wouldn’t say I’m good, I just have formal training and 40+ years of practice at it :wink:

If you’d like to discuss this further, let’s take it to PM’s please…I don’t think everyone else will necessarily want to listen. :stuck_out_tongue_winking_eye:

1 Like

what’s PM(20 characters)

Private Message…click on my pic and you’ll see a blue message button. This sends a PM.

image

Oh I am gonna try it