boom Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 Nie rozwodząc się: tworzę tablicę z migracją towarów (import, eksport). W evencie step mam kod: GML for(i = 1;i < 5; i += 1) for(j = 1;j < 5; j += 1) { tabela_handlowa[1,2] = 'obe' tabela_handlowa[1,3] = 'ird' tabela_handlowa[1,4] = 'ane' tabela_handlowa[2,1] = 'import' tabela_handlowa[3,1] = 'eksport' } , a w draw: GML for(i = 1; i < 5; i += 1) for(j = 1; j < 5; j += 1) { draw_text(i*32 , j * 32,tabela_handlowa[i,j]) } jednak gdy uruchamiam grę wywala mi błąd: Error in action number 1 of Draw Event for object tablica: draw_text(i * 32, j * 32,tabela_handlowa[i,j]) at position 30: Unknown variable tablica_handlowa or aray index of bounds walę ignore, jest to samo. Wyłączam Display error messages, wszystko gra. Poza jednym: GM nie pisze słowa eksport, które miał napisać. co mam zrobić? :crying: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 No cholerę ci te pętle? I na cholerę ci ten kod w stepie potrzebny? A błąd oznacza, że nie istnieje komórka o podanym indexie. Bo ty tworzysz tylko komórki [1,2] [1,3] [1,4] [2,1] [3,1] A na przykład nie tworzysz [5,5], podczas gdy i,j mają takie wartości. Nie wiem co chcesz osiągnąć, ale wiem, że robisz to źle i nie rozumiesz tablic :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 GML for(i = 1;i < 5; i += 1) for(j = 1;j < 5; j += 1) { tabela_handlowa[1,2] = 'obe' tabela_handlowa[1,3] = 'ird' tabela_handlowa[1,4] = 'ane' tabela_handlowa[2,1] = 'import' tabela_handlowa[3,1] = 'eksport' } Po cholerę 25 razy tak samo definiować wartości w tablicy? o.O Chodziło Ci chyba o GML for(i = 1;i < 5; i += 1) for(j = 1;j < 5; j += 1) { tabela_handlowa[i,j] = 'obe' tabela_handlowa[i,j] = 'ird' tabela_handlowa[i,j] = 'ane' tabela_handlowa[i,j] = 'import' tabela_handlowa[i,j] = 'eksport' } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 Nobody: Po cholerę 5 razy przypisywać do tej samej komórki inną wartość? :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Panboni Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 Indeks tablicy w GMie to dowolna liczba całkowita, nie mniejsza niż zero. Oznacza to, że można tworzyć element tablicy o indeksie równym 0. Poprawnie więc by było: GML tabela_handlowa[ 0, 1 ] = 'obe' tabela_handlowa[ 0, 2 ] = 'ird' tabela_handlowa[ 0, 3 ] = 'ane' tabela_handlowa[ 1, 0 ] = 'import' tabela_handlowa[ 2, 0 ] = 'eksport' Dlaczego niby mamy pomijać pierwszy element? I dlaczego mamy wiele razy przypisywać tym samym zmiennym różne wartości, bądź, co gorsza, próbować wyświetlać wartości elementów tablic, które nie istnieją :) ? I ogólnie słaby pomysł z tymi tablicami - kompletnie nieprzemyślane ;) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 Nieraz dużo wygodniej jest numerować od jedynki. Osobiście zwykle tak robię i nie widzę przeciwwskazań. I ogólnie to nadal nie wiemy co on chce osiągnąć. boom, napisz nam co dokładnie chcesz zrobić to ci pomożemy. W tej chwili jedyne co możemy powiedzieć to to, że napisałeś coś całkowicie bezsensownego. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
boom Opublikowano 5 Czerwca 2009 Autor Udostępnij Opublikowano 5 Czerwca 2009 chodziło bardziej o to, abym zrozumiał tablice w ogóle, bo jak stwierdził Platyna ja nie rozumiem tablic. ale i tak dzięki za pomoc. a chodziło o to, żeby okno GM - a nie wyglądało tak: tylok żeby jednak napisał ten 'eksport' Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Panboni Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 Platyna, to błąd robisz. Nikt ci przecież jedynki dodać do liczby nie broni :) . Zrozumieć sens tablic? Jeżeli chcesz chociażby wykonywać ciągle te same działania i przypisywać wartość na podstawie takiego samego wzoru. Wtedy zauważasz, że chcesz robić ciągle to samo, jednak musiałbyś powtarzać te linijki dla każdej zmiennej osobno. A tak - po prostu tworzysz pętlę i zwiększasz wartość zmiennej odpowiedzialnej za kolejny indeks (numer) tablicy i przypisujesz nowo powstałemu elementowi wartość. A tu takie przykłady: Błędy: GML x = random( 100 ) - 200; tablica[ x ] = "moja_wartosc"; Indeks nie może być mniejszy niż zero i musi być to liczba całkowita. Poprawnie byłoby x = max( round( random( 100 ) ) - 200, 0 ) GML for( i = 0; i < 5; i += 1; ) { tablica[ 0 ] = 0; tablica[ 1 ] = 0; tablica[ 2 ] = 0; tablica[ 3 ] = 0; tablica[ 4 ] = 0; } Ogólny bezsens - pięć razy tym samym tablicom przypisujemy te same wartości. A przecież chodzi o jak najmniejszą liczbę linijek :P . Zamieniamy te pięć zbędnych linijek na jedną: tablica[ i ] = 0; Kod jest skrócony o cztery linijki! GML tablica[ 1, 2 ] = wartosc; tablica[ 3, 0 ] = wartosc; tablica[ 2, 7 ] = wartosc; Ogólny zbędny chaos występujący u ciebie. Tablice dwuwymiarowe do tego nie służą :) . Dobrze: GML for( i = 0; i < 5; i += 1; ) tablica[ i ] = random( 400 ); Wartość tablicy może być ułamkiem, ale to wartość, a nie indeks :) . GML indeks = 0; while( indeks < 5 ) tablica[ indeks ] = choose( "napis1" , "napis2", "napis3" ); Umieszczamy w pięciu elementach tablicy różne napisy :) . Mam nadzieję, że nieco pomogłem. Boom, podam ci praktyczne zastosowanie. Jak 100 obiektów zastąpić tablicą ;) . Stwórz room 500 x 500 pikseli oraz umieść w nim stworzony wcześniej obiekt, któremu spirte'a dawać nie musisz. Daj mu w Create: GML for( i = 0; i < 10; i += 1; ) for( j = 0; j < 10; j += 1; ) tablica[ i, j ] = choose( c_black, c_white ); // robimy białe i czarne pola (losowo)</span> W evencie Global mouse left pressed: GML i = mouse_x div 50 * 50; j = mouse_y div 50 * 50; // na podstawie pozycji myszki obliczamy, jakie są to indeksy tablicy if ( tablica[ i, j ] == c_black ) tablica[ i, j ] = c_white; else tablica[ i, j ] = c_black; // zmiana</span> A tak wyświetlamy kwadraty na podstawie tablic w evencie Draw: GML for ( i = 0; i < 10; i += 1; ) for( j = 0; j < 10; j += 1; ) { draw_set_color( tablica[ i, j ] ); draw_rectangle( i * 50, j * 50, i * 50 + 50, j * 50 + 50, 0 ); } Może ten przykład ci pomoże zrozumieć tablice :P . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
boom Opublikowano 5 Czerwca 2009 Autor Udostępnij Opublikowano 5 Czerwca 2009 nie za bardzo. Otóż chodzi o to by te napisy zostały i ja nie chcę, by były rozmieszczane losowo. chodzi mi tylko o ten eksport, którego nie umiem napisać, chociaż kiedy robię coś jak np tabliczka mnożenia (i*j) pisze mi wszystkie komórki bez przeszkód. Ale w kwestii tablic ogółem to dzięki za doinformowanie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Panboni Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 Ale ty musisz swój kod przeanalizować :) . Pomogę ci: GML for(i = 1;i < 5; i += 1) for(j = 1;j < 5; j += 1) { tabela_handlowa[1,2] = 'obe' tabela_handlowa[1,3] = 'ird' tabela_handlowa[1,4] = 'ane' tabela_handlowa[2,1] = 'import' tabela_handlowa[3,1] = 'eksport' } Pierwszy krok - i = 0, j = 0: GML tabela_handlowa[1,2] = 'obe' tabela_handlowa[1,3] = 'ird' tabela_handlowa[1,4] = 'ane' tabela_handlowa[2,1] = 'import' tabela_handlowa[3,1] = 'eksport' Drugi - i = 0; j = 1: GML tabela_handlowa[1,2] = 'obe' tabela_handlowa[1,3] = 'ird' tabela_handlowa[1,4] = 'ane' tabela_handlowa[2,1] = 'import' tabela_handlowa[3,1] = 'eksport' Szósty - i = 1; j = 0: GML tabela_handlowa[1,2] = 'obe' tabela_handlowa[1,3] = 'ird' tabela_handlowa[1,4] = 'ane' tabela_handlowa[2,1] = 'import' tabela_handlowa[3,1] = 'eksport' Bez względu na wartości i oraz j kod jest zawsze ten sam. Wspomniałem już wcześniej o tym - kod wykonywany jest niezależnie od pętli, ponieważ indeksy tablic to stałe wartości, a nie zmienne. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
boom Opublikowano 5 Czerwca 2009 Autor Udostępnij Opublikowano 5 Czerwca 2009 :o to ciekawe. Co nie zmienia faktu, że nie wiem o co chodzi. Do mnie trzeba mówić drukowanymi :) Ty, czekaj. chodzi o to że niepotrzebnie dałem te for? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Panboni Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 A, to już inna sprawa, że jeszcze pętli nie opanowałeś. Za wysoko sobie na starcie poprzeczkę postawiłeś ;) . Tak. Bo po co je dałeś, skoro i tak indeks tablicy nie jest uzależniony od pętli (zamiast tablica[ i, j ] jest np. tablica[ 2, 0 ]), więc zawsze wykonuje się to samo. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
boom Opublikowano 5 Czerwca 2009 Autor Udostępnij Opublikowano 5 Czerwca 2009 Bardzo możliwe. Jednakowoż jako, że jestem człowiekiem ambitnym własne ograniczenia nie docierają do mnie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Panboni Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 Ambicje ambicjami, a błąd błędem :) . I wcale nie musisz się ograniczać, lecz powoli iść do przodu. Gdy jest moment, że czegoś nie rozumiesz, na siłę nie ucz się czegoś nowego. Taka rada :P . A tak poza tym - czemu tak chaotycznie indeksujesz elementy tablicy? 0,0 | 0,1 | 0,2 | 1,0 | 2,0 . Nie idzie ciebie w ten sposób zrozumieć ;) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 Platyna, to błąd robisz. Nikt ci przecież jedynki dodać do liczby nie broni :) . Co za brednie. Dlaczego niby robię błąd? Nie mam obowiązku wypełniać komórki 0. Na jaką cholerę za każdym razem miał bym tą jedynkę dodawać/odejmować jak mogę sobie po prostu od 1 numerować. Tak wiele pamięci ta jedna wolna komórka nie zabierze. Już więcej czasu by zabrało dodawanie tej jedynki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Panboni Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 Czyli współrzędne lewego górnego rogu obrazka to także 1,1? Tak ciężko jest się do tych zer przyzwyczaić? Platyna, wcale nie, bo nawet nie wiem po jakiego grzyba te jedynki dawać, kiedy to się przyda :) ? Kiedyś już o tym w jakimś temacie była mowa i, jak to podsumował Ranmus, "Chodzi o to, że niepotrzebnie nie wykorzystujemy pierwszego elementu". Tyle, nie mam zamiaru się kłócić, a tym postem twojego sposobu i tak nie zmienię ;) . Nie chcę nikogo prowokować do kłótni, a tym bardziej redaktora. I bez takich tekstów mi tutaj! Bez przesady. To że jestem redaktorem, nie oznacza, że trzeba isę mnie bać i nie wolno mi zwrócić uwagi czy też nawet ochrzanić. Czy kadra musi być na jakichś specjalnych prawach w tego typu sprawach? =) Platyna Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 Ależ to nie kłótnie tylko wymiana zdań. Co do obrazka: nie powiedziałem, że zawsze tak robię. Napisałem, że zdarzają się przypadki dla których jest to wygodniejsze! Przykładowo: Większość zadań na olimpiadach ma dane tak podawane. Jak mamy jakieś n miast czy coś. Zawsze są numerowane od jedynki. Wtedy jest dużo wygodniej niż myśleć o jakimś durnym dodawaniu jedynki. Oczywiście są też przypadki, że wygodniej jest od zera. Chociażby kopiec czy inne dżewo. Lepiej synów oznaczać jako (i*2+1) i (i*2+2) niż (i*2) i (i*2+1). Jakoś bardziej intuicyjnie. Więc co byś nie mówił. Nie wmówisz mi że to jest błąd. Wprawdzie to są setne sekundy, ale nawet optymalniej jest nie dodawać tej jedynki ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Panboni Opublikowano 5 Czerwca 2009 Udostępnij Opublikowano 5 Czerwca 2009 Ostatniego zdania potwierdzić niestety nie mogę, a przykład podałeś trochę słaby. Błąd być może był nietrafnym określeniem, jednak w tym przypadku i tak bardziej się opłaca od zera zaczynać. 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ę