Skip to content

CalderonPamela/LIM018-memory-match

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Memory Match Game 🎮

Definición del producto

El Juego esta diseñado para personas que deseen pasar un tiempo de distraccion y a la vez practicar su memoria visual. La temática el juego esta formada por iconos de logos de programacion por lo que esta orientado a personas que son aficionadas o dedicadas a la programación.

Historias de usuario

📌 Historia 1

COMO jugador de memory match QUIERO ingresar a una página de juegos de memory match PARA distraerme un poco de la rutina.

CRITERIOS DE ACEPTACIÓN

  1. Se muestra una pantalla de bienvenida al usuario.
  2. Una opción para ingresar su nombre.
  3. Un botón para empezar a jugar y llevar a la segunda vista.

DEFINICIÓN DE TERMINADO

  1. Que el usuario si pueda ingresar su nombre.
  2. El boton "Start" envie el nombre y me lleve a la siguiente vista.

📌 Historia 2

COMO jugador del memory match QUIERO barajear las cartas PARA empezar a jugar.

CRITERIOS DE ACEPTACIÓN

  1. Se debe visualizar las cartas en la pantalla de manera que la imagen este oculta.

DEFINICIÓN DE TERMINADO

  1. En el encabezado se debe mostrar el nombre del usuario.
  2. Se debe visualizar las 20 cartas sin voltear.
  3. El botón "Play Game" debe permitir barajear las cartas para comenzar el juego.

📌 Historia 3

COMO jugador de Memory Match QUIERO poder jugar en todos los dispositivos posibles :móviles y desktops. PARA jugar desde cualquier lugar.

CRITERIOS DE ACEPTACIÓN

  1. Que las pantallas (vistas) se ajusten a los diferentes dispositivos.
  2. Las imágenes se ajustan al nuevo formato sin perder la estética del diseño.

DEFINICIÓN DE TERMINADO

  1. El usuario debe visualizar el juego a un tamaño acorde a los dispositivos.

📌 Historia 4

COMO jugador de memory match QUIERO destapar la carta PARA encontrar sus pares.

CRITERIOS DE ACEPTACIÓN

  1. Al voltear la primera carta esta se debe quedar destapa para compararla con la segunda.
  2. Si dos cartas volteadas no coinciden, ambas deben regresar a su posición inicial.
  3. Dejar destapadas las cartas que tengan la misma figura.

DEFINICIÓN DE TERMINADO

  1. La primera carta volteada debe permanecer volteada hasta destapar la segunda carta.
  2. Si ambas cartas son del mismo modelo dejarlas destapadas para indicar al usuario que son validas.
  3. En caso contrario cuando dos cartas destapadas no son del mismo modelo volverlas a tapar.

📌 Historia 5

COMO jugador del Memory Match QUIERO jugar PARA que el juego me avise si he acertado o no en el match de las cartas.

CRITERIOS DE ACEPTACIÓN

  1. Destapar todas las cartas.

DEFINICIÓN DE TERMINADO

  1. Cuando ambas cartas tenga el mismo modelo se quedaran destapadas de lo contrario volverán a taparse.

📌 Historia 6

COMO jugador del Memory Match QUIERO terminar el juego PARA saber si he ganado.

CRITERIOS DE ACEPTACIÓN

  1. El usuario debe ver todas las cartas volteadas en la pantalla.
  2. Sale una ventana avisando que el jugador termina el juego.

DEFINICIÓN DE TERMINADO

  1. Cuando se visualice todas las cartas destapadas significa que el juego ha terminado y el usuario ha ganado.
  2. Automáticamente le saldrá una ventana felicitando al usuario.

Diseño de la Interfaz de Usuario

Prototipo de baja fidelidad

Primer prototipo

Prototipo de alta fidelidad

Figma 1 Figma 2

Testeos de usabilidad

Durante el testeo del proyecto surgieron las siguientes sugerencias:

  1. Unificar un solo idioma para los botones.
  2. Agrandar el tamaño de los las cartas.
  3. Dar color a las cartas que contienen las imagenes.

Memory Match Game

Índice


1. Preámbulo

