Taller de Videojuegos con HTML 5 Creación del Videojuego Memoria

Documentos relacionados
Taller de Videojuegos con HTML 5 Animación de objetos con HTML 5

Taller de Videojuegos con HTML 5 Creación del Videojuego Space Invaders

Taller de Videojuegos con HTML 5 Dibujando en el Canvas del HTML 5

FUNDAMENTOS DE ROBÓTICA. Maestro: Ing. Marco Antonio López Paredes REPORTE DE PROGRAMA: ANALIZAR LOS OBSTACULOS DE ROBOTS EN UN TABLERO

Rogelio Ferreira Escutia

EFECTOS JAVASCRIPT VISUALES, DE IMÁGENES, TEXTO... RECURSIÓN. SETTIMEOUT NO FUNCIONA EN BUCLES FOR, WHILE,? (CU01166E)

Creación del Hola Mundo en Android Studio. Rogelio Ferreira Escutia

Tema 3, parte 5. Estilos dinámicos. Texto. Cambio de estilos. Animaciones.

JAVASCRIPT CREATEELEMENT, CREATETEXTNODE, APPENDCHILD. MODIFICAR PROPIEDAD ONCLICK CON JAVASCRIPT (CU01140E)

JavaScript. Rogelio Ferreira Escutia

Introducción al desarrollo web (idesweb) - 3 a ed.

JavaScript. PDF created with pdffactory trial version (c) Juan Carlos Cano Todos los derechos reservados

WHILE JAVASCRIPT. DO WHILE. CONTINUE PARA SALTAR BUCLE. BUCLES CON LABEL (ETIQUETA O NOMBRE). EJEMPLOS (CU01132E)

Conceptos Teóricos de HTML5 (material extra adicional libro):

1 BARRA de NAVEGACIÓN VERTICAL con BOTONES rollovers ver 2.

DISEÑO WEB CSS CON DOS, TRES O MÁS COLUMNAS CON FLOAT. WIDTH EN PORCENTAJES NO FUNCIONA? TIPOS DE ANCHO. EJEMPLOS. (CU01036D)

Programación Web. Presentación del Curso. Rogelio Ferreira Escutia

FOR JAVASCRIPT (BUCLES) CONOCER TAMAÑO DE UN ARRAY CON LENGTH. BREAK PARA DETENER EJECUCIÓN. EJEMPLOS Y EJERCICIOS (CU01131E)

Programación Multimedia. Examen Primera Convocatoria. Junio2013

FUNCIÓN EVAL JAVASCRIPT. GETELEMENTSBY CLASSNAME. EJEMPLO CÓDIGO CALCULADORA SIMPLE (CU01133E)

HTML. Rogelio Ferreira Escutia

Ejercicios - Introducción al desarrollo web para móviles

Sintaxis de CSS CSS ({ })

QUERYSELECTORALL JAVASCRIPT Y QUERYSELECTOR. ACCEDER A ELEMENTOS POR SELECTORES CSS. EJEMPLOS (CU01134E)

CLOSURES JAVASCRIPT. EJEMPLOS. CONCEPTO: QUÉ SON Y PARA QUÉ SIRVEN. RETARDO DE EJECUCIÓN CON SETTIMEOUT Y CLOSURES. (CU01169E)

SOLUCION EJERCICIOS VALIDACION DE FORMULARIOS

Three.js-ESP Documentation. Versión latest

Estructura General y Estilos Propios

ESTRUCTURAS DE CONTROL REPETITIVAS

PROPIEDADES VISIBILITY (VISIBLE, HIDDEN, COLLAPSE) Y OVERFLOW CSS. SCROLL. OVERFLOW- X Y OVERFLOW-Y. EJEMPLOS (CU01038D)

Desarrollo de Aplicaciones Web con PHP. Javier Enciso

CONSTRUCTORES JAVASCRIPT. CREAR OBJETOS VACÍOS. AÑADIR PROPIEDADES Y MÉTODOS. OBJETOS ÚNICOS O SINGLETON. EJEMPLOS (CU01145E)

