¡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:
Nota: Se puede hacer muchísimo mejor, pero eso es a gusto de ustedes, esto es solo una demostración.
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
http://daw1.hol.es/game.html
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
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