Skip to content

Commit

Permalink
Update index.html
Browse files Browse the repository at this point in the history
  • Loading branch information
jeesssik authored Sep 19, 2023
1 parent 149e538 commit 7b0a8ee
Showing 1 changed file with 99 additions and 165 deletions.
264 changes: 99 additions & 165 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,168 +1,102 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="styles.css">
<title>Juego de palabras</title>
</head>
<body>
<div id="game"></div>
<input type="text" id="input" placeholder="Escribe aquí">
<script>
import { useDictionary, realDictionary } from './dictionary.js';

// for testing purposes, make sure to use the test dictionary
console.log('test dictionary:', useDictionary);

const dictionary = realDictionary;
const state = {
secret: useDictionary[Math.floor(Math.random() * useDictionary.length)],
grid: Array(6)
.fill()
.map(() => Array(5).fill('')),
currentRow: 0,
currentCol: 0,
};

function drawGrid(container) {
const grid = document.createElement('div');
grid.className = 'grid';

for (let i = 0; i < 6; i++) {
for (let j = 0; j < 5; j++) {
drawBox(grid, i, j);
}
}

container.appendChild(grid);
}

function updateGrid() {
for (let i = 0; i < state.grid.length; i++) {
for (let j = 0; j < state.grid[i].length; j++) {
const box = document.getElementById(`box${i}${j}`);
box.textContent = state.grid[i][j];
}
}
}

function drawBox(container, row, col, letter = '') {
const box = document.createElement('div');
box.className = 'box';
box.textContent = letter;
box.id = `box${row}${col}`;

container.appendChild(box);
return box;
}

function getCurrentWord() {
return state.grid[state.currentRow].reduce((prev, curr) => prev + curr);
}

function isWordValid(word) {
return dictionary.includes(word);
}

function getNumOfOccurrencesInWord(word, letter) {
let result = 0;
for (let i = 0; i < word.length; i++) {
if (word[i] === letter) {
result++;
}
}
return result;
}

function getPositionOfOccurrence(word, letter, position) {
let result = 0;
for (let i = 0; i <= position; i++) {
if (word[i] === letter) {
result++;
}
}
return result;
}

function revealWord(guess) {
const row = state.currentRow;
const animation_duration = 500; // ms

for (let i = 0; i < 5; i++) {
const box = document.getElementById(`box${row}${i}`);
const letter = box.textContent;
const numOfOccurrencesSecret = getNumOfOccurrencesInWord(
state.secret,
letter
);
const numOfOccurrencesGuess = getNumOfOccurrencesInWord(guess, letter);
const letterPosition = getPositionOfOccurrence(guess, letter, i);

setTimeout(() => {
if (
numOfOccurrencesGuess > numOfOccurrencesSecret &&
letterPosition > numOfOccurrencesSecret
) {
box.classList.add('empty');
} else {
if (letter === state.secret[i]) {
box.classList.add('right');
} else if (state.secret.includes(letter)) {
box.classList.add('wrong');
} else {
box.classList.add('empty');
}
}
}, ((i + 1) * animation_duration) / 2);

box.classList.add('animated');
box.style.animationDelay = `${(i * animation_duration) / 2}ms`;
}

const isWinner = state.secret === guess;
const isGameOver = state.currentRow === 5;

setTimeout(() => {
if (isWinner) {
alert('¡Felicidades!');
} else if (isGameOver) {
alert(`¡Mejor suerte la próxima! La palabra era: ${state.secret}.`);
}
}, 3 * animation_duration);
}

function addLetter(letter) {
if (state.currentCol === 5) return;
state.grid[state.currentRow][state.currentCol] = letter;
state.currentCol++;
}

function removeLetter() {
if (state.currentCol === 0) return;
state.grid[state.currentRow][state.currentCol - 1] = '';
state.currentCol--;
}

function startup() {
const game = document.getElementById('game');
drawGrid(game);

const input = document.getElementById('input');
input.addEventListener('input', () => {
const inputValue = input.value;
if (inputValue.length === 1 && isLetter(inputValue)) {
addLetter(inputValue.toLowerCase());
input.value = '';
updateGrid();
} else if (inputValue.length === 0) {
removeLetter();
updateGrid();
}
});
}

startup();
</script>
</body>
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#121213" />

<!-- HTML Meta Tags -->
<title>Estudle</title>
<meta name="description" content=">Wordle clone by DoubleDebug" />

<!-- Facebook Meta Tags -->
<meta
property="og:url"
content="https://doubledebug.github.io/wordle-speedrun/"
/>
<meta property="og:type" content="website" />
<meta property="og:title" content="Wordle clone by DoubleDebug" />
<meta
property="og:description"
content="Wordle game speedrun in HTML, CSS and JavaScript"
/>
<meta
property="og:image"
content="https://doubledebug.github.io/wordle-speedrun/assets/og-image.png"
/>

<!-- Twitter Meta Tags -->
<meta name="twitter:card" content="summary_large_image" />
<meta property="twitter:domain" content="doubledebug.github.io" />
<meta
property="twitter:url"
content="https://doubledebug.github.io/wordle-speedrun/"
/>
<meta name="twitter:title" content="Wordle clone | DoubleDebug" />
<meta
name="twitter:description"
content="Wordle game speedrun in HTML, CSS and JavaScript"
/>
<meta
name="twitter:image"
content="https://doubledebug.github.io/wordle-speedrun/assets/og-image.png"
/>

<link rel="stylesheet" href="./src/style.css" />
<link
rel="icon"
type="image/png"
href="/wordle-speedrun/assets/imgs/icon.png"
/>
</head>
<body>
<h1 class="title">Estudle🤓</h1>
<div id="game"></div>
<hr />
<p class="footer">
¡FELIZ DÍA DEL ESTUDIANTE!
<span class="v-separator">|</span>
<span>
<a
class="social-media-link"
href="https://github.com/informaticaort"
title="Github"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512">
<path
d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"
/>
</svg>
</a>
</span>
<span>
<a
class="social-media-link"
href="https://www.youtube.com/@informaticaalmagro"
title="YouTube"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512">
<path
d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"
/>
</svg>
</a>
</span>
<span>
<a
class="social-media-link"
href="https://twitter.com/informaticaort"
title="Twitter"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path
d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"
/>
</svg>
</a>
</span>
</p>
<script defer src="./src/index.js" type="module"></script>
</body>
</html>

0 comments on commit 7b0a8ee

Please sign in to comment.