En esta ocasión les mostraré como hacer un “Concéntrese” con Ruby. Lo sé, la página es sobre Java, Php y C++ pero bueno, me parece que es buen momento para mostrar cosas sencillas y rápidas que se pueden hacer en otros lenguajes y que uno piensa “Naa, eso está muy complicado!”
¿Cómo empezar?
Ruby es un lenguaje de programación que se puede manejar orientado a objetos, como Java, Php y C++, con la diferencia que todas sus variables declaradas son de tipo privado. Es sencillo de manejar y aprenderlo es fácil, ya que es de la línea de Phyton y para los programadores suele ser muy claro, relajado y hasta suave de trabajar
Pero bueno, arranquemos, primero que todo importantísimo aclarar que este artículo está trabajado sobre Linux, específicamente en Ubuntu, pero que para los amantes de Windows, la diferencia es relativamente muy poca.
Empecemos por instalar Ruby en nuestro equipo. Como vamos a trabajar interfaces gráficas es importante tener una librería gráfica a usar, como Swing en Java, en este caso usaremos GTK2.
¿GTK2?
GTK2 es un librería para crear interfaces gráficas, publicada bajo licencia pública LGPL. La idea es descargarla y copiarla en el directorio lib de nuestro Ruby. Descargar
A programar!
Un concéntrese clásico es una ventana con un cierto número de fichas las cuales tienen un a imagen al reverso de éstas. El concéntrese que vamos a hacer cumple con ciertas características de la Programación Orientada a Objetos, como la Herencia, Overriding de métodos y manejo de eventos; además vamos a manejar el concepto de Thread (hilo) para la ejecución del programa.
Nuestro concéntrese comienza definiendo la clase BotonConcentrese, la cual es una herencia de la clase Botón de GTK, además se hace uso de variables globales las cuales permitirán el buen funcionamiento del mismo.
Clase Botón
$click = 0
$botones = 6
$bloqueados = 0
$registrados = Array.new
#Clase Boton
class BotonConcentrese < Gtk::Button
#Constructor
def initialize(nombre, numero)
super(nombre)
@numero = numero
signal_connect("clicked"){
Thread.new{jugar(self)}
}
end
#Accesor
def getNumero
return @numero
end
end
En la primera línea se puede observar la forma en que la clase está heredando de Botón, a continuación se definen sus métodos como el constructor, el accesor getNumero (el cual retorna el valor asignado al botón), y jugar.
Es en este método donde se encuentra la interactividad del juego. El cual recibe como parámetro un botón, es decir el botón que haya sido oprimido por el usuario, es aquí donde cada botón del Concéntrese tiene relacionada una imagen, pero resulta que cada imagen tiene una copia que debe estar asignada en otro botón, es por eso que en esta parte se asigna teniendo en cuenta que solo exista una copia y no varias.
#Metodo Principal Jugar
def jugar(boton)
$click = $click+1
image = Gtk::Image.new(boton.getNumero + ".jpg")
imagen = Gtk::Window.new
imagen.add(image)
imagen.show_all
#Puntaje - Actualizacion de Inferfaz
if $click==2
$click = 0
if $primeraOpcion.getNumero == boton.getNumero
#desactivando los botones
boton.set_sensitive(false)
$primeraOpcion.set_sensitive(false)
$primeraOpcion = BotonConcentrese.new("?", "0")
$bloqueados = $bloqueados + 2
end
else
$primeraOpcion = boton
end
sleep (2)
imagen.destroy
if $bloqueados == $botones
puts "Juego Completo!"
terminar = Gtk::Image.new("terminado2.jpg")
terminado = Gtk::Window.new
terminado.add(terminar)
terminado.show_all
sleep (3)
terminado.destroy
Gtk.main_quit
end
end
A continuación entonces la serie de código en el cual se controla y se crean los botones aleatoriamente:
#Metodo para controlar la creacion de los botones
def estaRegistrado(num)
cont = 0
$registrados.each do |x|
if x == num
cont = cont + 1
end
end
if cont < 2
return false
end
if cont == 2
return true
end
return true
end
#Creacion de los metodos
for j in 0..($botones-1)
numero = (rand(5)%3)+1
while estaRegistrado(numero) && $registrados.length != 0 do
numero = (rand(5)%3)+1
end
$registrados << numero
box1.pack_start(BotonConcentrese.new(Gtk::Stock::DIALOG_QUESTION, numero.to_s), true, true, 0)
end
Esta mini-aplicación hace que cuando se escoja algún botón, éste se cierre por sí solo, gracias a los Hilos que se ejecutan. Subo el comprimido con los fuentes para los que quieran descargarlo y probarlo. Y como siempre, no olviden dejar sus comentarios y consultar la fuente: Fuente


Se ve buenísimo
te faltó algunas capturas de pantalla, pero da igual voy a probarlo.
saludos!