function coin(value, group) { this.value = value; this.group = group; } 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.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]; } if (this.hasCamelCoin) { score += 5; } return this.score = score; }; 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.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; console.info(board.goods[i]); } return emptyRows >= 3; }; this.initializePlayerButtons = function () { document.querySelector('.player.player1').addEventListener('click', function () { jaipur.setActivePlayer(1) }); document.querySelector('.player.player2').addEventListener('click', function () { jaipur.setActivePlayer(2) }); }; this.showAcceptButton = function () { console.info(jaipur.selectedCointType); if (!!jaipur.activePlayer && !!document.querySelector('.coin.selected') && ((document.querySelectorAll('.coin.selected').length >= 2 && !!['silver', 'gold', 'diamond'].indexOf(jaipur.selectedCointType) ) || ( document.querySelectorAll('.coin.selected').length >= 1 && !!['fabric', 'spice', 'leather'].indexOf(jaipur.selectedCointType) ) ) ) { document.querySelector('.accept').style.visibility = 'visible'; } }; this.hideAcceptButton = function () { document.querySelector('.accept').style.visibility = 'hidden'; }; 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(); }; 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 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); } } } }; 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(); } var bonus = false; if (coins.length == 3) { var bonusGroup = 'three'; bonus = jaipur.board.bonus.three.pop() } else if (coins.length == 4) { var bonusGroup = 'four'; bonus = jaipur.board.bonus.four.pop() } else if (coins.length >= 5) { var bonusGroup = 'five'; bonus = 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.showScoreBoard(); } }; 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); } } }