|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Использования image в массивах
всем здравствуйте! делаю игрушку дело в том что не знаю как сделать правильно поэтому спрошу вас!
на форме будет использоваться много image; например 20 штук координаты каждого image будет закреплёна и в каждом будет разная картинка. (координаты выставляю в ручную без массива ) - image 1-20 Нужно чтобы один image из 20 появился рандомно, затем кликая по нему появляется следующая и так далее так же рандомно из 20,и нужно чтобы не повторялись как бы "использованное нельзя повторять" Пример кода: Код: Код:
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private procedure MasClick(Sender: TObject); { Private declarations } public { Public declarations } end; var Form1: TForm1; mas:array[1..20] of TImage; //масив из 20 имадже m:set of byte; //множество номеров implementation {$R *.dfm} //создание масива procedure TForm1.FormCreate(Sender: TObject); var i,j,k,d:byte; begin randomize; d:=10; Form1.ClientHeight:=400+5*d; Form1.ClientWidth:=500+6*d; for i:=1 to 4 do for j:=1 to 5 do begin k:=5*(i-1)+j; mas[k]:=TImage.Create(Form1); with mas[k] do begin Parent:=Form1; width:=100; height:=100; Left:=j*d+100*(j-1); Top:=i*d+100*(i-1); canvas.Brush.Color:=clWhite; tag:=i; visible:=false;//все прячем OnClick:=MasClick end; end; i:=1+random(20); //один показываем m:=[i]; mas[i].Visible:=true; end; //процедура клика на имадже procedure TForm1.MasClick(Sender: TObject); var i:byte; begin repeat i:=1+random(20); until not(i in m); m:=m+[i]; //показываем очередной случайный if (sender is timage) then mas[i].Visible:=true; end; |
#2
|
||||
|
||||
Либо генерить рандомные числа, пока во множестве уже показанных, либо сначала составить рандомный список показа и потом идти по нему.
jmp $ ; Happy End! The Cake Is A Lie. |
#3
|
|||
|
|||
А подробней можете расписать?
|
#4
|
||||
|
||||
Цитата:
Код:
procedure TForm1.MasClick(Sender: TObject); var Imgs: array of TImage; i, k: Integer; begin SetLength(Imgs, Length(mas)); k := 0; for i := Low(mas) to High(mas) do begin if not mas[i].Visible then begin Imgs[k] := mas[i]; Inc(k); end; end; if k > 0 then Imgs[random(k)].Visible := True; end; |
#5
|
|||
|
|||
спасибо буду знать!
У меня появился вопрос! скажите а где и как разместить к примеру. Код:
Form1.Image1.Picture.LoadFromFile('C:\Users\макс\Desktop\Dok\image\31.jpg'); Код:
Form1.ClientHeight:=400+5*d; Form1.ClientWidth:=500+6*d; Код:
width:=100; height:=100; Left:=j*d+100*(j-1); Top:=i*d+100*(i-1); - самому расставлять нужно имеджи! и за каждым имейджем было закреплена картинка но они выводились в рандомном порядке подскажите где их поставить в коде? И чтобы по коду работало! по этому к примеру. только чтобы имейджи выходили рандомно но в самих имейджах картинки не должны выходить рандомно так как они закреплены CODE]Form1.Image1.Picture.LoadFromFile('C:\Users\макс\D esktop\Dok \image\31.jpg');[/code] Код:
type TForm1 = class(TForm) Image1: TImage; procedure FormCreate(Sender: TObject); private procedure MasClick(Sender: TObject); { Private declarations } public { Public declarations } end; var Form1: TForm1; mas:array[1..20] of TImage; //масив из 20 имадже m1,m2:set of byte; //множество номеров и тагов имеджей n:integer=0; //количество кликов implementation {$R *.dfm} //создание массива procedure TForm1.FormCreate(Sender: TObject); var i,j,k,d:byte; begin randomize; d:=10; Form1.ClientHeight:=400+5*d; Form1.ClientWidth:=500+6*d; for i:=1 to 4 do for j:=1 to 5 do begin k:=5*(i-1)+j; mas[k]:=TImage.Create(Form1); with mas[k] do begin Parent:=Form1; width:=100; height:=100; Left:=j*d+100*(j-1); Top:=i*d+100*(i-1); canvas.Brush.Color:=clWhite; tag:=k; //здесь переменная visible:=false;//все прячем OnClick:=MasClick end; end; i:=1+random(20); //один показываем m1:=[i]; m2:=[]; mas[i].Visible:=true; end; //процедура клика на имадже procedure TForm1.MasClick(Sender: TObject); var i:byte; begin if (sender is timage)then begin if not((sender as timage).Tag in m2) and(n<19)then //показываем очередной случайный begin repeat i:=1+random(20); until not(i in m1); m1:=m1+[i]; m2:=m2+[(sender as timage).Tag ]; mas[i].Visible:=true; n:=n+1; end else begin showmessage('Game over'); for i:=1 to 20 do mas[i].Visible:=false; n:=0; i:=1+random(20); //один показываем m1:=[i]; m2:=[]; mas[i].Visible:=true; end; end; end; end. Последний раз редактировалось M.A.D.M.A.N., 03.04.2014 в 13:33. |