Rock Paper and Scissor Game using JavaScript (original) (raw)
Last Updated : 18 Apr, 2025
Rock, paper, and scissors game is a simple fun game in which both players have to make a rock, paper, or scissors. It has only two possible outcomes a draw or a win for one player and a loss for the other player.
Prerequisites:
Approach
- Start by creating the HTML structure for your Rock, Paper, and Scissor Game
- Style your website using CSS to enhance its visual appeal and responsiveness.
- In JavaScript, Create a function **game() that will contain all the logic of the game.
- Inside the function declare three variables **playerScore, **computerScore, and moves which will keep the record of the _player's score, computer's score, and moves completed respectively.
- Create a function **playGame() and inside the function use DOM manipulation to get hold of all the three buttons we created in HTML for player input. Create an array playerOptions which will contain all three buttons as its elements. Similarly, create an array for computer options.
- Use **forEach() loop on playerOptions so that we can add an event listener on all buttons with a single piece of code. Inside the loop increment moves counter by 1 display moves left on the screen by subtracting moves from 10. Generate a random value for the computer option and compare it with the player's input.
- Create a function **winner() which will receive two arguments one the player's input and the other the computer's option The function will decide who wins the point among the player and computer.
- Create a function gameOver() which will display the final result with reload button. The function will be called when moves will become equals to 10.
- Call the playGame() function inside the game() function.
**Example: This example shoes the implementation of the above-explained appraoch.
HTML `
Rock Paper Scissor <!--Display Score of player and computer -->
<div class="score">
<div class="playerScore">
<h2>Player</h2>
<p class="p-count count">0</p>
</div>
<div class="computerScore">
<h2>Computer</h2>
<p class="c-count count">0</p>
</div>
</div>
<div class="move">Choose your move</div>
<!--Number of moves left before game ends -->
<div class="movesleft">Moves Left: 10 </div>
<!--Options available to player to play game -->
<div class="options">
<button class="rock">Rock</button>
<button class="paper">Paper</button>
<button class="scissor">Scissors</button>
</div>
<!--Final result of game -->
<div class="result"></div>
<!--Reload the game -->
<button class="reload"></button>
</section>
<script src="app.js"></script>
CSS
/* styles.css / / universal selector - Applies to whole document */ { padding: 0; margin: 0; box-sizing: border-box; background: #082c6c; color: #fff; } / To center everything in game */ .game{ display: flex; flex-direction: column; height: 100vh; width: 100vw; justify-content: center; align-items: center; }
/* Title of the game */ .title{ position: absolute; top: 0; font-size: 4rem; z-index: 2; }
/* Score Board */ .score{ display: flex; width: 30vw; justify-content: space-evenly; position: absolute; top: 70px; z-index: 1; }
/* Score */ .p-count,.c-count{ text-align: center; font-size: 1.5rem; margin-top: 1rem; }
/* displaying three buttons in one line */ .options{ display: flex; width: 50vw; justify-content: space-evenly; margin-top: 2rem; }
/* Styling on all three buttons */ .rock, .paper, .scissor{ padding: 0.8rem; width: 100px; border-radius: 10px; background: green; outline: none; border-color: green; border: none; cursor: pointer; }
.move{ font-size: 2rem; font-weight: bold; }
/* Reload button style */ .reload { display: none; margin-top: 2rem; padding: 1rem; background: green; outline: none; border: none; border-radius: 10px; cursor: pointer; }
.result{ margin-top: 20px; font-size: 1.2rem; }
/* Responsive Design */
@media screen and (max-width: 612px)
{
.title{
text-align: center;
}
.score{
position: absolute;
top: 200px;
width: 100vw;
}
.options{
width: 100vw;
}
` JavaScript ``
// app.js
// Complete logic of game inside this function const game = () => { let playerScore = 0; let computerScore = 0; let moves = 0;
// Function to
const playGame = () => {
const rockBtn = document.querySelector('.rock');
const paperBtn = document.querySelector('.paper');
const scissorBtn = document.querySelector('.scissor');
const playerOptions = [rockBtn, paperBtn, scissorBtn];
const computerOptions = ['rock', 'paper', 'scissors']
// Function to start playing game
playerOptions.forEach(option => {
option.addEventListener('click', function () {
const movesLeft = document.querySelector('.movesleft');
moves++;
movesLeft.innerText = `Moves Left: ${10 - moves}`;
const choiceNumber = Math.floor(Math.random() * 3);
const computerChoice = computerOptions[choiceNumber];
// Function to check who wins
winner(this.innerText, computerChoice)
// Calling gameOver function after 10 moves
if (moves == 10) {
gameOver(playerOptions, movesLeft);
}
})
})
}
// Function to decide winner
const winner = (player, computer) => {
const result = document.querySelector('.result');
const playerScoreBoard = document.querySelector('.p-count');
const computerScoreBoard = document.querySelector('.c-count');
player = player.toLowerCase();
computer = computer.toLowerCase();
if (player === computer) {
result.textContent = 'Tie'
}
else if (player == 'rock') {
if (computer == 'paper') {
result.textContent = 'Computer Won';
computerScore++;
computerScoreBoard.textContent = computerScore;
} else {
result.textContent = 'Player Won'
playerScore++;
playerScoreBoard.textContent = playerScore;
}
}
else if (player == 'scissors') {
if (computer == 'rock') {
result.textContent = 'Computer Won';
computerScore++;
computerScoreBoard.textContent = computerScore;
} else {
result.textContent = 'Player Won';
playerScore++;
playerScoreBoard.textContent = playerScore;
}
}
else if (player == 'paper') {
if (computer == 'scissors') {
result.textContent = 'Computer Won';
computerScore++;
computerScoreBoard.textContent = computerScore;
} else {
result.textContent = 'Player Won';
playerScore++;
playerScoreBoard.textContent = playerScore;
}
}
}
// Function to run when game is over
const gameOver = (playerOptions, movesLeft) => {
const chooseMove = document.querySelector('.move');
const result = document.querySelector('.result');
const reloadBtn = document.querySelector('.reload');
playerOptions.forEach(option => {
option.style.display = 'none';
})
chooseMove.innerText = 'Game Over!!'
movesLeft.style.display = 'none';
if (playerScore > computerScore) {
result.style.fontSize = '2rem';
result.innerText = 'You Won The Game'
result.style.color = '#308D46';
}
else if (playerScore < computerScore) {
result.style.fontSize = '2rem';
result.innerText = 'You Lost The Game';
result.style.color = 'red';
}
else {
result.style.fontSize = '2rem';
result.innerText = 'Tie';
result.style.color = 'grey'
}
reloadBtn.innerText = 'Restart';
reloadBtn.style.display = 'flex'
reloadBtn.addEventListener('click', () => {
window.location.reload();
})
}
// Calling playGame function inside game
playGame();
}
// Calling the game function game();
``
**Output: