No dobra, przyjrzałem się bliżej kodowi tego projektu (bom był ciekaw jak to działa) i mam kilka(naście) uwag. :]
Pierwsza rzecz – kinematyka odwrotna po angielsku to inverse kinematics, a nie invert kinematiks.
Kod piszesz bardzo niedbale – nie stosujesz jednolitych wcięć, nie korzystasz z przyjętej konwencji nazewnictwa, chętnie stosujesz jednoliterowe, a tym samym nic nie mówiące o swoim przeznaczeniu identyfikatory, nie robisz odstępów pomiędzy operatorami, warunki (nawet złożone) piszesz w jednej linijce, co sprawia, że są one kompletnie nieczytelne. Do tego pozostawiasz w kodzie nieużywane zmienne i moduły, a także zakomentowane fragmenty kodu, które nie wiadomo dlaczego są zakomentowane (czy są one pozostałością po testach, czy może alternatywnym rozwiązaniem danego problemu).
Poza tym jeśli już publikujesz źródła projektu, to nie dołączaj do nich plików binarnych czy backupów źródeł, a także nie pozostawiaj w ustawieniach projektu hardkodowanych ścieżek do jakichś bibliotek (w dodatku nieużywanych w projekcie).
Trochę niedobrze, że projekt w takiej postaci publikujesz na forach. Brzydki i niedbały kod źle świadczy o jego autorze – nawet jeśli działa prawidłowo, przedstawia to co ma przedstawiać i nie generuje wycieków pamięci. Nieważne, że to tylko test – skoro testowe aplikacje piszesz byle jak to znaczy, że brak Ci nawyku pisania ładnego i czytelnego kodu, więc najprawdopodobniej właściwy projekt też będzie posiadał brzydki kod. :/
Jeśli chodzi o część merytoryczną, to też jest sporo do poprawienia. Po pierwsze, do przechowywania płaskiej listy jakichś elementów używaj list (np. generycznych), bo o wiele łatwiej się ich używa – łatwiej się wypełnia danymi i łatwo się te dane później modyfikuje, dzięki czemu kod będzie krótki i czytelny. Ty używasz zwykłej macierzy z zarezerwowaną ostatnią komórką, która jest pomijana podczas renderowania węża. To samo można uzyskać korzystając z list.
Druga sprawa to nieprawidłowe renderowanie węża. Nie chodzi o to, że wygląd węża nie jest zgodny z danymi o jego segmentach, a o to, że przed jego namalowaniem zamalowujesz całe płótno okna danym kolorem, a następnie renderujesz węża. Nie jest to jakiś bardzo głupi pomysł, ale ma jedną wadę – podczas przesuwania węża ekran miga. Im szybciej przesywamy węża (a tym samym częściej odmalowywane jest płótno okna), tym bardziej owe miganie jest widoczne.
Problem z miganiem ekranu jest łatwy do rozwiązania – w ogóle nie wypełniaj tła okna. Jeśli włączone jest podwójne buforowanie, to za czyszczenie płótna odpowiadają wewnętrzne mechanizmy. W takim wypadku wystarczy tylko malować to co potrzebujemy (czyli węża). To kiedy i jak malować zależy od kontekstu – nie ma jednego sposobu pokrywającego wszystkie przypadki, bo zestaw koniecznych czynności do wykonania jest inny dla renderowania bezpośrednio na płótnie okna i inny dla renderowania na pomocniczych buforach. Dużo by odpowiadać.
Przerobiłem kod Twojego projektu i teraz wąż reprezentowany jest przez generyczną listę. Dodałem trochę rzeczy, dzięki którym tworzenie węża jest łatwiejsze i daje trochę więcej możliwości. Zmieniłem też sposób jego renderowania, dzięki czemu obraz nie miga podczas ruchu, a także dodałem funkcję wyświetlania krzyżyków w miejscach połączeń jego segmentów.

Liczbę segmentów, długość i grubość każdego z nich oraz kolor węża ustala się w konstruktorze formularza.
Jeśli chodzi o sterowanie wężem to są dwa tryby. Pierwszy to podążanie – nie trzeba klikać aby przesuwać węża bo sam chodzi za kursorem. Drugi tryb to przesuwanie manualne, w którym aby wąż chodził, trzeba trzymać lewy przycisk i przesuwać myszę. Tryb przełącza się prawym klawiszem myszy. Tryb manualnego przesuwania węża wykorzystuje różnicę współrzędnych jego głowy oraz kursora, dzięki czemu głowa nie jest ciągle przylepiona do kursora (w trybie podążania jest).
W załączniku dorzucam w pełni obiektowy kod, jako rozwinięcie projektu przedstawionego przez OP. Jeśli ktoś chciałby się pobawić wężem to plik wykonywalny znajduje się w załączonym archiwum. A Ty @machinebyte4 pobierz sobie to archiwum i zobacz jak powinien wyglądać czytelny kod źródłowy.