Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls,Utank,UThreadTank;
....
....
....
var
Tank:Array of TTank;
TankinThreadi:Array of TThreadTank;
procedure TForm1.Button1Click(Sender: TObject); //Tank ve threadini yaratan düğme...
var
x,y,hiz:integer;
Yon:TTankinYonu;
begin
setlength(tank,high(tank)+2);
setLength(TankinThreadi,high(tank)+1);
form1.Caption:='high(tank)='+inttostr(high(tank))+' high(tankinthreadi)='+inttostr(high(tankinthreadi));
Randomize;
x:=RandomRange(0,form1.ClientWidth-105); //105 resmin genişliği...
y:=randomrange(0,form1.Height-105); //105 resmin yüksekliği...
case random(4) of
0:Yon:=tyKuzey;
1:Yon:=tyGuney;
2:Yon:=tyDogu;
3:Yon:=tyBati;
end;
Tank[high(tank)]:=TTank.create(form1,x,y,Yon,10);
Tank[high(tank)].Tag:=high(tank);
TankinThreadi[high(tank)]:=TThreadTank.create(Tank[high(tank)]);
TankinThreadi[high(tank)].Priority:=tpLowest;
// showmessage(inttostr(high(tank)));
end;
procedure TForm1.Button2Click(Sender: TObject); //tank ve threadini kapatan düğme
begin
if high(tank)<0 then
exit;
TankinThreadi[high(tank)].Terminate;
Tank[high(tank)].Free;
Setlength(TankinThreadi,high(tank));
Setlength(Tank,high(tank));
form1.Caption:='high(tank)='+inttostr(high(tank))+' high(tankinthreadi)='+inttostr(high(tankinthreadi));
end;
end.
Kod: Tümünü seç
unit UTank;
interface
Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,extctrls;
Type
TTankinYonu=(tyKuzey,tyGuney,tyDogu,tyBati);
TCarpmaYonu=(cyKuzeyden,cyGuneyden,cyDogudan,cyBatidan,cyYok);
///////////////////////////////////////////
Type TTank=class(TImage)
private
FTankinXKonumu:integer;
FTankinYKonumu:integer;
FTankinYonu:TTankinYonu;
FTankinHizi:integer;
FTankinBenzini:integer;
FTankinHasari:integer;
FTankinAtesGucu:integer;
FTankinAtesHizi:integer;
FTankinEziciGucu:integer;
FTankinAtmisOlduguAtesSayisi:integer;
FTankinAtabilecegiAtesSayisi:integer;
FKuzeyResimAdresi1:string;
FGuneyResimAdresi1:string;
FDoguResimAdresi1:string;
FBatiResimAdresi1:string;
FKuzeyResimAdresi2:string;
FGuneyResimAdresi2:string;
FDoguResimAdresi2:string;
FBatiResimAdresi2:string;
FTankinGenisligi:integer;
FTankinYuksekligi:integer;
FCarpaHangiYonden:TCarpmaYonu;
procedure WTankinXKonumu(const Value: integer);
procedure WTankinYKonumu(const Value: integer);
procedure WTankinYonu(const Value: TTankinYonu);
procedure Wtankinhizi(const Value: integer);
procedure YoneGoreResimTayinEt;
//protected
public
property TankinXKonumu:integer
read FTankinXKonumu write WTankinXKonumu;
Property TankinYKonumu:integer
read FTankinYKonumu write WTankinYKonumu;
Property TankinYonu:TTankinYonu
read FTankinYonu write WTankinYonu;
Property TankinHizi:integer
read FTankinHizi write Wtankinhizi;
constructor
create(AOwner:TWinControl;x,y:integer;ATankinYonu:TTankinYonu;ATankinHizi:integer);
destructor
destroy;override;
end;
////////////////////////////////////////////
implementation
{ TTank }
///////////////////yaratma ve yok etme bölümleri//////////
//yaratma...
constructor TTank.create(AOwner:TWincontrol;x, y: integer;ATankinYonu:TTankinYonu;ATankinHizi:integer);
begin
inherited create(AOwner);
Parent:=AOwner;
FGuneyResimAdresi1:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank1.bmp';
FGuneyResimAdresi2:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank1-2.bmp';
FBatiResimAdresi1:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank2.bmp';
FBatiResimAdresi2:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank2-2.bmp';
FKuzeyResimAdresi1:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank3.bmp';
FKuzeyResimAdresi2:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank3-2.bmp';
FDoguResimAdresi1:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank4.bmp';
FDoguResimAdresi2:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank4-2.bmp';
Height:=20;
Width:=20;
FTankinXKonumu:=x;
FTankinYKonumu:=y;
FTankinYonu:=ATankinYonu;
FTankinHizi:=ATankinHizi;
FCarpaHangiYonden:=cyYok;
Left:=FTankinXKonumu;
Top:=FTankinYKonumu;
Stretch:=True;
Transparent:=true;
YoneGoreResimTayinEt;
end;
//Yoketme...
destructor TTank.destroy;
begin
//showmessage('destroy oluyoz, iyi mi?'); //tanklar varken formu kapatınca yine bu çalışıyo ve showmessage olmayınca kapanırken hata veriyor...
// Free;
inherited destroy;
end;
///////////////////////////////////////////////////////////
procedure TTank.Wtankinhizi(const Value: integer);
begin
FTankinHizi := Value;
end;
procedure TTank.WTankinXKonumu(const value:integer);
begin
FTankinXKonumu := Value;
Left:=FTankinXKonumu;
end;
procedure TTank.WTankinYKonumu(const Value: integer);
begin
FTankinYKonumu := Value;
Top:=FTankinYKonumu;
end;
procedure TTank.WTankinYonu(const Value: TTankinYonu);
begin
FTankinYonu := Value;
YoneGoreResimTayinEt;
end;
procedure TTank.YoneGoreResimTayinEt;
begin
if FTankinYonu=tyKuzey then
picture.LoadFromFile(FKuzeyResimAdresi1)
else
if FTankinYonu=tyGuney then
picture.LoadFromFile(FGuneyResimAdresi1)
else
if FTankinYonu=tyDogu then
picture.LoadFromFile(FDoguResimAdresi1)
else
if Ftankinyonu=tyBati then
picture.LoadFromFile(FBatiResimAdresi1);
Refresh;
end;
end.
Kod: Tümünü seç
unit UThreadTank;
interface
uses
Classes,UTank,dialogs;
type
TThreadTank = class(TThread)
private
FTank:TTank;
{ Private declarations }
protected
procedure Execute; override;
procedure DegeriDondurenProcedure;
public
constructor create(ATank:TTank);
end;
implementation
uses SysUtils;
{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure TThreadTank.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ TThreadTank }
constructor TThreadTank.create(ATank: TTank);
begin
inherited create(false);
FreeOnTerminate:=true;
FTank:=ATank;
end;
procedure TThreadTank.DegeriDondurenProcedure;
begin
if FTank.TankinYonu=tyKuzey then
begin
if FTank.TankinYKonumu-5<0 then
begin
FTank.TankinYonu:=tyGuney;
exit;
end;
FTank.TankinYKonumu:=FTank.TankinYKonumu-5;
end
else
if FTank.TankinYonu=tyGuney then
begin
if FTank.TankinYKonumu+FTank.Height+5>FTank.Parent.ClientHeight then
begin
FTank.TankinYonu:=tyKuzey;
exit;
end;
FTank.TankinYKonumu:=FTank.TankinYKonumu+5;
end
else
if FTank.TankinYonu=tyDogu then
begin
if FTank.TankinXKonumu+FTank.Width+5>FTank.Parent.ClientWidth then
begin
FTank.TankinYonu:=tyBati;
exit;
end;
FTank.TankinXKonumu:=FTank.TankinXKonumu+5;
end
else
if FTank.TankinYonu=tyBati then
begin
if FTank.TankinXKonumu-5<0 then
begin
FTank.TankinYonu:=tyDogu;
exit;
end;
FTank.TankinXKonumu:=FTank.TankinXKonumu-5;
end;
end;
procedure TThreadTank.Execute;
begin
while (not terminated) do
begin
Synchronize(DegeriDondurenProcedure);
FTank.Refresh;
Sleep(100);
end;
{ Place thread code here }
end;
end.