Gra "Snake" – problem z dodaniem segmentu po zebraniu punktu

Odpowiedz Nowy wątek
2019-08-19 23:09
1

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):

Screenshot_2019-08-19_23-40-40.png

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:

  1. 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).
  2. 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.


edytowany 7x, ostatnio: Silv, 2019-08-19 23:44

Pozostało 580 znaków

2019-08-19 23:45
0

Twój problem jest banalny do rozwiązania... Pobierz jakiegoś dobrego snake'a i zobacz jak tam to wygląda...

Głowa by mogła być bardziej wyróżniona, zamień ją w trójkąt (chyba, że w ogóle odrzucisz ostatecznie design z Excela :) ).
Gdy głowa wejdzie na koniec ogona zaraz po zjedzeniu, to logiczne, że końcówka ogona przez jeden ruch zostanie w miejscu.

edytowany 2x, ostatnio: Spine, 2019-08-19 23:46
Design z Excela? Nie myślałem nawet o czymś takim. Na razie mam design z terminala... w tym sensie to chyba jeszcze gorszy. :D - Silv 2019-08-19 23:50
Widziałem co prawda na YouTube w Excelu chyba Quake'a czy coś podobnego... Ale nie zamierzam na razie uczyć się Visual Basica. - Silv 2019-08-19 23:53

Pozostało 580 znaków

2019-08-19 23:49

@Spine: ja niedokładnie to samo wywnioskowałem, ale sądzę, że chyba rozwiązałem problem. Rysunki pomogły. :) W kroku 2-b mamy stan, że nowy segment jest już dodany – więc to on jest brany pod uwagę w kroku 3-b, a nie poprzedni-ostatni segment.


PS. Lubię takie rozwiązania – gdy okazuje się, że aktualny algorytm jest w porządku i nic nie trzeba zmieniać. ;)


edytowany 4x, ostatnio: Silv, 2019-08-19 23:52
@furious programming: oglądając mój post z obrazkiem, czuję się trochę, jakbym oglądał Twój wpis na blogu. - Silv 2019-08-19 23:55

Pozostało 580 znaków

2019-08-19 23:55
0

Zobacz:

Obracanie klocków w Tetrisie też nie jest logiczne i nie jest zgodne z prawami fizyki, a ludzie muszą to zaakceptować ;)

Ale jak to się odnosi do tego wątku, bo nie rozumiem? ;) - Silv 2019-08-19 23:58
Tetris to też gra "klockowa". Napisałeś: 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.. Więc podsunąłem przykład mechaniki nie do końca intuicyjnej, z innej gry. - Spine 2019-08-20 00:03
Aa, w ten deseń. :) A bo ja wiem? Może to i byłoby dla mnie intuicyjne, gdybym projektował Tetrisa... - Silv 2019-08-20 01:49

Pozostało 580 znaków

2019-08-20 03:03
1
Silv napisał(a):
  1. 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).

Moim zdaniem nie ma tutaj problemu, tak właśnie działa gra w Węża i jeśli ktoś nie jest w stanie ogarnąć powyższej sytuacji, to najwidoczniej Wąż jest dla niego za trudny :)

p.s. To że wąż się wydłuża po zjedzeniu kolejnego elementu też nie jest intuicyjne, bo węże przecież w takich okolicznościach grubieją ;)p


edytowany 1x, ostatnio: Freja Draco, 2019-08-20 03:06
Ja nigdy takiego węża jako odwzorowanie prawdziwego nie odbierałem, więc dla mnie logiczne, że się wydłuża. :) To pewnie dlatego, że nie widuję węży w ich codziennych sytuacjach. Niemniej, jak napisałem, doszedłem do tego, że tak gra węża nie działa, to było tylko moje głupie myślenie. :) - Silv 2019-08-20 16:39

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0