Zıplayan Top
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Zıplayan Top
Arkadaşlar shape bileşeniyle bi daireyi form üzerinde rastgele hareket edecek formun kenarlarına çarpınca geri dönecek nasıl yapabiliriz arkadaşlar..yardımcı olursanız sevinirim....
Forma bi timer koy, timer şekli milisaniyede bir yerini değiştirsin. bi de yön belirleyen değişkenler tanımla.
timerda kontroller olsun. mesela
bu kodla top kenara çarpmış ve geri dönmül oluyor.
sen en iyisi yazmaya başla takıldığın yerde yardımcı oluruz.
kolay gelsin
timerda kontroller olsun. mesela
Kod: Tümünü seç
if shape1.top+shape1.height= form1.height then yon:='-';
sen en iyisi yazmaya başla takıldığın yerde yardımcı oluruz.
kolay gelsin
- White Rose
- Üye
- Mesajlar: 726
- Kayıt: 06 Tem 2005 09:41
- Konum: Güneyden
- İletişim:
unit UntTenis;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls,mmsystem;
type
TFrmAnaform = class(TForm)
Timer: TTimer;
Btn_Kapat: TButton;
Masa: TPanel;
TTopu: TShape;
Raket: TPanel;
Btn_Dur: TButton;
Btn_Yeni: TButton;
procedure RaketMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormShow(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure Btn_BaslaClick(Sender: TObject);
procedure Btn_KapatClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure MasaMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Btn_DurClick(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Btn_YeniClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmAnaform: TFrmAnaform;
Sayi,
xa,ya:Integer;
Kutu :Array[1..10,1..7] of TPanel;
implementation
{$R *.DFM}
procedure TFrmAnaform.RaketMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
If X<=Raket.Left+(Raket.width div 2) Then
Raket.Left:=Raket.left+(x-Raket.width div 2);
end;
procedure TFrmAnaform.FormShow(Sender: TObject);
begin
xa:=3;
ya:=-3;
Timer.Enabled:=False;
ShowCursor(False);
end;
procedure TFrmAnaform.TimerTimer(Sender: TObject);
var
i,j:Integer;
begin
For i:=1 To 10 do begin
For j:=1 To 7 do begin
If (TTopu.Top+2<=(Kutu[i,j].Top+Kutu[i,j].Height)) and
((TTopu.Left+3>=Kutu[i,j].left) and
(((TTopu.Left+TTopu.Width+3))<=(Kutu[i,j].Left+Kutu[i,j].width))) and
((Ttopu.Top+2+TTopu.Height)>=Kutu[i,j].Top) and
(Kutu[i,j].visible) then begin
Kutu[i,j].visible:=False;
ya:=-ya;
Inc(Sayi);
PlaySound(PChar('Bang.wav'), 0, SND_ASYNC);
If Sayi=70 Then begin
Sayi:=0;
Timer.Enabled:=False;
Showmessage('Oyun bitti...');
Exit;
End;
end;
End;
End;
If TTopu.Left<0 Then Begin // Sola çarptı
PlaySound(PChar('Alaser.wav'), 0, SND_ASYNC);
xa:=-xa;
End;
If TTopu.Top<0 Then begin // Üste çarptı
PlaySound(PChar('click.wav'), 0, SND_ASYNC);
ya:=-ya;
end;
If TTopu.Left+TTopu.Width>Masa.Width Then begin // Sağa çarptı
PlaySound(PChar('Alaser.wav'), 0, SND_ASYNC);
xa:=-xa;
End;
If (TTopu.Top+TTopu.Height>Raket.Top) and
(TTopu.Left>Raket.Left) and
(TTopu.Left+Ttopu.Width<=Raket.Left+Raket.Width) Then begin // Rakete çarptı
PlaySound(PChar('zari.wav'), 0, SND_ASYNC);
ya:=-ya;
end;
If (TTopu.Top+TTopu.Height>Masa.Height) Then begin // Masadan çıktı
//Showmessage('Oyun bitti');
TTopu.Left:=Masa.Width div 2;
TTopu.Top :=Masa.Height div 2;
ya:=+ya;
xa:=+xa;
end;
TTopu.Left:=TTopu.Left+xa;
TTopu.Top :=TTopu.top+ya;
end;
procedure TFrmAnaform.Btn_BaslaClick(Sender: TObject);
begin
Btn_Yeniclick(Sender);
end;
procedure TFrmAnaform.Btn_KapatClick(Sender: TObject);
begin
close;
end;
procedure TFrmAnaform.FormClose(Sender: TObject; var Action: TCloseAction);
var
i,j:Integer;
begin
ShowCursor(True);
Timer.Enabled:=False;
For i:=1 To 10 do begin
For j:=1 To 7 do begin
//Kutu[i,j]:=Nil;
Kutu[i,j].Free;
End;
End;
end;
procedure TFrmAnaform.MasaMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
//If Not Timer.Enabled Then Timer.Enabled:=True;
If (Showcursor(False)=0) Then ShowCursor(False);
If X>=(Raket.width div 2) Then
Raket.Left:=X-(Raket.Width div 2);
end;
procedure TFrmAnaform.Btn_DurClick(Sender: TObject);
begin
Timer.Enabled:=Not Timer.Enabled;
end;
procedure TFrmAnaform.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
If Not (Showcursor(True)=0) Then ShowCursor(True);
//If Timer.Enabled Then Timer.Enabled:=False;
end;
procedure TFrmAnaform.Btn_YeniClick(Sender: TObject);
var
i,j:Integer;
begin
Sayi:=0;
For i:=1 To 10 do begin
For j:=1 To 7 do begin
Kutu[i,j].Free;
End;
End;
For i:=1 To 10 do begin
For j:=1 To 7 do begin
Kutu[i,j] :=TPanel.Create(Masa);
Kutu[i,j].left :=((Masa.Width div 10)*i)-(Masa.Width div 10)+3;
Kutu[i,j].top :=(j*20)+(Masa.top-Masa.Top)-18;
Kutu[i,j].height:=20;
Kutu[i,j].Width :=(Masa.Width div 10);
Kutu[i,j].Color :=Rgb(random(255),random(255),random(255));
Kutu[i,j].Parent:=Masa;
End;
End;
timer.Enabled:=TRue;
end;
end.
Kolay gelsin....
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls,mmsystem;
type
TFrmAnaform = class(TForm)
Timer: TTimer;
Btn_Kapat: TButton;
Masa: TPanel;
TTopu: TShape;
Raket: TPanel;
Btn_Dur: TButton;
Btn_Yeni: TButton;
procedure RaketMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormShow(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure Btn_BaslaClick(Sender: TObject);
procedure Btn_KapatClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure MasaMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Btn_DurClick(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Btn_YeniClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmAnaform: TFrmAnaform;
Sayi,
xa,ya:Integer;
Kutu :Array[1..10,1..7] of TPanel;
implementation
{$R *.DFM}
procedure TFrmAnaform.RaketMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
If X<=Raket.Left+(Raket.width div 2) Then
Raket.Left:=Raket.left+(x-Raket.width div 2);
end;
procedure TFrmAnaform.FormShow(Sender: TObject);
begin
xa:=3;
ya:=-3;
Timer.Enabled:=False;
ShowCursor(False);
end;
procedure TFrmAnaform.TimerTimer(Sender: TObject);
var
i,j:Integer;
begin
For i:=1 To 10 do begin
For j:=1 To 7 do begin
If (TTopu.Top+2<=(Kutu[i,j].Top+Kutu[i,j].Height)) and
((TTopu.Left+3>=Kutu[i,j].left) and
(((TTopu.Left+TTopu.Width+3))<=(Kutu[i,j].Left+Kutu[i,j].width))) and
((Ttopu.Top+2+TTopu.Height)>=Kutu[i,j].Top) and
(Kutu[i,j].visible) then begin
Kutu[i,j].visible:=False;
ya:=-ya;
Inc(Sayi);
PlaySound(PChar('Bang.wav'), 0, SND_ASYNC);
If Sayi=70 Then begin
Sayi:=0;
Timer.Enabled:=False;
Showmessage('Oyun bitti...');
Exit;
End;
end;
End;
End;
If TTopu.Left<0 Then Begin // Sola çarptı
PlaySound(PChar('Alaser.wav'), 0, SND_ASYNC);
xa:=-xa;
End;
If TTopu.Top<0 Then begin // Üste çarptı
PlaySound(PChar('click.wav'), 0, SND_ASYNC);
ya:=-ya;
end;
If TTopu.Left+TTopu.Width>Masa.Width Then begin // Sağa çarptı
PlaySound(PChar('Alaser.wav'), 0, SND_ASYNC);
xa:=-xa;
End;
If (TTopu.Top+TTopu.Height>Raket.Top) and
(TTopu.Left>Raket.Left) and
(TTopu.Left+Ttopu.Width<=Raket.Left+Raket.Width) Then begin // Rakete çarptı
PlaySound(PChar('zari.wav'), 0, SND_ASYNC);
ya:=-ya;
end;
If (TTopu.Top+TTopu.Height>Masa.Height) Then begin // Masadan çıktı
//Showmessage('Oyun bitti');
TTopu.Left:=Masa.Width div 2;
TTopu.Top :=Masa.Height div 2;
ya:=+ya;
xa:=+xa;
end;
TTopu.Left:=TTopu.Left+xa;
TTopu.Top :=TTopu.top+ya;
end;
procedure TFrmAnaform.Btn_BaslaClick(Sender: TObject);
begin
Btn_Yeniclick(Sender);
end;
procedure TFrmAnaform.Btn_KapatClick(Sender: TObject);
begin
close;
end;
procedure TFrmAnaform.FormClose(Sender: TObject; var Action: TCloseAction);
var
i,j:Integer;
begin
ShowCursor(True);
Timer.Enabled:=False;
For i:=1 To 10 do begin
For j:=1 To 7 do begin
//Kutu[i,j]:=Nil;
Kutu[i,j].Free;
End;
End;
end;
procedure TFrmAnaform.MasaMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
//If Not Timer.Enabled Then Timer.Enabled:=True;
If (Showcursor(False)=0) Then ShowCursor(False);
If X>=(Raket.width div 2) Then
Raket.Left:=X-(Raket.Width div 2);
end;
procedure TFrmAnaform.Btn_DurClick(Sender: TObject);
begin
Timer.Enabled:=Not Timer.Enabled;
end;
procedure TFrmAnaform.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
If Not (Showcursor(True)=0) Then ShowCursor(True);
//If Timer.Enabled Then Timer.Enabled:=False;
end;
procedure TFrmAnaform.Btn_YeniClick(Sender: TObject);
var
i,j:Integer;
begin
Sayi:=0;
For i:=1 To 10 do begin
For j:=1 To 7 do begin
Kutu[i,j].Free;
End;
End;
For i:=1 To 10 do begin
For j:=1 To 7 do begin
Kutu[i,j] :=TPanel.Create(Masa);
Kutu[i,j].left :=((Masa.Width div 10)*i)-(Masa.Width div 10)+3;
Kutu[i,j].top :=(j*20)+(Masa.top-Masa.Top)-18;
Kutu[i,j].height:=20;
Kutu[i,j].Width :=(Masa.Width div 10);
Kutu[i,j].Color :=Rgb(random(255),random(255),random(255));
Kutu[i,j].Parent:=Masa;
End;
End;
timer.Enabled:=TRue;
end;
end.
Kolay gelsin....
Kod: Tümünü seç
procedure TForm1.Timer1Timer(Sender: TObject);
var
A:integer;
begin
A:=RANDOM(3);
begin
if shape1.left=form1.Left
then
shape1.left:=shape1.Left-A
else shape1.left:=shape1.Left+A;
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
var
B:integer;
begin
B:=RANDOM(3);
begin
if shape1.top=form1.top
then
shape1.top:=shape1.top-B
else shape1.top:=shape1.top+B;
end;
end;
end.
Örnek kod vereyim gerekli ayarlamaları sen yaparsın.
İyi çalışmalar
Kod: Tümünü seç
var
dx,dy: Integer;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Shape1.Left := Shape1.Left + dx;
Shape1.Top := Shape1.Top + dy;
if (Shape1.Left <= 0) or (Shape1.Left + Shape1.Width >= Width) then
dx := dx * -1;
if (Shape1.Top <= 0) or (Shape1.Top + Shape1.Height >= Height) then
dy := dy * -1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
dx := RandomRange(-5,5);
dy := RandomRange(-5,5);
end;
timer1 in ontimer ına
oldu gibi ama sol ve üst kısıma çarpınca geri dönüyo shape ama sağ ve altta çalışmıyo neden acaba..
Kod: Tümünü seç
begin
randomize;
shape1.left:=shape1.left+random(100);
shape1.top:=shape1.top+random(100);
if shape1.top>=280 then shape1.top:=0;
if shape1.left>=280 then shape1.left:=0;
end;
forma bi tane shape koy, 2 tane de label
labelların adı dikeyyon ve yatayyon olsun
captionları ilk başta + olsun.
timer koy bi tane. intervalini 100 yap
timera şu kodu yaz
denenmiş ve çalıştırılmıştır. projenin hazır hali aşağıdaki linktedir
http://rapidshare.de/files/23013127/top.rar.html
kolay gelsin
labelların adı dikeyyon ve yatayyon olsun
captionları ilk başta + olsun.
timer koy bi tane. intervalini 100 yap
timera şu kodu yaz
Kod: Tümünü seç
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if dikeyyon.Caption='+' then shape1.Top:=shape1.Top+10;
if dikeyyon.Caption='-' then shape1.Top:=shape1.Top-10;
if yatayyon.Caption='+' then shape1.left:=shape1.left+10;
if yatayyon.Caption='-' then shape1.left:=shape1.left-10;
if shape1.Top<0 then dikeyyon.Caption:='+';
if shape1.Left<0 then yatayyon.Caption:='+';
if shape1.top+shape1.Height>form1.Height then dikeyyon.Caption:='-';
if shape1.Left+shape1.Width>form1.Width then yatayyon.Caption:='-';
end;
http://rapidshare.de/files/23013127/top.rar.html
kolay gelsin
evet güzel oldu, ben vaktim olursa biraz daha geliştirip bilardo sopası ile vurayım diyorum topa, mesela topa tam yatay olarak vurunca
olur böylece top sadece yatay yönde hareket eder, eğlenceli bişey, belki ilerde sağlam bir bilardo oyunu olur.
kolay gelsin.
Kod: Tümünü seç
if dikeyyon.Caption='+' then shape1.Top:=shape1.Top+0;
if dikeyyon.Caption='-' then shape1.Top:=shape1.Top-0;
if yatayyon.Caption='+' then shape1.left:=shape1.left+10;
if yatayyon.Caption='-' then shape1.left:=shape1.left-10;
kolay gelsin.