Phoenix Opublikowano 28 Sierpnia 2008 Udostępnij Opublikowano 28 Sierpnia 2008 Mam pytanie ktoś mógłby nauczyć mnie korzystania z tablic i wytłumaczyć do czego one są? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Harv Opublikowano 28 Sierpnia 2008 Udostępnij Opublikowano 28 Sierpnia 2008 https://gmclan.org/index.php?czytajart=34 tu masz troszke o tablicach Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Phoenix Opublikowano 28 Sierpnia 2008 Autor Udostępnij Opublikowano 28 Sierpnia 2008 Myślę, że oto Ci chodziło Harv Tablice W GML można używać tablic jedno i dwuwymiarowych. Tworzenie ich jest proste - poprostu wpisujemy wartość w nawiasy kwadratowe (przy jednowymiarowych jedną liczbę, przy dwuwymiarowych - liczbę, przecinek i drugą liczbę). Tablice mogą wyglądać tak: kod: { a[0]=1; b[1,3]=2; } Bo jeśli tak to już wiem jak je zrobić, ale co można z nimi zrobić. Chciałbym się naucz tablic. Ktoś mógłby mi wytłumaczyć, co z nimi można zrobić? PS: Pytam się bo zaciekawił mnie kod Jakluba dla zalu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pieter Opublikowano 28 Sierpnia 2008 Udostępnij Opublikowano 28 Sierpnia 2008 najczęściej tablic używa się w pętlach i do przechowywania sporej ilości danych... jak z nich korzystać? kolega już Ci zapodał link... To nic trudnego... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 29 Sierpnia 2008 Udostępnij Opublikowano 29 Sierpnia 2008 Hmm... Coś znalazłem ;) ! Tablice prosto mówiąc to są indeksowane zmienne. Potrzebę używania tablic łatwo jest zauważyć kiedy przyjdzie nam na nie zapotrzebowanie. Na przykład, chcielibyśmy aby możliwe było w łatwy sposób wyzerować wartość zmiennej a z liczbą na końcu 2, czyli a2. Wydaje to się banalne, i tak w rzeczywistości jest. a2 = 0; Jak widać żadnych problemów nie ma. A gdybyśmy chcieli zmienną a2, a3 itd. ... a99, a100? Akurat wtedy zauważyć by można zbędne występowanie 100 linijek kodu. Dlatego prostszym rozwiązaniem było by w jakiś sposób jednak indeksować te zmienne. Czy GML pozwala na to? Oczywiście, GML jak większość język programowania bądź skryptowych oferuje tablice (w niektórych językach występują tablice asocyjne, tzn. o indeksie w postaci łańcucha znaków, ale to tylko ciekawostka). Jak wygląda składnia nadania wartości tablicy? Przyjrzyj się dokładnie: tablica[indeks] = <wartosc>; Generalnie wygląda to całkiem łatwo. Jak to wygląda w praktyce? Przykład, który mogę zaoferować to program do wyliczania średni arytmetycznej spośród podanych przez nas liczb. Kod będzie banalnie prosty: maxValues = 0; do { value[maxValues] = get_integer( "Podaj liczbę, lub wpisz zero.", 0 ); maxValues += 1; // powiekszanie indeksu kolejnej tablicy, wydaje sie logiczne, gdyz co chwile bedziemy tworzyc nowa zmienna } until( !value[maxValues - 1] ) // koniec petli, gdy podamy liczbe 0 divAll = 0; // znane z obliczania sredniej ocen, dodajemy wszystkie liczby for( i = 0; i < maxValues - 1; i += 1; ) divAll += value[i]; divAll /= maxValues - 1; // a potem dzielimy przez maksymalna wartosc show_message( "Średnia tych liczb to: " + string( divAll ) ); game_end(); Przykład może wydawać się trudny. Przeanalizujmy go. Można napisać w punktach proces obliczania średniej w tym przykładzie. 1. Deklarujemy zmienną odpowiedzialną za maksymalną ilość liczb 2. Zaczyna sie pętla. Jeśli Podamy zero, następuje koniec i przechodzimy do następnego punktu. W przeciwnym wypadku wszystko się zapętla. Pętla ta odpowiedzialna jest za tworzenie tablicy o coraz większym indeksie, gdyż indeksem jej jest ciągle powiększająca się zmienna maxValues. 3. Teraz pętlą for dzięki iteratorowi (i += 1) będziemy "przechodzili" kolejno po wszystkich tablicach i sumowali je, tzn. wartość wszystkich liczb będzie znajdywała się w zmiennej divAll. 4. Teraz znanym nam sposobem, osiągniętą sumę dzielimy operatorem dzielenia przez największy indeks tablicy value (czyt. przez ilość liczb). 5. Na końcu wyświetlamy wartość średniej i kończymy program. Wydaje się trudne, ale w ten sposób łatwo będzie ci wszystko przychodzić. Pozostaje jeszcze jedno zagadnienie, mianowicie tablice dwuwymiarowe. Tego już nie będę szczegółowo omawiał, powiem tylko, iż są to tablice z dwoma indeksami. Oddzielamy je przecinkami. Tak jak poprzednio, potrzebne nam to będzie tylko wtedy, gdy będzie nam brakowało pomysłów na stworzenie odpowiedniego elementu gry. Np. taki ekwipunek, łatwo byłoby go "wykonać" na tablicach dwuwymiarowych. Wtedy tworzymy stałą, nazywamy ją FLD_EMPTY i nadajemy jej wartość -1. W zdarzeniu Create można stworzyć ekwipunek w taki sposób: for( i = 0; i < 10; i += 1; ) { for( j = 0; j < 10; j += 1; ) { inv[i,j] = FLD_EMPTY; // 10 x 10 = 100 pol wolnych } } Możemy sobie napisać funkcję dodającą przedmiot do plecaka, potrzebne będzie jednak stworzenie stałej FLD_ITEM. Teraz łatwo będzie napisać tę funkcję. for( i = 0; i < 10; i += 1; ) { for( j = 0; j < 10; j += 1; ) { if ( inv[i,j] == FLD_EMPTY ) { inv[i,j] = FLD_ITEM; return true; } } } Dodatkowo będzie ona nam zwracała wartość 1, jeśli w plecaku będzie miejsce na rzecz, lub 0, jeśli miejsca zabraknie. Wyświetlania go już nie na piszę, bo nie o tym mowa i szkoda na to czasu. Mam jednak nadzieję, że zrozumiałeś do czego służą tego typu zmienne. Miłej nauki biggrin.gif ! By Misztrzunio :) . Przerobiłem lekko, bo wersja Misztrzunia miała błędy :P . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę