Este código implementa um jogo de memória baseado em Harry Potter usando HTML, CSS e JavaScript. O jogo consiste em encontrar pares de cartas correspondentes virando-as uma de cada vez. As cartas são exibidas em uma grade, e o objetivo é encontrar todos os pares corretos.
O jogo possui um temporizador que registra o tempo decorrido desde o início do jogo. Quando todos os pares são encontrados, uma mensagem de parabéns é exibida, mostrando o tempo total.
O código utiliza seletores CSS para interagir com os elementos HTML, como a grade, cartas e botões. As cartas são geradas dinamicamente com base em um array de nomes de personagens do universo de Harry Potter. O efeito de virar as cartas é implementado usando classes CSS.
O código também inclui uma função para verificar se o jogo foi concluído, desabilitando as cartas encontradas. Além disso, o botão de início permite iniciar o jogo e o temporizador registra o tempo.
Este código pode ser utilizado como base para criar um jogo de memória personalizado com diferentes temas e funcionalidades.
URL: (https://marcosaureliosl.github.io/jogo-da-memoria-harrypotter/)
- HTML
- CSS
- JavaScript
Ao trabalhar com este código, desenvolvi os seguintes aprendizados:
-
Manipulação do DOM: O código demonstra como selecionar elementos HTML usando seletores CSS e manipular seus atributos, classes e conteúdo usando JavaScript.
-
Criação dinâmica de elementos HTML: A função
createElement
mostra como criar elementos HTML dinamicamente e definir suas classes e atributos. -
Implementação de um jogo de memória: O código oferece uma base para criar um jogo de memória, onde os jogadores precisam encontrar pares de cartas correspondentes.
-
Uso de eventos e interatividade: O código utiliza eventos, como o clique do mouse, para virar as cartas e interagir com o jogo. Isso ajuda a entender como lidar com eventos e criar interatividade em um aplicativo web.
-
Controle do tempo: A implementação do temporizador mostra como controlar o tempo decorrido em um jogo ou aplicativo, usando o objeto
setInterval
do JavaScript. -
Estilização e design responsivo: O código contém estilos CSS para definir a aparência do jogo e demonstra como tornar o jogo responsivo, ajustando o layout e os estilos para diferentes tamanhos de tela.
-
Trabalho com arrays e lógica de jogo: O código utiliza arrays para armazenar os nomes dos personagens e implementa lógica para verificar se os pares de cartas correspondem.
Esses são alguns dos aprendizados extraído com este código.
//nomes da cartas //
const characters = [
'Alvo.Dumbledore.4',
'draco.malfloy',
'harry.potter.(1)',
'Castelo.de.Hogwarts',
'Gryffindor',
'Hermione.(2)',
'Hufflepuff',
'minerva mcgonagall',
'Ravenclaw',
'ron.weasley.(3)',
'Rúbeo.Hagrid.(3)',
'severo.snape.(3)',
'Sirius.Black.(1)',
'Slytherin',
'voldmort.(1)',
];
// criação das cars //
const createCard = (character) => {
const card = createElement('div', 'card');
const front = createElement('div', 'face front');
const back = createElement('div', 'face back');
front.style.backgroundImage = `url('../img.harry/${character}.jpg')`;
card.appendChild(front);
card.appendChild(back);
card.addEventListener('click', revealCard)
card.setAttribute('data-character', character)
return card;
}
Além disso, uma parte interessante deste projeto é a implementação de uma tela de login separada. Isso envolveu a criação de um segundo arquivo HTML e um arquivo CSS correspondente para estilizar a página de login. O JavaScript também foi utilizado para realizar a validação dos dados de login.
Essa abordagem de ter uma tela de login separada demonstra a capacidade de criar múltiplas páginas e conectar diferentes arquivos HTML, CSS e JavaScript. Isso permite uma organização mais clara do código e uma melhor separação de responsabilidades entre as diferentes partes do aplicativo.
Trabalhar com múltiplos arquivos HTML, CSS e JavaScript também ajuda a modularizar o projeto, facilitando a manutenção e o desenvolvimento de novos recursos no futuro. Essa prática é comum em projetos maiores e mais complexos, onde é importante dividir o código em componentes e arquivos separados para facilitar a colaboração e o gerenciamento do projeto.
No geral, a inclusão da tela de login como parte do projeto demonstra habilidades em trabalhar com vários arquivos e integrar diferentes componentes em um aplicativo web.
const input = document.querySelector('.login__input');
const button = document.querySelector('.login__button');
const form = document.querySelector('.login-form');
const validateInput = ({ target }) => {
if (target.value.length > 2) {
button.removeAttribute('disabled');
return;
}
button.setAttribute('disabled', '');
}
const handleSubmit = (event) => {
event.preventDefault();
localStorage.setItem('player', input.value);
window.location = 'pages/game.html';
}
input.addEventListener('input', validateInput);
form.addEventListener('submit', handleSubmit);
Gostaria de expressar meu sincero agradecimento a todos que têm acompanhado de perto minha jornada nessa nova etapa da minha carreira. Seu apoio e encorajamento significam muito para mim. Cada palavra de incentivo e suporte tem sido um combustível essencial para minha motivação e crescimento. Agradeço por estar ao meu lado, compartilhando esse caminho desafiador e cheio de aprendizados. Sua presença e apoio constante são verdadeiramente apreciados. Vamos continuar avançando juntos!