Achei um projeto na internet que parece estar mais organizado do que os
que eu havia visto. Coloquei todas as classes para servir como um ponto
inicial, daí é só examinar o código, tentar entender, refazer e adaptar
para o nosso caso.