Ogarnij zmienne globalne, to zła praktyka.
Co do kodu to spójrz na pierwszą pętle. Program sprawdza warunek, wykonuje jej zawartość, sprawdza warunek, wykonuje, sprawdza, wykonuje i tak do usranej apokalipsy. Nic co jest poniżej się nie wykona, ponieważ program zajęty jest pętlą. Kod wykonuje się linijka po linijce, nie cały jednocześnie. Weź długopis i prześledź, wskazuj po kolei linijki w kodzie, następnie sprawdzaj co się w nich dzieje, od razu zobaczysz że utykasz w pętli.
Dodatkowo wszystkie pętle w twoim programie, zakładając że działa, wykonują się tak szybko jak pozwala na to procesor. To chyba nie o to chodzi w grach, żeby mając dobry sprzęt mieć łatwiej?
Najbardziej eleganckim i poprawnym rozwiązaniem będzie zamknięcie tego wszystkiego w pętle stałokrokową, bądź zwykłą i mnożenie akcji opartych na czasie przez delte czasu pomiędzy aktualizacjami , poszukaj w google o pętli stałokrokowej, pętli głównej gry itp.. Spokojnie, to tylko brzmi skomplikowanie, pozytywne podejście i dasz sobie rade :).