Skocz do zawartości

Tablice


Rekomendowane odpowiedzi

Każdy utwór to może być obiekt odczytujący nazwe z pliku, i wszystkie obirkty byłyby w tablicy. A żeby zostawały po wyłączeniu, to zapisz dane obiektów do pliku (nazwa i ścieżka), a potem wyczytujesz z pliku linie i create object.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Ostatnio tlumaczylem Mifie, wiec na swiezo moge pomoc:

 

Tablice to są zbiory zmiennych występujących pod jedną nazwą. Służą do przechowywania danych i w ogóle. Bez tablic (arrays) daleko nie zajedziesz, nic lepszego nie napiszesz. Przykladowe zastosowanie tablic:

a[0] = "Wielki ";
a[1] = "Mały ";
a[2] =  "Olbrzymi ";
a[3] = "Karłowaty ";

b[0] = "Dobry ";
b[1] = "Zły ";
b[2] = "Neutralny ";
b[3] = "Chaotyczny ";

c[0] = "Człowiek";
c[1] = "Krasnolud";
c[2] = "Goblin";
c[3] = "Elf";

imie = a[round(random(4))] + b[round(random(4))]  + c[round(random(4))];

Mamy tutaj trzy tablice: a, b i c. Do każdej z nich wrzuciłem po cztery elementy. W nawiasach kwadratowych podaje się indeks danego elementu/zmiennej.

Zmienna imię bedzie miała wygenerowaną klasę bohatera. Losowane są po prostu indeksy tablic.

 

Idąc dalej, w GM sa jeszcze tablice dwuwymiarowe:

a[x,y]

To taki przykladzik zeby lepiej zrozumiec, tablicę dwuwymiarową można porównać do kartki papieru w kratkę. Każde małe pole zawiera zmienną. Aby zapisać "stefan" do wiersza 5 i kolumny 3 robimy tak:

nazwa_tablicy[5,3] = "stefan";

 

Zeby odczytac:

draw_text(x,y, string( nazwa_tablicy[5,3] ));

 

Do czego sie moze przydac? Np w rpg do przechowywania danych o broni, o to tablica ( | to podzial na kolumny):

Miecz dwusieczny | 10 | 20 | sprite_1
Sztylet | 2 | 4 | sprite_2
Krótki miecz | 5 | 10 | sprite_2

zapisujemy to wszystko do tablicy w GM:

global.weapons[0,0] = "Miecz dwusieczny";
global.weapons[0,1] = 10;
global.weapons[0,2] = 20;
global.weapons[0,3] = sprite_1;

global.weapons[1,0] = "Sztylet";
global.weapons[1,1] = 2;
global.weapons[1,2] = 4;
global.weapons[1,3] = sprite_2;

global.weapons[2,0] = "Krótki miecz";
global.weapons[2,1] = 5;
global.weapons[2,2] = 10;
global.weapons[2,3] = sprite_3;

Tworzymy obiekt "weapon"

Teraz jak zabijemy jakies potwora to robimy tak:

id_nowej_broni = instance_create(x,y,weapon); // uchwyćmy id nowego obiektu
with ( id_nowej_broni )
{
   var i; // zmienna i potrzebujemy tylko na chwile, wiec dopisujemy var
   i = round(random(3));   // Bo mamy 3 bronie
   weapon_name = global.weapons[i,0];
   attack_min = global.weapons[i,1];
   attack_max = global.weapons[i,2];
   sprite_index = global.weapons[i,3];
}

W ten sposob mamy wygenerowany nowy obiekt weapon z paroma waznymi zmiennymi jak nazwa broni, jej atak minimalny i maksymalny oraz sprite.

 

Teraz niech ktos mi pokaze jak takie cos zrobic bez tworzenia nowych rodzajow obiektow i to bez tablic. :emot11: A tak apropos, tablice to poziom zaawansowania veryyy beginner.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Nic nie daja, przeciez ja sobie je wymyslilem, zeby czyms zapelnic tabele, to akurat nie jest najwazniejsze. Zreszta gdybys czytal dokladnie, to bys wiedzial do jakiej zmiennej sa zapisywane te liczby: attack_min, attack_max

Rozumiesz juz?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 rok później...

Wzorowałem się na pokazanych tu tablicach(tu=w tym temacie) i nie wychodzi mi :P tzn ;]

 

global.wy=0
global.wy1=0


draw_text(100,150,global.wy)
draw_text(590,150,global.wy1)
draw_text(500,500,global.czas)

global.tekst[0]="lol"
global.tekst[1]="lol1"
global.tekst[2]="lol2"
global.tekst[3]="lol3"
global.tekst[4]="lol4"
global.tekst[5]="lol5"
global.tekst[6]="lol6"
global.tekst[7]="lol7"

if global.akcja=global.czas
{
draw_text(200,200,global.teskt[round(random(7))])
}
if global.akcj=global.czas
{
draw_text(500,200,global.teskt[round(random(7))])
}
if global.akc=global.czas
{
draw_text(500,200,global.teskt[round(random(7))])
}
if global.ak=global.czas
{
draw_text(500,200,global.teskt[round(random(7))])
}
if global.a=global.czas
{
draw_text(500,200,global.teskt[round(random(7))])
}
 

 

Mam cos takiego :D i gdy akcja rowna sie globalnej czasu to pojawia mi sie blad ,że nie znaleziono global.tekst i jej indexów ;]

 

Unknown variable tekst or array index out of bounds

 

I co mam poprawic zeby dzialalo ?

Odnośnik do komentarza
Udostępnij na innych stronach

LOl własnie to zauwazylem ale mam inny problem już :D

 

Gdy wyswietla tekst to caly czas losuje tzn skacze z tekst[0] do inncyh i gdy czas juz sie nie rowna akcji to znika ja chce zeby raz wylosowalo a nie calyczas losuje ;]

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...