Random

0

Witam wszystkich moje pytanie jest nieco zagmatwane ale postaram się je wyjaśnić otóż. Mam na formie 10 imagów po ich kliknięciu każdego z nich wykonuje się taka procedura:
if a=false then kr1.Visible:=true else ko1.Visible:=true;
zn1.Visible:=false;
// Chciałbym żeby kod poniżej był losowy tzn żeby tylko jeden imag
// został kliknięty.
zn2Click(Sender);
zn3Click(Sender);
zn4Click(Sender);
zn5Click(Sender);
...
zn10Click(Sender);

I teraz np jak ja kilkne imag o nazwie "Zn5" to następny automatycznie kliknie się np "zn1" i tak do zniknięcia wszystkich imagów z formy. Jeszcze jedno jak np klikne "zn5" to żeby ten imag już nie mógł być wylosowany.

Prosze Pomóżcie [cya]

0
S := 'zn' + IntToStr(random(10) + 1);
TImage(FindComponent(S)).OnClick(Sender);

I oczywiście nie zapomnieć o Randomize w OnCreate formy. Ale jak z tym powtórnym losowaniem, to mi się kodu nie chce pisać. Trzeba zapisywać w jakiejś tablicy nazwy wylosowanych imagów, a potem przed TImage(FindComponent(S)).OnClick(Sender); sprawdzać, czy już było czy nie.

0

A może jakieś linki ktoś podrzuci.
Bede wdzięczny
thx [cya]

0

Hello to znowu ja. Wiem że celem tego forum nie jest podawanie gotowych kodów ale naprawde nie moge sobie z tym poradzić [???] szukałem na różnych stronkach podobnego przykładu ale nic nie znalazłem. Czy ktoś mógłby (łamiąc lekko zasady) podać mi kod.
Z Góry wielkie DZIĘKI za Pomoc

0
//Randomize w OnCreate formy albo OnShow

procedure JakasTam;
var
  s: string;
  i,j: integer;
begin
  j := 0;
  for i := 0 to Form1.ComponentCount -1 do
    if (Form1.Components[i] is TImage) then 
      if (Form1.Components[i] as TControl).Visible = True then 
         Inc(j);

  s := 'zn' + IntToStr(random(j) + 1);
  TImage(FindComponent(S)).OnClick(Sender);
end;

procedure znXClick(Sender: TObject); // x - numer
begin
  if a=false then 
    kr1.Visible:=true 
  else ko1.Visible:=true;
znX.Visible:=false;  // x -numer
JakasTam;
end;

PS: nie obiecuje że zadziała bo pisałem tutaj, nie w Delphi bez sprawdzenia :)

0

Sorki ze zawracam głowe [glowa] ale nadal nic z tego nie wiem czy dobrze wyjaśniłem chodzi mi o to żeby można było grać z komputerem jak ja klikne jeden obrazek komputer kliknie dowolny( 1 losowy) potem ja następny i komputer i tak do zniknięcia wszystkich obrazków z formy. [stuk]

0

Widze że albo dałem trudny temat albo nikomu się nie chce pisać (a mi na tym naprawde zależy).
Please Powiedzcie mi może tylko czy da się zrobić mniej więcej coś takiego z instrukcją if , then np:

Jeżeliobrazek3 był kliknięty wtedy
uruchom losowanie z obrazkami (1,2,4,5,6,7,8,9,10) bez obrazka 3;


Jeżeli coś takiego jest możliwe to please napiszćie mi jakby miał wyglądać poprawny kod.
[cya]

0

Przecież napisałem ci... no może nie dokładnie ale schematycznie jak to ma wyglądać.. najlepiej za każdym razem załadować listę wszystkich TImagów, które są widoczne (Visible = True) - wtedy nie trzeba za każdym razem sprawdzać żadnych "ifów" i na pewno nie popełnimy błędu.

0

