NukeBoards - Kreatywność przede wszystkim
FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  DownloadDownload
RejestracjaRejestracja  ZalogujZaloguj

Odpowiedz do tematu
Poprzedni temat :: Następny temat
Problem z loopami i arrayem
Autor Wiadomość
Wilkeł 
Plutonowy


Główny edytor: Fusion 2.5
Drugi edytor: MMF2
Pojedynki: nie
Pomógł: 3 razy
Posty: 73

3773 Prestiż
Wysłany: 10-09-2018, 18:03   Problem z loopami i arrayem

Mam problem. Zrobiłem w dość pogmatwany sposób sortowanie przedmiotów w ekwipunku, korzystając z arraya i loopów. Mój problem polega na tym, że raz na kilkadziesiąt dodanych przedmiotów program się zawiesza i wyłącza - najprawdopodobniej gdzieś powstaje nieskończony loop. Nie udało mi się jednak znaleźć przyczyny błędu, gdyż prawdopodobnie także ze względu na loopy nie znam konkretnych okoliczności towarzyszących błędowi.
Da się otwierać skrzynki, będąc w ekwipunku, to znacznie przyspiesza proces.

http://www.mediafire.com/.../cases.mfa/file - link do pliku. Najważniejsze są zdarzenia od "array" w dół, choć nie mam pewności, czy czasem wcześniejsze też czegoś tutaj nie zmieniają.

Wiem, że to dość trudny przypadek, ale jeżeli ktoś miałby chwilę, aby pomóc, to byłbym wdzięczny :p Dodam, że tutaj w sumie pierwszy raz korzystam z arraya, więc mogę czegoś po prostu nie wiedzieć.
 
     
Ishimura 
Chorąży


Główny edytor: Fusion 2.5 Dev
Drugi edytor: MMF2 Dev
Pojedynki: nie
Pomógł: 11 razy
Posty: 299

4531 Prestiż
Wysłany: 10-09-2018, 18:31   

Z doświadczenia mogę powiedziec, że jak nie ogarniasz własnego kodu, to go usuń i zrób od nowa xD
 
     
Wilkeł 
Plutonowy


Główny edytor: Fusion 2.5
Drugi edytor: MMF2
Pojedynki: nie
Pomógł: 3 razy
Posty: 73

3773 Prestiż
Wysłany: 10-09-2018, 19:31   

Tyle że to nie jest tak, że go nie ogarniam, po prostu nie widzę w nim jakiegoś niedopracowania, które mogłoby ten błąd powodować.
 
     
Cootje 
Legenda


Główny edytor: Fusion 2.5 Dev
Drugi edytor: Stencyl
Pojedynki: być może
Pomógł: 35 razy
Posty: 617

17898 Prestiż
Wysłany: 21-10-2018, 23:37   

Nie pobierałem kodu, ale od którejś wersji CF traktuje run loop 0 times tak samo jak run loop -1 (W szczególnych wypadkach) może to być problemem. Zgłaszałem buga, ale Clickteam postanowił naprawić to dopiero w CF3.

@edit:
U mnie to chyba działa bo nie udało mi się zawiesić Twojego kodu... Opisz jak go zawiesić i nie rób takiego śmietnika w kodzie bo aż nie chce się tego rozkminiać :)
_________________
Mój klucz publiczny PGP
 
     
Wilkeł 
Plutonowy


Główny edytor: Fusion 2.5
Drugi edytor: MMF2
Pojedynki: nie
Pomógł: 3 razy
Posty: 73

3773 Prestiż
Wysłany: 22-10-2018, 20:44   

Żeby zawiesić program, trzeba wcisnąć ten zielony romb z prawej u dołu (to jest zmiana trybu sortowania przedmiotów), by było włączone sortowanie po kolorze przedmiotu. Następnie włączamy ekwipunek i po prostu wciskamy "otwórz". Po kilkudziestu, ewentualnie kilkuset wylosowaniach program powinien się zawiesić.

A co do tego śmietnika w kodzie - fakt, jest to zawalone, powinienem był dać jakieś komentarze chociażby.
 
     
Cootje 
Legenda


Główny edytor: Fusion 2.5 Dev
Drugi edytor: Stencyl
Pojedynki: być może
Pomógł: 35 razy
Posty: 617