Vamos a describir un lenguaje HTML y CSS resumido, sólo con unos ciertos mínimos, para uso en el programa Sénior.

Dibujar con HTML5 y JavaIO y PostrgreSQL JDBC

CSS. Añadir estilos a las páginas web

Ejercicios - HTML5 y CSS3

HTMLELEMENT JAVASCRIPT. MÉTODOS FOCUS, BLUR. SUBMIT FORMULARIOS: DETENER ENVÍO. ONSUBMIT RETURN. EJEMPLOS. (CU01181E)

Node.JS Raspberry Pi (RPi) 2015/05/08 Juan V. Capella

Qué es CSS. Si necesitamos hacer modificaciones lo hacemos en un sólo lugar y no tenemos que editar todos los documentos HTML por separado.

DEGRADADOS CSS. EFECTO LINEAL Y RADIAL. LINEAR-GRADIENT. ANGULOS CSS: UNIDADES ANGULARES DEG, GRAD, TURN, RAD. (CU01060D)

API CANVAS HTML Y JAVASCRIPT. EJEMPLOS. DIBUJAR CÍRCULOS, FORMAS, GRÁFICOS, ANIMACIONES, JUEGOS, ETC. (CU01195E)

Aprenda los lenguajes HTML5, CSS3 y JavaScript para crear su primer sitio web

Manual de uso para desarrolladores Módulo generador de mapas dinámicos de multipuntos

Formularios. Botón. Cuadros de texto

Localizar direcciones en Google Maps con PHP

Resumen PDF de ejercicios Dentro de los recursos están videos y archivos HTML, JavaScript y PHP comentados

Roatan Bilingual School

Programa Saiotek 2006 SMARTLAB. Entorno de Trabajo Inteligente Colaborativo y Programable

Herramientas para construcción y prueba de sitios Web. Rogelio Ferreira Escutia

HOJAS DE ESTILOS EN CASCADA CSS (Cascading Style Sheet)

IF ELSE, IF ELSE IF JAVASCRIPT. CONDICIONALES DEL FLUJO O ESTRUCTURAS DE DECISIÓN. EJEMPLOS. EJERCICIOS. (CU01119E)

Gráficos con Funciones y Matrices

MÉTODOS DE WINDOW JAVASCRIPT. EFECTOS. CONFIRM, PROMPT, OPEN, MOVEBY, MOVETO, FOCUS, RESIZETO, CLOSE (CU01174E)

OBJETO WINDOW JAVASCRIPT. PROPIEDADES: NAME, INNERWIDTH, LENGTH,, OPENER, OUTERHEIGHT, PAGEXOFFSET, SCREENX (CU01173E)

CAPTURAR EVENTOS DE TECLADO JAVASCRIPT. TECLA PULSADA. FROMCHARCODE. KEYCODE, WICH. (CU01161E)

Programando con J2ME. Rogelio Ferreira Escutia

CSS. Página 1/16. Atributo id #texto1 {font-size: 20px;} <p id= texto1 >Texto</p> p:nth-child(2) { background: # }

Hojas de estilo. Ejemplo

Condicionales. Comparación. Combinación

La plantilla propone aprovechar esta estructura en común y sólo modificar el contenido del área del documento que sea diferente.

Social Media. Rogelio Ferreira Escutia

Ganancia y Polarización. Rogelio Ferreira Escutia

DHTML: Parte 2 DOM. Introducción al desarrollo web. Laura Sirvent Collado Estudiante de Ingeniería Multimedia Universidad de Alicante (España)

Producción Digital I. Lic. Wenceslao Zavala 7 de Junio 2018

SOMBRAS CON CSS ver. 2

Práctica No. 6. Manejo de Eventos con Javascript

MEDIA TÉCNICA DESARROLLO DE SOFTWARE GUIA DE APRENDIZAJE # 1 MODULO PÁGINAS WEB TEMA: FRAMES. DOCENTE: Juan Carlos Pérez Pérez ESTUDIANTE : FECHA: / /

CODIGOS AMAWEBS HTML & CSS. </style>

TIC II Tema 2: Programación Web

