UNPKG

game-battleship

Version:
87 lines (69 loc) 2.42 kB
/** * This function is the battle field for the two players, it devises the logic for the players to target * each other turn by turn. * @param {Object} player1 : Player class * @param {Object} player2 : Player Class * @returns {Object} winner: Player */ function battle(player1, player2) { let player2TargetCounter = 0; let isPlayer1OutOfAmmo = false; let isPlayer2OutOfAmmo = false; let gameOver = false; let isPlayer2Hit = false; let winner; for (let p1TargetCounter = 0; p1TargetCounter < player1.targets.length; p1TargetCounter++) { if (gameOver) { break; } const player1tag = player1.getNextTarget(p1TargetCounter); isPlayer2Hit = player2.takeHit(player1tag); if (isPlayer2Hit && player2.isDefeated()) { console.log(`${player1.name} won the battle`); gameOver = true; winner = player1; break; } if (p1TargetCounter === (player1.targets.length - 1)) { if (isPlayer2Hit || isPlayer2OutOfAmmo) { console.log(`${player1.name} has no more missiles left to launch`); } isPlayer1OutOfAmmo = true; } if ((isPlayer1OutOfAmmo || !isPlayer2Hit)) { if (isPlayer2OutOfAmmo) { console.log(`${player2.name} has no more missiles left to launch`); } else { for (let p2TargetCounter = player2TargetCounter; p2TargetCounter < player2.targets.length; p2TargetCounter++) { const player2tag = player2.getNextTarget(p2TargetCounter); const isPlayer1Hit = player1.takeHit(player2tag); if (isPlayer1Hit && player1.isDefeated()) { console.log(`${player2.name} won the battle`); winner = player2; gameOver = true; break; } if (p2TargetCounter === (player2.targets.length - 1)) { if (isPlayer1Hit || isPlayer1OutOfAmmo) { console.log(`${player2.name} has no more missiles left to launch`); } isPlayer2OutOfAmmo = true; } if (!isPlayer1Hit) { if (!isPlayer1OutOfAmmo) { player2TargetCounter = p2TargetCounter + 1; break; } else { console.log(`${player1.name} has no more missiles left to launch`); } } } } } } if (!gameOver) { console.log("game is a draw"); } return winner; } module.exports = battle;