17898 Prestiż
Wysłany: 26-10-2018, 12:58   

Powiedz jak to ma działać czyli podaj specyfikację to zakodzę Ci to w paru linijkach dynamicznie.
_________________
Mój klucz publiczny PGP
 
     
Wilkeł 
Plutonowy


Główny edytor: Fusion 2.5
Drugi edytor: MMF2
Pojedynki: nie
Pomógł: 3 razy
Posty: 73

3773 Prestiż
Wysłany: 27-10-2018, 21:14   

Pytasz się o to, co program miał w założeniu robić (w sensie sortowanie)?
 
     
Cootje 
Legenda


Główny edytor: Fusion 2.5 Dev
Drugi edytor: Stencyl
Pojedynki: być może
Pomógł: 35 razy
Posty: 617

17898 Prestiż
Wysłany: 28-10-2018, 02:20   

Nie, gdybym o to pytał odesłałbym Cię do mojego darmowego tutoriala z ClickStore... Pyytam jakie przedmioty mają być losowane w ekwipunku i z jakim czasem oraz prawdopodobieństwem.
_________________
Mój klucz publiczny PGP
 
     
Wilkeł 
Plutonowy


Główny edytor: Fusion 2.5
Drugi edytor: MMF2
Pojedynki: nie
Pomógł: 3 razy
Posty: 73

3773 Prestiż
Wysłany: 28-10-2018, 23:02   

Czy dobrze rozumiem, że chcesz zrobić całość? ;d
Możesz wprowadzić jakiekolwiek czas i prawdopodobieństwo przecież, bo i tak sobie będę mógł to później zmienić, chyba że coś źle zinterpretowałem.
 
     
Cootje 
Legenda


Główny edytor: Fusion 2.5 Dev
Drugi edytor: Stencyl
Pojedynki: być może
Pomógł: 35 razy
Posty: 617

17898 Prestiż
Wysłany: 30-10-2018, 19:39   

Już nie same szanse, a losowanie ma być z jakimś opóźnieniem otwierania? N liczba przedmiotów? Jakiś, krótki opis do póki mam wolne to mogę zakodzić szczególnie, że to nic trudnego, a podobny system wydałem już w przykładzie.
_________________
Mój klucz publiczny PGP
 
     
Wilkeł 
Plutonowy


Główny edytor: Fusion 2.5
Drugi edytor: MMF2
Pojedynki: nie
Pomógł: 3 razy
Posty: 73

3773 Prestiż
Wysłany: 31-10-2018, 23:03   

Wiesz, jest taki problem, że nie mam pojęcia, o co konkretnie pytasz. Prawdopodobnie użyłeś jakichś skrótów myślowych, czy coś, bo niewiele zrozumiałem. Jakbyś mógł to sformułować bardziej dosłownie, to bym spróbował ci na to sensownie odpowiedzieć xd
 
     
Cootje 
Legenda


Główny edytor: Fusion 2.5 Dev
Drugi edytor: Stencyl
Pojedynki: być może
Pomógł: 35 razy
Posty: 617

17898 Prestiż
Wysłany: 01-11-2018, 00:07   

Powiem tak, Twój kod jest śmietnikiem i nie chce mi się z niego czytać co mam zrobić. Wiem tyle, że losujesz jakieś itemy z paru typów z jakąś szansą opisz jak ma to działać dokładnie, a dostaniesz free rozwiązanie.
_________________
Mój klucz publiczny PGP
 
     
msg 
Pupogłowy
tchórzy i leniwych.


Główny edytor: KNP
Drugi edytor: KNP
Pomógł: 73 razy
Posty: 1368


39749 Prestiż
Wysłany: 01-11-2018, 15:58   

