Przepraszam za kiepski tytuł, ale nie miałem lepszego sposobu na sformułowanie go ...
Jest więc niesamowita gra Nintendo (tak!) Na Wii o nazwie WiiPlay . Jest w nim 9 minigier, a moja ulubiona to Czołgi! . Chodzi o niszczenie wrogich czołgów COM bez zniszczenia siebie. Oto zrzut ekranu poziomu:
Jednym ze sposobów niszczenia czołgów jest strzelanie kulami. Jest ten limonkowo-zielony czołg wroga, który strzela szybkimi pociskami, które dwukrotnie rykoszetują (o ściany i bloki). Możesz zobaczyć, jak czołg gracza może zostać natychmiast zniszczony, jeśli pozostanie tam, gdzie jest teraz, ponieważ ten zbiornik wapna na środku może wystrzelić kulę, która podąża zieloną ścieżką, którą narysowałem na obrazie.
Jako programista amator zastanawiałem się, w jaki sposób zbiornik wapna może określić, w którym kierunku powinien strzelać, aby uderzyć zbiornik gracza.
Sam o tym myślałem, ale nie wpadłem na żaden możliwy algorytm. Wyjaśnię moje wnioski na wypadek, gdyby kogoś zainspirowały. Dla uproszczenia podczas wyjaśniania zakładam, że ściana jest dowolną powierzchnią, na której kula może odbić się rykoszetem . W ten sposób izolowany prostokąt bloków tworzy cztery ściany.
Doszedłem do wniosku, że 2 punkty, w których rykoszety pocisku zawsze leżą po jednej stronie równoległoboku lub stają się przeciwnymi wierzchołkami równoległoboku. Strzelający czołg przeciwnika i czołg gracza, do którego celuje, niekoniecznie muszą być pozostałymi dwoma wierzchołkami, ale zdecydowanie leżą na liniach współliniowych z każdej z czterech stron równoległoboku. Oto ilustracja 4 możliwych sposobów utworzenia równoległoboku:
HOR-VER oznacza, że kula najpierw uderza w poziomą ścianę, a następnie w pionową ścianę.
A potem utknąłem. Myślałem o poruszeniu się po linii łączącej czołg wroga i czołg gracza wokół mapy, aby zobaczyć, czy tworzy równoległobok z dowolnymi dwoma trafieniami dowolną ścianą, ale nie zawsze to działa, ponieważ czołg wroga i czołg gracza nie są niekoniecznie zbieżne z wierzchołkami równoległoboku.
Nie jestem też pewien ogólnego przebiegu algorytmu. Czy algorytm przyjmuje którąkolwiek z poniższych 2 struktur, czy może mam rację w obu tych przypadkach?
- Staraj się wymyślać możliwe ścieżki i zawsze oznaczaj jedną jako najlepszą (może być najkrótszą, najbardziej niejasną, najbardziej nieuniknioną lub połączoną i ważoną oceną opartą na wielu kryteriach) i zapomnij o reszcie. Ta, która pozostała po wszystkich obliczeniach, jest najlepsza.
- Najpierw określ wszystkie ściany, do których najpierw można dotrzeć za pomocą pocisku (kula nie musi rykoszetować na żadnej innej ścianie, aby dotrzeć do każdej z tych ścian), a następnie określ wszystkie dostępne odległości na każdej z tych ścian (czasami nie jest możliwe dotarcie do odległego punktu na ściana bez rykoszetu, jeśli w pobliżu stoi inna ściana), następnie ponownie określ wszystkie dostępne ściany za pomocą rykoszetu i wszystkie zasięgi dostępne na tych ścianach. Te 4 procesy można wykonać w sposób podobny do śledzenia promieni. Jeśli podczas każdego procesu czołg gracza zostanie trafiony jakimkolwiek promieniem, obierz ścieżkę pocisku zgodnie z tym promieniem.
Moim zdaniem ten algorytm jest trudny do zrozumienia, ponieważ:
- kula może zostać wystrzelona w dowolnym kierunku; i
- na każdej ścianie jest nieskończenie wiele punktów, tak jak w matematyce, gdzie na linii jest nieskończenie wiele punktów.
Ale ludzie Nintendo i tak to zrobili, więc ... ktoś ma pomysł?