• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Losowanie builder - random wariuje

0 głosów
76 wizyt
pytanie zadane 6 kwietnia 2016 w C i C++ przez niezalogowany

Witam, problem mam ze swoim programem, otóż wbrew temu co zamierzałem program zamiast losować "strój" dla obiektu poprzecz losowanie w zakresie <1;3> zaczyna wariować, losuje liczby i minusowe (np. -795) i plusowe np. 25000 (wiem bo sprawdziłem to na labelu -> test), przez co ciągle wszystkie obiekty mają ten sam wygląd.  Ktoś coś?

void __fastcall TForm1::skalyTimer(TObject *Sender)
{
randomize();
short zp = random(Form1->ClientHeight-200)+200;
short wyglad;
zp = random(Form1->ClientHeight-30)+30;
if(skala1->Left > -150)skala1 -> Left -=5;
 else{
    skala1->Left = Form1->ClientWidth +random((50)+550);
wyglad = random(3)+1;
    switch (wyglad){
     case 1: skala1->Picture->LoadFromFile("img/skala1.bmp");
     case 2: skala1->Picture->LoadFromFile("img/skala2.bmp");
     case 3: skala1->Picture->LoadFromFile("img/skala3.bmp");
     break;
     default: skala1->Picture->LoadFromFile("img/skala1.bmp");
    }
    if (zp+300 <Form1->ClientHeight-100) skala1->Top = zp + 300; else skala1->Top = zp ;
    }

    test -> Caption = wyglad;
 zp = random(Form1->ClientHeight-30)+30;
if(skala2->Left > -150) skala2 -> Left -=5;
    else{
    skala2->Left = Form1->ClientWidth + random((50)+550);
    wyglad = random(3)+ 1;
    switch (wyglad){
     case 1: skala2->Picture->LoadFromFile("img/skala1.bmp");
     case 2: skala2->Picture->LoadFromFile("img/skala2.bmp");
     case 3: skala2->Picture->LoadFromFile("img/skala3.bmp");
     break;
     default: skala2->Picture->LoadFromFile("img/skala1.bmp");
    }
    if (zp-300>70) skala2->Top = zp - 300;
    else if(zp>Form1->ClientHeight-100) skala2->Top = zp  ;
    else skala2->Top = zp+160;
    }
           test -> Caption = wyglad;
zp = random(Form1->ClientHeight-30)+30;
if(skala3->Left > -150) skala3 -> Left -=5;
    else{
    skala3->Left = Form1->ClientWidth + random((50)+550);
    wyglad = random(3)+1;
    switch (wyglad){
     case 1: skala3->Picture->LoadFromFile("img/skala1.bmp");
     case 2: skala3->Picture->LoadFromFile("img/skala2.bmp");
     case 3: skala3->Picture->LoadFromFile("img/skala3.bmp");
     break;
     default: skala3->Picture->LoadFromFile("img/skala1.bmp");
    }
    if (zp+10<Form1->ClientHeight-100) skala3->Top = zp +10 ;
     else if(zp>70) skala3->Top = zp  ;
    else skala3->Top = zp+70;
    }
        test -> Caption = wyglad;
}

 

1 odpowiedź

0 głosów
odpowiedź 6 kwietnia 2016 przez maly Nałogowiec (37,290 p.)

Sprawdzasz tą zmienną nawet jeśli nie nastąpiło losowanie a kiedy jest nie zinicjowana konkretną wartością prawdopodobnie dostajesz bliżej nie określone śmiecie ze stosu.

Każdy case powinen być zakończony instrukcją break.

Niepotrzebnie za każdym razem ładujesz obrazki, w konstruktorze wrzuć je do jakiejś tablicy a potem

TPicture *obraski[3];

// ladowanie w konstruktorze
obraski[0] = new TPicture;
obraski[0]->LoadFromFile("img/skala1.bmp");

// losowanie obrazka
int wyglad = random(3);
skala->Picture->Assign(obraski[wyglad]);

Skały też powinny być w tablicy, w tej chwili masz trzy razy powtórzony ten sam kod dla każdej z nich.

for(int i = 0; i < ilosc_skal; ++i)
{
	TImage *skala = skaly[i];
	if(skala->Left > -150)
	{
		//zrób coś ze skala
	}
	else
	{
		//zrób coś ze skala
	}
}

 

komentarz 6 kwietnia 2016 przez niezalogowany

jak to? przecież  wyglad = random(3)+1; jest przed switchem

Podobne pytania

0 głosów
1 odpowiedź 96 wizyt
pytanie zadane 20 kwietnia 2016 w SQL, bazy danych przez Jakub Suszyński Użytkownik (540 p.)
0 głosów
1 odpowiedź 127 wizyt
pytanie zadane 9 maja 2016 w PHP, Symfony, Zend przez Headhunter Gaduła (4,480 p.)
0 głosów
1 odpowiedź 72 wizyt
pytanie zadane 10 czerwca 2018 w C i C++ przez stood123 Początkujący (260 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

62,337 zapytań

108,480 odpowiedzi

226,467 komentarzy

35,317 pasjonatów

Przeglądających: 247
Pasjonatów: 9 Gości: 238

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...