To ja ci powiem, bo to jest w istocie proste i tylko ilość "kodu" robi z tego skomplikowaną sprawę. Są dwa tryby losowania: wizualny i przyspieszony.
Wizualny: Generujesz listę losowych itemów (w sumie nie ważne ile, powinno być 50, bo tyle widać na ekranie) i wybierasz jeden z końca listy, z losowego miejsca w przedziale 35 - 40). Każdy z itemów na liście ma wartość 1-100. Ten item wpada ci do ekwipunku a jego wartość determinuje jego typ (kolor): 1-50 - niebieski, 51-80 - fioletowy, 81-92 różowy, 93-99 czerwony, 100: złoty.
Przyspieszony:
Losujesz item, który ma wartość 1-100 jak wyżej i zapisujesz go w ekwipunku.
Dodatkowo jest sortowanie ekwipunku, które nie jest obowiązkowe: Jeśli flaga "sortowanie" jest OFF, to wkładasz losowany przedmiot na ostatnie miejsce w ekwipunku, jeśli ON, robisz to samo, ale potem sortujesz całą zawartość ekwipunku wg wartości każdego itema (1-100) malejąco.

A teraz konkrety: mechanizm trzeba tak czy siak napisać od nowa, z dwóch powodów:
1) sortowanie nie działa prawidłowo. Jeśli na jedno losowanie wyłączysz sortowanie, ekwipunek się ułoży wg oryginalnego porządku. Potem, jak go włączysz z powrotem, ułożenie przedmiotów w należytym porządku wymaga przeprowadzenia kilku losowań - ewidentnie mechanizm nie idzie po każdym polu tyle razy ile trzeba (jak np. w bubble sort: n^2).
2) algorytm jest bardzo nieoptymalny. W samej grupie 'array' i 'wczesniejsze' wylosowanie pierwszego przedmiotu wiąże się z wykonaniem 303 pętli. Przy zapełnieniu ekwipunku tylko tym, co widać na ekranie (40 przedmiotów) to już prawie 8000 akcji. Co ciekawe - niezależnie od tego, czy sortowanie zachodzi, czy jest wyłączone. Nawet bubble sort zrobiłby to w 1600 pętli. W kodzie widzę, że pętla 'sprawdzenieprzedmiotu' odpala pętlę 'nic' a pętla 'nic' odpala pętlę 'sprawdzenie przedmiotu' i nieskończenie nie zachodzi tylko dlatego, że w pewnym momencie nie spełniamy warunków do kolejnej iteracji (dziwna metoda).

Program nie robi nieskończonej pętli, wywala się po wykonaniu pętli 'sprawdzenie', ze zdarzenia 34, 36, 37 lub podrzędnego w grupie 'wczesniejsze' więc może jakieś 'out of bounds' robisz. Jeśli miałbym podejrzewać cokolwiek z tej plątaniny, to akcję "Stop loop" w 54, mi to nigdy nie działało. W sumie tu też pewnie nie działa, bo w ramach jednej pętli próbujesz obalić drugą (zewnętrzną?) a ta, w której to robisz dalej leci.
_________________
:razzugly:
 
     
Cootje 
Legenda


Główny edytor: Fusion 2.5 Dev
Drugi edytor: Stencyl
Pojedynki: być może
Pomógł: 35 razy
Posty: 617

17898 Prestiż
Wysłany: 03-11-2018, 18:37   

Wymodziłem coś takiego przy użyciu hybrydy quicksorta: https://www.youtube.com/w...eature=youtu.be Sprawdzę czy wszystko jest dopięte i zoptymalizowane. Wtedy upublicznię dla Ciebie kod. Możesz zgłaszać sugestie ;)

@Edit:
Link: https://www.dropbox.com/s...ipunek.zip?dl=0
_________________
Mój klucz publiczny PGP
 
     
Wilkeł 
Plutonowy


Główny edytor: Fusion 2.5
Drugi edytor: MMF2
Pojedynki: nie
Pomógł: 3 razy
Posty: 73

3773 Prestiż
Wysłany: 04-11-2018, 22:16   

Plik nie jest już dostępny, nie mam jak sprawdzić.

Cytat:
Jeśli flaga sortowanie jest OFF, to wkładasz losowany przedmiot na ostatnie miejsce w ekwipunku

edit:To w sumie miało działać tak, że sortuje po dacie (kolejności) dostania przedmiotu, ale nie jestem pewien, czy w tej wersji, którą wysłałem, coś takiego zrobiłem.
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

PSK Cytaty Klikibaza - kopia wszystkich klików Klikipedia - encyklopedia o tworzeniu gier Discord KlikCzat Zaproszenie
Daj piniondza Wielkie Muzeum Klikowe

Powered by phpBB modified by Przemo © 2003 phpBB Group