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. |
Oluşturduğum program çalışmıyor |
Yanıt Yaz |
Yazar | |
zeynepsimsek
Deneyimli Üye Kayıt Tarihi: 26 Temmuz 2024 Konum: Konya, Türkiye Durum: Aktif Değil Puanlar: 59 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı zeynepsimsek
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
Gönderim Zamanı: 31 Temmuz 2024 Saat 10:29 |
Şişe çevirmece oyunu tasarlıyorum. Programın önce kişi sayısını alması sonra ise isimlerin girilmesini istemesi gerekiyor(İsimleri alan kodu yazamadım). Sonra oyun başlar ve şişe döner, bir zaman sonra durur ve seçilen kişiyi gösterir. Kodum çalışmıyor. Algoritma kurma kısmında hata mı yapıyorum? var MyForm: TclGameForm; bottleImg: TClProImage; spinnerTimer: TClTimer; selectedPerson: string; persons: array of string; spinSpeed: Integer; isSpinning: Boolean; personCount , i , index , angle :Integer; personCountInput: TClEdit; startButton: TClProButton; personCountLabel: TCLProLabel; procedure InitializeGame; begin MyForm = TclGameForm.Create(Self); MyForm.SetFormColor('#f1e9e9', '#7893b0', MyForm); // Kişi sayısı girişi personCountLabel := MyForm.AddNewProLabel(MyForm, 'personCountLabel', 'Enter number of people:'); ClRTSetProperty(personCountLabel, 'Top', 50); ClRTSetProperty(personCountLabel, 'Left', 50); personCountInput := MyForm.AddNewEdit(MyForm, 'personCountInput',''); ClRTSetProperty(personCountInput, 'Top', 80); ClRTSetProperty(personCountInput, 'Left', 50); ClRTSetProperty(personCountInput, 'Width', 100); startButton := MyForm.AddNewProButton(MyForm, 'startButton', 'Start Game'); ClRTSetProperty(startButton, 'Top', 120); ClRTSetProperty(startButton, 'Left', 50); MyForm.AddNewEvent(startButton, tbeOnClick, 'OnClickStartButton'); MyForm.RunModal; end; procedure StartGame; begin personCount := StrToInt(personCountInput.Text); if personCount <= 0 then begin ShowMessage('Please enter a valid number of people.'); Exit; end SetLength(persons, personCount); for i := 0 to personCount - 1 do begin persons := 'Person' + IntToStr(i + 1); end // Şişe resmi bottleImg := MyForm.AddNewProImage(MyForm, 'bottleImg'); MyForm.setImage(bottleImg, 'https://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Bouteille.jpg/800px-Bouteille.jpg'); bottleImg.Align := alCenter; bottleImg.Width := 200; bottleImg.Height := 300; // Timer ayarları spinnerTimer := MyForm.AddNewTimer(MyForm, 'spinnerTimer', 10); // Timer her 10ms'de bir çalışır spinnerTimer.Enabled := False; MyForm.AddNewEvent(spinnerTimer, tbeOnTimer, 'OnSpinTimer'); // Oyun başlat isSpinning := False; StartSpin; end procedure StartSpin; begin if not isSpinning then begin isSpinning := True; spinSpeed := 30; // Başlangıç dönme hızı spinnerTimer.Enabled := True; end end procedure StopSpin; begin if isSpinning then begin isSpinning := False; spinnerTimer.Enabled := False; // Şişenin hangi kişiyi işaret ettiğini bulur angle := bottleImg.RotationAngle; index := Round((angle mod 360) / (360 / Length(persons))); selectedPerson := persons[index]; ShowSelectedPerson(selectedPerson); end end procedure OnSpinTimer; begin if isSpinning then begin // Şişeyi döndür bottleImg.RotationAngle := bottleImg.RotationAngle + spinSpeed; spinSpeed := spinSpeed * 0.98; // Dönme hızını yavaşlatır if spinSpeed < 1 then begin StopSpin; end end end procedure ShowSelectedPerson(person: string); begin ShowMessage('Selected Person: ' + person); // Burada seçilen kişiye göre bir görev veya soru sorulur end procedure OnClickStartButton; begin StartGame; end StartGame; end |
|
OlgunAgac
Kıdemli Üye Kayıt Tarihi: 25 Mayıs 2024 Konum: Konya Durum: Aktif Değil Puanlar: 125 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı OlgunAgac
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
Öncelikle ana kod bloğu göremedim ben. Bunun dışında tanımladığınız procedurleri çağırmadan önce tanımlanmış olması gerek. Üstünde bulunan StartGame proceduründen altında bulunan startSpin çağrılamaz.
|
|
Dünden bugüne süren sonu olmayan yolculuk.
|
|
zeynepsimsek
Deneyimli Üye Kayıt Tarihi: 26 Temmuz 2024 Konum: Konya, Türkiye Durum: Aktif Değil Puanlar: 59 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı zeynepsimsek
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
begin InitializeGame; end olarak sona eklediğimde fonksiyonların tek tek çalışmaya başlaması gerekmiyor mu
|
|
zeynepsimsek
Deneyimli Üye Kayıt Tarihi: 26 Temmuz 2024 Konum: Konya, Türkiye Durum: Aktif Değil Puanlar: 59 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı zeynepsimsek
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
'Bunun dışında tanımladığınız procedurleri çağırmadan önce tanımlanmış olması gerek. Üstünde bulunan StartGame proceduründen altında bulunan startSpin çağrılamaz.'
burada neyden bahsettiğinizi tam anlayamadım
|
|
OlgunAgac
Kıdemli Üye Kayıt Tarihi: 25 Mayıs 2024 Konum: Konya Durum: Aktif Değil Puanlar: 125 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı OlgunAgac
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
procedure birinciProc
begin end procedure ikinciProc begin end Bu sıralamayla procedür tanımlandığında birinciProc içerisinde ikinciProc çağrılamaz. Kod bloğu yukarıdan aşağı doğru işlem gördüğü için birinciProc çağırmaya çalıştığında henüz ikinciProc tanımlanmamış olmakta. Eğer en sondaki ana kod bloğuna eklerseniz çalışır çünkü sonda, fakat kodunuzda kendisinden sonra tanımlanan procedürlerin çağrıldığını görmekteyim.
|
|
Dünden bugüne süren sonu olmayan yolculuk.
|
|
zeynepsimsek
Deneyimli Üye Kayıt Tarihi: 26 Temmuz 2024 Konum: Konya, Türkiye Durum: Aktif Değil Puanlar: 59 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı zeynepsimsek
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
peki persons dizisinin uzunluğunu personCount değerine ayarlayabilecek bir hazır fonksiyon var mı ? length fonksiyonu burada işime yaramıyor.
|
|
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 Zeynep,
Dizi yapısını kullanmak için şu linki inceler misin:
|
|
zeynepsimsek
Deneyimli Üye Kayıt Tarihi: 26 Temmuz 2024 Konum: Konya, Türkiye Durum: Aktif Değil Puanlar: 59 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı zeynepsimsek
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
aradığımı buldum teşekkürler
|
|
zeynepsimsek
Deneyimli Üye Kayıt Tarihi: 26 Temmuz 2024 Konum: Konya, Türkiye Durum: Aktif Değil Puanlar: 59 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı zeynepsimsek
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
|
var MyForm: TclGameForm; bottleImg: TClProImage; spinnerTimer: TClTimer; selectedPerson: string; persons: TClArrayString; spinSpeed: Integer; isSpinning: Boolean; personCount, i, index, angle: Integer; personCountInput: TClEdit; startButton: TClProButton; personCountLabel: TCLProLabel; // Prosedürlerin ön bildirimleri procedure InitializeGame; procedure StartGame; procedure StartSpin; procedure StopSpin; procedure OnSpinTimer; procedure ShowSelectedPerson(person: string); procedure OnClickStartButton; // Ana kod bloğu begin InitializeGame; end procedure InitializeGame; begin MyForm := TclGameForm.Create(Self); MyForm.SetFormColor('#f1e9e9', '#7893b0', MyForm); // Kişi sayısı girişi personCountLabel := MyForm.AddNewProLabel(MyForm, 'personCountLabel', 'Enter number of people:'); ClRTSetProperty(personCountLabel, 'Top', 50); ClRTSetProperty(personCountLabel, 'Left', 50); personCountInput := MyForm.AddNewEdit(MyForm, 'personCountInput', ''); ClRTSetProperty(personCountInput, 'Top', 80); ClRTSetProperty(personCountInput, 'Left', 50); ClRTSetProperty(personCountInput, 'Width', 100); startButton := MyForm.AddNewProButton(MyForm, 'startButton', 'Start Game'); ClRTSetProperty(startButton, 'Top', 120); ClRTSetProperty(startButton, 'Left', 50); MyForm.AddNewEvent(startButton, tbeOnClick, 'OnClickStartButton'); MyForm.RunModal; end procedure StartGame; begin personCount := StrToInt(personCountInput.Text); if personCount <= 0 then begin ShowMessage('Please enter a valid number of people.'); Exit; end persons := TClArrayString.Create; for i := 0 to personCount - 1 do begin persons.Add('Person' + IntToStr(i + 1)); end // Şişe resmi bottleImg := MyForm.AddNewProImage(MyForm, 'bottleImg'); MyForm.setImage(bottleImg, 'https://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Bouteille.jpg/800px-Bouteille.jpg'); bottleImg.Align := alCenter; bottleImg.Width := 200; bottleImg.Height := 300; // Timer ayarları spinnerTimer := MyForm.AddNewTimer(MyForm, 'spinnerTimer', 10); // Timer her 10ms'de bir çalışır spinnerTimer.Enabled := False; MyForm.AddNewEvent(spinnerTimer, tbeOnTimer, 'OnSpinTimer'); // Oyun başlat isSpinning := False; StartSpin; end procedure StartSpin; begin if not isSpinning then begin isSpinning := True; spinSpeed := 30; // Başlangıç dönme hızı spinnerTimer.Enabled := True; end end procedure StopSpin; begin if isSpinning then begin isSpinning := False; spinnerTimer.Enabled := False; // Şişenin hangi kişiyi işaret ettiğini bulur angle := bottleImg.RotationAngle; index := Round((angle mod 360) / (360 / persons.Count)); selectedPerson := persons.GetItem(index); ShowSelectedPerson(selectedPerson); // Burada prosedürü çağırıyoruz end end procedure OnSpinTimer; begin if isSpinning then begin // Şişeyi döndür bottleImg.RotationAngle := bottleImg.RotationAngle + spinSpeed; spinSpeed := spinSpeed * 0.98; // Dönme hızını yavaşlatır if spinSpeed < 1 then begin StopSpin; end end end procedure ShowSelectedPerson(person: string); begin ShowMessage('Selected Person: ' + person); // Burada seçilen kişiye göre bir görev veya soru sorulur end procedure OnClickStartButton; begin StartGame; end söylediğiniz gibi prosedür tanımlarını yaptım sıralamaları düzeltmeye çalıştım .dizi yapısını da düzelttiğimi düşünüyorum. ama hala çalıştıramıyorum. hatam nerede yardımcı olur musunuz ?
|
|
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 Zeynep
Hatanın resmini atar mısın?
|
|
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 |