Skocz do zawartości

[C++] Przemieszczanie ksztaltow w C++ pod Win


barti82

Polecane posty

Mam do napisania pewna aplikacje w Borlandzie i stanalem na malym problemie. Otoz wybierajac z palety additional ikone Shape (konkretnie circle) umieszczajac ja w oknie aplikacji w petli zmieniam jej polozenie (wlasciwosci Top i Left) Jednakze w trakcie wykonywania aplikacji widoczny jest jedynie stan poczatkowy i koncowy a nie widac etapow posrednich - czyli jak wyglada przebieg Shape'a krok po kroku, dodam ze funkcja Sleep() nie zmienia niczego sad.gif Bardzo prosze o pomoc, kazdy pomysl mile widziany, z gory dziekuje! smile.gif

Link do komentarza
Udostępnij na innych stronach

Zawsze o ile to możliwe zamieszczaj kod źródłowy - będzie nam łatwiej pomóc. Co do problemu - użyj komponentu TTimer, ustaw Interaval na np. 1000, a w OnTimer daj Shape->Left = Shape->Left + 10 ;
Link do komentarza
Udostępnij na innych stronach

No widze, ze musze zamiescic fragment interesujacego mnie kodu bo nie umiem skorzystac z Waszych podpowiedzi, moze teraz cos konkretnego mi doradzicie:

Pascalvoid __fastcall TForm1::Button1Click(TObject *Sender)
{
int z;
float p;


Shape->Top = 0;
randomize();
while (Shape->Top != 500)
{
z = rand() % 1000;
p = z/1000.0;
if (p<0.100)
{
Shape->Left = Shape->Left +1;
}
if ((p>=0.100) && (p<0.200))
{
Shape->Left = Shape->Left -1;
}
if (p>=0.200)
{
Shape->Top = Shape->Top +1;
}
}
}


Po kliknieciu przyciskiem ma wystartowac generator liczb pseudolosowych, ktorego wartosc podzielona przez 1000 daje mi wartosc prawdopodobienstwa i w zaleznosci od wartosci tego prawdopodobeinstwa kulka ma sie poruszac w jedna ze stron tlyko ze wlasnie robi to od razu do stanu konczacego petle a ja chce by przesuwala sie po kawalku i nei wiem jak to osiagnac sad.gif Z gory dziekuje za pomoc

// uztwaj znaczników [syntax="c++"] - drazek

Link do komentarza
Udostępnij na innych stronach

randomize() ; zawsze dajesz tylko raz w programie, więc wrzuć to do OnCreate formy. Jedno z możliwych rozwiązań:

Pascal//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int los ;
while (Shape1->Top != 500)
{
los = rand() % 10 ;
if (!los) Shape1->Left = Shape1->Left + 1 ;
else if (los == 1) Shape1->Left = Shape1->Left - 1 ;
else Shape1->Top = Shape1->Top + 1 ;
Application->ProcessMessages() ;
Sleep(100) ;
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
randomize() ;
Form1->DoubleBuffered = true ;
}
//---------------------------------------------------------------------------


// spoko ;-)
Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...