A Pen by Stan Williams on CodePen.
Created
September 2, 2024 18:29
-
-
Save stanwmusic/7429b4bcdc41157404c5b7a3d9578848 to your computer and use it in GitHub Desktop.
Halloween Card Matching Game
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>Mix-Or-Match</title> | |
</head> | |
<body> | |
<h1 class="page-title">Mix-Or-Match</h1> | |
<div class="overlay-text visible"> | |
Click to Start | |
</div> | |
<div id="game-over-text" class="overlay-text"> | |
GAME OVER | |
<span class="overlay-text-small">Click to Restart</span> | |
</div> | |
<div id="victory-text" class="overlay-text"> | |
VICTORY | |
<span class="overlay-text-small">Click to Restart</span> | |
</div> | |
<div class="game-container"> | |
<div class="game-info-container"> | |
<div class="game-info"> | |
Time <span id="time-remaining">100</span> | |
</div> | |
<div class="game-info"> | |
Flips <span id="flips">0</span> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Bat.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Bat.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Bones.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Bones.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cauldron.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cauldron.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Dracula.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Dracula.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Eye.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Eye.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Ghost.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Ghost.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Pumpkin.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Pumpkin.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Skull.png"> | |
</div> | |
</div> | |
<div class="card"> | |
<div class="card-back card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Cobweb.png"> | |
<img class="spider" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Spider.png"> | |
</div> | |
<div class="card-front card-face"> | |
<img class="cob-web cob-web-top-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-top-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-left" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="cob-web cob-web-bottom-right" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/CobwebGrey.png"> | |
<img class="card-value" src="https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Images/Skull.png"> | |
</div> | |
</div> | |
</div> | |
</body> | |
<!-- Side Links Only --> | |
<div class="side-links"> | |
<a href="https://youtu.be/28VfzEiJgy4" target="_blank" class="side-link side-link-youtube"> | |
<i class="fab fa-youtube-square side-link-icon"></i> | |
<span class="side-link-text">View Tutorial</span> | |
</a> | |
<a href="https://github.com/WebDevSimplified" target="_blank" class="side-link side-link-github side-link-icon"> | |
<i class="fab fa-github-square"></i> | |
<span class="side-link-text">View GitHub</span> | |
</a> | |
<a href="https://twitter.com/DevSimplified" target="_blank" class="side-link side-link-twitter"> | |
<i class="fab fa-twitter-square side-link-icon"></i> | |
<span class="side-link-text">View Twitter</span> | |
</a> | |
</div> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class AudioController { | |
constructor() { | |
this.bgMusic = new Audio('https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Audio/creepy.mp3'); | |
this.flipSound = new Audio('https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Audio/flip.wav'); | |
this.matchSound = new Audio('https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Audio/match.wav'); | |
this.victorySound = new Audio('https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Audio/victory.wav'); | |
this.gameOverSound = new Audio('Assets/Audio/gameOver.wav'); | |
this.bgMusic.volume = 0.5; | |
this.bgMusic.loop = true; | |
} | |
startMusic() { | |
this.bgMusic.play(); | |
} | |
stopMusic() { | |
this.bgMusic.pause(); | |
this.bgMusic.currentTime = 0; | |
} | |
flip() { | |
this.flipSound.play(); | |
} | |
match() { | |
this.matchSound.play(); | |
} | |
victory() { | |
this.stopMusic(); | |
this.victorySound.play(); | |
} | |
gameOver() { | |
this.stopMusic(); | |
this.gameOverSound.play(); | |
} | |
} | |
class MixOrMatch { | |
constructor(totalTime, cards) { | |
this.cardsArray = cards; | |
this.totalTime = totalTime; | |
this.timeRemaining = totalTime; | |
this.timer = document.getElementById('time-remaining') | |
this.ticker = document.getElementById('flips'); | |
this.audioController = new AudioController(); | |
} | |
startGame() { | |
this.totalClicks = 0; | |
this.timeRemaining = this.totalTime; | |
this.cardToCheck = null; | |
this.matchedCards = []; | |
this.busy = true; | |
setTimeout(() => { | |
this.audioController.startMusic(); | |
this.shuffleCards(this.cardsArray); | |
this.countdown = this.startCountdown(); | |
this.busy = false; | |
}, 500) | |
this.hideCards(); | |
this.timer.innerText = this.timeRemaining; | |
this.ticker.innerText = this.totalClicks; | |
} | |
startCountdown() { | |
return setInterval(() => { | |
this.timeRemaining--; | |
this.timer.innerText = this.timeRemaining; | |
if(this.timeRemaining === 0) | |
this.gameOver(); | |
}, 1000); | |
} | |
gameOver() { | |
clearInterval(this.countdown); | |
this.audioController.gameOver(); | |
document.getElementById('game-over-text').classList.add('visible'); | |
} | |
victory() { | |
clearInterval(this.countdown); | |
this.audioController.victory(); | |
document.getElementById('victory-text').classList.add('visible'); | |
} | |
hideCards() { | |
this.cardsArray.forEach(card => { | |
card.classList.remove('visible'); | |
card.classList.remove('matched'); | |
}); | |
} | |
flipCard(card) { | |
if(this.canFlipCard(card)) { | |
this.audioController.flip(); | |
this.totalClicks++; | |
this.ticker.innerText = this.totalClicks; | |
card.classList.add('visible'); | |
if(this.cardToCheck) { | |
this.checkForCardMatch(card); | |
} else { | |
this.cardToCheck = card; | |
} | |
} | |
} | |
checkForCardMatch(card) { | |
if(this.getCardType(card) === this.getCardType(this.cardToCheck)) | |
this.cardMatch(card, this.cardToCheck); | |
else | |
this.cardMismatch(card, this.cardToCheck); | |
this.cardToCheck = null; | |
} | |
cardMatch(card1, card2) { | |
this.matchedCards.push(card1); | |
this.matchedCards.push(card2); | |
card1.classList.add('matched'); | |
card2.classList.add('matched'); | |
this.audioController.match(); | |
if(this.matchedCards.length === this.cardsArray.length) | |
this.victory(); | |
} | |
cardMismatch(card1, card2) { | |
this.busy = true; | |
setTimeout(() => { | |
card1.classList.remove('visible'); | |
card2.classList.remove('visible'); | |
this.busy = false; | |
}, 1000); | |
} | |
shuffleCards(cardsArray) { | |
for (let i = cardsArray.length - 1; i > 0; i--) { | |
const randIndex = Math.floor(Math.random() * (i + 1)); | |
[cardsArray[i], cardsArray[randIndex]] = [cardsArray[randIndex], cardsArray[i]]; | |
} | |
cardsArray = cardsArray.map((card, index) => { | |
card.style.order = index; | |
}); | |
} | |
getCardType(card) { | |
return card.getElementsByClassName('card-value')[0].src; | |
} | |
canFlipCard(card) { | |
return !this.busy && !this.matchedCards.includes(card) && card !== this.cardToCheck; | |
} | |
} | |
if (document.readyState == 'loading') { | |
document.addEventListener('DOMContentLoaded', ready) | |
} else { | |
ready() | |
} | |
function ready() { | |
let overlays = Array.from(document.getElementsByClassName('overlay-text')); | |
let cards = Array.from(document.getElementsByClassName('card')); | |
let game = new MixOrMatch(100, cards); | |
overlays.forEach(overlay => { | |
overlay.addEventListener('click', () => { | |
overlay.classList.remove('visible'); | |
game.startGame(); | |
}); | |
}); | |
cards.forEach(card => { | |
card.addEventListener('click', () => { | |
game.flipCard(card); | |
}); | |
}); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@font-face { | |
font-family: "Creepy"; | |
src: url("https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Fonts/Creepy.woff?raw=true") format("woff"), url("https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Fonts/Creepy.woff2?raw=true") format("woff2") | |
} | |
@font-face { | |
font-family: "Lunacy"; | |
src: url("https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Fonts/Lunacy.woff") format("woff"), url("https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Fonts/Lunacy.woff2") format("woff2") | |
} | |
* { | |
box-sizing: border-box; | |
} | |
html { | |
min-height: 100vh; | |
cursor: url("https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Cursors/Ghost.cur"), auto; | |
} | |
body { | |
margin: 0; | |
background: radial-gradient(#9D5900, #3D2200); | |
} | |
.page-title { | |
color: #FF6D00; | |
font-family: Creepy, serif; | |
font-weight: normal; | |
text-align: center; | |
font-size: 6em; | |
} | |
.game-info-container { | |
grid-column: 1 / -1; | |
display: flex; | |
justify-content: space-between; | |
} | |
.game-info { | |
font-family: Lunacy, serif; | |
color: #FFBB89; | |
font-size: 4em; | |
} | |
.game-container { | |
display: grid; | |
grid-template-columns: repeat(4, auto); | |
grid-gap: 10px; | |
margin: 50px; | |
justify-content: center; | |
perspective: 500px; | |
} | |
.card { | |
position: relative; | |
height: 175px; | |
width: 125px; | |
} | |
.card:hover { | |
cursor: url("https://raw.githubusercontent.com/WebDevSimplified/Mix-Or-Match/master/Assets/Cursors/GhostHover.cur"), auto; | |
} | |
.card-face { | |
position: absolute; | |
width: 100%; | |
height: 100%; | |
display: flex; | |
justify-content: center; | |
align-items: center; | |
overflow: hidden; | |
backface-visibility: hidden; | |
border-radius: 12px; | |
border-width: 1px; | |
border-style: solid; | |
transition: transform 500ms ease-in-out; | |
} | |
.card.visible .card-back { | |
transform: rotateY(-180deg); | |
} | |
.card.visible .card-front { | |
transform: rotateY(0) | |
} | |
.card.matched .card-value { | |
animation: dance 1s linear infinite 500ms; | |
} | |
.overlay-text { | |
display: none; | |
position: fixed; | |
top: 0; | |
left: 0; | |
right: 0; | |
bottom: 0; | |
justify-content: center; | |
align-items: center; | |
z-index: 100; | |
color: #FF6D00; | |
font-family: Creepy, serif; | |
} | |
.overlay-text-small { | |
font-size: .3em; | |
} | |
.overlay-text.visible { | |
display: flex; | |
flex-direction: column; | |
animation: overlay-grow 500ms forwards; | |
} | |
@keyframes overlay-grow { | |
from { | |
background-color: rgba(0, 0, 0, 0); | |
font-size: 0; | |
} | |
to { | |
background-color: rgba(0, 0, 0, .8); | |
font-size: 10em; | |
} | |
} | |
@keyframes dance { | |
0%, 100% { | |
transform: rotate(0); | |
} | |
25% { | |
transform: rotate(-30deg); | |
} | |
75% { | |
transform: rotate(30deg); | |
} | |
} | |
.card-back { | |
background-color: black; | |
border-color: #FF6D00; | |
} | |
.card-front { | |
background-color: #FFBB89; | |
border-color: #333; | |
transform: rotateY(180deg); | |
} | |
.card-value { | |
transition: transform 100ms ease-in-out; | |
transform: scale(.9); | |
} | |
.card-front:hover .card-value { | |
transform: scale(1); | |
} | |
.cob-web { | |
position: absolute; | |
width: 47px; | |
height: 47px; | |
transition: width 100ms ease-in-out, height 100ms ease-in-out; | |
} | |
.card-face:hover .cob-web { | |
width: 52px; | |
height: 52px; | |
} | |
.cob-web-top-left { | |
transform: rotate(270deg); | |
top: 0; | |
left: 0; | |
} | |
.cob-web-top-right { | |
top: 0; | |
right: 0; | |
} | |
.cob-web-bottom-left { | |
transform: rotate(180deg); | |
bottom: 0; | |
left: 0; | |
} | |
.cob-web-bottom-right { | |
transform: rotate(90deg); | |
bottom: 0; | |
right: 0; | |
} | |
.spider { | |
align-self: flex-start; | |
transform: translateY(-10px); | |
transition: transform 100ms ease-in-out; | |
} | |
.card-back:hover .spider { | |
transform: translateY(0) | |
} | |
@media (max-width: 600px) { | |
.game-container { | |
grid-template-columns: repeat(2, auto); | |
} | |
.game-info-container { | |
flex-direction: column; | |
align-items: center; | |
} | |
} | |
/* Background Styles Only */ | |
@import url('https://fonts.googleapis.com/css?family=Raleway'); | |
.side-links { | |
position: absolute; | |
top: 15px; | |
right: 15px; | |
} | |
.side-link { | |
font-family: Raleway; | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
text-decoration: none; | |
margin-bottom: 10px; | |
color: white; | |
width: 180px; | |
padding: 10px 0; | |
border-radius: 10px; | |
} | |
.side-link-youtube { | |
background-color: red; | |
} | |
.side-link-twitter { | |
background-color: #1DA1F2; | |
} | |
.side-link-github { | |
background-color: #6e5494; | |
} | |
.side-link-text { | |
margin-left: 10px; | |
font-size: 18px; | |
} | |
.side-link-icon { | |
color: white; | |
font-size: 30px; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<link href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" rel="stylesheet" /> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment