Reputation: 179
I have a game where every time the user's score is 5, 10, or 15 it adds a new enemy. The numbers I randomly chose and intend to change later on.
I was able to figure out how to add new enemies every time the player reaches one of these scores but I have to make a new boolean variable for every new score. How can I write this same code in a smarter way without many booleans?
var addEnemyAt5= true; //boolean I have to create over and over
var addEnemyAt10 = true;
var addEnemyAt15 = true;
var score = 0;
if (score == 5 && enemyScore5) {
console.log("new enemy at 5");
addEnemyAt5 = false;
} else if (score == 10 && enemyScore10) {
console.log("new enemy at 10");
addEnemyAt10 = false;
} else if (score == 15 && enemyScore15) {
console.log("new enemy at 15");
addEnemyAt15 = false;
}
this.scoreUpdate = function() {
score += 5;
}
Upvotes: 3
Views: 116
Reputation: 16777
You could create a lastScore
variable to track when changes to score
have been accounted for:
var lastScore = 0
var score = 0
if (score > lastScore) {
if (score === 5) {
console.log("new enemy at 5")
} else if (score === 10) {
console.log("new enemy at 10")
} else if (score === 15) {
console.log("new enemy at 15")
}
lastScore = score
}
this.scoreUpdate = function() {
score += 5
}
var lastScore = 0
var score = 0
setInterval(function SketchDotJS() {
if (score > lastScore) {
if (score === 5) {
console.log("new enemy at 5")
} else if (score === 10) {
console.log("new enemy at 10")
} else if (score === 15) {
console.log("new enemy at 15")
}
lastScore = score
}
}, 10)
;(function HUDDotJS() {
this.scoreUpdate = function() {
score += 5
}
})()
<!-- Boilerplate code to get the demo to work -->
<button onclick="scoreUpdate()">Increase <var>score</var> by 5</button>
<pre><var>score</var> = <span id="score">0</span></pre>
<script>setInterval(function(e){score===+e.textContent||(e.textContent=score)},10,document.getElementById('score'))</script>
Upvotes: 2
Reputation: 1875
You can organize theme into an object
var milestoneMet = {
5: false,
10: false,
15: false
};
// for each milestone, check and set milestoneMet
Upvotes: 1
Reputation: 17952
Try perhaps:
createEnemyAtScore = {
5: true,
10: true,
15: true
};
var score = 10;
if (createEnemyAtScore[score]) {
// create your enemy... or whatever..
}
but I would suggest moving this question to CodeReview
Upvotes: 1