unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,extctrls, StdCtrls, Math;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var cubuk,pul:array [1..9] of tshape;
i,x,y:integer;
kutu:array [1..9] of integer;
hk,ck,c,d,k:integer;
begin
randomize;
for i:=1 to 3 do
begin
cubuk:=tshape.Create(self);
cubuk.Parent:=self;
cubuk.Left:=100;
cubuk.Top:=i*100;
cubuk.Width:=200;
cubuk.Height:=1;
cubuk.Brush.Color:=rgb(0,0,0);
cubuk[i+3]:=tshape.Create(self);
cubuk[i+3].Parent:=self;
cubuk[i+3].Left:=i*100;
cubuk[i+3].Top:=100;
cubuk[i+3].Width:=1;
cubuk[i+3].Height:=200;
cubuk[i+3].Brush.Color:=rgb(0,0,0);
end;
for i:=1 to 9 do
begin
kutu:=i;
end;
for i:=1 to 6 do
begin
hk:=10-i;
ck:=random(10-i)+1;
c:=kutu[hk];
kutu[hk]:=kutu[ck];
kutu[ck]:=c;
end;
for i:=1 to 6 do
begin
k:=kutu[10-i];
if k<4 then y:=100;
if (k>3) and (k<7) then y:=200;
if k>6 then y:=300;
if (k=1) or (k=4) or (k=7) then x:=100;
if (k=2) or (k=5) or (k=8) then x:=200;
if (k=3) or (k=6) or (k=9) then x:=300;
if power(-1,i)<0 then
begin
x:=100*(random(3)+1);
y:=100*(random(3)+1);
pul[1]:=tshape.Create(self);
pul[1].Parent:=self;
pul[1].Left:=x-5;
pul[1].Top:=y-5;
pul[1].Width:=10;
pul[1].Height:=10;
pul[1].Brush.Color:=rgb(255,0,0);
pul[1].Shape:=stCircle;
end;
begin
x:=100*(random(3)+1);
y:=100*(random(3)+1);
pul[2]:=tshape.Create(self);
pul[2].Parent:=self;
pul[2].Left:=x-5;
pul[2].Top:=y-5;
pul[2].Width:=10;
pul[2].Height:=10;
pul[2].Brush.Color:=rgb(0,0,255);
pul[2].Shape:=stCircle;
end;
end;
end;
end.
9 Taş ufak bi sorun
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 2
- Kayıt: 28 Ara 2013 04:47
9 Taş ufak bi sorun
Değerli abilerim kardeşlerim 9 taş tablosu çizip iki noktanın kesiştiği her noktaya bi daire çiziyorum toplamda 9 tane kesişen nokta var ve benim amacım 9 yerine 6 tane daire(3ü kırmızı 3 ü mavi) yerleştirme yani sorunum bazı daireler üst üste biniyor
Re: 9 Taş ufak bi sorun
Kod: Tümünü seç
if power(-1,i)<0 then
Kod: Tümünü seç
ShowMessage('');
Tabii sorduğunuz bu değil ama eğer bu bir ödev değil ise ve oyunu tamamlamayı hedefliyorsanız, şu tür bir yapı öneririm :
Kod: Tümünü seç
type
TTas =(tBos, tKirmizi, tMavi);
Form1 =class(TForm)
//....
private
FTaslar :array[0..2, 0..2] of TTas;
//....
merkezdeki pozisyona kırmızı taşı koymak için
Kod: Tümünü seç
FTaslar[1, 1] :=tKirmizi
Kod: Tümünü seç
FTaslar[0, 0]<>tBos
Kod: Tümünü seç
//Adım 1: Zeminin (çizgilerin) çizilmesi
// . . .
//Adım 2: Taşların çizilmesi
for ADikey :=0 to 2 do
for AYatay :=0 to 2 do
TasCiz(ADikey, AYatay, FTaslar[ADikey, AYatay]);
Kod: Tümünü seç
procedure TForm1.TasCiz(ADikey, AYatay :integer; ATas :TTas);
const
Renkler :array[TTas] of TColor =(clBlack, clRed, clBlue);
var
x, y :integer;
begin
if ATas<>tYok then begin
x :=100 + AYatay * 30;
y :=100 + ADikey * 30;
Canvas.Brush.Color :=Renkler[ATas];
Canvas.Circle(x, y, 5);
end;
end;
Fikriniz olması için, Windows un tercih ettiği boyama yöntemini kullandım. Yani görüntü nesneleri hafızada tutulmaz ve gerektikçe form tekrar boyanır. Siz örneğinizdeki yöntemden gitmek isterseniz, formunuzun üzerine bir Image vb nesne yerleştirmenizi ve çizimlerinizi onun üzerine yapmanızı tavsiye ederim. Bu durumda, onPaint vb bir olaya bağlı kalmaksızın istediğiniz zaman ve bir defa çizim yapmanız yeterli olur. Tercih sizin.
TasCiz işlevinde, üçüncü parametre olarak ATas :TTas gereksiz görünebilir. Çünki zaten FTaslar dizisi global tanımlı ve TasCiz e ADikey ve AYatay değerlerini geçtik. Bu tartışmalı bir konu. Fazla derine girmeden, kısaca söyleyip geçeyim, bu şekilde programlamanın bazı yararları vardır. Ama tercih sizin.
Eğer oyunu sonuna kadar götürmek istiyorsanız, elimden geldiğince yardımcı olurum.
Ömür Ölmez
Re: 9 Taş ufak bi sorun
@omurolmez
Eline sağlık.
Oyun gibi düşününce taşları hareket ettirmek noktasında bir ilüzyon yaratabilirsiniz.
(1) üzerinde olunan boyama pulun aynı büyüklüğünde bir shape'i o an create edilir
(2) taşıma işlemi görseli bununla yapılır.
(3) sonunda o shape free edilir,
(4) tasınan yere canvas operasyonu ile yeni pul resmi çizilebilir.
Eline sağlık.

Oyun gibi düşününce taşları hareket ettirmek noktasında bir ilüzyon yaratabilirsiniz.
(1) üzerinde olunan boyama pulun aynı büyüklüğünde bir shape'i o an create edilir
(2) taşıma işlemi görseli bununla yapılır.
(3) sonunda o shape free edilir,
(4) tasınan yere canvas operasyonu ile yeni pul resmi çizilebilir.
Re: 9 Taş ufak bi sorun
Hoşgeldiniz @mrmarman. Artık oyunun tamamlanması işten bile değil 

Ömür Ölmez
Re: 9 Taş ufak bi sorun
- Keşke oyun olsaydı, arkadaşın okul ödeviymiş de. Daha önce görüşmemiz oldu.
Tabii iki ayrı forumda başlık açılır da diğerinde sorun çözülürse, burası da öksüz kalıyor.
Bkz.DelphiDunyası.NET
Tabii iki ayrı forumda başlık açılır da diğerinde sorun çözülürse, burası da öksüz kalıyor.

Bkz.DelphiDunyası.NET
-
- Üye
- Mesajlar: 2
- Kayıt: 28 Ara 2013 04:47
Re: 9 Taş ufak bi sorun
Hepinize teşekkür ediyorum yardımlarınız için fakat muharrem abicim olayı noktaladı ve şöyle bişeyde var konuyu actıktan 7 saat sonra buraya eklenmiş o yüzden böyle bi sıkıntı oluştu 
