Crie um jogo de memória com React e JavaScript

Foto de Soragrit Wongsa no Unsplash

React é uma estrutura JavaScript fácil de usar que nos permite criar aplicativos front-end.

Neste artigo, veremos como criar um jogo de memória com React e JavaScript.

Crie o Projeto

Podemos criar o projeto React com Create React App.

Para instalá-lo, executamos:

npx create-react-app memory-game

Crie o jogo da memória

Para criar o jogo da memória, escrevemos:

import React, { useEffect, useState } from "react";
import { v4 as uuidv4 } from "uuid";
const answerArr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
  .map((n) => {
    return {
      id: uuidv4(),
      open: false,
      value: n
    };
  })
  .sort(() => Math.random() - 0.5);
export default function App() {
  const [answer, setAnswer] = useState([...answerArr]);
  const [itemIds, setItemIds] = useState([]);
  const onClick = (id) => {
    if (!itemIds.includes(id)) {
      setItemIds((itemIds) => [...itemIds, id]);
    }
    const index = answer.findIndex((a) => a.id === id);
    setAnswer((answer) => {
      const ans = [...answer];
      ans[index].open = true;
      return ans;
    });
  };
  useEffect(() => {
    if (itemIds.length === 2) {
      const item1Index = answer.findIndex((a) => a.id === itemIds[0]);
      const item2Index = answer.findIndex((a) => a.id === itemIds[1]);
      if (answer[item1Index].value !== answer[item2Index].value) {
        setAnswer((answer) => {
          const ans = [...answer];
          ans[item1Index].open = false;
          ans[item2Index].open = false;
          return ans;
        });
      }
    }
  }, [itemIds, answer]);
  useEffect(() => {
    if (itemIds.length === 2) {
      setItemIds([]);
    }
  }, [itemIds]);
  return (
    <div>
      <style>
        {`
          .container {
            display: flex;
          }
.tile {
            border: 1px solid black;
            width: 20vw;
            height: 50px;
          }
          `}
      </style>
      <div className="container">
        {answer.map((a) => {
          return (
            <div key={a.id} className="tile" onClick={() => onClick(a.id)}>
              {a.open ? <div>{a.value}</div> : <div>&nbsp;</div>}
            </div>
          );
        })}
      </div>
    </div>
  );
}

É usado para renderizar as caixas que o jogador pode abrir clicando.

Se dois números corresponderem, eles permanecerão abertos.

Caso contrário, ambos estão fechados.

Em seguida, definimos o answerestado com as respostas.

itemIds tenha os IDs do cartão de resposta que estão abertos.

Pode haver no máximo 2 abertos.

Em seguida, definimos o onClickque verifica se itemIdsinclui id.

Se não, nós o adicionamos ao itemIdsarray com setItemIds.

Em seguida, chamamos setAnswerpara definir o item em answerque a openpropriedade deve ser aberta true.

Em seguida, temos um useEffectretorno de chamada para verificar se itemIds.lengthé 2.

Se for, então ligamos findIndexpara obter os índices dos answeritens que clicamos.

Se seus values não corresponderem, então os fechamos definindo a openpropriedade de ambos os itens como false.

Observamos os valores itemIdse answerpara fazer a atualização de acordo.

E temos outro useEffectgancho para verificar se itemIds.lengthé 2 novamente, mas desta vez, se for true, quando definimos itemIdscomo um array vazio.

Em seguida, adicionamos os estilos dos cartões na styletag.

Em seguida, renderizamos os answersitens em divs.

Mostramos que o valor é a.opené true.

Caso contrário, mostramos uma caixa vazia.

Conclusão

Podemos criar um jogo de memória com React e JavaScript.

Mais conteúdo em plainenglish.io

Suggested posts

Encontrar informações sobre nomes de domínio

Um trecho de Small, Sharp Software Tools por Brian P. Hogan

Encontrar informações sobre nomes de domínio

Quando você faz uma solicitação para facebook.com, seu computador procura o nome de domínio para traduzir esse nome de domínio em um endereço IP para que seu computador possa fazer essa conexão.

Dicas para fazer a transição para a segurança cibernética sem conhecimento técnico.

Dicas para fazer a transição para a segurança cibernética sem conhecimento técnico.

Em 2022, fiz a transição de uma função não técnica para a segurança cibernética. Eu tive meu primeiro diploma em língua alemã, sei que você está chocado e curioso sobre como consegui fazer a transição com sucesso. Bem, simplesmente aconteceu.

Related posts

O que você pode fazer em sua temporada de espera (esperando para conseguir seu primeiro emprego em tecnologia)

O que você pode fazer em sua temporada de espera (esperando para conseguir seu primeiro emprego em tecnologia)

Mudar para uma nova carreira pode ser extremamente desafiador se você tentar fazer isso sozinho. É importante encontrar parceiros de responsabilidade que estejam no mesmo nível de aprendizado que você, que compartilhem objetivos, tenacidade e motivação semelhantes.

Criando um ambiente de trabalho seguro

Criando um ambiente de trabalho seguro

“Ele vai me proteger quando eu estiver em perigo. Ele me esconderá em sua tenda.

Por que alguns freelancers estão fingindo suas vidas

Por que alguns freelancers estão fingindo suas vidas

Estive recentemente no Linkedin, a maior rede social profissional do mundo, e encontrei postagens de designers freelancers que sigo que me chamaram a atenção. Todos postaram fotos de aviões, na praia com seus laptops, de piscinas e escritórios com vistas incríveis.

Encontrar informações sobre nomes de domínio

Um trecho de Small, Sharp Software Tools por Brian P. Hogan

Encontrar informações sobre nomes de domínio

Quando você faz uma solicitação para facebook.com, seu computador procura o nome de domínio para traduzir esse nome de domínio em um endereço IP para que seu computador possa fazer essa conexão.