¡Advertencia!
Este tema no ha tenido respuestas en más de un mes. Recuerda que si deseas añadir una nueva debes cumplir con las normas de la web.
Como le dije a un usuario en el otro tema, me puse a desarrollar un pequeño juego en demostración sobre el típico juego de cartas de memorias usando Javascript, no es nada difícil de entenderlo, espero que les sea de utilidad en su camino al aprendizaje.

Aquí os dejo el código:

<html>
	<head>
		<title>Joaquin A.</title>
		<style>
		body{
			background-color: black;
		}
		#tablero {
			width: 200px;
			height: 200px;
			margin: 0 auto;
			background-color: gray;
		}
		#tablero > div.pieza{
			width: 40px;
			height: 40px;
			margin: 5px;
			background-color: black;
			cursor: pointer;
			float: left;
		}
		#copy {
			color: white;
			margin: 10px;
			position: fixed;
			bottom: 0;
		}
		</style>
		<script>
			/*
				Juego de Memoria en Javascript: Desarrollado por Joaquin A.
			*/
			var aciertos = 0;
			var errores = 0;
			var primero = '';
			var segundo = '';
			var turno = 1;
			var puedoseleccionar = true;
			var piezas = new Array();

			// Configuración de colores
			var colores = new Array ('green', 'blue', 'orange', 'red', 'purple', 'brown', 'yellow', 'white');

			function agregarPiezas() {
				document.getElementById("tablero").innerHTML = '';
				for (var c = 0; c < colores.length; c++) {
					// Agregamos un par de cada color
					piezas.push(colores[c]);
					piezas.push(colores[c]);
				}
				mostrarPiezas();
			}
			function mostrarPiezas() {
				// Ordenamos las piezas...
				piezas.ordenar();
				cont = document.getElementById("tablero");
				
				// Las vamos agregando al DOM...
				for ( var p = 0; p < piezas.length; p++) {
					pcont = document.createElement("div");
					pcont.setAttribute("id","pieza-" + p);
					pcont.setAttribute("class","pieza");
					pcont.setAttribute("onclick","seleccionarPieza(" + p + ")");
					cont.appendChild(pcont);
				}
			}
			function seleccionarPieza(p) {
				if (puedoseleccionar == true) {
					// Mostramos el color de la pieza
					var seleccionado = document.getElementById("pieza-" + p);
					seleccionado.setAttribute("style","background-color:" + piezas[p]);
					// Debug: console.log(piezas[p]);
					// Validamos si es la primera o segunda pieza del turno
					if (turno == 1) {
						primero = p;
						turno = 2;
					} else if (turno == 2 && primero != p) {
						segundo = p;
						comprobarPiezas();
					}
				}
			}
			function comprobarPiezas() {
				// Evitamos que el usuario pueda seleccionar mientras se muestra el color de ambas piezas
				puedoseleccionar = false;
				var selprimero = document.getElementById("pieza-" + primero);
				var selsegundo = document.getElementById("pieza-" + segundo);
				
				// Comprobamos si son iguales
				if (piezas[primero] == piezas[segundo]) {
					// Removemos los eventos para evitar seleccionarlas nuevamente
					selprimero.removeAttribute("onclick");
					selsegundo.removeAttribute("onclick");
					// Al ser correcto, se le agrega un acierto
					aciertos++;
					// Mostramos el color y las eliminamos despues de e segundo
					setTimeout(function(t) {
						selprimero.setAttribute("style","background-color: gray");
						selsegundo.setAttribute("style","background-color: gray");
						puedoseleccionar = true;
					}, 1000);
					// Comprobamos si ha ganado
					comprobarVictoria();
				} else {
					errores++;
					// Volvemos a la normalidad despues de 1 segundo
					setTimeout(function(t) {
						selprimero.setAttribute("style","background-color: black");
						selsegundo.setAttribute("style","background-color: black");
						puedoseleccionar = true;
					}, 1000);
				}
				turno = 1;
			}
			function comprobarVictoria(){
				// Si la cantidad de aciertos corresponde a la cantidad de colores, has ganado.
				if (aciertos >= colores.length) {
					alert('¡Victoria!, aciertos: ' + aciertos + ', errores: ' + errores);
					// Reiniciamos todo para volver a empezar
					aciertos = 0;
					errores = 0;
					primero = '';
					segundo = '';
					turno = 1;
					puedoseleccionar = true;
					piezas = new Array();
					agregarPiezas();
				}
			}
			Array.prototype.ordenar = function() {
				// Procedemos a ordenar de forma aleatoria las piezas
				for (var i = this.length-1; i > 0; i--) {
					var j = Math.floor(i * Math.random());
					var tmp = this[j];
					this[j] = this[i];
					this[i] = tmp;
				}
				return this;
			}
		</script>
	</head>
	<body onload="agregarPiezas();">
		<div id="tablero"></div>
		<div id="copy">Desarrollado por Joaquin A.</div>
	</body>
