Repository navigation
Expand file tree
/
Copy pathjavascript.js
More file actions
143 lines (123 loc) · 4.28 KB
/
Copy pathjavascript.js
File metadata and controls
143 lines (123 loc) · 4.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
const buttons = document.querySelectorAll('button');
const playerTopCard = document.querySelector('#player > .top');
const computerTopCard = document.querySelector('#computer > .top');
const playerBottomCard = document.querySelector('#player > .bottom');
const computerBottomCard = document.querySelector('#computer > .bottom');
const CHOICES = ['rock', 'paper', 'scissors'];
function updateScore(arr) {
const computerScoreText = document.querySelector('#computer-score');
const playerScoreText = document.querySelector('#player-score');
playerScoreText.textContent = 'Player: ' + arr[0];
computerScoreText.textContent = 'Computer: ' + arr[1];
}
// add event listeners to buttons that will play a round with the player's choice and return the result
function initGame() {
let promise = new Promise((resolve, reject) => {
buttons.forEach((btn) => {
btn.addEventListener('click', (e) => {
let computerPick = getComputerChoice();
let playerChoiceImgPath = 'images/' + e.target.id + '.jpg';
let computerChoiceImgPath = 'images/' + computerPick + '.jpg';
playerBottomCard.setAttribute('src', playerChoiceImgPath);
computerBottomCard.setAttribute('src', computerChoiceImgPath);
let gameResult = playRound(e.target.id, computerPick);
resolve(gameResult);
});
});
})
return promise;
}
function disableButtons() {
buttons.forEach((btn) => {
btn.disabled = true;
});
}
function enableButtons() {
buttons.forEach((btn) => {
btn.disabled = false;
});
}
function revealCards() {
disableButtons();
playerTopCard.classList.add('active');
computerTopCard.classList.add('active');
setTimeout(() => {
playerTopCard.classList.remove('active');
computerTopCard.classList.remove('active');
}, 2500);
//after animation finishes, enable buttons
setTimeout(() => {
enableButtons();
}, 3500);
}
function getComputerChoice() {
let choice = Math.floor(Math.random() * 3);
return CHOICES[choice];
}
function playRound(playerSelection, computerSelection) {
playerSelection = playerSelection.toLowerCase();
if (playerSelection === computerSelection) return 'tie';
switch (playerSelection) {
case 'rock':
if (computerSelection === 'scissors') return 'win';
return 'loss';
case 'paper':
if (computerSelection === 'rock') return 'win';
return 'loss';
case 'scissors':
if (computerSelection === 'paper') return 'win';
return 'loss';
}
return 'invalid';
}
function endGame(result) {
// create a div, put result text in it, and fade out the game container
const body = document.querySelector('body');
let container = document.querySelector('.container');
let endText = document.createElement('h1');
let endTextContainer = document.createElement('div');
endTextContainer.classList.add('end-text', 'invisible');
endTextContainer.classList.remove('invisible');
endTextContainer.appendChild(endText);
body.appendChild(endTextContainer);
endText.textContent = result;
container.classList.add('removed');
setTimeout( () => {
container.remove();
},2000);
console.log(result);
}
async function runGame() {
// runs 5 rounds of RPS
// score = [wins, losses, ties]
let score = [0, 0, 0];
while (score[0] < 5 && score[1] < 5) {
let result = await initGame();
revealCards();
switch (result) {
case 'win':
score[0]++;
break;
case 'loss':
score[1]++;
break;
case 'tie':
score[2]++;
break;
case 'invalid':
i--;
break;
}
console.log('Current score out of 5 rounds: ' + score[0] + ' wins, ' + score[1] + ' losses, ' + score[2] + ' ties.');
setTimeout(() => {
updateScore(score);
}, 1200);
}
let gameResult = (score[0] > score[1]) ? 'You won!' : 'You lost.';
disableButtons();
setTimeout(() => {
endGame(gameResult);
}, 2000);
}
runGame();
// endGame('test');