EJEMPLOS JAVASCRIPT OPERADORES INCREMENTO Y DECREMENTO. ASIGNACIÓN Y ASIGNACIÓN COMPUESTA. (CU01118E)

El programa en JavaScript debe ir encerrado entre la marca script e inicializada la propiedad type con la cadena text/javascript:

IMAGE JAVASCRIPT. NEW IMAGE. COMPLETE, NATURALWIDTH. OBTENER TODAS LAS IMÁGENES DE UNA WEB CON DOCUMENT.IMAGES (CU01186E)

FotoToon 5. Actividad para crear historietas

CONCEPTOS DE MARGEN Y RELLENO CSS. DIFERENCIAS ENTRE MARGIN Y PADDING CSS CON EL BOX MODEL. EJEMPLOS (CU01028D)

DISEÑO WEB AVANZADO CON HTML 5 Y CSS3

DISABLED JAVASCRIPT EN INPUT TEXT, SUBMIT, BUTTON, SELECT, LINK, STYLE... IMPEDIR ENVÍO DUPLICADO FORM. DESACTIVAR CSS (CU01183E)

DISEÑO WEB AVANZADO CON HTML5 Y CSS3 MODALIDAD TELEFORMACIÓN HORAS: 40

Codificación de animaciones Trabajo con imágenes, figuras y otros tipos de gráficos Gestión de datos usando LocalStorage

Manejo de eventos en JavaScript WEB-TECHNOLOGIES

Lo básico de Javascript

Telecomunicaciones. Presentación del Curso. Rogelio Ferreira Escutia

API GEOLOCATION Y API GOOGLE MAPS JAVASCRIPT. EJEMPLOS. INSERTAR MAPAS INTERACTIVOS, SATÉLITE, ETC. EN WEBS. EFECTOS. (CU01197E)

Curso de. HTML 5 y CSS 3. Por: Ing. Ubaldo Acosta.

TEXT-ALIGN, COLOR, TEXT- DECORATION, TEXT- INDENT, WHITE-SPACE NOWRAP, PRE, PRE- WRAP, PRE-LINE O NORMAL (CU01040D)

Contenido. Introducción CSS dinámico Ejemplos. Programación en Internet DLSI - Universidad de Alicante 1

Patrones de Radiación. Rogelio Ferreira Escutia

A continuación el código del formulario Registro.html y del archivo validar.js de javascript:

CSS. Rogelio Ferreira Escutia

Catedra de Base de Datos

SUBRAYAR CON MARCATEXTO EL PARRAFO DONDE ENCONTRÓ LA PREGUNTA LAS RESPUESTAS LAS ENCUENTRAS DE LA PAG 26 A LA 96 DEBE COPIAR PREGUNTA Y RESPUESTA

QUÉ ES UNA HOJA DE ESTILOS? Una hoja de estilo en cascada (CSS) es un conjunto de reglas en las que definimos el formato que va a tomar un

GUÍA N 5 PROGRAMACIÓN WEB - GRADO 11. Ing. Néstor Raúl Suarez Perpiñan Página 1 de 10

DRUIDA OPAC MOVIL MULTILENGUAJE

Figura 1: página de la vivienda sin estilo

JAVASCRIPT VALIDAR CAMPO TEXTO NO VACÍO. QUE VALOR SEA NUMÉRICO. O CORREO ELECTRÓNICO EN FORMULARIOS. EJEMPLOS (CU01182E)

Taller de Programación II J2EE

Feliz cumpleaños. Introducción HTML & CSS

Transcripción:

Taller de Videojuegos con HTML 5 Creación del Videojuego Memoria Rogelio Ferreira Escutia

HTML Básico 2

HTML Básico <!DOCTYPE html> <html> <head> <title>memoria</title> <meta charset="utf-8" /> </head> </html> 3

CSS 4

CSS body Anchura de 960 pixeles Margen 0. h1 centrado. micanvas Borde de 2pixeles punteado color amarillo. Color del fondo verde. 5

