Skocz do zawartości

Program "Leksus"


Easeful

Rekomendowane odpowiedzi

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

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...