-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
117 lines (96 loc) Β· 3.98 KB
/
script.js
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
/*
Rock Paper Scissors SOLUTION ππ₯
Concepts covered in this project
π For loops
π Dom Manipulation
π Variables
π Conditionals (if else if)
π Template Literals
π Event Listeners
π Higher order Function (Math.random())
*/
// ** getComputerChoice randomly selects between `rock` `paper` `scissors` and returns that string **
// getComputerChoice() π 'Rock'
// getComputerChoice() π 'Scissors'
function getComputerChoice() {
let rpsChoices = ['Rock', 'Paper', 'Scissors']
let computerChoice = rpsChoices[Math.floor(Math.random() * 3)]
return computerChoice
}
// ** getResult compares playerChoice & computerChoice and returns the score accordingly **
// human wins - getResult('Rock', 'Scissors') π 1
// human loses - getResult('Scissors', 'Rock') π -1
// human draws - getResult('Rock', 'Rock') π 0
function getResult(playerChoice, computerChoice) {
// return the result of score based on if you won, drew, or lost
let score;
// All situations where human draws, set `score` to 0
if (playerChoice === computerChoice) {
score = 0
} else if (playerChoice === 'Rock' && computerChoice === 'Scissors') {
score = 1
} else if (playerChoice === "Paper" && computerChoice === "Rock") {
score = 1
} else if (playerChoice === "Scissors" && computerChoice === "Paper") {
score = 1
// Otherwise human loses (aka set score to -1)
} else {
score = -1
}
// return score
return score
}
// ** showResult updates the DOM to `You Win!` or `You Lose!` or `It's a Draw!` based on the score. Also shows Player Choice vs. Computer Choice**
function showResult(score, playerChoice, computerChoice) {
// Hint: on a score of -1
// You should do result.innerText = 'You Lose!'
// Don't forget to grab the div with the 'result' id!
let result = document.getElementById('result')
switch (score) {
case -1:
result.innerText = `You Lose!`
break;
case 0:
result.innerText = `It's a Draw!`
break;
case 1:
result.innerText = `You Win!`
break;
}
let playerScore = document.getElementById('player-score')
let hands = document.getElementById('hands')
playerScore.innerText = `${Number(playerScore.innerText) + score}`
hands.innerText = `π± ${playerChoice} vs π€ ${computerChoice}`
}
// ** Calculate who won and show it on the screen **
function onClickRPS(playerChoice) {
const computerChoice = getComputerChoice()
const score = getResult(playerChoice.value, computerChoice)
showResult(score, playerChoice.value, computerChoice)
}
// ** Make the RPS buttons actively listen for a click and do something once a click is detected **
function playGame() {
// use querySelector to select all RPS Buttons
let rpsButtons = document.querySelectorAll('.rpsButton')
// * Adds an on click event listener to each RPS button and every time you click it, it calls the onClickRPS function with the RPS button that was last clicked *
// 1. loop through the buttons using a forEach loop
// 2. Add a 'click' event listener to each button
// 3. Call the onClickRPS function every time someone clicks
// 4. Make sure to pass the currently selected rps button as an argument
rpsButtons.forEach(rpsButton => {
rpsButton.onclick = () => onClickRPS(rpsButton)
})
// Add a click listener to the end game button that runs the endGame() function on click
let endGameButton = document.getElementById('endGameButton')
endGameButton.onclick = () => endGame()
}
// ** endGame function clears all the text on the DOM **
function endGame() {
let playerScore = document.getElementById('player-score')
let hands = document.getElementById('hands')
let result = document.getElementById('result')
playerScore.innerText = ''
hands.innerText = ''
result.innerText = ''
}
playGame()