Zıplayan Top

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
similyan
Üye
Mesajlar: 52
Kayıt: 08 Nis 2006 12:18
Konum: konya
İletişim:

Zıplayan Top

Mesaj gönderen similyan »

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....
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

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

Kod: Tümünü seç

if shape1.top+shape1.height= form1.height then yon:='-';
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
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose »

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....
similyan
Üye
Mesajlar: 52
Kayıt: 08 Nis 2006 12:18
Konum: konya
İletişim:

Mesaj gönderen similyan »

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.
Böle bişeyler denedim ama olmadı oyun tarzında değil sadece rastgele hareket edip forma çarpınca geri dönüp rastgele hareket etmeye devam edecek..
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Örnek kod vereyim gerekli ayarlamaları sen yaparsın.

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;
İyi çalışmalar
similyan
Üye
Mesajlar: 52
Kayıt: 08 Nis 2006 12:18
Konum: konya
İletişim:

Mesaj gönderen similyan »

timer1 in ontimer ına

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;
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..
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

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

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;
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
similyan
Üye
Mesajlar: 52
Kayıt: 08 Nis 2006 12:18
Konum: konya
İletişim:

Mesaj gönderen similyan »

değişik bi düşünce olmuş ama güzel olmuş tamamdır teşekkürler...
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

evet güzel oldu, ben vaktim olursa biraz daha geliştirip bilardo sopası ile vurayım diyorum topa, mesela topa tam yatay olarak vurunca

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;
olur böylece top sadece yatay yönde hareket eder, eğlenceli bişey, belki ilerde sağlam bir bilardo oyunu olur.
kolay gelsin.
Cevapla