function coin(value, group) { this.value = value; this.group = group; } function Bonus(group, value) { this.value = value; this.group = group; } function modal() { this.init = function () { this.handleClose(); }; this.handleClose = function () { document.querySelector('.modal .close').addEventListener('click', function () { this.parentNode.classList.toggle('on'); }); }; } function player(name, id) { this.score = 0; this.roundsWon = 0; this.coins = []; this.bonus = []; this.name = name; this.id = id; this.selector = '.player.player' + id; this.scoreSelector = '.player' + id + '_name'; this.hasCamelCoin = false; this.calculateScore = function () { var score = 0; for (var i in this.coins) { score += this.coins[i]; } for (var i in this.bonus) { score += this.bonus[i].value; } if (this.hasCamelCoin) { score += 5; } return this.score = score; }; this.setName = function (name) { this.name = name; this.updateNames(); }; this.updateNames = function () { document.querySelector(this.selector).innerText = this.name; document.querySelector(this.scoreSelector).innerText = this.name; }; this.wonRound = function () { this.roundsWon += 1; }; this.reset = function () { this.roundsWon = 0; this.score = 0; this.coins = []; }; this.removePoints = function () { var playerScore = document.querySelectorAll(this.selector + ' .score'); for (var i = 0; i < playerScore.length; i++) { playerScore[i].remove(); } }; this.drawPoints = function () { this.removePoints(); var scoreDiv = document.querySelector(this.selector); for (var i = 0; i < this.score; i++) { var score = document.createElement("span"); score.classList.add('score'); scoreDiv.appendChild(score) } }; this.addPoint = function () { this.score++; this.drawPoints(); } } function game(player1, player2, board) { this.round = 1; this.player1 = player1; this.player2 = player2; this.activePlayer = null; this.board = board; this.isOver = false; this.selectedCointType = false; this.setActivePlayer = function (playerId) { if (playerId == 1) { jaipur.activePlayer = this.player1; document.querySelector('.player.player1').classList.add("selected"); document.querySelector('.player.player2').classList.remove("selected"); jaipur.showAcceptButton(); } else if (playerId == 2) { jaipur.activePlayer = this.player2; document.querySelector('.player.player1').classList.remove("selected"); document.querySelector('.player.player2').classList.add("selected"); jaipur.showAcceptButton(); } else { document.querySelector('.player.player1').classList.remove("selected"); document.querySelector('.player.player2').classList.remove("selected"); jaipur.activePlayer = false; } return this.activePlayer; }; this.init = function () { this.initializePlayerButtons(); this.initializeAcceptButton(); this.initializeCoins(); this.initializeCamels(); this.initializeMenu(); }; this.reset = function () { this.player1.reset(); this.player2.reset(); this.isOver = false; }; /** * sprawdza czy runda jest już zakończona (jest 3 lub mniej typów dóbr) * @returns {boolean} */ this.isRoundOver = function () { var emptyRows = 0; for (var i in board.goods) { emptyRows += !board.goods[i].length ? 1 : 0; } return emptyRows >= 3; }; this.initializeMenu = function () { document.querySelector('#players').addEventListener('click', function () { jaipur.playerNamesModal(); }); document.querySelector('#change_name').addEventListener('click', function () { jaipur.player1.setName(document.querySelector('#player1_name').value); jaipur.player2.setName(document.querySelector('#player2_name').value); }); document.querySelector('#endturn').addEventListener('click', function () { jaipur.endTurn(); }); document.querySelector('#restart').addEventListener('click', function () { }); document.querySelector('#share').addEventListener('click', function () { }); }; this.playerNamesModal = function () { document.querySelector('#playerNames').classList.toggle('on'); }; this.initializePlayerButtons = function () { document.querySelector('.player.player1').addEventListener('click', function () { jaipur.setActivePlayer(1) }); document.querySelector('.player.player2').addEventListener('click', function () { jaipur.setActivePlayer(2) }); }; //pokazuje ikonkę bonusowej monety przy przycisku przydziel this.showBonusCoins = function () { var selectedCoins = document.querySelectorAll('.coin.selected').length; jaipur.hideBonusCoins(); if (selectedCoins >= 5 && !!jaipur.board.bonus.five.length) { document.querySelector('.bonus5').style.display = 'block'; return; } if (selectedCoins == 4 && !!jaipur.board.bonus.four.length) { document.querySelector('.bonus4').style.display = 'block'; return; } if (selectedCoins == 3 && !!jaipur.board.bonus.three.length) { document.querySelector('.bonus3').style.display = 'block'; return; } }; this.showAcceptButton = function () { if (!!jaipur.activePlayer && !!document.querySelector('.coin.selected') && ((document.querySelectorAll('.coin.selected').length >= 2 && ['silver', 'gold', 'diamond'].indexOf(jaipur.selectedCointType) > -1 ) || ( document.querySelectorAll('.coin.selected').length >= 1 && ['fabric', 'spice', 'leather'].indexOf(jaipur.selectedCointType) > -1 ) ) ) { document.querySelector('.accept').style.visibility = 'visible'; } }; this.hideAcceptButton = function () { document.querySelector('.accept').style.visibility = 'hidden'; jaipur.hideBonusCoins(); }; this.hideBonusCoins = function () { document.querySelector('.bonus5').style.display = 'none'; document.querySelector('.bonus4').style.display = 'none'; document.querySelector('.bonus3').style.display = 'none'; }; this.camelClick = function (player) { document.querySelector('.nobody').classList.remove('selected'); document.querySelector('.player1_camel').classList.remove('selected'); document.querySelector('.player2_camel').classList.remove('selected'); if (player == 1) { document.querySelector('.player1_camel').classList.add('selected'); jaipur.player1.hasCamelCoin = true; jaipur.player2.hasCamelCoin = false; } else if (player == 2) { document.querySelector('.player2_camel').classList.add('selected'); jaipur.player1.hasCamelCoin = false; jaipur.player2.hasCamelCoin = true; } else if (player == 0) { document.querySelector('.nobody').classList.add('selected'); jaipur.player1.hasCamelCoin = false; jaipur.player2.hasCamelCoin = false; } jaipur.player1.calculateScore(); jaipur.player2.calculateScore(); jaipur.showScore(); jaipur.showBonus(); }; this.showBonus = function () { document.querySelector('.bonus_section').classList.add('show'); }; this.coinClick = function () { if (!jaipur.selectedCointType) { jaipur.selectedCointType = this.dataset.group; } if (jaipur.selectedCointType == this.dataset.group) { //ustawienie active inactive na wszystkich grupach var groups = document.querySelectorAll('.group'); for (var i = 0; i < groups.length; i++) { groups[i].classList.add('inactive'); } //usuniecie inactive na tej jednej klikniętej grupie this.selectedCointType = this.dataset.group; document.querySelector('.group.' + this.dataset.group).classList.remove('inactive'); if (this.classList.contains('selected')) { //wyłaczenie selected na ostatniej wybranym żetonie document.querySelector('.coin.selected.' + this.dataset.group).classList.remove('selected'); //usunięcie przycisku przydziel jeśli zdejmujemy żetony i jest ich mniej wybranych niż dwa //w przypadku złota, srebra czy diamentów if ((document.querySelectorAll('.coin.selected').length < 2 && ['silver', 'gold', 'diamond'].indexOf(jaipur.selectedCointType) > -1 )) { jaipur.hideAcceptButton(); } //usunięcie blokady wybranego typu żetonu if (document.querySelectorAll('.coin.selected.' + this.dataset.group).length == 0) { jaipur.selectedCointType = false; for (var i = 0; i < groups.length; i++) { groups[i].classList.remove('inactive'); } jaipur.hideAcceptButton(); } jaipur.removeBlankCoin(jaipur.selectedCointType); } else { //jesli jest już wybranych 7 lub więcej monet to nie można więcej bo to max if (document.querySelectorAll('.coin.selected.' + jaipur.selectedCointType).length >= 7) { return false; } //ustawienie selected na elemencie z kliniętej grupy var coinsFromRow = document.querySelectorAll('.coin.' + this.dataset.group + ':not(.selected)'); [].slice.call(coinsFromRow).pop().classList.add('selected'); jaipur.showAcceptButton(); //dodanie monety o wartości zero jeśli wybrano wszystkie monety z danej grupy if (!!document.querySelectorAll('.coin.' + this.selectedCointType + ':not(.selected)').length == 0) { jaipur.addBlankCoin(this.selectedCointType); } } jaipur.showBonusCoins(); } }; this.addBlankCoin = function (groupName) { var blankCoin = document.createElement('span'); blankCoin.classList.add('coin'); blankCoin.classList.add(groupName); blankCoin.classList.add('blank'); blankCoin.innerText = '0'; blankCoin.dataset.group = groupName; blankCoin.addEventListener('click', jaipur.coinClick); var firstElementInGroup = document.querySelector('.coin.' + groupName); document.querySelector('.group.' + groupName).insertBefore(blankCoin, firstElementInGroup); }; this.removeBlankCoin = function (groupName) { if (!!document.querySelector('.coin.blank.' + groupName)) document.querySelector('.coin.blank.' + groupName).remove(); }; this.showScoreBoard = function () { document.querySelector('#scoreTable').classList.add('visible'); }; this.showScore = function () { document.querySelector('.player1_score').innerText = jaipur.player1.calculateScore(); document.querySelector('.player2_score').innerText = jaipur.player2.calculateScore(); document.querySelector('.score_section').classList.add('show'); }; this.initializeAcceptButton = function () { document.querySelector('.accept').addEventListener('click', this.clickAcceptButton) }; this.clickAcceptButton = function () { var coins = document.querySelectorAll('.coin.selected'); for (var i = 0; i < coins.length; i++) { var group = coins[i].dataset.group; jaipur.board.goods[group].pop(); jaipur.activePlayer.coins.push(parseInt(coins[i].innerText)); coins[i].remove(); } //przydzielanie bonusu var bonus = false; if (coins.length == 3) { var bonusGroup = 'three'; bonus = new Bonus(3, jaipur.board.bonus.three.pop()); //{3: jaipur.board.bonus.three.pop()}; } else if (coins.length == 4) { var bonusGroup = 'four'; bonus = new Bonus(4, jaipur.board.bonus.four.pop()); //{3: jaipur.board.bonus.three.pop()}; // bonus = {4: jaipur.board.bonus.four.pop()}; } else if (coins.length >= 5) { var bonusGroup = 'five'; bonus = new Bonus(5, jaipur.board.bonus.five.pop()); //{3: jaipur.board.bonus.three.pop()}; // bonus = {5: jaipur.board.bonus.five.pop()}; } if (!!bonus) { jaipur.activePlayer.bonus.push(bonus); } var groups = document.querySelectorAll('.group'); jaipur.selectedCointType = false; for (var i = 0; i < groups.length; i++) { groups[i].classList.remove('inactive'); } jaipur.hideAcceptButton(); jaipur.setActivePlayer(false); if (jaipur.isRoundOver()) { jaipur.endTurn(); } }; this.endTurn = function () { jaipur.showScoreBoard(); jaipur.drawBonusCoins(); }; this.drawBonusCoins = function () { for (var i in jaipur.player1.bonus) { var group = document.querySelector('.player1_bonus .bonus' + jaipur.player1.bonus[i].group); var bonusCoin = document.createElement("span"); group.appendChild(bonusCoin); } for (var i in jaipur.player2.bonus) { var group = document.querySelector('.player2_bonus .bonus' + jaipur.player2.bonus[i].group); var bonusCoin = document.createElement("span"); group.appendChild(bonusCoin); } }; this.initializeCamels = function () { document.querySelector('.player1_camel').addEventListener('click', function () { jaipur.camelClick(1); }); document.querySelector('.player2_camel').addEventListener('click', function () { jaipur.camelClick(2); }); document.querySelector('.nobody').addEventListener('click', function () { jaipur.camelClick(0); }); }; this.initializeCoins = function () { var coins = document.querySelectorAll('.coin'); for (var i = 0; i < coins.length; i++) { coins[i].addEventListener('click', jaipur.coinClick); } } }