GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi

array problematiği.

Başlatan lastmuchanos, 23 Mart 2022, 00:09:32

« önceki - sonraki »

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

lastmuchanos

Selamlar, bir problemim var bunu sizinle paylaşmak istedim..

Bir sistem düşünün, bir dizin bahçemiz var ve bu bahçeleri bir kod bloğu içerisinde oyunculara satacağız. Detay; bahçe verilerini tutan bir enum var, ve bir array.. Bu array'de bahçenin posları yazıyor, yani ben tanıtıyorum, bir bahçeye sadece bir kişi sahip olabiliyor, yanii bahçe birisine satılınca, enum içerisinde duran bool değerim, true'ya dönüyor.
Örnek kodlar;

enum Bos_Bahce
{
Float: baPosX,
Float: baPosY,
Float: baPosZ,
bool: kullanim
};

new RandomBahceler[3][Bos_Bahce] =
{
{-1159.5569, -1113.5679, 128.2656},
{1550.1328, -28.8244, 21.3337},
{-391.1916, -1150.3652, 69.4478}
};


Buraya kadar bu şekilde, şimdi bir kod bloğu içerisinde satıldığını farz edelim.

cmd:bahcesat(playerid, params[])
{
   koşullar sorgular vesayre...
   for(new i = 0; i != sizeof(RandomBahceler); i++)
   {
      if(!RandomBahceler[i][kullanim])
      {
           RandomBahceler[i][kullanim] = true // artık diğer insanlar tarafından satın alınamaz..
           diğer kod satıları vs..
           return i;
      }
      else  {
         SendClientMessage(playerid, -1, "Şu an satılacak bir arsa yok.");
   }
   return -1;
}

Bu şekilde, şimdi denediğim zaman şu şekilde bir problem oluşuyor. bahcesat komutunu çağırdığımızı farz edelim, döngü girdi değeri false olan bir bahçeyi aldı ve aşağıda true'ya çevirdi. Evet, bu sadece bir bahçede olması gerekiyor, fakat array'da belirttiğim tüm bahçeler true'ya dönüyor, yani artık satılacak bir bahçe kalmamış oluyor.. Ve farklı bir kişiye satmaya çalışınca ya da farklı bir kişi bahçeyi almaya çalışınca else bloğu devreye giriyor.. Hatanın nerede olduğu konusunda yardımlarınızı bekliyorum. Kişisel fikrim, dönen değerlerde bir problem yapıyorum, return değerini ne olarak vermem gerekiyor? Bu konuda hata yapıyorum sanırım.. Yardımlarınız için çok teşekkür ederim, iyi günler..
Son düzenlenme: 23 Mart 2022, 00:11:11 lastmuchanos

Murat Budak

Telefondan yazdım düzeltebilirsin..
Arrayı 3 yerine #define MAX_BAHCE 3 yap
PAWN Kodu: Seç
stock BahceBosArrayID()
{
for (new i; i < MAX_BAHCE; i++) if (RandomBahceler[i][kullanim] == false)
{
return i;
}
return -1;
}

PAWN Kodu: Seç
cmd:bahcesat(playerid, params[])
{
new id;
if ((id = BahceBosArrayID()) == -1) return hatamesajı
RandomBahceler[id][kullanim] = true;
  return 1;
}
Son düzenlenme: 23 Mart 2022, 00:48:32 Murat Budak

squarepants

Alternatif :

cmd:bahcesat(playerid, params[])
{
   for(new i = 0; i != sizeof(RandomBahceler); i++)
   {
      if(!RandomBahceler[i][kullanim])
      {
           RandomBahceler[i][kullanim] = true;
           goto SON_DONGU;
      }
      else  { SendClientMessage(playerid, -1, "Şu an satılacak bir arsa yok."); }
   }
   SON_DONGU:
   return 1;
}


lastmuchanos

Alıntı yapılan: Murat Budak - 23 Mart 2022, 00:41:20
Telefondan yazdım düzeltebilirsin..
Arrayı 3 yerine #define MAX_BAHCE 3 yap
PAWN Kodu: Seç
stock BahceBosArrayID()
{
for (new i; i < MAX_BAHCE; i++) if (RandomBahceler[i][kullanim] == false)
{
return i;
}
return -1;
}

PAWN Kodu: Seç
cmd:bahcesat(playerid, params[])
{
new id;
if ((id = BahceBosArrayID()) == -1) return hatamesajı
RandomBahceler[id][kullanim] = true;
  return 1;
}
Minnettarım, eve geçince bir bakacağım..


lastmuchanos

Alıntı yapılan: ThePosition - 23 Mart 2022, 14:43:42
Alternatif :

cmd:bahcesat(playerid, params[])
{
   for(new i = 0; i != sizeof(RandomBahceler); i++)
   {
      if(!RandomBahceler[i][kullanim])
      {
           RandomBahceler[i][kullanim] = true;
           goto SON_DONGU;
      }
      else  { SendClientMessage(playerid, -1, "Şu an satılacak bir arsa yok."); }
   }
   SON_DONGU:
   return 1;
}

for döngüsü içerisinde goto kullanmayı akıl edememek benim salaklığım oldu biraz sanırım.. çok teşekkürler.