Skip to main content
Blog

ΠWEEK: Kam-Fu

Pablo A.

TL;DR He hecho un juego que se maneja con la webcam. Tienes el link para jugar al final 🙂

Probablemente el hardware mĂĄs comĂșnmente infrautilizado es la webcam. Hoy en dĂ­a todos los portĂĄtiles llevan una cĂĄmara, que todo el mundo tapa para evitar a los ‘hackers’, o la enciende para hacer una videoconferencia
 sĂłlo para apagarla a los pocos minutos porque el ancho de banda no es suficiente para el vĂ­deo.

Así que esta piweek he decidido darle una oportunidad para hacer algo mås. ¿Y qué mejor que convertirla en un interfaz para un videojuego?. Ademås, con la potencia actual de los navegadores, y las capacidades de html5 para acceder a la cåmara, debería ser posible hacerlo en html y javascript. Así surgió la idea de Kam-Fu.

La verdad es que no he dedicado tiempo a investigar sobre visión artificial. Seguro que hay muchas ideas muy buenas por ahí. Pero yo tenía una teoría, que quería probar. Si se hace una foto eståtica al principio, y luego se compara esa foto con cada fotograma, se pueden obtener las diferencias (con un cierto umbral). Cualquier pixel que sea diferente, es un sitio que el jugador estå "tocando". Parecía una buena teoría, así que busqué alguna biblioteca de comparación de imågenes, y llegué a Resembe.js, que hacía justo lo que yo quería. Comencé las primeras pruebas, y el lunes por la mañana ya conseguía "tocar" botones en el aire. ¥El primer día tenía funcionando lo que esparaba que me llevase casi toda la semana!.

Awesome! Image diferences detector on the first morning!

Una vez tenĂ­a el interfaz para detectar los movimientos del usuario, era la hora de hacer algo chulo con ello. Lo primero que hice el martes fue el "minijuego" del menĂș, desde el que poder elegir otros juegos. Una vez lo tuve funcionando, tocĂł refactorizar todo, para extraer las partes comunes a cualquier juego. Una vez conseguido, tocaba lo que de verdad me apetecĂ­a
 ÂĄEl juego de matar ninjas!.

Pero en ese punto me dí cuenta de que mi sistema de comparación de imågenes era muy poco eficiente. ¿Para qué quería detectar todas las diferencias entre un frame y la imagen original? En realidad sólo me interesaba si había diferencias sobre alguno de los sprites del juego. Así que me deshice de Resemble.js, y me escribí mi propia biblioteca de comparación de imågenes, que permitía comparar un pixel concreto.

Una vez resuelto esto, ya estaba on-fire. Los siguientes días llegaron no sólo el juego de los ninjas, sino también el de memoria, y el de baile.

ninja1 dance1 memory1

Cosas que he aprendido:

  • Desarrollar juegos es muy divertido, tanto como jugarlos.
  • Para hacer juegos, es indispensable un diseñador grĂĄfico. He dedicado demasiadas horas al Gimp para el resultado visual obtenido.
  • Las capacidades multimedia de html5 son impresionantes.
  • Con la potencia de hardware actual, hasta con un portatil modesto, la optimizaciĂłn ya no es algo vital. Tras invertir muchas horas en mejorar la eficiencia de cĂłdigo que se ejecuta varias veces por segundo, el resultado apreciable no era diferente.

Por supuesto, Kam-Fu es software libre, puedes acceder a su cĂłdigo fuente. Pero lo mĂĄs importante es que ÂĄpuedes jugar! (por ahora, sĂłlo para chrome): Kam-Fu

Kaleidos INC Sucursal España
C/ Max Aub, 5, Bajo B, 28003
 
Madrid - Spain

hello@kaleidos.net
instagramxgithub