Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions content/contribution/RockPaperScissors/Script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
const emojiFor = { rock: "🪨", paper: "📄", scissors: "✂️" };

const choiceButtons = document.querySelectorAll(".choice");

const playerChoiceEl = document.querySelector("#player-choice");
const computerChoiceEl = document.querySelector("#computer-choice");
const playerGlyphEl = document.querySelector("#player-glyph");
const computerGlyphEl = document.querySelector("#computer-glyph");
const resultMessageEl = document.querySelector("#result-message");

const playerScoreEl = document.querySelector("#player-score");
const computerScoreEl = document.querySelector("#computer-score");

const resetButton = document.querySelector("#reset-button");

let playerScore = 0;
let computerScore = 0;

const options = ["rock", "paper", "scissors"];

function getComputerChoice() {
const randomIndex = Math.floor(Math.random() * options.length);
return options[randomIndex];
}

function getWinner(playerChoice, computerChoice) {
if (playerChoice === computerChoice) return "draw";
const playerWinsAgainst = { rock: "scissors", paper: "rock", scissors: "paper" };
return playerWinsAgainst[playerChoice] === computerChoice ? "player" : "computer";
}

function playGame(playerChoice) {
choiceButtons.forEach((b) => b.classList.toggle("selected", b.dataset.choice === playerChoice));

const computerChoice = getComputerChoice();
const winner = getWinner(playerChoice, computerChoice);

playerGlyphEl.textContent = emojiFor[playerChoice];
computerGlyphEl.textContent = emojiFor[computerChoice];
playerChoiceEl.textContent = playerChoice;
computerChoiceEl.textContent = computerChoice;

resultMessageEl.classList.remove("win", "lose", "draw");

if (winner === "player") {
playerScore++;
resultMessageEl.textContent = "You win!";
resultMessageEl.classList.add("win");
} else if (winner === "computer") {
computerScore++;
resultMessageEl.textContent = "Computer wins!";
resultMessageEl.classList.add("lose");
} else {
resultMessageEl.textContent = "It's a draw!";
resultMessageEl.classList.add("draw");
}

playerScoreEl.textContent = playerScore;
computerScoreEl.textContent = computerScore;
}

choiceButtons.forEach((choice) => {
choice.addEventListener("click", () => playGame(choice.dataset.choice));
});

resetButton.addEventListener("click", () => {
playerScore = 0;
computerScore = 0;

choiceButtons.forEach((b) => b.classList.remove("selected"));
playerGlyphEl.textContent = "–";
computerGlyphEl.textContent = "–";
playerChoiceEl.textContent = "—";
computerChoiceEl.textContent = "—";
resultMessageEl.textContent = "Make your choice!";
resultMessageEl.classList.remove("win", "lose", "draw");

playerScoreEl.textContent = "0";
computerScoreEl.textContent = "0";
});
72 changes: 72 additions & 0 deletions content/contribution/RockPaperScissors/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Rock Paper Scissors</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,600;9..144,700&family=Space+Grotesk:wght@400;500;600;700&display=swap"
rel="stylesheet">
<link rel="stylesheet" href="style.css">
</head>
<body>

<main class="table">
<header>
<div class="kicker">Game Night</div>
<h1>Rock, Paper, Scissors</h1>
<p class="instruction">Pick your move — first to feel lucky wins
the round.</p>
</header>

<div class="choices" role="group" aria-label="Choose your move">
<button class="choice" data-choice="rock" aria-label="Rock">
<span class="emoji" aria-hidden="true">🪨</span>Rock
</button>
<button class="choice" data-choice="paper" aria-label="Paper">
<span class="emoji" aria-hidden="true">📄</span>Paper
</button>
<button class="choice" data-choice="scissors"
aria-label="Scissors">
<span class="emoji" aria-hidden="true">✂️</span>Scissors
</button>
</div>

<div class="stage">
<div class="versus">
<div class="side">
<div class="label">YOU</div>
<div class="glyph" id="player-glyph">–</div>
<div class="name" id="player-choice">—</div>
</div>
<div class="vs-mark">vs</div>
<div class="side">
<div class="label">COMPUTER</div>
<div class="glyph" id="computer-glyph">–</div>
<div class="name" id="computer-choice">—</div>
</div>
</div>
<h2 id="result-message">Make your choice!</h2>
</div>

<div class="scoreboard">
<div class="score-block">
<div class="tally-label">PLAYER</div>
<div class="tally-num" id="player-score">0</div>
</div>
<div class="score-block">
<div class="tally-label">COMPUTER</div>
<div class="tally-num" id="computer-score">0</div>
</div>
</div>

<div class="actions">
<button id="reset-button">Reset game</button>
</div>
</main>

<script src="script.js"></script>
</body>
</html>
Loading