Problem z loopami i arrayem |
Autor |
Wiadomość |
Wilkeł
Plutonowy
Główny edytor:
Drugi edytor:
Pojedynki: nie
Pomógł: 3 razy Posty: 74
3779 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 Dodam, że tutaj w sumie pierwszy raz korzystam z arraya, więc mogę czegoś po prostu nie wiedzieć. |
|
|
|
|
Ishimura
Chorąży
Główny edytor:
Drugi edytor:
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:
Drugi edytor:
Pojedynki: nie
Pomógł: 3 razy Posty: 74
3779 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:
Drugi edytor:
Pomógł: 35 razy Posty: 644
18047 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:
Drugi edytor:
Pojedynki: nie
Pomógł: 3 razy Posty: 74
3779 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:
Drugi edytor:
Pomógł: 35 razy Posty: 644
18047 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:
Drugi edytor:
Pojedynki: nie
Pomógł: 3 razy Posty: 74
3779 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:
Drugi edytor:
Pomógł: 35 razy Posty: 644
18047 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:
Drugi edytor:
Pojedynki: nie
Pomógł: 3 razy Posty: 74
3779 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:
Drugi edytor:
Pomógł: 35 razy Posty: 644
18047 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:
Drugi edytor:
Pojedynki: nie
Pomógł: 3 razy Posty: 74
3779 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:
Drugi edytor:
Pomógł: 35 razy Posty: 644
18047 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 ~~~~~~~~~~~
Główny edytor:
Drugi edytor:
Pomógł: 76 razy Posty: 1411
40082 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. |
_________________ |
|
|
|
|
Cootje
Legenda
Główny edytor:
Drugi edytor:
Pomógł: 35 razy Posty: 644
18047 Prestiż
|
|
|
|
|
Wilkeł
Plutonowy
Główny edytor:
Drugi edytor:
Pojedynki: nie
Pomógł: 3 razy Posty: 74
3779 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. |
|
|
|
|
|