[#61] Re: Untangle

@Krashan, post #59

Intensywna sesja programistyczna na AmiParty w Chełmie dała efekt w postaci prawie działającej tabeli najlepszych wyników. Prawie, bo jeszcze nie w pełni obsłużone jest scrollowanie tabeli, czas będzie lepiej wyglądał w formacie 00:00:00, nie działa jeszcze wybieranie poziomów (czyli nic się nie dzieje po kliknięciu w poziom) no i przede wszystkim nie ma zapisu/odczytu do pliku. Będzie robione.

9
[#62] Re: Untangle

@Krashan, post #61

Wypuściłem na GitHubie wersję 0.5 w której lista poziomów jest już w pełni funkcjonalna, a więc można ją skrolować oraz kliknięcie w wybrany poziom ładuje go. Dodałem jeszcze zabezpieczenie, jeżeli klikniemy w poziom, a ten, który jest właśnie załadowany ma zrobiony co najmniej 1 ruch, gracz jest proszony o potwierdzenie opuszczenia poziomu.

Do wersji 1.0 zostało jeszcze automatyczne zapisywanie listy poziomów na dysk po każdym rozwiązanym, oraz jej załadowanie przy starcie gry, żeby wreszcie nie trzeba było za każdym razem zaczynać od początku. szeroki uśmiech Wtedy też gra trafi na Aminet.
6
[#63] Re: Untangle

@Krashan, post #62

Czy w Untangle mogą występować węzły?
[#64] Re: Untangle

@_DiskDoctor_, post #63

Czy w Untangle mogą występować węzły?
Zdefiniuj węzeł.
[#65] Re: Untangle

@Krashan, post #61

będzie to gra kultowa jak "saper" na pc-ta
1
[#66] Re: Untangle

@Krashan, post #64

Zdefiniuj węzeł....


GORDYJSKI ?
[#67] Re: Untangle

@Krashan, post #62

Trochę wieczornej walki z kodem i jest. Untangle automatycznie zapisuje listę wyników, oraz pozycję i rozmiary obu okien. Odbywa się to po każdym rozwiązanym poziomie i przy wyjściu z gry. Dane te są ładowane na starcie i ładowany jest pierwszy nierozwiązany poziom.

Niecierpliwi mogą pobrać źródła z brancha 'game-state' na GitHubie i skompilować. Do wydania 1.0 chciałbym jeszcze dorzucić 100 nowych poziomów i wtedy również wrzucić grę na Aminet.
7
[#68] Re: Untangle

@Krashan, post #67

Wersja 1.0 już wyszła. News na PPA wysłany, archiwum na Aminet wysłane. Co prawda jest jednak 150 poziomów, a nie 200, ale od czegoś przecież będzie wersja 1.1... Ale i tak jest co robić, na stacie poziom 150 pokazuje 226 przecięć linii. Ale dodałem też krótki user manual w AmigaGuide, działa zapamiętywanie pozycji okien, ubiłem parę bugów i tym podobne. Nadal dzielnie trzymam się braku fabuły.

14 kilobajtów już ma plik wykonywalny. Jak do tego doszło, nie wiem...

Ostatnia aktualizacja: 03.09.2024 21:10:03 przez Krashan
7
[#69] Re: Untangle

@Krashan, post #68

Właśnie wypuściłem wersję 1.1. Wersja ta ma usunięty błąd powodujący żółte, a czasem czerwone guru po zakończeniu gry. Jak już jesteśmy przy zakończeniu, to gra w końcu posiada zakończenie. Można się z niego dowiedzieć między innymi ile czasu zmarnowaliśmy przy grze, oraz ile w sumie ruchów zostało wykonane. Otwiera to pole do współzawodnictwa... Do tego jest 25 nowych poziomów. Jeżeli nie skasujecie pliku ze stanem gry ("Untangle.state"), to nowa wersja będzie kontynuowała od miejsca gdzie skończyliście.

Niestety nadal nie ma fabuły, nie ma też wisienek, o które niektórzy prosili. Cóż, nie ma gier idealnych.

Ostatnia aktualizacja: 19.10.2024 22:05:27 przez Krashan
6
[#70] Re: Untangle

@Krashan, post #69

Poczekam zatem na fabułę.

Gra bez fabuły to gra bez sensu.
3
[#71] Re: Untangle

@Krashan, post #1

mimo tego, ze juz dawno nie fascynuje sie grami logicznymi (zagrywalem sie w nie 20 lat temu)
to z pewna doza obrzydzenia do palety tej gry i workbencha, siegnalem po untackle i... o dziwo rozdzielanie tej pajeczyny wciaga.
Wczulem sie w role pajaka krzyzaka, ktory porzadkuje swoja siec na nadchodzace swieta

mimo poziomu graficznego jaki prezentuje, gra niezla OK
2
[#72] Re: Untangle

@selur, post #71

I jest fabuła..
1
[#73] Re: Untangle

@MaaG^dA, post #72

Ale to chyba na na nastepna gre pod nazwa Spider Web lub Spider World.
[#74] Re: Untangle

@MaaG^dA, post #72

czyli co... jakis % od zyskow w wersji "box krzyzak" dostane ?



btw. macie jakis schemat porzadkowania pajeczyny ?
Ja wykapowalem, ze jak na zewnatrz jest jedna kulka z wieloma nitkami, to mozna ja wcisnac w srodek, wtedy sie juz nie przecinaja.
1
[#75] Re: Untangle

@Krashan, post #69

Wersja 1.2. 25 nowych poziomów (w sumie jest 200). Do tego lokalizacja gry + polskie tłumaczenie w zestawie. Wysłałem na Aminet, pewnie będzie jutro. Na GitHubie już jest.
10
[#76] Re: Untangle

@Krashan, post #75

Nie wiem, może ja coś przegapiłem, ale jeśli nie, to czy planowane jest wydanie gry BOX?
[#77] Re: Untangle

@_DiskDoctor_, post #76

Przegapiłeś. Jest nawet zdjęcie wersji BOX, wcześniej w tym wątku.
2
[#78] Re: Untangle

@Krashan, post #77

1
[#79] Re: Untangle

@Krashan, post #1

Tak się zastanawiam, w jaki sposób sprawdzasz, czy któreś linie się przecinają. Domyślam się, że punkty to po prostu lista lub tablica zmiennych o dwóch współrzędnych (x,y). Po każdym ruchu następuje pewnie sporo sprawdzania dla x i y każdego punktu względem innych punktów.

Oczywiście, jeśli to tajemnica, to zrozumiem
[#80] Re: Untangle

@tukinem, post #79

tu masz źródełka :)

https://github.com/grzegorz-kraszewski/untangle/tree/main/src

pij dopóki nie wyschło :)
1
[#81] Re: Untangle

@tukinem, post #79

Nie, to nie jest żadna tajemnica. Kod znajdziesz w pliku lscm.c. Do zgadnienia podchodzimy tak, że bierzemy dwa odcinki których przecięcie chcemy sprawdzić, załóżmy odcinek AB i odcinek CD. Najpierw trzeba sprawdzić, czy odcinki nie spotykają się w jednej kropce, bo algorytm uzna wtedy że one się przecinają, natomiast zgodnie z regułami gry - nie. To robi funkcja SegmentsHaveCommonDot(). Po wyeliminowaniu tego szczególnego przypadku, dzielimy zagadnienie na dwa prostsze: jeden z odcinków w myślach przedłużamy do nieskończonej prostej i sprawdzamy, czy drugi przecina tę prostą, funkcja SegmentIntersectsLine(). To trzeba zrobić dwa razy. Jeżeli prosta wyznaczona przez punkty AB przecina odcinek CD, a prosta wyznaczona przez punkty CD przecina odcinek AB, to oba odcinki muszą mieć punkt wspólny.

Z kolei jak sprawdzamy, czy prosta przecina odcinek? To polega na sprawdzeniu, czy oba punkty odcinka leżą po tej samej stronie prostej (nie przecina), czy po przeciwnych (przecina). Robi się to za pomocą policzenia dwóch iloczynów skalarnych. Załóżmy, że punkty A i B wyznaczają prostą i sprawdzamy, czy przecina odcinek CD. Wybieramy jeden z dwóch punktów wyznaczających prostą, na przykład A i liczymy iloczyny skalarne: wektorów AB i AC oraz wektorów AB i AD.

Iloczyn skalarny dwóch wektorów jest proporcjonalny do cosinusa kąta skierowanego między nimi. Mnie te kąty jako takie nie obchodzą, tylko ich znaki. Jeżeli oba są takie same, to oba punkty odcinka leżą po tej samej stronie prostej i przecięcia nie ma. Jeżeli znaki są różne, to jest przecięcie. Trzeba jeszcze obsłużyć przypadki graniczne, gdy co najmniej jeden punkt odcinka leży na prostej.

Oczywiście sam tego nie wymyśliłem, to podstawy geometrii analitycznej na płaszczyźnie, które trochę pamiętałem ze szkoły, a resztę wyszperałem w sieci.
[#82] Re: Untangle

@tukinem, post #79

Po każdym ruchu następuje pewnie sporo sprawdzania dla x i y każdego punktu względem innych punktów.
Co nieco, ale tu jest zrobiona optymalizacja. Po załadowaniu poziomu są liczone wszystkie przecięcia. Natomiast po wykonaniu ruchu aktualizowane są tylko przecięcia linii, które zostały przesunięte (są dołączone do przesuwanej kropki) z tymi, które nie zostały przesunięte. To bardzo zmniejsza ilość obliczeń. Przykładowo, załóżmy, że mamy 100 linii. Na początku poziomu trzeba policzyć wszystkie przecięcia, czyli 10 000, ale odpadają przecięcia linii samej z sobą, oraz jeżeli policzymy przecięcie linii M z linią N, to nie ma sensu liczyć przecięcia linii N z M, bo to to samo. Więc jest 4950 sprawdzeń. Ale po każdym ruchu jest dużo mniej. Jeżeli ruszymy kropkę np. z 5 liniami, to sprawdzeń będzie tylko 5 * 95, czyli 475. Każde sprawdzenie oznacza 8 mnożeń 16 na 16 bitów.
[#83] Re: Untangle

@Krashan, post #82

Z samego kodu to ja niewiele mogę odczytać, gdyż moja znajomość C jest poniżej poziomu morza :)

Dobrze, że wytłumaczyłeś mi to. Sprytnie podszedłeś do rozwiązania. Ja bym raczej szukał po kolejności punktów i porównywał ich X oraz Y względem siebie.

Niemniej jednak gratuluję stworzenia prostej oraz bardzo wciągającej gry
1
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem