hlmod.hu
https://hlmod.hu/

Tömb dimenziós felsorolás
https://hlmod.hu/viewtopic.php?f=9&t=29835
Oldal: 1 / 1

Szerző:  Vieni [ 2019.04.05. 17:44 ]
Hozzászólás témája:  Tömb dimenziós felsorolás

Sziasztok,
Éppen egy körvégi zene pluginon dolgozom, ahova szeretnék a listából random 20 számot kiválasztani minden pályaváltáskor.
A problémám az volna, hogy így próbáltam megoldani:

Kód:
   for(new i; i < 20; i++)
   {
      musics[i] = random_num(0, sizeof(music_list))
      
      if(i == 0)
         continue
      
      while(musics[i] == musics[(0..i-1)])
         musics[i] = random_num(0, sizeof(music_list))
   }


csakhogy a "0..i-1" rész nem működik, mivel dimenzióban nem lehet így felsorolni.
Kérdésem az volna, hogy ez lehetséges-e valami más módon(a felsorolás maga)

Szerző:  Dooz [ 2019.04.05. 19:43 ]
Hozzászólás témája:  Re: Tömb dimenziós felsorolás

Üdv. Parancsolj. Nem teszteltem, de ha bármiféle gond adódna, akkor írj. Megpróbáltam részletesen leírni, hogy mi mit csinál.

  1. //Az első változó azt fogja tárolni, hogy ki van-e választva már az illető szám, azaz ne legyen kétszer úgyan az kiválasztva
  2. //A második a 20 zenének az azonosítóját fogja tárolni, azaz a const-ban, hogy hányadik.
  3. new g_iMusic_Already_Choosed[sizeof(g_cMusic_List)], g_iChoosed_Musics_Id[20];
  4.  
  5. public plugin_init(){
  6.     new iSize = sizeof(g_cMusic_List);
  7.     //Minden map elején beállítjuk, hogy egyik szám sincs kiválasztva.
  8.     for(new iNum; iNum < iSize; iNum++)
  9.         g_iMusic_Already_Choosed[iNum] = 0;
  10.    
  11.     //Meghívjuk a függvényünket, amely kiválasztja a 20 véletlenszerü számot.
  12.     Choose_Random_Musics();
  13. }
  14.  
  15. public Choose_Random_Musics(){
  16.     //Lekezeljük azt a hiba lehetőséget, hogy ha kevesebb szám van mint 20, akkor ne generáljon egyet sem, mivel végtelen ciklusba fog lépni, ettől meg kifagy a szerver.
  17.     if(sizeof(g_cMusic_List) < 20){
  18.         set_fail_state("Legalább 20 számot kell tartalmaznia a const-nak!");
  19.         return; //Lehetséges, hogy a return nem kell ide, mivel a set_fail_state miatt leáll a plugin.
  20.     }
  21.  
  22.     new iMusic_Id;
  23.     for(new iNum; iNum < 20; iNum++){
  24.         //Addig generálja a véletlenszerü számokat a const-ból, amig talál egy olyant, ami még nincs kiválasztva.
  25.         do{
  26.             iMusic_Id = random_num(0, sizeof(g_cMusic_List) - 1);
  27.         }while(g_iMusic_Already_Choosed[iMusic_Id] == 1);
  28.        
  29.         //Ha talál olyan zenét, ami még nincs kiválasztva akkor beállítja, hogy ki van választva, illetve elmenti az azonosítóját
  30.         g_iMusic_Already_Choosed[iMusic_Id] = 1;
  31.         g_iChoosed_Musics_Id[i] = iMusic_Id;
  32.     }
  33. }

Oldal: 1 / 1 Minden időpont UTC+02:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/