Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Duane W Tama #2

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
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
112 changes: 112 additions & 0 deletions css/style.css
Original file line number Diff line number Diff line change
@@ -1,11 +1,123 @@
/* global styles */

* {
box-sizing: border-box;
/* border: 1px solid red; */
}
/* element styles */

body {
/* fonts */
margin: 0;
min-height: 100 vh;
background-color: #e6e6e6;
font-family: Arial, Helvetica, sans-serif;
font-size: 16px;
}

h1 {
font-size: 3.5rem;
/* margin: 0; */
}

/* layout */

.container {
/* border: 3px solid blue; */
width: 90vw;
margin: 0 auto;
}
.button-wrapper {
display: flex;
justify-content: space-around;
gap: 1rem;
}

.stats-wrapper {

}

.game-state-wrapper {
display: flex;
justify-content: center;
}
/* headings */

.game-title {
text-align: center;
}
/* buttons */
.button-wrapper button {
background-color: #0b99ff;
color: white;
padding: 1.3rem 1.6rem;
font-size: 1.8rem;
border: 0.2rem solid #134a71;
border-radius: 0.25rem;
}

.button-wrapper button:activ{
background-color: #197bc2;
border: 0.2rem solid #0b3553;
}

/* images */

.game-graphic {
max-height: 20vmin;
}

.game-graphic:hover {
animation: shake 0.5s;
animation-iteration-count: infinite;
}

@keyframes shake {
0% {
transform: translate(1px, 1px)
rotate(0deg);
}

10% {
transofrm: translate(-1px, -2px)
rotate(-1deg);
}

20% {
transform: translate(-3px, 0px)
rotate(1deg)
}

30% {
transform: translate(3px, 2px)
rotate(0deg)
}

40% {
transform: translate(1px, -1px) rotate(1deg);
}
50% {
transform: translate(-1px, 2px) rotate(-1deg);
}
60% {
transform: translate(-3px, 1px) rotate(0deg);
}
70% {
transform: translate(3px, 1px) rotate(-1deg);
}
80% {
transform: translate(-1px, -1px) rotate(1deg);
}
90% {
transform: translate(1px, 2px) rotate(0deg);
}
100% {
transform: translate(1px, -2px) rotate(-1deg);
}
}
40 changes: 29 additions & 11 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,16 +1,34 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/style.css" />
<script src="./js/main.js" defer></script>
</head>

<body>
<h1>Tamagotchi Code Along</h1>
</body>
</head>

</html>
<body>
<header>
<h1 class="game-title">Tamagotchi</h1>
</header>
<main class="container">
<section id="controller" class="button-wrapper">
<!-- button wrapper -->
<button>feed</button>
<button>play</button>
<button>sleep</button>
</section>
<section id="stat-display" class="stats-wrapper">
<!-- stats display -->
<p>Happiness: <span id="boredom-stat">10</span></p>
<p>Hunger: <span id="hunger-stat">0</span></p>
<p>Tiredness: <span id="sleepiness-stat">5</span></p>
</section>
<section id="game-state" class="game-state-wrapper">
<!-- game state -->
<img id="tama-graphic" src="./imgs/wolf-1.png" class="game-graphic">
</section>
</main>
</body>
</html>
125 changes: 122 additions & 3 deletions js/main.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,134 @@
console.log('js:loaded')
console.log("js:loaded");

/*----- constants -----*/


const INIT_STATE = {
boredom: 0,
hunger: 0,
sleepiness: 0,
};
/*----- state variables -----*/

let boredom; //integer
let hunger; // integer
let sleepiness; // integer

let state; // object
let age; // integer
let cycles; // integer

let timer; //setInterval id
let interval; //count of cycles

/*----- cached elements -----*/

const boredomStatEl = document.querySelector("#boredom-stat");
const hungerStatEl = document.querySelector("#hunger-stat");
const sleepyStatEl = document.querySelector("#sleepiness-stat");

// TODO: add cache for game message string once added to game

const gameBtnEls = document.querySelectorAll("#controller button");

/*----- event listeners -----*/
gameBtnEls.forEach(function (btn) {
btn.addEventListener('click', handleBtnClick);
})

function handleBtnClick(e) {
console.log(e.target.innerText);

const convertProp = {
feed: 'hunger',
sleep: 'sleepiness',
play: 'boredom',
};
const key = convertProp[e.target.innerText]
console.log(key)

updateStat(key, -3)

render();
}
/*----- functions -----*/

init(); // starts game when JS loads

function init() {
state = { ...INIT_STATE };
age = 0;
cycles = 0;

interval = 5000; //count of cycles
timer = setInterval(runGame, interval);
// console.log('Game has STARTED!')
render();
}

function runGame() {
if(continueGame()){
updateStats();
} else {
gameOver();
}
// console.log("Game is running")
render();
}

function render() {
// console.log('rendering game')
renderStats();
}

function renderStats() {
// console.log('rendering stats')
boredomStatEl.textContent = state.boredom;
hungerStatEl.textContent = state.hunger;
sleepyStatEl.textContent = state.sleepiness;
}

function updateStats() {
// TODO: call iterator over state and for each state property update the corresponding key
// iterate over states {}
// capture random number
// update current etc
for (let key in state) {
updateStat(key, Math.floor(Math.random() * 3));
}
}

function updateStat(stat, value) {
if (state[stat] + value >= 0) {
state[stat] += value;
} else {
state[stat] = 0;
}
}

function continueGame(){
let keepRunning = true
let currentStats = []

for(let key in state){
currentStats.push(state[key]);
}

for (let stat of currentStats) {
if (stat >= 10) {
keepRunning = false;
}
}
return keepRunning;
}

function gameOver() {
clearInterval(timer);
}
// console.log(currentStats)
// if(stat >=10){
// keepRunning = false
// }

console.log('should I keep running the game?')


/*----- functions -----*/