Clomosy Resmi Forum Sitesidir. Amacımız kullanıcılarımıza, iş ortaklarımıza, danışmanlara, yazılımcılara programlarımız hakkında destek ve bilgi vermektir. |
Random Yer Değiştirme |
Yanıt Yaz |
Yazar | |
emre.gungor01
Deneyimli Üye Kayıt Tarihi: 03 Mayıs 2024 Konum: Konya Durum: Aktif Değil Puanlar: 46 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı emre.gungor01
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
Gönderim Zamanı: 12 Mayıs 2024 Saat 18:18 |
Merhabalar;
Clomosy Kitap'tan ve github kodlarından bakmaya çalıştım fakat bir bilgi sahibi olamadım projemde orta noktada bulunan yuvarlağımı içindeki label bastığımda 25 olunca ekranda random bir yere atamasını istiyorum fakat nasıl yapacağım hakkında bir şey bulamadım; kodlar; Var AnaForm:TclForm; btn1 : TClProButton; Zaman : TCLTimer; sayac:Integer; Zaman2:TCLTimer; sayac1:Integer; lblTimer: TCLLabel; void zamanlayici; { if(sayac == sayac) { sayac = sayac + 1; Zaman.Enabled = False; btn1.Text = IntToStr(sayac); if(sayac == 25) { AnaForm.SetFormColor('#23c7c5','',clGNone); sayac1 = sayac1 + 3; btn1.Position.Y = btn1.Position.Y + 30; //KONUM } } else { btn1.Text = IntToStr(sayac); sayac = sayac + 1; } } void sure; { if(sayac1 == 0) { Zaman2.Enabled = False; lblTimer.caption = IntToStr(sayac1); ShowMessage('Süreniz Doldu!'); if(btn1 == 2) { Zaman2.Enabled= False; lblTimer.caption = IntToStr(sayac1); } } else { lblTimer.caption=IntToStr(sayac1); Dec(sayac1); } } { sayac=0; sayac1=20; AnaForm = TclForm.Create(Self); Zaman= AnaForm.AddNewTimer(AnaForm,'Zaman',1000); Zaman.Enabled = True; AnaForm.AddNewEvent(Zaman,tbeOnTimer,'zamanlayici'); Zaman2=AnaForm.AddNewTimer(AnaForm,'Zaman2',1000); Zaman2.Enabled=True; AnaForm.AddNewEvent(Zaman2,tbeOnTimer,'sure'); lblTimer=AnaForm.AddNewLabel(AnaForm,'lblTimer',''); lblTimer.StyledSettings = ssFamily; lblTimer.TextSettings.Font.Size = 35; lblTimer.Align = alTop; lblTimer.Height=50; lblTimer.Width=50; lblTimer.Margins.Left = 170; AnaForm.SetFormColor('#52504d','',clGNone); btn1 = AnaForm.AddNewProButton(AnaForm,'btn1','SAYAC'); btn1.Align = alCenter; btn1.Position.Y=0; // konum. btn1.Width = 100; btn1.Height = 100; btn1.clProSettings.BorderColor = clAlphaColor.clHexToColor('#a0a3b1'); btn1.clProSettings.FontColor = clAlphaColor.clHexToColor('#050505'); btn1.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#ffffff'); btn1.clProSettings.IsTransparent = False; btn1.clProSettings.FontSize = 12; btn1.clProSettings.FontVertAlign = palcenter;//palLeading , palCenter , palTrailing btn1.clProSettings.FontHorzAlign = palCenter; btn1.clProSettings.IsFill = True; btn1.clProSettings.IsRound = True; btn1.clProSettings.RoundHeight = 50; btn1.clProSettings.RoundWidth = 50; btn1.clProSettings.BorderWidth = 3; btn1.SetclProSettings(btn1.clProSettings); AnaForm.AddNewEvent(btn1,tbeOnClick,'zamanlayici'); AnaForm.AddNewEvent(lblTimer,tbeOnClick,'sure'); AnaForm.Run; } |
|
BilalCndn
Forum Yöneticisi Kayıt Tarihi: 09 Ekim 2023 Durum: Aktif Değil Puanlar: 150 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı BilalCndn
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
Merhaba Emre,
Doküman sayfasından (https://www.docs.clomosy.com/index.php/Random) random hakkında bilgi sahibi olabilirsin. Koda gelecek olursak öncelikle bir nesneye 'Align' özelliği verdiğin zaman o nesneyi sabitlemiş oluyorsun. Butonun da 'Align' özelliğine 'alCenter' ataması yaptığınızda butonu bulunduğu nesnenin merkezine sabitlemiş oluyorsunuz. Bu durum butonun pozisyonunu manuel olarak değiştirmenize engel oluyor. Pozisyonda değişiklik yapabilmek için 'Align' özelliğine 'alNone' ataması yapmalısınız. Artık butonu hareket ettirebildiğimize göre gelelim 'Random' konusuna. Clomosy'de 'Random' özelliği 0 ile 1 arasında rastgele bir sayı üretir. Yani siz 0 ile 100 arasında bir sayı üretmesini istiyorsanız 'Random' özelliğini 100 ile çarpmalısınız. Kodunda yaptığım düzenlemelerde formun boyutları ile çarptım. Bu durumda nesne form içerisinde rasgele bir konuma gelebilecek. Fakat nesnenin bir kısmının form dışına çıkma ihtimali var. Bu problemin çözümünü sana bıraktım ama çözemezsen sormaktan çekinme. Ayrıca nesnenin 'Align' özelliğini 'alNone' olarak belirlediğimiz için başlangıç pozisyonunu senin istediğin gibi ortalamak istedim. Bu kod da sana az önce bahsettiğim problemin çözümü için ipucu olmuş olacak. Kodun düzenlenmiş hali:
Sorunun çözüme ulaşıp ulaşmadığı ile ilgili geri dönüşünü bekliyorum. İyi çalışmalar diliyorum. |
|
emre.gungor01
Deneyimli Üye Kayıt Tarihi: 03 Mayıs 2024 Konum: Konya Durum: Aktif Değil Puanlar: 46 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı emre.gungor01
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
evet işime yaradı fakat taşma sorununu bulamadım.
|
|
BilalCndn
Forum Yöneticisi Kayıt Tarihi: 09 Ekim 2023 Durum: Aktif Değil Puanlar: 150 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı BilalCndn
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
Merhaba Emre,
Bu sorunu çözebilmemiz için öncelikle nesnelerin pozisyonlarının nasıl çalıştığını anlamalıyız. Görselde gördüğün gibi bir formun sol üst köşesi (0x0) pozisyonunda oluyor. Sağ üst köşesi (formun genişliği x 0) sol alt köşesi (0 x formun yüksekliği) sağ alt köşesi ise (formun genişliği x formun yüksekliği) oluyor. Aynı durum görsel nesneler için de geçerli. Bu durumda dairenin konumunu sol üst köşesine göre alıyoruz. Şimdi taşma durumlarını inceleyelim. Görselde gördüğün gibi nesnenin pozisyonu formun sınırları dahilinde olmasına rağmen nesne bir miktar formun dışında kalabiliyor. Şimdi senin kodun üzerinde bu duruma çözüm getirelim.
Bu kodda form sınırları dahilinde olacak şekilde bir random sayı üretiyoruz.(Bu kısmı daha önce yapmıştık zaten) Ürettiğimiz sayıdan nesnenin uzunluğunu çıkarıyoruz. Bu durum bizim için sağdan ve alttan taşmaları önlüyor. Fakat random sayı nesnenin uzunluğundan düşük bir sayı gelirse bu sefer pozisyon negatif olacağı için soldan ya da üstten taşmalar olacaktır. Bu durumu düzeltmek için de çıkan sayıyı 'Abs' fonksiyonu içerisine alıyoruz. 'Abs' fonksiyonu sayının mutlak değerini aldığı için negatif bir sayı çıkma ihtimali de ortadan kalkıyor. Bu şekilde nesnenin formun dışına taşmasını da engellemiş oluyoruz. Sorunun çözüme ulaşıp ulaşmadığı ile ilgili geri dönüşünü bekliyorum. İyi çalışmalar diliyorum.
|
|
emre.gungor01
Deneyimli Üye Kayıt Tarihi: 03 Mayıs 2024 Konum: Konya Durum: Aktif Değil Puanlar: 46 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı emre.gungor01
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
Teşekkür ederim sorunum çözüldü ve açıklamayı güzel yaptığınız için ayrı teşekkür ederim sade ve anlaşılır.
|
|
emre.gungor01
Deneyimli Üye Kayıt Tarihi: 03 Mayıs 2024 Konum: Konya Durum: Aktif Değil Puanlar: 46 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı emre.gungor01
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
Merhabalar;
Kod yazdım fakat çalışmıyor hatayı da tam çözemedim. Yardımcı olabilir misiniz? Kodlar; Var AnaForm:TclForm; btn1 : TClProButton; Zaman : TCLTimer; sayac:Integer; RndmTimer: TClTimer; colorArray : array of String; oyunzaman:TCLTimer; sayac1:Integer; lblTimer: TCLLabel; testImg: TCLImage; //random yerlerde belirli zamanda görsel çıkartıyor. //EKSURE İÇİN KULLANDIM. void randomColor; var randmDeger: Integer; { colorArray = ['#26cf3a','#ff780a','#9a7de8','#813b3b','#a664c4','#6492c4','#81c464']; randmDeger = clMath.GenerateRandom(0,6); AnaForm.SetFormColor(colorArray[randmDeger],'',clGNone); } /* void randomPosition; //Random Position değiştirmesi için oluşturuldu. { btn1.Position.X = Abs((Random() * AnaForm.clWidth) - btn1.Width); btn1.Position.Y = Abs((Random() * AnaForm.clHeight) - btn1.Height); } */ void eksure //Ekranın ortasındaki sayı 25 veya büyük olunca çıkması için yapıldı. { if(IntToStr(btn1.Text) > 25) { testImg.visible=False; sayac1 = sayac1+5; } } void zamanlayici; { if (sayac >= 100) { RndmTimer.Enabled = True; } btn1.Text = IntToStr(sayac); sayac = sayac + 1; oyunzaman.Enabled=True; btn1.Text = IntToStr(sayac); if(sayac == 25) { AnaForm.SetFormColor('#23c7c5','',clGNone); sayac1 = sayac1 + 3; btn1.Position.X = Abs((Random() * AnaForm.clWidth) - btn1.Width); btn1.Position.Y = Abs((Random() * AnaForm.clHeight) - btn1.Height); testImg.Position.X = Abs((Random() * AnaForm.clWidth) - testImg.Width); testImg.Position.Y = Abs((Random() * AnaForm.clHeight) - testImg.Height); testImg.visible=True; } if(sayac == 72) { AnaForm.SetFormColor('#e01f1f','',clGNone); sayac1 = sayac1 + 5; btn1.Position.X = Abs((Random() * AnaForm.clWidth) - btn1.Width); btn1.Position.Y = Abs((Random() * AnaForm.clHeight) - btn1.Height); testImg.Position.X = Abs((Random() * AnaForm.clWidth) - testImg.Width); testImg.Position.Y = Abs((Random() * AnaForm.clHeight) - testImg.Height); testImg.visible=True; } if(sayac == 100) { AnaForm.SetFormColor('#cfeb00','#db7edd',clGHorizontal); sayac1 = sayac1 + 7; btn1.Position.X = Abs((Random() * AnaForm.clWidth) - btn1.Width); btn1.Position.Y = Abs((Random() * AnaForm.clHeight) - btn1.Height); testImg.Position.X = Abs((Random() * AnaForm.clWidth) - testImg.Width); testImg.Position.Y = Abs((Random() * AnaForm.clHeight) - testImg.Height); testImg.visible=True; } //1. if (sayac >= 127) { AnaForm.SetFormColor('#ffae00','',clGNone); randomPosition(); RndmTimer.Enabled = False; } btn1.Text = IntToStr(sayac); //2. if (sayac == 134) { RndmTimer.Enabled = True; randomPosition(); } btn1.Text = IntToStr(sayac); //3. /* // random position için fonksiyon if(sayac >= 137 && sayac <= 155) { randomPosition(); } */ //4. if (sayac >= 156) { AnaForm.SetFormColor('#16cce3','',clGNone); RndmTimer.Enabled = False; } btn1.Text = IntToStr(sayac); } Burada bulunan yorum satırları içerisine aldığım (/* */) yerlerde void randomPosition; diye parametre atadım ve kod bloğunda ise if(sayac >= 137 && sayac <= 155) bunu yazdım benim ortadaki sayacım sürekli 155'ten küçük olduğu içinde random olarak yer değiştiriyor, fakat ben sadece 137 sayısıyla 155 sayıları arasında random olarak yer değiştirmesini istiyorum kopyala yapıştır yaparak yer değiştirebilirdim fakat daha kolay olması ve yer kaplamaması adına void randomPosition; parametresini oluşturdum. Sizce nasıl yapabilirim?
|
|
Developer
Forum Yöneticisi Kayıt Tarihi: 14 Haziran 2023 Durum: Aktif Değil Puanlar: 354 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı Developer
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
Merhaba Emre
Aldığın hatanın resmini atar mısın |
|
emre.gungor01
Deneyimli Üye Kayıt Tarihi: 03 Mayıs 2024 Konum: Konya Durum: Aktif Değil Puanlar: 46 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı emre.gungor01
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
Kodlarımı öyle yapsam da çalışıyor yani hata almıyorum sadece istediğim sonucu alamadım.
1.Kod; /* void randomPosition; //Random Position değiştirmesi için oluşturuldu. { btn1.Position.X = Abs((Random() * AnaForm.clWidth) - btn1.Width); btn1.Position.Y = Abs((Random() * AnaForm.clHeight) - btn1.Height); } */ 2.Kod; /* // random position için fonksiyon if(sayac >= 137 && sayac <= 155) { randomPosition(); } */ Ben bunu yazdığımda sayacımın içerisindeki sayı 155'ten küçük olduğu için sürekli yer değiştiriyor. Bastığımda 1 olduğunda 2 olduğunda 3 diye gidiyor ta ki bu 155'e kadar sürekli yer değiştiriyor fakat ben 137 sayısıyla 155 sayıları arasında random yer değiştirmesini istemiştim. |
|
Yanıt Yaz | |
Tweet |
Forum Atla | Forum İzinleri Kapalı Foruma Yeni Konu Gönderme Kapalı Forumdaki Konulara Cevap Yazma Kapalı Forumda Cevapları Silme Kapalı Forumdaki Cevapları Düzenleme Kapalı Forumda Anket Açma Kapalı Forumda Anketlerde Oy Kullanma |