El juego Memory Match, también conocido como Concentration, Match Match, Match Up, Memory, entre otros, es un juego de cartas en el que todas las cartas se ponen cara abajo sobre una superficie y se le dan la vuelta a dos cartas en cada turno. El objetivo del juego es destapar parejas de cartas que coincidan.

Concentration (card game)

Imagen tomada de Wikipedia.

Ejemplos:

2. Resumen del proyecto

En este proyecto construirás una versión web del juego Memory Match, en la que una jugadora pueda jugar sola, en el navegador.

El objetivo principal de este proyecto es que aprendas a diseñar y construir una interfaz web basada en data e interacción con la usuaria.

3. Objetivos de aprendizaje

Reflexiona y luego marca los objetivos que has llegado a entender y aplicar en tu proyecto. Piensa en eso al decidir tu estrategia de trabajo.

HTML

CSS

Web APIs

JavaScript

  • Uso de linter (ESLINT)

  • Uso de identificadores descriptivos (Nomenclatura y Semántica)

  • Diferenciar entre expresiones (expressions) y sentencias (statements)

Control de Versiones (Git y GitHub)

  • Git: Instalación y configuración

  • Git: Control de versiones con git (init, clone, add, commit, status, push, pull, remote)

  • Git: Integración de cambios entre ramas (branch, checkout, fetch, merge, reset, rebase, tag)

  • GitHub: Creación de cuenta y repos, configuración de llaves SSH

  • GitHub: Despliegue con GitHub Pages

    Links

  • GitHub: Colaboración en Github (branches | forks | pull requests | code review | tags)

user-centricity

  • Diseñar un producto o servicio poniendo a la usuaria en el centro

product-design

  • Crear prototipos de alta fidelidad que incluyan interacciones

  • Seguir los principios básicos de diseño visual

research

4. Consideraciones generales

  • Este proyecto se debe resolver en duplas.
  • El proyecto será entregado subiendo tu código a GitHub (commit/push) y la interfaz será desplegada usando GitHub Pages.
  • Tiempo para completarlo: Toma como referencia 4 semanas.

5. Criterios de aceptación mínimos del proyecto

Los criterios para considerar que has completado este proyecto son:

Definición del producto

Documenta brevemente tu trabajo en el archivo README.md de tu repositorio, contándonos cómo fue tu proceso de diseño y cómo crees que el producto resuelve el problema (o problemas) que tiene tu usuario.

Historias de usuario

Una vez que entiendas las necesidades de tus usuarios, escribe las Historias de Usuario que representen todo lo que el usuario necesita hacer/ver. Las Historias de Usuario deben ser el resultado de tu proceso de investigación o research de tus usuarios.

Asegúrate de incluir la definición de terminado (definition of done) y los Criterios de Aceptación para cada una.

En la medida de lo posible, termina una historia de usuario antes de pasar a la siguiente (Cumple con Definición de Terminado + Criterios de Aceptación).

Diseño de la Interfaz de Usuario

Prototipo de baja fidelidad

Durante tu trabajo deberás haber hecho e iterado bocetos (sketches) de tu solución usando papel y lápiz. Te recomendamos tomar fotos de todas las iteraciones que hagas, que las subas a tu repositorio y las menciones en tu README.md.

Prototipo de alta fidelidad

Lo siguiente es diseñar tu Interfaz de Usuario (UI por sus siglas en inglés - User Interface). Para eso debes aprender a utilizar alguna herramienta de diseño visual. Nosotros te recomendamos Figma que es una herramienta que funciona en el navegador y, además, puedes crear una cuenta gratis. Sin embargo, eres libre de utilizar otros editores gráficos como Illustrator, Photoshop, PowerPoint, Keynote, etc.

El diseño debe representar el ideal de tu solución. Digamos que es lo que desearías implementar si tuvieras tiempo ilimitado para trabajar. Además, tu diseño debe seguir los fundamentos de visual design.

Testeos de usabilidad

Durante el reto deberás hacer tests de usabilidad con distintos usuarios, y en base a los resultados, deberás iterar tus diseños. Cuéntanos qué problemas de usabilidad detectaste a través de los tests y cómo los mejoraste en tu propuesta final.

