aboutsummaryrefslogtreecommitdiff
path: root/scripts/script.js
diff options
context:
space:
mode:
authorKumar Priyansh <[email protected]>2017-12-19 02:11:41 +0530
committerGitHub <[email protected]>2017-12-19 02:11:41 +0530
commit5e710f7cd56af55649e187e14186d4836bffe953 (patch)
treeb83cd10b70076d2ec9c24fd76a3a048dcec72f3d /scripts/script.js
parentbac86006cbeae081b66e16f6f1d034e9d39ad323 (diff)
downloadhacker-cards-game-5e710f7cd56af55649e187e14186d4836bffe953.tar.xz
hacker-cards-game-5e710f7cd56af55649e187e14186d4836bffe953.zip
Create script.js
Diffstat (limited to 'scripts/script.js')
-rw-r--r--scripts/script.js271
1 files changed, 271 insertions, 0 deletions
diff --git a/scripts/script.js b/scripts/script.js
new file mode 100644
index 0000000..178df69
--- /dev/null
+++ b/scripts/script.js
@@ -0,0 +1,271 @@
+// Set starting life totals here
+var playerLife = 10;
+var hackerLife = 10;
+
+// Message when the game is over
+var hackerWinnerMessage = "Game over: You got hacked!";
+var playerWinnerMessage = "You defeated the hacker!";
+
+
+// Game code starts here
+var playerStartLife = parseInt(playerLife);
+var hackerStartLife = parseInt(hackerLife);
+
+var roundFinished = false;
+var cardSelected = false;
+
+updateScores();
+
+document.querySelector(".game-board").classList.add("before-game");
+
+var allCardElements = document.querySelectorAll(".card");
+
+// Adds click handler to all player card elements
+for(var i = 0; i < allCardElements.length; i++) {
+ var card = allCardElements[i];
+ if(card.classList.contains("player-card")) {
+ card.addEventListener("click",function(e){
+ cardClicked(this);
+ });
+ }
+}
+
+
+// When a card is clicked
+function cardClicked(cardEl) {
+
+ if(cardSelected) { return; }
+ cardSelected = true;
+
+ cardEl.classList.add("played-card");
+
+ document.querySelector(".game-board").classList.add("card-selected");
+
+ // Wait 500ms to reveal the hacker power
+ setTimeout(function(){
+ revealHackerPower();
+ },500)
+
+ // Wait 750ms to reveal the player power
+ setTimeout(function(){
+ revealPlayerPower();
+ },800)
+
+ // Wait 1250ms to compare the card scoers
+ setTimeout(function(){
+ compareCards();
+ }, 1400);
+}
+
+// Shows the power level on the player card
+function revealPlayerPower(){
+ var playerCard = document.querySelector(".played-card");
+ playerCard.classList.add("reveal-power");
+}
+
+// Shows the power level on the hacker card
+function revealHackerPower(){
+ var hackerCard = document.querySelector(".hacker-card");
+ hackerCard.classList.add("reveal-power");
+}
+
+function compareCards(){
+ var playerCard = document.querySelector(".played-card");
+ var playerPowerEl = playerCard.querySelector(".power");
+
+ var hackerCard = document.querySelector(".hacker-card");
+ var hackerPowerEl = hackerCard.querySelector(".power");
+
+ var playerPower = parseInt(playerPowerEl.innerHTML);
+ var hackerPower = parseInt(hackerPowerEl.innerHTML);
+
+ var powerDifference = playerPower - hackerPower;
+
+ if (powerDifference < 0) {
+ // Player Loses
+ playerLife = playerLife + powerDifference;
+ hackerCard.classList.add("better-card");
+ playerCard.classList.add("worse-card");
+ document.querySelector(".player-stats .thumbnail").classList.add("ouch");
+ } else if (powerDifference > 0) {
+ // Player Wins
+ hackerLife = hackerLife - powerDifference;
+ playerCard.classList.add("better-card");
+ hackerCard.classList.add("worse-card");
+ document.querySelector(".hacker-stats .thumbnail").classList.add("ouch");
+ } else {
+ playerCard.classList.add("tie-card");
+ hackerCard.classList.add("tie-card");
+ }
+
+ updateScores();
+
+ if(playerLife <= 0) {
+ gameOver("Hacker");
+ } else if (hackerLife <= 0){
+ gameOver("Player")
+ }
+
+ roundFinished = true;
+
+ document.querySelector("button.next-turn").removeAttribute("disabled");
+}
+
+// Shows the winner message
+function gameOver(winner) {
+ document.querySelector(".game-board").classList.add("game-over");
+ document.querySelector(".winner-section").style.display = "flex";
+ document.querySelector(".winner-section").classList.remove("player-color");
+ document.querySelector(".winner-section").classList.remove("hacker-color");
+
+ if(winner == "Hacker") {
+ document.querySelector(".winner-message").innerHTML = hackerWinnerMessage;
+ document.querySelector(".winner-section").classList.add("hacker-color");
+ } else {
+ document.querySelector(".winner-message").innerHTML = playerWinnerMessage;
+ document.querySelector(".winner-section").classList.add("player-color");
+ }
+}
+
+
+// Starts the game
+function startGame() {
+ document.querySelector(".game-board").classList.remove("before-game");
+ document.querySelector(".game-board").classList.add("during-game");
+ playTurn();
+}
+
+
+// Start the game over from scratch
+function restartGame(){
+ document.querySelector(".game-board").classList.remove("game-over");
+ document.querySelector(".game-board").classList.remove("during-game");
+ document.querySelector(".game-board").classList.add("before-game");
+
+ document.querySelector(".winner-section").style.display = "none";
+ document.querySelector(".hacker-card").style.display = "none";
+
+ var cards = allCardElements;
+
+ document.querySelector("button").removeAttribute("disabled");
+
+ for(var i = 0; i < cards.length; i++) {
+ cards[i].style.display = "none";
+ }
+
+ playerLife = playerStartLife;
+ hackerLife = hackerStartLife;
+
+ roundFinished = true;
+ cardSelected = false;
+
+ updateScores();
+}
+
+// Updates the displayed life bar and life totals
+function updateScores(){
+
+ // Update life totals for each player
+ document.querySelector(".player-stats .life-total").innerHTML = playerLife;
+ document.querySelector(".hacker-stats .life-total").innerHTML = hackerLife;
+
+ // Update the player lifebar
+ var playerPercent = playerLife / playerStartLife * 100;
+ if (playerPercent < 0) {
+ playerPercent = 0;
+ }
+ document.querySelector(".player-stats .life-left").style.height = playerPercent + "%";
+
+ // Update the hacker lifebar
+ var hackerPercent = hackerLife / hackerStartLife * 100
+ if (hackerPercent < 0) {
+ hackerPercent = 0;
+ }
+ document.querySelector(".hacker-stats .life-left").style.height = hackerPercent + "%";
+}
+
+
+// Shuffles an array
+function shuffleArray(a) {
+ var j, x, i;
+ for (i = a.length; i; i--) {
+ j = Math.floor(Math.random() * i);
+ x = a[i - 1];
+ a[i - 1] = a[j];
+ a[j] = x;
+ }
+ return a;
+}
+
+
+// Plays one turn of the game
+function playTurn() {
+
+ roundFinished = true;
+ cardSelected = false;
+
+ document.querySelector(".game-board").classList.remove("card-selected");
+
+ // Remove "ouch" class from player and hacker thumbnails
+ document.querySelector(".hacker-stats .thumbnail").classList.remove("ouch");
+ document.querySelector(".player-stats .thumbnail").classList.remove("ouch");
+
+ // Hides the "next turn" button, will show again when turn is over
+ document.querySelector(".next-turn").setAttribute("disabled", "true");
+
+ for(var i = 0; i < allCardElements.length; i++) {
+ var card = allCardElements[i];
+ card.classList.remove("showCard");
+ }
+
+ setTimeout(function(){
+ revealCards();
+ }, 500);
+}
+
+function revealCards(){
+ var j = 0;
+ var cardIndexes = shuffleArray([0,1,2]);
+
+
+ // Get scenario cards
+ var randomScenarioIndex = Math.floor(Math.random() * (scenarios.length));
+ var scenario = scenarios[randomScenarioIndex];
+
+ var hackerCard = scenario.hackerCard;
+ var hackerCardEl = document.querySelector(".hacker-area .card");
+
+ // Contents of the player cards
+ var playerCards = scenario.playerCards;
+
+ for(var i = 0; i < allCardElements.length; i++) {
+ var card = allCardElements[i];
+
+ card.classList.remove("worse-card");
+ card.classList.remove("better-card");
+ card.classList.remove("played-card");
+ card.classList.remove("tie-card");
+ card.classList.remove("prepared");
+ card.classList.remove("reveal-power");
+
+ // Display the payer card details
+ if(card.classList.contains("player-card")) {
+ card.querySelector(".text").innerHTML = playerCards[cardIndexes[j]].description;
+ card.querySelector(".power").innerHTML = playerCards[cardIndexes[j]].power;
+ j++;
+ }
+
+ // Reveal each card one by one with a delay of 100ms
+ setTimeout(function(card, j){
+ return function() {
+ card.classList.remove("prepared");
+ card.style.display = "block";
+ card.classList.add("showCard");
+ }
+ }(card,i), parseInt(i+1) * 200);
+ }
+
+ // Display the hacker card
+ hackerCardEl.querySelector(".text").innerHTML = hackerCard.description;
+ hackerCardEl.querySelector(".power").innerHTML = hackerCard.power;
+}