Easeful Opublikowano 11 Stycznia 2010 Udostępnij Opublikowano 11 Stycznia 2010 Strasznie się wkurzyłem, ale nie chcę tego wyrażać... ---- Program ten pokazuje jaką mam obecnie lekcje względem planu lekcji mojego. Kilka skryptow tam jest moich: - get_day_start() - dajesz np 2, czyli wtorek - zwraca w stringu o ktorej zaczynam lekcje we wtorek np. "08:55" - get_day_end() - -||- - get_time() - zwraca w stringu czas, dajesz 12 i 50 zwraca "12:50" - get_lesson_start() - sama nazwa mowi za siebie - get_lesson_end() - -||- - compare_time - dajesz 12:30 i 14:00 = return -1 (mniejsze), dajesz 11:00 i 11:00 return 0 (równe), dajesz 14:00 i 12:00 return 1 (wieksze) Nie wiem czy to bug czy co, ale jest tak że nie ma żadnej pętli while() w kodzie, są tylko for, a program jakby mi się zapętlał - nawet nie zdąrzy okna narysować. To zapętlenie zaczyna się w drawie od pętli for co jest dziwne: Kod: GML draw_set_font(font); draw_text(0,0,"Dzień: "+string(dnm)); dh=string(h); dm=string(m); if string_length(dh)=1 dh="0"+dh; if string_length(dm)=1 dm="0"+dm; draw_text(0,20,"Godzina: "+dh+":"+dm); draw_text(0,60,"Rozpoczęcie: "+string(get_day_start(day))); draw_text(0,80,"Zakończenie: "+string(get_day_end(day))); dc=list_read(cnt[day],1); //ilosc lekcji w tym dniu cl=0; od=1; //od ktorej lekcji zaczac (jak np na 08:55) if get_day_start(day)="08:55" od+=1; // -||- for(i=od; i<=dc; i+=1) //przelatuje wszystkie lekcje //ZAPETLANIE OD TAD { cls=get_lesson_start(i); cle=get_lesson_end(i); wszystko w tej petli to sprawdzanie czy obecny czas miesci sie miedzy starte cti=get_time(h,m); a koncem obecnej lekcji, jesli tak to cl=obecnalekcja (i) i break; if compare_time(cti,cls)=1 && compare_time(cti,cle)=-1 { cl=i; break; } } if cl=0 { draw_text(0,120,"Obecnie: WOLNE!"); //jezeli zadnej lekcji nie dopasowalo to cl=0 no i WOLNE :) } Skrypty sprawdzałem i one nie zapętlają. Co jest nie tak? edit: lol sprawdziłem, to ta pętla w ogóle i+1 nie dodaje bo dałem show_message(string(i)) to wciaz 1 1 1 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 11 Stycznia 2010 Udostępnij Opublikowano 11 Stycznia 2010 Daj do pętli show_message(string(i) + "-" + string(dc)) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Easeful Opublikowano 11 Stycznia 2010 Autor Udostępnij Opublikowano 11 Stycznia 2010 1-6 1-6 1-6 1-6 ... edit: to jakiś bug musi być. nawet jak dałem ręcznie i+=1 to nic albo i=5 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 11 Stycznia 2010 Udostępnij Opublikowano 11 Stycznia 2010 sprawdź czy w funckach nie masz gdzieś deklarowane i = 1. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Easeful Opublikowano 11 Stycznia 2010 Autor Udostępnij Opublikowano 11 Stycznia 2010 hah! no tak. w funkcjach są petlę for, w których też jest zmienna i :] zaraz sprawdze czy zadziała Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 11 Stycznia 2010 Udostępnij Opublikowano 11 Stycznia 2010 w funkcjach w pierwszej lini wstaw: GML var i;GM nie ma bugów :F Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 11 Stycznia 2010 Udostępnij Opublikowano 11 Stycznia 2010 for(var i=od; i<=dc; i+=1) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Easeful Opublikowano 11 Stycznia 2010 Autor Udostępnij Opublikowano 11 Stycznia 2010 jesteś pro! a już myślałem że nie znajdę wyjaśnienia, czemu to nie działało! (do MarkaS) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 11 Stycznia 2010 Udostępnij Opublikowano 11 Stycznia 2010 for(var i=od; i<=dc; i+=1)tak nie zadziała. Jak już to dać var i; przed całą pętlą. Ale tak jak napisałem wyżej, lepiej deklarować zmienne tymczasowe tylko w skryptach. jesteś pro!a chociaż na mnie głosowałeś? XD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Easeful Opublikowano 11 Stycznia 2010 Autor Udostępnij Opublikowano 11 Stycznia 2010 na PsichiX'a bo więcej mi pomaga :) a napisałem że jesteś pro, bo to była złota myśl z tym.. niby banalne, ale nawet dawidds na to nie wpadł ;o Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 11 Stycznia 2010 Administratorzy Udostępnij Opublikowano 11 Stycznia 2010 a już myślałem, ze zamiast break ma byc continue... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Easeful Opublikowano 11 Stycznia 2010 Autor Udostępnij Opublikowano 11 Stycznia 2010 Next rebus: GML dc=list_read(cnt[day],1); //ilosc lekcji w tym dniu var cl,od; cl=666; od=1; if get_day_start(day)="08:55" od+=1; //jezeli jest dzis na 8:55 to ma zaczac od drugiej lekcji for(i=od; i<=dc; i+=1) //przelatuje wszystkie lekcje { cls=get_lesson_start(i); //poczatek lekcji (godzina) cle=get_lesson_end(i); //koniec lekcji (godzina) if compare_time(h,m,cls)=1 && compare_time(h,m,cle)=-1 //jezeli czas (h,m) miesci sie miedzy poczatkiem i koncem to przypisz id { cl=i; break; } } if cl=666 //jezeli zadnej lekcji nie przypisalo { if compare_time(h,m,get_day_end(day))=-1 && compare_time(h,m,get_day_start(day))=1 //i jezeli miesci sie w czasie od poczatku wszystkich lekcji do konca wszystkich lekcji (np. 8:00 - 13:30) { cl=-1; //cl=-1 } } if cl=666 //jezeli nawet nie miesci sie w tym powyzej { draw_text(0,140,"Obecnie: Wolne :)"); } else //elz { if cl=-1 //jezeli jest przerwa :P { bef=get_bef_les(day,h,m-15); //skrypt zwracajacy id lekcji ktora byla przed przerwa if bef>0 //jezeli znalazlo lekcje ktora byla wczesniej { draw_text(0,120,"Poprzednio: "+string(get_lesson_name(bef))); } draw_text(0,140,"Obecnie: Przerwa"); } else //jezeli natomiast nie ma przerwy, jest jakas lekcja { if !(cl=od) {draw_text(0,120,"Poprzednio: "+string(get_lesson_name(day,cl-1)));} draw_text(0,140,"Obecnie: "+string(get_lesson_name(day,cl))); } } Cały problem leży w tym, że nigdy nie ma sytuacji żeby cl=-1. Zawsze 666, mimo to że sie miesci w przedziale wszystkich lekcji :( Wazzap? a compare_time przypominam: compare_time(12,15,"13:15") --> return -1 compare_time(12,15,"12:15") --> return 0 compare_time(12,15,"11:15") --> return 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 12 Stycznia 2010 Udostępnij Opublikowano 12 Stycznia 2010 kurdem no najlepszym sposobem na znalezienie błędu jest wciskanie wszędzie gdzie się da show_message. daj przed pętlą: GML show_message( '#Start: ' + string( compare_time(h,m,get_day_start(day))) + 'End: ' + string( compare_time(h,m,get_day_end(day)))) i powiedz co zwraca. E: W ogóle moim zdaniem to za bardzo sobie to wszystko komplikujesz. Można by to ogarnąć na jednej pętli podpinając pod to rozpiskę godzin i lekcji w formie tablic. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Easeful Opublikowano 13 Stycznia 2010 Autor Udostępnij Opublikowano 13 Stycznia 2010 to zrób mi przykład takiego programu :P bo mi sie totalny syf w tym zrobił, nie ogarniam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 13 Stycznia 2010 Udostępnij Opublikowano 13 Stycznia 2010 zrobiłem już 2 dni temu: https://gmclan.org/up1558_11_lekcjonerz.html xD dostosowany do mojego planu lekcji: http://www.lo13.gdansk.ids.pl/plan2009na10/plany/o26.html :wink: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się