Implementación de la Interfaz de Usuario (HTML/CSS/JS)

Luego de diseñar tu interfaz de usuario deberás trabajar en su implementación. No es necesario que construyas la interfaz exactamente como la diseñaste. Tu tiempo de hacking es escaso, así que deberás priorizar

Como mínimo, tu implementación debe:

  1. Dado un set de cartas, barajar las cartas y mostrarlas en la interfaz.
  2. Permitir al usuario destapar las cartas de 2 en 2.
  3. Dejar destapadas las cartas que coincidan al destaparlas.
  4. Indicar al usuario que ganó cuando haya destapado todas las cartas.
  5. Ser responsive, es decir, debe visualizarse sin problemas desde distintos tamaños de pantallas: móviles, tablets y desktops.
  6. Que la interfaz siga los fundamentos de visual design.

Pruebas unitarias

El boilerplate de este proyecto incluye pruebas unitarias (unit tests) de un componente como ejemplo. A medida que vayas agregando componentes tendrás que ir agregando pruebas para mantener buena cobertura.

Tus pruebas unitarias deben tener una cobertura del 70% de statements (sentencias), functions (funciones), lines (líneas), y branches (ramas) de tus componentes.

6. Hacker edition

Las secciones llamadas Hacker Edition son opcionales. Si terminaste con todo lo anterior y te queda tiempo, intenta completarlas. Así podrás profundizar y/o ejercitar más sobre los objetivos de aprendizaje del proyecto.

Features/características extra sugeridas:

  • En lugar de consumir la data estática brindada en este repositorio, puedes consumir la data de forma dinámica, cargando un archivo JSON por medio de fetch. La carpeta src/data contiene una versión .js y una .json de de cada set datos.
  • Agregar nuevos sets de cartas.
  • Calcular puntuación basado en número de turnos.
  • Agregar timer y tener cuenta en puntuación.
  • 100% Coverage

7. Consideraciones técnicas

La lógica del proyecto debe estar implementada completamente en JavaScript, HTML y CSS. En este proyecto NO está permitido usar librerías o frameworks, solo vanilla JavaScript.

Para iniciar un nuevo juego, siempre tendremos que barajar las cartas antes de pintarlas en la pantalla. Para eso, te invitamos a que explores algoritmos existentes para este tipo de operación (llamada shuffle en inglés), como por ejemplo el algoritmo de Fisher-Yates (aka Knuth).

En este proyecto no se espera que inventes o implementes tu propio algoritmo para barajar las cartas, si no que googlees, veas opciones existentes, consideres opciones y adaptes una a tu proyecto (agregando una función shuffle que se pueda usar en tu aplicación).

El boilerplate contiene una estructura de archivos como punto de partida así como toda la configuración de dependencias:

.
├── .babelrc
├── .editorconfig
├── .eslintrc
├── .gitignore
├── package.json
├── README.md
└── src
    ├── components
    │   ├── App.js
    │   └── App.spec.js
    ├── data
    │   ├── pokemon
    │   │   ├── pokemon.js
    │   │   └── pokemon.json
    │   ├── README.md
    │   └── webdev
    │       ├── webdev.js
    │       └── webdev.json
    ├── index.html
    ├── main.js
    └── style.css

src/index.html

Como en el proyecto anterior, existe un archivo index.html. Como ya sabes, acá va la página que se mostrará al usuario. También nos sirve para indicar qué scripts se usarán y unir todo lo que hemos hecho.

src/main.js

Recomendamos usar src/main.js como punto de entrada de tu aplicación. El boilerplate incluye este archivo para conectar o montar el componente App en el DOM. De esta forma podremos hacer pruebas unitarias de nuestros componentes sin necesidad de que estén conectados a un DOM global.

Esta no es la única forma de dividir tu código, puedes usar más archivos y carpetas, siempre y cuando la estructura sea clara para tus compañeras.

src/components/App.js

