Krótko: tworzę sobie grę "Snake". Nie korzystam z żadnych przykładów, sam sobie układam w głowie. Doszedłem do pewnej ściany algorytmicznej (i szukam w niej klamki).
Wąż składa się z segmentów. Porusza się w pętli. W każdym kroku pętli są wykonywane między innymi następujące działania:
1. Porusz węża o jedno pole (tzn. jeszcze nie wyświetlaj nic).
2. Sprawdź, czy wąż jest w niedozwolonej pozycji.
2.1. Jeśli tak, zakończ grę.
2.2. Jeśli nie, sprawdź, czy wąż właśnie zebrał punkt.
2.2.1. Jeśli tak, zwiększ długość węża o jeden segment.
2.2.2. (Jeśli nie, nic nie rób).
3. Wyświetl planszę (wraz z wężem).
I to powinno działać... chyba że dojdzie do takiej sytuacji jak poniżej (rysowałem w arkuszu kalkulacyjnym):
Wąż porusza się, jak pokazują strzałki. Głowa jest oznaczona ciemniejszym kolorem i znakiem "G", punkt znakiem "x", ostatni segment węża przed dodaniem nowego znakiem "O", a nowy segment znakiem "N". I teraz:
- Jeśli wąż nie zebrał punktu, to nic się nie dzieje złego: w następnym ruchu ostatni segment przesuwa się do pola wyżej, a głowa przesuwa się na jego poprzednie miejsce (czyli puste) (schemat 3-a).
- Jeśli jednak wąż zebrał właśnie punkt, to w następnym ruchu ostatni segment przesuwa się nadal na miejsce wyżej... ale na poprzednim jego miejscu jest dodawany nowy segment. I jeśli głowa się tam przesunie, to wąż na siebie wejdzie (i koniec gry) (schemat 3-b).
Nie mógłbym przecież w instrukcji do gry napisać, że jeśli wystąpi w grze taka sytuacja, jak powyżej narysowałem, to koniec gry, bo jest to według mnie nieintuicyjne.
Jak to rozwiązać?
UPDATE2: Zastanawiam się właśnie, czy w ogóle jest jakikolwiek problem... Chyba coś pomieszałem w głowie z sekwencją działań w kroku pętli.
UPDATE3: Zaktualizowałem obrazek i jego opis. Teraz, myślę, będzie lepiej widoczne, jaki mam problem.