El juego de memoria es bien simple, te presenta una cantidad de espacios (12) que al darles click revelan una imagen oculta, la cual tiene una pareja entre las demás imágenes ocultas, cuando se encuentra un par este queda visible, y si no se encuentra el par, las imágenes descubiertas se vuelven a ocultar.
Como siempre basándonos en una versión "light" del juego, pues veremos cuales son los pasos que debe seguir nuestro juego para ser funcional:
- Primero hay que generar el orden de las imágenes, y controlar que no se repitan mas de 2 veces las imágenes.
- Controlar que cada vez que demos click (a los label) estos muestren la imagen.
- Determinar si las imágenes son iguales para que queden visibles, caso contrario ocultarlas nuevamente.
- Finalmente terminar el juego una vez todas las imágenes hayan sido descubiertas con sus respectivas parejas.
Para almacenar las imagenes usaremos los jLabel con su propiedad setIcon, por tanto las imagenes que usemos deben ser de un mismo tamaño y no muy grandes, ya que el jLabel se acomoda a la imagen.
Lo primero que haremos sera tener 2 arrays de enteros, el primero de 12 espacios para guardar las posiciones de nuestras imagenes, y el segundo de 6 para controlar que no se repitan mas de 2 veces las imagenes en las 12 posiciones.
//declaramos los arrays
int posicion[] = new int[12];
int control[] = new int[6];
//los llenamos de ceros
for(int x=0;x<12;x++)
posicion[x]=0;
for(int x=0;x<6;x++)
control[x]=0;
//declaramos nuestro random para generar las posiciones aleatorias
//generamos un valor aleatorio del 0 al 5, que representara a las imagenes
Random r = new Random();
int posIma;
//comenzamos el llenado
for(int x=0;x<12;x++){
//generamos un valor aleatorio del 0 al 5, que representara a las imagenes
posIma = r.nextInt(6);
//comprobamos que el numero maximo se encuentre 2 veces
if(control[posIma]<2){
//guardamos el numero
posicion[x]=posIma+1;
//aumentamos el valor de control
control[posIma]++;
}else{
x--;//disminuimos x para que no cuente este bucle
}
}
Teniendo en cuenta que nuestras imágenes deben tener por nombres los números del 1 al 6, pues este array nos servirá para colocar las imágenes en nuestros jLabel, cada vez que se active el evento mouseClicked, de la siguiente manera:
//esto va luego del package
import javax.swing.ImageIcon;
//colocamos la imagen en nuestro jLabel
jLabel1.setIcon(new ImageIcon(getClass().getResource(pos[0]+".jpg")));
lo malo de este método es que tendremos que usar esta linea para cada jLabel (jLabel1,Jlabel2,etc) y respectivamente cambiar el indice de nuestro array (siempre un numero menos que nuestro jLabel. Ejm: jLabel2 --> pos[1]
ademas necesitaremos una imagen por defecto que represente que la imagen esta volteada, puede ser una imagen en blanco o quizás un signo de interrogación.
Para comprobar si las imágenes volteadas son iguales se puede usar un par de variables auxiliares que tomen el valor del pos[x] cuando las imágenes sean reveladas, y estos 2 valores serian enviados a una funcion que se encargue de compararlas, por tanto si son iguales las imagenes quedan reveladas y si son distintas las imagenes volveran a ser volteadas.
**************
El juego terminado ya esta disponible para descarga, se le agrego 3 juegos de imágenes para variar un poco el juego ademas de un timer que nos permitirá saber cuanto se demora uno en descubrir todas las parejas.
Descargar: http://www.mediafire.com/?boo2guzzntm8oak
ademas necesitaremos una imagen por defecto que represente que la imagen esta volteada, puede ser una imagen en blanco o quizás un signo de interrogación.
Para comprobar si las imágenes volteadas son iguales se puede usar un par de variables auxiliares que tomen el valor del pos[x] cuando las imágenes sean reveladas, y estos 2 valores serian enviados a una funcion que se encargue de compararlas, por tanto si son iguales las imagenes quedan reveladas y si son distintas las imagenes volveran a ser volteadas.
**************
El juego terminado ya esta disponible para descarga, se le agrego 3 juegos de imágenes para variar un poco el juego ademas de un timer que nos permitirá saber cuanto se demora uno en descubrir todas las parejas.
Descargar: http://www.mediafire.com/?boo2guzzntm8oak
Este comentario ha sido eliminado por el autor.
ResponderEliminarMuchas gracias! Me sirvió mucho para un proyecto de la U! bendiciones!
ResponderEliminarBuenas Kevin, usted me podria pasar el archivo, igual me serviria de mucho para un proyecto de la U. ravaa6@gmail.com
ResponderEliminarGracias
buenisimo pero que mala onda que digan que lo hicieron "itssnp" cuando ni siquiera pongan creditos
ResponderEliminarel codigo fue netamente creacion mia, la imagen que use para ilustrar el post si la saque de internet en el apuro de subirlo en esos dias, salu2
EliminarHank Mooddy: la codificacion esta muy bueno y entendible!!!
ResponderEliminarme seria de mucha ayuda si me pasa el codigo completo .. Necesito algo de ayuda para un trabajo que tengo que hacer.... mi correo es apu2420@gmail.com
al final de post hay un enlace de Mediafire para poder descargar el proyecto ya terminado, salu2
Eliminarel enlace esta caidoo
EliminarAcabo de probarlo y esta funcionando normal
Eliminarok :P
Eliminarok (p)
EliminarException in thread "main" java.lang.NullPointerException
ResponderEliminarat javax.swing.ImageIcon.(ImageIcon.java:205)
at a3d.Parejas.initComponents(Parejas.java:44)
at a3d.Parejas.(Parejas.java:25)
at a3d.Principal.main(Principal.java:12)
que hago? :(
:)) :d
Eliminarsi mal no recuerdo cuando se hace un cambio en las imagenes, habia que utilizar rebuild para que funcionaran de nuevo, porque en su momento mas alla del problema de las imagenes todo corria bien.
ResponderEliminarPodria pasarme el codigo documentado?
ResponderEliminarNo entiendo
for(int cant=0;cant<12;cant++){
img = r.nextInt(6);
if (num[img]<2){
num[img]++;
cot[cant]=img+1;
}else{
cant--;
ahora que reviso el post veo que en la que explicación que escribà cambie ligeramente los nombres de las variables para que se entendiera mejor, el codigo siguiente es el que corresponde con el codigo que copiaste:
Eliminarfor(int x=0;x<12;x++){
//generamos un valor aleatorio del 0 al 5, que representara a las imagenes
posIma = r.nextInt(6);
//comprobamos que el numero maximo se encuentre 2 veces
if(control[posIma]<2){
//guardamos el numero en posicion
posicion[x]=posIma+1;
//aumentamos el valor de control
control[posIma]++;
}else{//en caso ya exista la pareja
x--;//disminuimos x para que no cuente este bucle
}
}
Muchas gracias, me sirvio como ejemplo que buscaba!!
ResponderEliminarI have read your blog its very attractive and impressive. I like it your blog.
ResponderEliminarJava Training in Chennai