</html>


Nota: Se puede hacer muchísimo mejor, pero eso es a gusto de ustedes, esto es solo una demostración.

Arquitecto, diseñador y programador | Comenzando a proyectar mi vida bajo mis propios ideales. Administrador de ilDom, Twiteck y Century21
Pulsando dos veces sobre la misma te la cuenta como correcta jaja

Para seguirme solamente tienes que darle al corazón

Pulsando dos veces sobre la misma te la cuenta como correcta jaja


#Fail.
Ya lo corrijo:

Nota: Por eso es que amo el feedback.
---
Edito: @maoellisto, gracias, lo acabo de arreglar.

Arquitecto, diseñador y programador | Comenzando a proyectar mi vida bajo mis propios ideales. Administrador de ilDom, Twiteck y Century21
Qué curioso, hice algo parecido en inglés para la web que hicimos en clase.
http://daw1.hol.es/game.html
Está muy bien, me encantó. Luego si eso lo pruebo.

Qué curioso, hice algo parecido en inglés para la web que hicimos en clase.
http://daw1.hol.es/game.html


Es un juego muy típico, de los más básicos conocidos que se pueden hacer.

Nota: En el tuyo nunca logré el 100 Pts.
Si mi aburrimiento sigue, le entraré con websockets y node a ver que tal queda.
---
Edito el mensaje para los que no entendieron eso último.
con websocket (O socket.io preferiblemente) y node.js se puede crear una conexión cliente-servidor en javascript que permitiría que el juego fuese multijugador...

Arquitecto, diseñador y programador | Comenzando a proyectar mi vida bajo mis propios ideales. Administrador de ilDom, Twiteck y Century21


Qué curioso, hice algo parecido en inglés para la web que hicimos en clase.
http://daw1.hol.es/game.html


Es un juego muy típico, de los más básicos conocidos que se pueden hacer.

Nota: En el tuyo nunca logré el 100 Pts.
Si mi aburrimiento sigue, le entraré con websockets y node a ver que tal queda.
---
Edito el mensaje para los que no entendieron eso último.
con websocket (O socket.io preferiblemente) y node.js se puede crear una conexión cliente-servidor en javascript que permitiría que el juego fuese multijugador...

La puntuación no la hice yo, de hecho ni estoy de acuerdo con que sea así.

socket.io
También me fijé que esos colores gris y negro hacen efecto óptico de pequeños puntos oscuros en las intersecciones lol
Estaría chido añadirle un timer

En el de flyfap hice 75 puntos y me aburrí jajaj

Para seguirme solamente tienes que darle al corazón

También me fijé que esos colores gris y negro hacen efecto óptico de pequeños puntos oscuros en las intersecciones lol
Estaría chido añadirle un timer

En el de flyfap hice 75 puntos y me aburrí jajaj



Jaja, lo acabo de pillar, se ven como círculos sombreados en las intersecciones de las piezas del tablero.
Como diría un carismático personaje de la televisión Mexicana, "Fue sin querer queriendo".

Arquitecto, diseñador y programador | Comenzando a proyectar mi vida bajo mis propios ideales. Administrador de ilDom, Twiteck y Century21
Les dije que estaba aburrido, ok:

Arquitecto, diseñador y programador | Comenzando a proyectar mi vida bajo mis propios ideales. Administrador de ilDom, Twiteck y Century21

Les dije que estaba aburrido, ok:


Yo en esos casos lo que hago es meter las acciones en un array durante medio segundo o así y luego enviarlo de golpe. No se si será más viable dado que es una conexión permanente, pero me duele ver en el log cada pixel movido. xD


Les dije que estaba aburrido, ok:


Yo en esos casos lo que hago es meter las acciones en un array durante medio segundo o así y luego enviarlo de golpe. No se si será más viable dado que es una conexión permanente, pero me duele ver en el log cada pixel movido. xD


Al ser una conexión permanente vendría siendo lo mismo, en mi caso lo que hago es enviar las posiciones por cada click realizado sobre el DOM (El personaje se mueve por click, no por flechas, aviso xD).

En el log, simplemente imprimo por cada paquete recibido de los clientes conectados, eso es solo aspecto visual para el administrador del servidor (Ayuda muchísimo para detectar errores), ya que podría seguir funcionando aun cuando no imprima nada.

Lo terminé hace unas horas, lastima que no posea ninguna maquina virtual para correrlo, no me gusta abrir puertos para un demo.

Arquitecto, diseñador y programador | Comenzando a proyectar mi vida bajo mis propios ideales. Administrador de ilDom, Twiteck y Century21