Este archivo contiene un componente de ejemplo que muestra cómo podemos representar un componente como una función que retorna un HTMLElement. A la hora de construir interfaces es útil pensar en términos de componentes o vistas que podemos ir anidando unas dentro de otras. Te invitamos a que pienses qué componentes o cajitas necesitas para construir tu aplicación y que vayas agregando componentes en el directorio components para implementar cada uno de ellos. Aunque, otra vez, la forma de organizar tu archivos depende al final de tí y de tu equipo. Hay muchas formas de hacerlo, y el boilerplate es solo una sugerencia 🙊.

src/components/App.spec.js

Este archivo muestra cómo podemos crear archivos con especificaciones (expresadas como pruebas unitarias) de nuestros componentes.

src/data

En esta carpeta hay data con sets de cartas de ejemplo que puedes usar en tu aplicación, así como información sobre cómo agregar tus propios sets. Encontrarás una carpeta por cada set, y dentro de cada carpeta dos archivos: uno con la extensión .js y otro .json. Ambos archivos contienen la misma data; la diferencia es que el .js lo usaremos a través de un import, mientras que el .json está ahí para opcionalmente cargar la data de forma asíncrona con fetch().

8. Pistas, tips y lecturas complementarias

Primeros pasos

Antes de empezar a escribir código, debes definir qué deberá hacer el producto en base al conocimiento que puedas obtener de tu usuario. Estas preguntas te pueden ayudar:

  • ¿Quiénes son los principales usuarios de producto?
  • ¿Cuáles son los objetivos de estos usuarios en relación con el producto?
  • ¿Cuáles son los componentes principales de la interfaz y por qué?
  • ¿Cuándo utilizan o utilizarían el producto?
  • Toda tu investigación previa debe tener como resultado todas las Historias de Usuario de tu proyecto.
  • No hagas los prototipos de alta fidelidad de todas tus Historias. Comienza solamente por los que se necesiten para tu Sprint 1 (semana 1 de trabajo). Más pistas en la guía de organización para el proyecto.

Cuando ya estés lista para codear, te sugerimos empezar de esta manera:

  1. Una de las integrantes del equipo debe realizar un 🍴 fork del repo de tu cohort, tus coaches te compartirán un link a un repo y te darán acceso de lectura en ese repo. La otra integrante del equipo deber hacer un fork del repositorio de su compañera y configurar un remote hacia el mismo.
  2. ⬇️ Clona tu fork a tu computadora (copia local).
  3. 📦 Instala las dependencias del proyecto con el comando npm install. Esto asume que has instalado Node.js (que incluye npm).
  4. Si todo ha ido bien, deberías poder ejecutar las 🚥 pruebas unitarias (unit tests) con el comando npm test.
  5. Para ver la interfaz de tu programa en el navegador, usa el comando npm start para arrancar el servidor web y dirígete a http://localhost:5000 en tu navegador.
  6. A codear se ha dicho! 🚀

Contenido de referencia

Diseño de experiencia de usuario (User Experience Design)

  • Investigación con usuarios / entrevistas
  • Principios de diseño visual

Desarrollo Front-end

Herramientas

Organización del Trabajo

9. Checklist

  • Usa VanillaJS.
  • Pasa linter (npm run pretest)
  • Pasa tests (npm test)
  • Pruebas unitarias cubren un mínimo del 70% de statements, functions y lines y branches.
  • Incluye Definición del producto clara e informativa en README.md.
  • Incluye historias de usuario en README.md.
  • Incluye sketch de la solución (prototipo de baja fidelidad) en README.md.
  • Incluye Diseño de la Interfaz de Usuario (prototipo de alta fidelidad) en README.md.
  • Incluye el listado de problemas que detectaste a través de tests de usabilidad en el README.md.
  • UI: Muestra cartas barajadas correctamente.
  • UI: Permite al usuario destapar las cartas de 2 en 2.
  • UI: Deja destapadas las cartas que coincidan al destaparlas.
  • UI: Indica al usuario que ganó cuando sea relevante.
  • UI: Es responsive.
  • UI: La interfaz sigue los fundamentos de visual design.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 55.5%
  • CSS 33.7%
  • HTML 10.8%