Wszystko jest ok ale kiedy klikam np 5 obrazek to program się wiesza bo wybiera losowo następny i go klika i następny i następny a mi chodzi o coś takiego że raz ja klikam przeze mnie wybrany obrazek a potem komputer i znowu ja i komputer itd. [???]

0

Może spróbuj tą procedurke dać w Timerze ustaw go póżniej na enabled false, stwórz sobie jeszcze jeden obrazek o nazwie np: "nowyobr1" i w każdym obrazku "znx" napisz

procedure znXClick(Sender: TObject);
begin
if a=false then kr1.Visible:=true else ko1.Visible:=true;
znX.Visible:=false;
if nowyobr=true then nowuobr:=false else nowyobr:=true;
end;

W OnPaint formy daj takie coś
If nowyobr=false then timer:=true;
If nowyobr=true then timer:=false;

Teraz jak klikniesz na dowolny "zn" to sobie "nowyobr" zniknie albo sie pojawi. Jak zniknie to sie uruchomi losowanie a jak sie pojawi to sie zakończy.

Powinno zadziałąć spróbuj, ja nie wiem bo też nie testowałem.

0

Oj, panie Anonim, nieładnie. Nie chce się panu chwilkę pomyśleć. W kodzie Stępnia jest moim zdaniem za dużo kombinowania. Prościej można tak :

procedure TForm1.zn1Click(Sender: TObject);
var
    i : integer;
    s: string;
label
    poczatek;
const
    IloscImagow = 10;
begin
    (Sender as TImage).Visible := false;
  poczatek :
    S := 'zn' + IntToStr(random(IloscImagow) + 1);
    if TImage(FindComponent(S)).Visible then begin
        TImage(FindComponent(S)).Visible := false;
    end
    else goto poczatek;
end;

I to jest procedura kliknięcia na KAŻDY z imagów. Sprawdzone, działa.

0

Dzięki berl o coś takiego mi chodzi tylko żeby te obrazki nie znikały bez kliknięcia , tylko się klikały OnClick(Sender); Zrobiłem tak:

procedure TForm1.zn1Click(Sender: TObject);
var
s: string;
label
poczatek;
const
IloscImagow = 10;
begin
if a=false then kr1.Visible:=true else ko1.Visible:=true; //tu dopisałem
(Sender as TImage).Visible := false;
poczatek :
S := 'zn' + IntToStr(random(IloscImagow) + 1);
if TImage(FindComponent(S)).Visible then begin
TImage(FindComponent(S)).OnClick(Sender); //tu zmiana
end
else goto poczatek;
end;

I jak klikne to pojawia się błąd "<font color="black">Stack Owerflow</span>

Błagam okarzcie jeszcze troche cierpliwości.

0

Zrobiłeś tak, że procedura wywołuje sama sibie, jak ma nie być stack overflow. Napisz, dlaczego ci zależy, żeby to było kliknięcie, może znajdzie się inna rada.

0

Chce żeby to było kliknięcie bo po kliknięciu robi się jeszcze procedura. A jak ten obrazek zniknie bez kliknięcia to procedura się nie wykona. (Szkoda że w delphi nie ma OnVisible :d ).

0
procedure TForm1.zn1Click(Sender: TObject);
var
    i : integer;
    s: string;
label
    poczatek;
const
    IloscImagow = 10;
begin
    (Sender as TImage).Visible := false;
  poczatek :
    S := 'zn' + IntToStr(random(IloscImagow) + 1);
    if TImage(FindComponent(S)).Visible then begin
        TImage(FindComponent(S)).Visible := false;
        //PRZECIEŻ TU MOŻESZ WYWOŁAĆ TĄ PROCEDURĘ
    end
    else goto poczatek;
end;


0

OK ale ta procedura będzie wykonana tylko wtedy kiedy klikne obrazek ten który zniknie losowo nie wykona tej procedury [???]

0

OK już sobie poradziłem stworzyłem procedure która będzie wykonywana kiedy obrazek zniknie.

Dzięki wszystkim za POMOC !!!!!!

[browar]

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