Jak wylosować liczbę w timerze?

0

Witam.
Mam problem z zastosowaniem randomizera w timerze. Dajmy na to, że timer mam ustawiony na 1 sekundę. Posiadam również kod:

begin
randomize;
if (SpinEdit40.Value) <= RandomRange(10, 100)
then
begin
Button8.Caption := 'Enter';
end;
end;

Kod sprawia, że co sekundę jest losowana wartość pomiędzy 10, a 100. W przypadku gdy SpinEdit40.Value wynosi 50, a wylosowana wartość wyniesie 50 => to podpis button8 zmienia się na "enter".
Chciałbym jednak by kod działał nieco inaczej, jednak nie wiem jak to zrobić. Chciałbym, by wartość nie była losowana wtedy co interval timera (w tym przypadku 1 sekunda), tylko żeby ta wartość została wylosowana raz i w momencie kiedy spinedit40 ją przekroczy (bądź będzie taki sam) po wykonaniu funkcji została wylosowana nowa wartość i tak ciągle.

Proszę o pomoc i dziękuję.

5

Procedura Randomize powinna być wywołana tylko raz na całą sesję programu. Najlepszym miejscem na jej wywołanie jest główny plik projektu, jako pierwsza instrukcja w głównym bloku kodu.

DroniC napisał(a):

Chciałbym, by wartość nie była losowana wtedy co interval timera (w tym przypadku 1 sekunda), tylko żeby ta wartość została wylosowana raz i w momencie kiedy spinedit40 ją przekroczy (bądź będzie taki sam) po wykonaniu funkcji została wylosowana nowa wartość i tak ciągle.

Jeśli wartość ma być losowana nie co określony interwał timera, a tylko kiedy SpinEdit osiągnie konkretną wartość, to wywal ten timer i po prostu obsłuż zdarzenie SpinEdit.OnChange — w nim sprawdzaj jaka jest nowa wartość i w razie czego wylosuj sobie liczbę.

0

Dzięki bardzo :)

procedure TForm1.SpinEdit40Change(Sender: TObject);
begin
if (SpinEdit40.Value) <= RandomRange(10, 100)
then
begin
Button8.Caption := 'Enter';
end
else Button8.Caption := 'Do Not Enter';
end;

Jak zrobić, by np. SpinEdit41 miał zawsze właśnie wylosowany numer do którego powyższy kod będzie się stosować?

0
DroniC napisał(a):

Jak zrobić, by np. SpinEdit41 miał zawsze właśnie wylosowany numer do którego powyższy kod będzie się stosować?

Nie za bardzo rozumiem jak to ma działać. Dobrze by było, gdybyś pisał proste pytania, używając programistycznej nomenklatury. Nie wiem co to znaczy, że wylosowany numer ma się stosować do powyższego kodu.

0

Powiedzmy, że SpinEdit40 jest wartością zmienną. Wychodzi na to, że bez timera - na samym OnChange nie da rady tego zrobić nie? Bo do odczytywania tej zmiennej potrzebny jest timer, lub ewentualnie wątek. Najlepiej zatem będzie zrobić timer, gdzie po prostu SpinEdit.Value := cośtam, a następnie całą resztę kodu wykonać w OnChange. Zgadza się?

0

Jeśli liczba ma być losowana co określony czas, to potrzebujesz timera lub wątku do tego. Jeśli potrzebujesz zareagować na ustawienie w SpinEdit jakiejś wartości, za każdym razem gry ulegnie zmianie oraz natychmiastowo, to użyj zdarzenia OnChange.

0

nie wiem czy rozumiałem o co Ci chodzi ale na Moje oko o takie coś

procedure TForm1.SpinEdit40Change(Sender: TObject);
var
i_random
:integer;
begin
//zmienna do trzymania wartosci random
i_random:=RandomRange(10, 100);

if (SpinEdit40.Value) <= i_random then
 begin
  Button8.Caption := 'Enter -> '+IntToStr(i_random);
  SpinEdit41.Value:=i_random;
 end else 
  begin
   Button8.Caption := 'Do Not Enter';
  end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1