Created
February 10, 2023 22:07
-
-
Save telagraphic/ac1e89a3e85da25a5434a3a937de616a to your computer and use it in GitHub Desktop.
treasure-chest-private
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class TreasureChest { | |
#bronze; | |
#silver; | |
#gold; | |
/** | |
* Create the constructor object | |
* @param {Object} options User settings | |
*/ | |
constructor (options = {}) { | |
// Merge options into defaults | |
let {bronze, silver, gold, loot} = Object.assign({ | |
bronze: 0, | |
silver: 0, | |
gold: 0, | |
loot: `You have {{gold}} gold, {{silver}} silver, and {{bronze}} bronze.` | |
}, options); | |
this.#bronze = bronze; | |
this.#silver = silver; | |
this.#gold = gold; | |
this._loot = loot; | |
}; | |
/** | |
* Randomly shuffle an array | |
* https://stackoverflow.com/a/2450976/1293256 | |
* @param {Array} array The array to shuffle | |
* @return {Array} The shuffled array | |
*/ | |
#shuffle (array) { | |
let currentIndex = array.length; | |
let temporaryValue, randomIndex; | |
// While there remain elements to shuffle... | |
while (0 !== currentIndex) { | |
// Pick a remaining element... | |
randomIndex = Math.floor(Math.random() * currentIndex); | |
currentIndex -= 1; | |
// And swap it with the current element. | |
temporaryValue = array[currentIndex]; | |
array[currentIndex] = array[randomIndex]; | |
array[randomIndex] = temporaryValue; | |
} | |
return array; | |
} | |
/** | |
* Add bronze to the treasure chest | |
* @param {Number} n The amount to add | |
*/ | |
addBronze (n) { | |
this.#bronze += n; | |
return this; | |
} | |
/** | |
* Add silver to the treasure chest | |
* @param {Number} n The amount to add | |
*/ | |
addSilver (n) { | |
this.#silver += n; | |
return this; | |
} | |
/** | |
* Add gold to the treasure chest | |
* @param {Number} n The amount to add | |
*/ | |
addGold (n) { | |
this.#gold += n; | |
return this; | |
} | |
getBronze() { | |
return this.#bronze; | |
} | |
/** | |
* Get the total amount of loot as a string | |
* @return {String} The total amount of loot | |
*/ | |
getLoot () { | |
return this._loot.replace('{{gold}}', this.#gold).replace('{{silver}}', this.#silver).replace('{{bronze}}', this.#bronze); | |
} | |
/** | |
* Generate random treasure | |
* @return {Object} The amount and type of loot found | |
*/ | |
static getRandomLoot () { | |
// Amount and type | |
let amount = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50]; | |
let type = ['bronze', 'silver', 'gold']; | |
// Randomize the amounts | |
this.#shuffle(amount); | |
this.#shuffle(type); | |
// Return the random loot | |
return { | |
amount: amount[0], | |
type: type[0] | |
}; | |
} | |
} | |
let captain = new TreasureChest(); | |
let loot = captain.addGold(50).addSilver(40).addBronze(30).getLoot(); | |
let bronzeAmount = captain.getBronze(); | |
console.log(loot); | |
console.log(bronzeAmount); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment