Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z pętlą for w code blocks

Ostatnio zmodyfikowano 2017-05-08 20:53
Autor Wiadomość
araney
Temat założony przez niniejszego użytkownika
Problem z pętlą for w code blocks
» 2017-05-08 11:06:35
Witam
Potrzebuje pomocy z pętlą for w programie code blocks. Aktualnie robię animacje napisu w tym programie za pomocą biblioteki Allegro 4.0 i wszystko działa oprócz pętli. Wkleję tutaj kod jakby ktoś mógł pomóc byłbym wdzięczny. Problem jest taki że cały czas wyświetla mi "error expected ) before ;" token w 37 linijce czyli tam gdzie pętla for. Tyle że jak robie nawias to potem pojawiają się inne błędy. Proszę o szybką pomoc.

#define ALLEGRO_STATICLINK
#include <allegro.h>
#include <iostream>


int main(void)
{
    allegro_init();
    install_keyboard();
    set_color_depth(32);
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
    clear_to_color(screen,makecol(255,255,255));    //tlo

   BITMAP * obrazek1 = NULL;
   BITMAP * obrazek2 = NULL;

   obrazek1 = create_bitmap( 50, 50 );
if( !obrazek1 )
{
    set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
    allegro_message( "nie moge zaladowac obrazka 1 !" );
    allegro_exit();
    return 0;
}


obrazek2 = create_bitmap( 80, 80 );
if( !obrazek2 )
{
    set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
    allegro_message( "nie moge zaladowac obrazka 2 !" );
    allegro_exit();
    return 0;
}
int obrazek1_x=150, obrazek1_y=100, obrazek2_x=150, obrazek2_y=100;
for (obrazek1_x=0; obrazek1_x<=200;obrazek1_x++;obrazek2_x=0;obrazek2_x<=200;obrazek2_x++;
{
    obrazek1_x++;
    obrazek1_y++;
    obrazek2_x++;
    obrazek2_y++;
clear_to_color( obrazek1, makecol( 255, 255, 255 ) );
clear_to_color( obrazek2, makecol( 255, 255, 255 ) );
textout_ex( obrazek1, font, "Imie", 2, 2, makecol( 0, 0, 0 ), - 1 );
textout_ex( obrazek2, font, "Nazwisko", 2, 2, makecol( 0, 0, 0 ), - 1 );
blit( obrazek1, screen, 0, 0, 100, 100, obrazek1->w, obrazek1->h );
blit( obrazek2, screen, 0, 0, 100, 200, obrazek2->w, obrazek2->h );
rest(100);
}
readkey ();
destroy_bitmap( obrazek1 );
destroy_bitmap( obrazek2 );
    allegro_exit();
    return 0;
}
END_OF_MAIN()
P-160838
maly7
» 2017-05-08 11:13:09
Jak byk masz napisaną przyczyne błędu, czyli "brakuje ) przed ;"
Za nawiasem usuń ; żeby wykonywało Ci instrukcje w klamrach.
Poza tym, za dużo rzeczy wstawiłeś do tej pętli, tak jakbyś scalił dwie pętle w jedną. Zastanów się co chcesz dzięki niej osiągnąć.
P-160839
araney
Temat założony przez niniejszego użytkownika
» 2017-05-08 11:34:14
Dzięki wielkie teraz działa tylko napisy się nie ruszają ale to chyba źle zrobiona pętla tak?
Przy tej pętli chodzi o to aby poruszała napisami. Że jeden wychodzi z górnego lewego rogu a drugi z prawego dolnego. Jeżeli twoim zdaniem za dużo jest w tej pętli to poproszę jakieś sugestie chociaż.
P-160841
maly7
» 2017-05-08 11:53:48
Nie znam się na Allegro, ale wykorzystujesz w ogóle zmienne obrazek1_x, obrazek2_x? Bo widzę, że je tylko inkrementujesz.

Mówiąc, że za dużo masz w pętli chodziło mi o:
for( obrazek1_x = 0; obrazek1_x <= 200; obrazek1_x++; obrazek2_x = 0; obrazek2_x <= 200; obrazek2_x++ )
Pętla powinna mieć 3 elementy: for(A; B; C), A - wykona się raz na początku, B - warunek do kiedy ma się wykonywać, C - wykona się na koniec każdego wykonania petli.
U ciabie wygląda to tak: for(A; B; C; A2; B2; C2). W twojej pętli również obrazek1_x oraz obrazek2_x są w każdym momencie takie same, więc wystarczy tylko jedna zmienna.

Żeby obrazek poruszał się z lewego górnego rogu, to zależy pod jakim kątem ma się przesuwać, jeśli równo (45*) to x i y powinny być takie same. Jeśli w pętli zastosujesz zmienną i to współrzędne (i, i)

Prawy dolny róg:
Jeśli wymiary to 500x500 to wspołrzędne obrazka to (500-i-szerokośćobrazka, 500-i-wysokosćobrazka), jeśli punktem zaczepienia obrazka jest lewy górny róg (jak pisałem nie znam się na allegro).
P-160842
araney
Temat założony przez niniejszego użytkownika
» 2017-05-08 12:03:12
Dzięki usprawniłem trochę pętle i wygląda lepiej.Natomiast nie działa jak trzeba w sensie po włączeniu programu napisy są już przesunięte a moim zamiarem było to aby po włączeniu programu przesuwały się(ale nie od razu tylko no w formie animacji np jakby powoli się ślizgały po ekranie do środka) mniej więcej do środka.
P-160843
maly7
» 2017-05-08 19:28:49
Najprościej będzie dodać w pętli jakieś opóźnienie, ew. za pomocą timerów (jakaś funkcja wywoływana cyklicznie).
P-160858
araney
Temat założony przez niniejszego użytkownika
» 2017-05-08 19:37:01
skorzystałem z pętli for i imię rusza się prawidłowo od punktu (0,0) do środka natomiast mam problem z nazwiskiem które ma wychodzić z prawego dolnego rogu a wychodzi z lewego dolnego i znika w lewą stronę a powinno iść od prawego dolnego do środka też.
P-160859
SeaMonster131
» 2017-05-08 20:53:55
Podejrzewam, że to już jest zwykła matematyka, na początku pomyśl nad danym problemem, a nie leć od razu na forum. Jeżeli nie dasz rady nic wymyślić, wtedy wklej kod (nie wróżymy z fusów), opisz problem, a my spróbujemy Ci pomóc.
P-160863
« 1 »
  Strona 1 z 1