Guardare cosa c'é di sbaglato nel tuo programma richiede un minimo di tempo, cosa che purtroppo in questo momento non ho. Ti consiglio di eseguire un debug, per vedere cosa fa il tuo programma controllando nei vari punti lo stato delle variabili in gioco. Se anche così non risolvi e trovi un ostacolo ti consiglio di aprire un nuovo thread.