Javascript Game to Challenge Your Self
This Javascript pig game is a ideal challenge to challenge your javascript skills and learn some basics of the language.
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 5.2 KiB |
|
@ -0,0 +1,36 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
||||||
|
<link rel="stylesheet" href="style.css" />
|
||||||
|
<title>Pig Game</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<main>
|
||||||
|
<section class="player player--0 player--active">
|
||||||
|
<h2 class="name" id="name--0">Player 1</h2>
|
||||||
|
<p class="score" id="score--0">43</p>
|
||||||
|
<div class="current">
|
||||||
|
<p class="current-label">Current</p>
|
||||||
|
<p class="current-score" id="current--0">0</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section class="player player--1">
|
||||||
|
<h2 class="name" id="name--1">Player 2</h2>
|
||||||
|
<p class="score" id="score--1">24</p>
|
||||||
|
<div class="current">
|
||||||
|
<p class="current-label">Current</p>
|
||||||
|
<p class="current-score" id="current--1">0</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<img src="dice-5.png" alt="Playing dice" class="dice" />
|
||||||
|
<button class="btn btn--new">🔄 New game</button>
|
||||||
|
<button class="btn btn--roll">🎲 Roll dice</button>
|
||||||
|
<button class="btn btn--hold">📥 Hold</button>
|
||||||
|
</main>
|
||||||
|
<script src="script.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
After Width: | Height: | Size: 411 KiB |
|
@ -0,0 +1,111 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
//Selecting Elements
|
||||||
|
const player0El = document.querySelector('.player--0') // Player 1 class
|
||||||
|
const player1El = document.querySelector('.player--1') // Player 2 class
|
||||||
|
const score0El = document.getElementById('score--0');
|
||||||
|
const score1El = document.getElementById('score--1');
|
||||||
|
const current0El = document.getElementById('current--0');
|
||||||
|
const current1El = document.getElementById('current--1');
|
||||||
|
|
||||||
|
const diceEl = document.querySelector('.dice');
|
||||||
|
const btnNew = document.querySelector('.btn--new');
|
||||||
|
const btnRoll = document.querySelector('.btn--roll');
|
||||||
|
const btnHold = document.querySelector('.btn--hold')
|
||||||
|
|
||||||
|
let scores, currentScore, activePlayer, playing;
|
||||||
|
|
||||||
|
//Starting condition
|
||||||
|
const init = function () {
|
||||||
|
scores = [0, 0];
|
||||||
|
currentScore = 0;
|
||||||
|
activePlayer = 0;
|
||||||
|
playing = true;
|
||||||
|
|
||||||
|
score0El.textContent = 0;
|
||||||
|
score1El.textContent = 0;
|
||||||
|
current0El.textContent = 0;
|
||||||
|
current1El.textContent = 0;
|
||||||
|
|
||||||
|
diceEl.classList.add('hidden');
|
||||||
|
player0El.classList.remove('player--winner');
|
||||||
|
player1El.classList.remove('player--winner');
|
||||||
|
player0El.classList.add('player--active');
|
||||||
|
player1El.classList.remove('player--active');
|
||||||
|
};
|
||||||
|
init();
|
||||||
|
|
||||||
|
const switchPlayer = function()
|
||||||
|
{
|
||||||
|
if(playing){
|
||||||
|
//switch to the next player
|
||||||
|
document.getElementById(`current--${activePlayer}`).textContent = 0;
|
||||||
|
currentScore = 0;
|
||||||
|
activePlayer = activePlayer === 0 ? 1 : 0 // ternary operator if activePlayer === 0 if not change to 1 else make it 0
|
||||||
|
//Changing the Active Player Color
|
||||||
|
player0El.classList.toggle('player--active'); //toggle is another property in classList which add class if not available
|
||||||
|
player1El.classList.toggle('player--active');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Hiding the Image Dice
|
||||||
|
diceEl.classList.add('hidden'); // Hiding the Dice by adding the Hidden Class
|
||||||
|
|
||||||
|
//Rolling the Dice Functionality
|
||||||
|
btnRoll.addEventListener('click', function() {
|
||||||
|
|
||||||
|
if(playing){
|
||||||
|
|
||||||
|
//1. Generating a Random Dice Result
|
||||||
|
const dice = Math.trunc(Math.random() * 6 ) + 1; //dice is a not a global Variable - needs to change every time
|
||||||
|
|
||||||
|
//Displaying the Dice
|
||||||
|
diceEl.classList.remove('hidden'); //removing the hidden class
|
||||||
|
diceEl.src = `dice-${dice}.png`; //when dice number becomes random the src also changes according and display the number
|
||||||
|
|
||||||
|
//3. Check for rolled 1: if true, switch to next player
|
||||||
|
if(dice != 1){
|
||||||
|
//Add dice to current one
|
||||||
|
currentScore += dice; //currentScore = CurrentScore+dice
|
||||||
|
document.getElementById(`current--${activePlayer}`).textContent = currentScore;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
switchPlayer(); //calling the function
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
//Hold button Function
|
||||||
|
btnHold.addEventListener('click', function()
|
||||||
|
{
|
||||||
|
if(playing)
|
||||||
|
{
|
||||||
|
//1.Add current score to sctivr Player's score
|
||||||
|
scores[activePlayer] += currentScore; //scores[activePlayer] = scores[activePlayer + currentScore
|
||||||
|
document.getElementById(`score--${activePlayer}`).textContent = scores[activePlayer];
|
||||||
|
|
||||||
|
//2. Check if Player's score is >= 100
|
||||||
|
if(scores[activePlayer] >= 100)
|
||||||
|
{
|
||||||
|
//finish the Game
|
||||||
|
playing = false;
|
||||||
|
diceEl.classList.add('hidden');//removing the dice after won
|
||||||
|
document.querySelector(`.player--${activePlayer}`).classList.add('player--winner');
|
||||||
|
document.querySelector(`.player--${activePlayer}`).classList.remove('player--active');//removing the previous class
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//Switch to the next Player -
|
||||||
|
switchPlayer();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//reset Function calling
|
||||||
|
btnNew.addEventListener('click', init);
|
|
@ -0,0 +1,173 @@
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Nunito&display=swap');
|
||||||
|
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-size: 62.5%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: 'Nunito', sans-serif;
|
||||||
|
font-weight: 400;
|
||||||
|
height: 100vh;
|
||||||
|
color: #333;
|
||||||
|
background-image: linear-gradient(to top left, #753682 0%, #bf2e34 100%);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* LAYOUT */
|
||||||
|
main {
|
||||||
|
position: relative;
|
||||||
|
width: 100rem;
|
||||||
|
height: 60rem;
|
||||||
|
background-color: rgba(255, 255, 255, 0.35);
|
||||||
|
backdrop-filter: blur(200px);
|
||||||
|
filter: blur();
|
||||||
|
box-shadow: 0 3rem 5rem rgba(0, 0, 0, 0.25);
|
||||||
|
border-radius: 9px;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.player {
|
||||||
|
flex: 50%;
|
||||||
|
padding: 9rem;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
transition: all 0.75s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ELEMENTS */
|
||||||
|
.name {
|
||||||
|
position: relative;
|
||||||
|
font-size: 4rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
word-spacing: 2px;
|
||||||
|
font-weight: 300;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.score {
|
||||||
|
font-size: 8rem;
|
||||||
|
font-weight: 300;
|
||||||
|
color: #c7365f;
|
||||||
|
margin-bottom: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.player--active {
|
||||||
|
background-color: rgba(255, 255, 255, 0.4);
|
||||||
|
}
|
||||||
|
.player--active .name {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
.player--active .score {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.player--active .current {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.current {
|
||||||
|
background-color: #c7365f;
|
||||||
|
opacity: 0.8;
|
||||||
|
border-radius: 9px;
|
||||||
|
color: #fff;
|
||||||
|
width: 65%;
|
||||||
|
padding: 2rem;
|
||||||
|
text-align: center;
|
||||||
|
transition: all 0.75s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.current-label {
|
||||||
|
text-transform: uppercase;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font-size: 1.7rem;
|
||||||
|
color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.current-score {
|
||||||
|
font-size: 3.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ABSOLUTE POSITIONED ELEMENTS */
|
||||||
|
.btn {
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
color: #444;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: 1.8rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
cursor: pointer;
|
||||||
|
font-weight: 400;
|
||||||
|
transition: all 0.2s;
|
||||||
|
|
||||||
|
background-color: white;
|
||||||
|
background-color: rgba(255, 255, 255, 0.6);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
|
||||||
|
padding: 0.7rem 2.5rem;
|
||||||
|
border-radius: 50rem;
|
||||||
|
box-shadow: 0 1.75rem 3.5rem rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn::first-letter {
|
||||||
|
font-size: 2.4rem;
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 0.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn--new {
|
||||||
|
top: 4rem;
|
||||||
|
}
|
||||||
|
.btn--roll {
|
||||||
|
top: 39.3rem;
|
||||||
|
}
|
||||||
|
.btn--hold {
|
||||||
|
top: 46.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:active {
|
||||||
|
transform: translate(-50%, 3px);
|
||||||
|
box-shadow: 0 1rem 2rem rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dice {
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 16.5rem;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
height: 10rem;
|
||||||
|
box-shadow: 0 2rem 5rem rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.player--winner {
|
||||||
|
background-color: #2f2f2f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.player--winner .name {
|
||||||
|
font-weight: 700;
|
||||||
|
color: #c7365f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hidden Class */
|
||||||
|
|
||||||
|
.hidden{
|
||||||
|
display: none;
|
||||||
|
}
|