Clomosy | Forum Ana Sayfa
Forum Anasayfa Forum Anasayfa > Genel Programlama > Genel İşlemler
  Aktif Konular Aktif Konular RSS - Oluşturduğum program çalışmıyor
  SSS SSS  Forumu Ara   Etkinlikler   Kayıt Ol Kayıt Ol  Giriş Giriş

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 Yanıt Yaz
Yazar
Mesaj
  Konu Arama Konu Arama  Topic Seçenekleri Topic Seçenekleri
zeynepsimsek Açılır Kutu İzle
Deneyimli Üye
Deneyimli Üye
Simge

Kayıt Tarihi: 26 Temmuz 2024
Konum: Konya, Türkiye
Durum: Aktif Değil
Puanlar: 59
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı zeynepsimsek Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: Oluşturduğum program çalışmıyor
    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');
  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

Yukarı Dön
OlgunAgac Açılır Kutu İzle
Kıdemli Üye
Kıdemli Üye
Simge

Kayıt Tarihi: 25 Mayıs 2024
Konum: Konya
Durum: Aktif Değil
Puanlar: 125
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı OlgunAgac Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 31 Temmuz 2024 Saat 11:47
Ö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.
Yukarı Dön
zeynepsimsek Açılır Kutu İzle
Deneyimli Üye
Deneyimli Üye
Simge

Kayıt Tarihi: 26 Temmuz 2024
Konum: Konya, Türkiye
Durum: Aktif Değil
Puanlar: 59
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı zeynepsimsek Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 31 Temmuz 2024 Saat 12:04
begin
  InitializeGame;
end 

olarak sona eklediğimde fonksiyonların tek tek çalışmaya başlaması gerekmiyor mu 
Yukarı Dön
zeynepsimsek Açılır Kutu İzle
Deneyimli Üye
Deneyimli Üye
Simge

Kayıt Tarihi: 26 Temmuz 2024
Konum: Konya, Türkiye
Durum: Aktif Değil
Puanlar: 59
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı zeynepsimsek Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 31 Temmuz 2024 Saat 12:13
'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
Yukarı Dön
OlgunAgac Açılır Kutu İzle
Kıdemli Üye
Kıdemli Üye
Simge

Kayıt Tarihi: 25 Mayıs 2024
Konum: Konya
Durum: Aktif Değil
Puanlar: 125
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı OlgunAgac Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 31 Temmuz 2024 Saat 12:40
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.
Yukarı Dön
zeynepsimsek Açılır Kutu İzle
Deneyimli Üye
Deneyimli Üye
Simge

Kayıt Tarihi: 26 Temmuz 2024
Konum: Konya, Türkiye
Durum: Aktif Değil
Puanlar: 59
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı zeynepsimsek Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 31 Temmuz 2024 Saat 14:42
peki persons dizisinin uzunluğunu personCount değerine ayarlayabilecek bir hazır fonksiyon var mı ? length fonksiyonu burada işime yaramıyor. 
Yukarı Dön
Developer Açılır Kutu İzle
Forum Yöneticisi
Forum Yöneticisi


Kayıt Tarihi: 14 Haziran 2023
Durum: Aktif Değil
Puanlar: 354
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı Developer Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 31 Temmuz 2024 Saat 14:59
Merhaba Zeynep,
Dizi yapısını kullanmak için şu linki inceler misin:
Yukarı Dön
zeynepsimsek Açılır Kutu İzle
Deneyimli Üye
Deneyimli Üye
Simge

Kayıt Tarihi: 26 Temmuz 2024
Konum: Konya, Türkiye
Durum: Aktif Değil
Puanlar: 59
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı zeynepsimsek Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 31 Temmuz 2024 Saat 15:13
aradığımı buldum teşekkürler
Yukarı Dön
zeynepsimsek Açılır Kutu İzle
Deneyimli Üye
Deneyimli Üye
Simge

Kayıt Tarihi: 26 Temmuz 2024
Konum: Konya, Türkiye
Durum: Aktif Değil
Puanlar: 59
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı zeynepsimsek Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 31 Temmuz 2024 Saat 15:43
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');
  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 ?
Yukarı Dön
Developer Açılır Kutu İzle
Forum Yöneticisi
Forum Yöneticisi


Kayıt Tarihi: 14 Haziran 2023
Durum: Aktif Değil
Puanlar: 354
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı Developer Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 05 Ağustos 2024 Saat 14:08
Merhaba Zeynep 
Hatanın resmini atar mısın?
Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Kutu İzle

Forum Software by Web Wiz Forums® version 12.07
Copyright ©2001-2024 Web Wiz Ltd.

Bu Sayfa 0,043 Saniyede Yüklendi.