Wpis z mikrobloga

W końcu po kilku dniach stworzyłem jako taki(w miarę szybki i prosty do zrozumienia) algorytm do tworzenia map do mojej gry.

W danych mapach jedynym wymogiem było to, aby poszczególne hexy były połączone ze sobą(tak aby nie było między nimi pustych przestrzeni np. wysepek).

W pierwszym odruchu bazując na określonym wcześniej prawdopodobieństwie, wybierałem kilka punktów z samej góry i tworzyłem od nich ścieżki.
Problemem w nim było to, że czasami(w sumie dość często) były tworzone mapy z oderwanymi od siebie cząstkami, dlatego generacja była stworzona w pętli nieskończonej na której końcu było sprawdzanie czy można z każdego punktu A dojść do punktu B(wystarczyło sprawdzić jedynie drogi pomiędzy tymi hexami wcześniej wybranymi), bo jeśli nie to potrzebna była ponowna generacja.

Z racji tego, że GDScript z racji językiem interpretowanym(w pewnych warunkach jest on konwertowany do kodu pośredniego) nie nadaje się zbytnio do iterowania po ogromnych porcjach danych, dlatego ten algorytm porzuciłem jeszcze przed końcem tworzenia.

Następnym algorytmem było wybranie punktu ze środka i dodanie w tym polu terenu oraz wrzucenie go do kolejki oczekujących.
Każdy ze sprawdzanych sąsiadów jeśli zostanie wylosowany(na początku określany jest stopień prawdopodobieństwa) to ma dodawane do niego pole oraz wrzucany jest do kolejki sprawdzania, a w przeciwnym razie wrzucany do kolejki ignorowania(tak aby nie losować dwukrotnie tego samego pola).

Mimo prostoty z racji tego że dodałem żadnych testów, implementacja tego trwała kilka leniwych dni, w których między innymi zajęciami główkowałem co jest nie tak.

Jak się okazało jednym z problemów było zerowanie indeksu tablicy zamiast samej tablicy ()

for i in range(array.size()):
for j in range(array[i].size()):
j = 0

zamiast

array[i][j] = 0


Kojarzycie może czy może to się da zrobić taki algorytm optymalniej(chodzi mi o języki interpretowane, w którym wywołanie wbudowanej funkcji jest tańsze od tworzenia jej od podstaw)?

#polemrowkowe #programowanie #godot #gamedev
  • 2