diff --git a/README.md b/README.md index b591e659..0d7cb0d9 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ - Structuring retros so that they can inform thinking for individual's personal learning records (off the job training record tab in their learning logs) - Introducing some sort of test or quiz on basic concept learning points from the bootcamp to validate that they have taken stuff in, and provide organisation mentors with results to help them focus follow ups ---> +[![Codacy Badge](https://app.codacy.com/project/badge/Grade/c2a57370836b4d058561fc41c24836ab)](https://app.codacy.com/gh/TashanDuncan/apprentice-boot-camp-improving-code/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) ## Competencies, Behaviours and Knowledge units diff --git a/exercises/nodejs/src/game.js b/exercises/nodejs/src/game.js index 4462813c..b0e6195a 100644 --- a/exercises/nodejs/src/game.js +++ b/exercises/nodejs/src/game.js @@ -1,45 +1,45 @@ import generator from 'random-seed' +import { Player } from './player' var Game = function () { - var players = new Array() - var places = new Array(6) - var purses = new Array(6) - var inPenaltyBox = new Array(6) + const MAX_PLAYERS = 6 + const winningGoldCoins = 6 + var players = [] + var board = new Array(MAX_PLAYERS) - var popQuestions = new Array() - var scienceQuestions = new Array() - var sportsQuestions = new Array() - var rockQuestions = new Array() + var popQuestions = [] + + var scienceQuestions = [] + var sportsQuestions = [] + var rockQuestions = [] var currentPlayer = 0 - var isGettingOutOfPenaltyBox = false - var didPlayerWin = function () { - return !(purses[currentPlayer] == 6) + var shouldContinueGame = function () { + return players[currentPlayer].purse !== winningGoldCoins } - var currentCategory = function () { - if (places[currentPlayer] == 0) { return 'Pop' } - if (places[currentPlayer] == 4) { return 'Pop' } - if (places[currentPlayer] == 8) { return 'Pop' } - if (places[currentPlayer] == 1) { return 'Science' } - if (places[currentPlayer] == 5) { return 'Science' } - if (places[currentPlayer] == 9) { return 'Science' } - if (places[currentPlayer] == 2) { return 'Sports' } - if (places[currentPlayer] == 6) { return 'Sports' } - if (places[currentPlayer] == 10) { return 'Sports' } - return 'Rock' + var getCurrentCategory = function () { + const categoryIndex = board[currentPlayer] % 4 + if (categoryIndex == 0) { return 'Pop' } + if (categoryIndex == 1) { return 'Science' } + if (categoryIndex == 2) { return 'Sports' } + if (categoryIndex == 3) { return 'Rock' } } this.createRockQuestion = function (index) { return 'Rock Question ' + index } - for (var i = 0; i < 50; i++) { - popQuestions.push('Pop Question ' + i) - scienceQuestions.push('Science Question ' + i) - sportsQuestions.push('Sports Question ' + i) - rockQuestions.push(this.createRockQuestion(i)) + this.getCurrentPlayer = function () { + return players[currentPlayer] + } + + for (var index = 0; index < 50; index++) { + popQuestions.push('Pop Question ' + index) + scienceQuestions.push('Science Question ' + index) + sportsQuestions.push('Sports Question ' + index) + rockQuestions.push(this.createRockQuestion(index)) } this.isPlayable = function (howManyPlayers) { @@ -47,108 +47,113 @@ var Game = function () { } this.add = function (playerName) { - players.push(playerName) - places[this.howManyPlayers() - 1] = 0 - purses[this.howManyPlayers() - 1] = 0 - inPenaltyBox[this.howManyPlayers() - 1] = false + players.push(new Player(playerName)) + const player = this.playerCount() -1 + this.initializePlayer(player) + this.logNewPlayer(playerName) + return true + } + this.initializePlayer = function (player) { + board[player] = 0 + + } + this.logNewPlayer = function (playerName) { console.log(playerName + ' was added') console.log('They are player number ' + players.length) - - return true } - this.howManyPlayers = function () { + this.playerCount = function () { return players.length } + const displayQuestion = (questions) => { + console.log(questions.shift()) + } - var askQuestion = function () { - if (currentCategory() == 'Pop') { console.log(popQuestions.shift()) } - if (currentCategory() == 'Science') { console.log(scienceQuestions.shift()) } - if (currentCategory() == 'Sports') { console.log(sportsQuestions.shift()) } - if (currentCategory() == 'Rock') { console.log(rockQuestions.shift()) } + this.askQuestion = function () { + const currentCategory = getCurrentCategory() + if (currentCategory == 'Pop') { displayQuestion(popQuestions) } + if (currentCategory == 'Science') { displayQuestion(scienceQuestions) } + if (currentCategory == 'Sports') { displayQuestion(sportsQuestions) } + if (currentCategory == 'Rock') { displayQuestion(rockQuestions) } } - this.roll = function (roll) { - console.log(players[currentPlayer] + ' is the current player') + this.logPlayerRoll = function (roll) { + console.log(players[currentPlayer].name + ' is the current player') console.log('They have rolled a ' + roll) + } - if (inPenaltyBox[currentPlayer]) { - if (roll % 2 != 0) { - isGettingOutOfPenaltyBox = true - - console.log(players[currentPlayer] + ' is getting out of the penalty box') - places[currentPlayer] = places[currentPlayer] + roll - if (places[currentPlayer] > 11) { - places[currentPlayer] = places[currentPlayer] - 12 - } - - console.log(players[currentPlayer] + "'s new location is " + places[currentPlayer]) - console.log('The category is ' + currentCategory()) - askQuestion() - } else { - console.log(players[currentPlayer] + ' is not getting out of the penalty box') - isGettingOutOfPenaltyBox = false - } - } else { - places[currentPlayer] = places[currentPlayer] + roll - if (places[currentPlayer] > 11) { - places[currentPlayer] = places[currentPlayer] - 12 - } - - console.log(players[currentPlayer] + "'s new location is " + places[currentPlayer]) - console.log('The category is ' + currentCategory()) - askQuestion() + this.movePlayer = function (roll) { + board[currentPlayer] += roll + if (board[currentPlayer] > 11) { + board[currentPlayer] -= 12 } + console.log(players[currentPlayer].name + "'s new location is " + board[currentPlayer]) + console.log('The category is ' + getCurrentCategory()) } - this.wasCorrectlyAnswered = function () { - if (inPenaltyBox[currentPlayer]) { - if (isGettingOutOfPenaltyBox) { - console.log('Answer was correct!!!!') - purses[currentPlayer] += 1 - console.log(players[currentPlayer] + ' now has ' + - purses[currentPlayer] + ' Gold Coins.') - - var winner = didPlayerWin() - currentPlayer += 1 - if (currentPlayer == players.length) { currentPlayer = 0 } - - return winner + this.roll = function (roll) { + const isRollOdd = roll % 2 != 0 + this.logPlayerRoll(roll) + + if (players[currentPlayer].inPenaltyBox) { + if (isRollOdd) { + players[currentPlayer].isGettingOutOfPenaltyBox = true + console.log(players[currentPlayer].name + ' is getting out of the penalty box') + this.movePlayer(roll) + this.askQuestion() } else { - currentPlayer += 1 - if (currentPlayer == players.length) { currentPlayer = 0 } - return true + console.log(players[currentPlayer].name + ' is not getting out of the penalty box') + players[currentPlayer].isGettingOutOfPenaltyBox = false } } else { - console.log('Answer was correct!!!!') + this.movePlayer(roll) + this.askQuestion() + } + } - purses[currentPlayer] += 1 - console.log(players[currentPlayer] + ' now has ' + - purses[currentPlayer] + ' Gold Coins.') + this.changePlayer = function () { + currentPlayer += 1 + if (currentPlayer == players.length) { currentPlayer = 0 } + } - var winner = didPlayerWin() + this.addToPurse = function () { + players[currentPlayer].purse += 1 + console.log(players[currentPlayer].name + ' now has ' + + players[currentPlayer].purse + ' Gold Coins.') + } - currentPlayer += 1 - if (currentPlayer == players.length) { currentPlayer = 0 } + this.addToPurseCheckWinnerChangePlayer = function () { + this.addToPurse() + var winner = isWinner() + this.changePlayer() + return winner + } - return winner + this.correctAnswer = function () { + if(players[currentPlayer].inPenaltyBox && !players[currentPlayer].isGettingOutOfPenaltyBox) { + this.changePlayer() + return true + } if(!players[currentPlayer].inPenaltyBox){ + console.log('Answer was corrent!!!!') + }else { + console.log('Answer was correct!!!!') } + return this.addToPurseCheckWinnerChangePlayer() } this.wrongAnswer = function () { console.log('Question was incorrectly answered') - console.log(players[currentPlayer] + ' was sent to the penalty box') - inPenaltyBox[currentPlayer] = true + console.log(players[currentPlayer].name + ' was sent to the penalty box') + players[currentPlayer].inPenaltyBox = true - currentPlayer += 1 - if (currentPlayer == players.length) { currentPlayer = 0 } + this.changePlayer() return true } } -const gameRunner = (i) => { - var notAWinner = false +const runGame = (i) => { + var isWinner = false var game = new Game() @@ -162,11 +167,11 @@ const gameRunner = (i) => { game.roll(random.range(5) + 1) if (random.range(9) == 7) { - notAWinner = game.wrongAnswer() + isWinner = game.wrongAnswer() } else { - notAWinner = game.wasCorrectlyAnswered() + isWinner = game.correctAnswer() } - } while (notAWinner) + } while (isWinner) } -export default gameRunner +export default runGame diff --git a/exercises/nodejs/src/player.js b/exercises/nodejs/src/player.js new file mode 100644 index 00000000..9a71d3a4 --- /dev/null +++ b/exercises/nodejs/src/player.js @@ -0,0 +1,8 @@ +export class Player { + constructor(name) { + this.name = name + this.purse = 0 + this.inPenaltyBox = false + this.isGettingOutOfPenaltyBox = false + } +} \ No newline at end of file diff --git a/exercises/nodejs/test/golden-master.js b/exercises/nodejs/test/golden-master.js index be0b307c..03ffc423 100644 --- a/exercises/nodejs/test/golden-master.js +++ b/exercises/nodejs/test/golden-master.js @@ -1,5 +1,5 @@ import fs from 'fs' -import gameRunner from '../src/game' +import runGame from '../src/game' import captureOutput from './capture-console-output' function createFolder(foldername) { @@ -19,7 +19,7 @@ const generateExpectedResult = (i) => { flags: 'w' }) - const output = captureOutput(() => gameRunner(i)) + const output = captureOutput(() => runGame(i)) masterFile.write(output) diff --git a/exercises/nodejs/test/golden-master.spec.js b/exercises/nodejs/test/golden-master.spec.js index 23157ce5..bdfe4975 100644 --- a/exercises/nodejs/test/golden-master.spec.js +++ b/exercises/nodejs/test/golden-master.spec.js @@ -1,13 +1,13 @@ import getResult from './golden-master' -import gameRunner from '../src/game' +import runGame from '../src/game' import captureOutput from './capture-console-output' describe('Running the golden master', () => { it('should run against 50 results from the golden master and be equivalent', () => { - for (let i = 0; i < 50; i++) { + for (let i = 0; i < 500; i++) { const result = getResult(i) - expect(result).toEqual(captureOutput(() => gameRunner(i))) + expect(result).toEqual(captureOutput(() => runGame(i))) } }) })