Files
jaipur-score/js/script.js
2017-08-13 15:15:16 +02:00

298 lines
9.3 KiB
JavaScript

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 = true;
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 () {
if (!!jaipur.activePlayer && !!document.querySelector('.coin.selected')) {
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();
}
} else {
//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();
}
}
};
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({ value: parseInt(coins[i].innerText), type: 'goods', group: group});
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) {
// { value: parseInt(coins[i].innerText), type: 'goods', group: group}
// jaipur.activePlayer.bonus.push({ value: parseInt(coins[i].innerText), type: 'goods', group: group});
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);
}
}
}