CSS /* memoria.css */ body{ width:960px; margin:0 auto; h1{ text-align:center; #micanvas{ border:dotted 2px yellow; background:green; 6

CSS Agregar a nuestro html el CSS. <link rel="stylesheet" href="memoria.css" /> 7

Canvas 8

Canvas Agregar el Canvas al HTML y definimos su tamaño: <body> <h1>memoria CANVAS</h1> <canvas id="micanvas" width="960px" height="450px"> Tu navegador no soporta CANVAS </canvas> </body> 9

10

JavaScript 11

JavaScript Creamos nuestro archivo JavaScript (memoria.js) con variables globales para nuestro programa. 12

JavaScript // // memoria.js // /*** Variables ****/ var ctx, canvas; var coloratras = "blue"; var iniciox = 45; var inicioy = 50; var cartamargen = 30; var cartalon = 30; var cartaancho = cartalon * 4; var cartalargo = cartalon * 4; var cartas_array = new Array(); 13

JavaScript Hacemos referencia al archivo JavaScript desde nuestro código html: <script language="javascript" src="memoria.js"></script> 14

JavaScript Declaramos los objetos que necesitaremos en nuestro código JavaScript: /***** Objetos ****/ function Carta(x, y, ancho, largo, info){ this.x = x; this.y = y; this.ancho = ancho; this.largo = largo; this.info = info; this.dibuja = dibujacarta; 15

JavaScript Creamos la función dibujacarta: function dibujacarta(){ ctx.fillstyle = coloratras; ctx.fillrect(this.x, this.y, this.ancho, this.largo); 16

Arranque del Canvas 17

JavaScript Arrancamos el Canvas dentro de nuestro JavaScript:: window.onload = arrancarcanvas; function arrancarcanvas(){ canvas=document.getelementbyid('micanvas'); if(canvas&&canvas.getcontext){ ctx=canvas.getcontext("2d"); if (ctx) { //Aqui va a ir el código else { alert("error al crear el contexto"); 18

Dibujar Tablero 19

JavaScript Agregamos la función para dibujar el tablero: function tablero(){ var i; var carta; var x = iniciox; var y = inicioy; for(i=0; i<6; i++){ carta = new Carta(x, y, cartaancho, cartalargo, i); cartas_array.push(carta); carta.dibuja(); //Creamos la segunda carta carta = new Carta(x, y+cartaancho+cartamargen, cartaancho, cartalargo, i); cartas_array.push(carta); carta.dibuja(); //Aumentamos el valos de x x += cartaancho + cartamargen; 20

21

Barajear Cartas 22

JavaScript Agregamos la función para barajear las cartas y la mandamos llamar después de llamar a la función tablero : function barajear(){ var i, j, k; var temporal; var lon = cartas_array.length; for(j=0; j<lon*3; j++){ i = Math.floor(Math.random()*lon); k = Math.floor(Math.random()*lon); // temporal = cartas_array[i].info; // cartas_array[i].info = cartas_array[k].info; cartas_array[k].info = temporal; 23

Manejo del click 24

JavaScript Detectamos el evento click y mandamos llamar a la función selecciona : canvas.addeventlistener("click",selecciona,false); 25

JavaScript El código de detección se coloca en nuestro arranque de Canvas y queda así: function arrancarcanvas(){ canvas=document.getelementbyid('micanvas'); if(canvas&&canvas.getcontext){ ctx=canvas.getcontext("2d"); if (ctx) { //Aqui va a ir el código canvas.addeventlistener("click",selecciona,false); tablero(); barajear(); else { alert("error al crear el contexto"); 26

JavaScript Creamos la función selecciona la cual extrae los valores x,y de donde hicimos click, y se los envía a la función ajusta : function selecciona(e){ var pos = ajusta(e.clientx, e.clienty); alert(pos.x+", "+pos.y); 27

JavaScript La función ajusta los valores x,y a la esquina superior del rectángulo donde se hizo click, esto con el objeto de dibujar en esa posición la carta: function ajusta(xx, yy){ var poscanvas = canvas.getboundingclientrect(); var x = xx - poscanvas.left; var y = yy - poscanvas.top; return {x:x, y:y 28

29

Detectar en que carta se hizo click 30

JavaScript Modificamos la función selecciona para detectar en qué carta se hizo click: function selecciona(e){ var pos = ajusta(e.clientx, e.clienty); //alert(pos.x+", "+pos.y); for(var i=0; i<cartas_array.length; i++){ var carta = cartas_array[i]; if(carta.x > 0){ if( (pos.x > carta.x) && (pos.x < carta.x+carta.ancho) && (pos.y > carta.y) && (pos.y < carta.y+carta.largo)){ break; if(i<cartas_array.length){ alert(i); 31

32

Variables globales para Manipular cartas 33

JavaScript Se agregan variables globales, para detectar si es la primera carta (primercarta) y para hacer referencia a la primera y segunda carta: /*** Variables ****/ var ctx, canvas; var primercarta = true; var cartaprimera, cartasegunda; var colordelante = "yellow"; var coloratras = "blue"; var colorcanvas = "green"; var iniciox = 45; var inicioy = 50; var cartamargen = 30; var cartalon = 30; var cartaancho = cartalon * 4; var cartalargo = cartalon * 4; var cartas_array = new Array(); 34

Detectar doble click Sobre la misma carta 35

JavaScript Modificamos selecciona para detectar si se hizo click 2 veces sobre la misma carta y pintamos la carta: function selecciona(e){ var pos = ajusta(e.clientx, e.clienty); //alert(pos.x+", "+pos.y); for(var i=0; i<cartas_array.length; i++){ var carta = cartas_array[i]; if(carta.x > 0){ if( (pos.x > carta.x) && (pos.x < carta.x+carta.ancho) && (pos.y > carta.y) && (pos.y < carta.y+carta.largo)){ if((primercarta) (i!=cartaprimera)) break; //Encontramos la carta if(i<cartas_array.length){ cartaprimera = i; primercarta = false; pinta(carta); 36

JavaScript Modificamos selecciona para detectar si se hizo click 2 veces sobre la misma carta y pintamos la carta: function selecciona(e){ var pos = ajusta(e.clientx, e.clienty); //alert(pos.x+", "+pos.y); for(var i=0; i<cartas_array.length; i++){ var carta = cartas_array[i]; if(carta.x > 0){ if( (pos.x > carta.x) && (pos.x < carta.x+carta.ancho) && (pos.y > carta.y) && (pos.y < carta.y+carta.largo)){ if((primercarta) (i!=cartaprimera)) break; //Encontramos la carta if(i<cartas_array.length){ cartaprimera = i; primercarta = false; pinta(carta); 37

JavaScript Creamos la función pinta para pintar la carta donde se hizo click: function pinta(carta){ ctx.fillstyle = colordelante; ctx.fillrect(carta.x, carta.y, carta.ancho, carta.largo); ctx.font = "bold 40px Comic"; ctx.fillstyle = "black"; ctx.filltext(string(carta.info), carta.x+carta.ancho/2-10, carta.y+carta.largo/2+10); 38

39

Seleccionar segunda carta 40

JavaScript Modificamos selecciona para poder seleccionar la segunda carta, y cuando eso suceda, dejar pasar un tiempo (settimeout) y manda llamar a una nueva función volteacarta : 41

function selecciona(e){ var pos = ajusta(e.clientx, e.clienty); //alert(pos.x+", "+pos.y); for(var i=0; i<cartas_array.length; i++){ var carta = cartas_array[i]; if(carta.x > 0){ if( (pos.x > carta.x) && (pos.x < carta.x+carta.ancho) && (pos.y > carta.y) && (pos.y < carta.y+carta.largo)){ if((primercarta) (i!=cartaprimera)) break; //Encontramos la carta if(i<cartas_array.length){ if(primercarta){ cartaprimera = i; primercarta = false; pinta(carta); else { cartasegunda = i; pinta(carta); primercarta = true; settimeout(volteacarta,1000); 42

JavaScript Creamos la función volteacarta : function volteacarta(){ cartas_array[cartaprimera].dibuja(); cartas_array[cartasegunda].dibuja(); 43

44

Determinar si son iguales las cartas seleccionadas 45

JavaScript Agregamos 2 variables globales para detectar si son iguales la cartas seleccionadas: var cartas_array = new Array(); var iguales = false; 46

JavaScript Dentro de la función selecciona tenemos el siguiente código: else { cartasegunda = i; pinta(carta); primercarta = true; settimeout(volteacarta,10000); 47

JavaScript El código anterior lo cambiamos por este, esto nos permitirá determinar si las cartas son iguales: else { cartasegunda = i; pinta(carta); primercarta = true; if(cartas_array[cartaprimera].info==cartas_array[cartasegunda].info){ iguales = true; else { iguales = false; settimeout(volteacarta,1000); 48

JavaScript Modificamos la función volteacarta para pintar las cartas que son iguales, que da el efecto de borrar function volteacarta(){ if(iguales==false){ cartas_array[cartaprimera].dibuja(); cartas_array[cartasegunda].dibuja(); else { ctx.clearrect(cartas_array[cartaprimera].x, cartas_array[cartaprimera].y, cartas_array[cartaprimera].ancho, cartas_array[cartaprimera].largo); // ctx.clearrect(cartas_array[cartasegunda].x, cartas_array[cartasegunda].y, cartas_array[cartasegunda].ancho, cartas_array[cartasegunda].largo); // cartas_array[cartaprimera].x = -1; cartas_array[cartasegunda].x = -1; 49

50

Creando un marcador 51

JavaScript Agregamos la variable global cartas para llevar el control de las cartas: var cartas = 0; 52

JavaScript Mandamos llamar a la función aciertos que vamos a crear para controlar el número de aciertos, y nuestra función arrancarcanvas queda así: function arrancarcanvas(){ canvas=document.getelementbyid('micanvas'); if(canvas&&canvas.getcontext){ ctx=canvas.getcontext("2d"); if (ctx) { //Aqui va a ir el código canvas.addeventlistener("click",selecciona,false); tablero(); barajear(); aciertos(); else { alert("error al crear el contexto"); 53

JavaScript Creamos la función aciertos para llevar el marcador: function aciertos(){ ctx.fillstyle = "black"; if(cartas==6){ ctx.font = "bold 80px Comic"; ctx.clearrect(0,0, canvas.width, canvas.height); ctx.filltext("muy bien, eres un genio!", 60, 220); else { ctx.save(); ctx.clearrect(0,340, canvas.width/2, 100); ctx.font = "bold 40px Comic"; ctx.filltext("aciertos: "+String(cartas), 30, 380); ctx.restore(); 54

JavaScript En la función aciertos se guarda y se reestablece el contexto para poder ir pintando los elementos que van cambiando, en este caso el marcador 55

JavaScript En la función selecciona tenemos el siguiente código: else { cartasegunda = i; pinta(carta); primercarta = true; if(cartas_array[cartaprimera].info==cartas_array[cartasegunda].info){ iguales = true; else { iguales = false; settimeout(volteacarta,1000); 56

JavaScript Lo cambiamos por el siguiente, que incrementa las cartas y los aciertos cuando el usuario le atina: else { cartasegunda = i; pinta(carta); primercarta = true; if(cartas_array[cartaprimera].info==cartas_array[cartasegunda].info){ iguales = true; cartas++; aciertos(); else { iguales = false; settimeout(volteacarta,1000); 57

JavaScript Cuando se tienen los 6 pares de cartas, finaliza el juego e imprime el mensaje que viene dentro de la función aciertos que se hizo anteriormente: if(cartas==6){ ctx.font = "bold 80px Comic"; ctx.clearrect(0,0, canvas.width, canvas.height); ctx.filltext("muy bien, eres un genio!", 60, 220); 58

59

Y nuestro juego finaliza!!!! 60

Rogelio Ferreira Escutia Instituto Tecnológico de Morelia Departamento de Sistemas y Computación Correo: rogelio@itmorelia.edu.mx rogeplus@gmail.com Página Web: http://antares.itmorelia.edu.mx/~kaos/ http://www.xumarhu.net/ Twitter: Facebook: http://twitter.com/rogeplus http://www.facebook.com/groups/xumarhu.net/ 61