Ciao.
Dai un occhio a questo e alla versione migliorata
qui
non è una risposta alla tua domanda
ma penso sia una base su cui lavorare
entambi gli esempi sono OOP.