Ice Cube Opublikowano 2 Czerwca 2019 Udostępnij Opublikowano 2 Czerwca 2019 czesc próbuje stworzyc kwadrat na tablicach 10x10 w basicu bylo by cos takiego: data *,*,*,*,*,*,*,*,*,* data *,-,-,-,-,-,-,-,-,* data *,-,-,-,-,-,-,-,-,* data *,-,-,-,-,-,-,-,-,* data *,-,-,-,-,-,-,-,-,* data *,-,-,-,-,-,-,-,-,* data *,-,-,-,-,-,-,-,-,* data *,-,-,-,-,-,-,-,-,* data *,-,-,-,-,-,-,-,-,* data *,*,*,*,*,*,*,*,*,* chcialbym aby w roomie za pomoca instance_create() narysowac ten kwadrat i jezeli w odczycie z tablicy bedzie - to niech bedzie instance_create(x,y,obj_minus) a jezeli bedzie * niech bedzie instance_create(x,y,obj_gwiazdka) jak mam to zrobic ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 2 Czerwca 2019 Administratorzy Udostępnij Opublikowano 2 Czerwca 2019 no to w GM tak fajnie się raczej nie da. trzeba ręcznie data[0,0] = *. Chociaż można by się pobawić w substringi... będzie mniej wiecej tak, ale piszę to "na sucho" z głowy, bez testowania: var arr = [], a = 0, b = 0,c = ""; for (i=1; i<=string_length(str); i++) { c = string_char_at(str, i); if (ord(c) == 10 or ord(c) == 12) { // znak \n lub \r if (a > 0) { a = 0; b++; /* przenosi tablicę to nowej linii, a > 0 zapobiega sytuacji gdy jest \n\r z rzędu, zamiast tylko \n albo tylko \r (obsługuje zatem windows/linux/mac) */ } // inaczej nie rób nic, trochę jak continue, ale warunki sprawiają, ze nie trzeba go pisać } else { arr[a, b] = c; } } return arr; // powinno zwrócić tablicę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ice Cube Opublikowano 2 Czerwca 2019 Autor Udostępnij Opublikowano 2 Czerwca 2019 ŁOOOO PANIE TOSZ TO ZA SKOMPLIKOWANE W TYM GMIE a nie idzie tego obejsc np. jedną zmienną zamiast tablic var a=" ********** * * * * * * * * * * * * * * * * ********** " i potem odczytać jakoś string tej zmiennej a wiem ze byla taka funkcja ze string(a,pozycja1)="*" nie pamietam dokladnie.. i pozniej if a="*" instance_create(x,y,obj_gwiazdka) if a=" " instance_create(x,y,obj_minus) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 3 Czerwca 2019 Udostępnij Opublikowano 3 Czerwca 2019 Możesz wpisać to do zmiennej i z tych zmiennych tworzyć tablice za pomocą for'ów. Mój kod rysuje kwadrat z samych gwiazdek ale jestem pewien, że da Ci to jakąś poszlakę, wskazówkę, pomysł //Create _wiersze = 5; _kolumny = 5; //Step for(var a=0; a<_wiersze; a++) { for(var b = 0; b<_kolumny; b++) { kwadrat[a,b] = "*"; } } //Draw for(var a=0; a<_wiersze; a++) { for(var b = 0; b<_kolumny; b++) { draw_text(x+10*a, y+10*b, kwadrat[a,b]); } } Żeby dać minusy w środku, podejrzewam, że przy wkładaniu gwiazdek w tablice za pomocą forów, zrób ifa który sprawdza, czy jest to początkowy lub końcowy index tablicy Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Czerwca 2019 Administratorzy Udostępnij Opublikowano 3 Czerwca 2019 Czyli coś podobnego do mojego, tylko z predefiniowaną liczbą kolumn i wierszy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ice Cube Opublikowano 4 Czerwca 2019 Autor Udostępnij Opublikowano 4 Czerwca 2019 w sumie nie do końca mi o to chodziło.w mojej grze bedzie duzo pomieszczen i ten kwadrat to jedno z pomieszczen a w srodku kwadratu beda jeszcze sciany i obiekty. chodzi mi o to by z poziomu tekstowego przeniesc obiekty do roomu,dlatego narysowałem na początku DATA bo tak sie prosto rysuje "tekstowo" i wszystko widać w kodzie. to musi być taki generator który zczytuje po kolei tekst literka po literce i każda literka to odpowiedni obiekt np.* to sciana,a-to zloto itp. nie wiem czy to dobrze opisałem a i jeszcze jedno jeżeli jest i++ to jest to równoznaczne z i=i+1 ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 4 Czerwca 2019 Administratorzy Udostępnij Opublikowano 4 Czerwca 2019 Zamień draw na instance create... To naprawdę tak ciężko wykumać? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 4 Czerwca 2019 Udostępnij Opublikowano 4 Czerwca 2019 ++ oznacza dodanie jedynki do zmiennej liczbowej; a = 3; a++; // da wynik a = 4; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 4 Czerwca 2019 Udostępnij Opublikowano 4 Czerwca 2019 Nie do końca, a++ nie da wyniku 4, a 3. var a = 3; show_message(a++); show_message(a); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 5 Czerwca 2019 Administratorzy Udostępnij Opublikowano 5 Czerwca 2019 a++ - postikrementacja - dodaj do zmiennej 1 po obecnym wyrażeniu. ++a - preinkrementacja - dodaj do zmiennej przed obecnym wyrażeniem. tak samo z -- oczywiście (--a, a--). Wyrażenie to jest każdy kawałek kodu, który powinien kończyć się średnikiem czy nawiasem (nawet jeśli go nie Inaczej mówiąc: show_message(a++); // po kompilacji: show_message(a); a+=1; show_message(++a); // po kompilacji: a+=1; show_message(a); Oczywiście w większości przypadków wydaje się, że a++ oznacza to samo co a+=1, bowiem dodanie wykona się zawsze w następnym kroku kodu, więc takie jest wrażenie, czy też w pętlach dodanie wykona się zaraz za średnikiem - ale właśnie przykład z show message pokazuje, ze można napisać ++ a i tak dostać poprzednią wartość. Czasem wstawienie przed czy za się przydaje, żeby osiągnąć dodatkowy efekt. Konrad-GM 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 5 Czerwca 2019 Udostępnij Opublikowano 5 Czerwca 2019 To tak jeszcze dodam od siebie przy postinkrementacji (ta sama zasada przy postdekrementacji) var a = 3; show_message(string(a++) + ", " + string(a++)); show_message(a); Da wynik "3, 4" i "5", ponieważ postinkrementacja (jak i również postdekrementacja) działa jak funkcja, bo po każdym a++ zwracana jest stara wartość i dopiero dodawana 1. Gdyby w GM istniały referencje, to wyglądałoby to mniej-więcej tak (kod dla przykładu w C): int postinc(int &var) { int temp = var; var += 1; return temp; } I wywołanie postinc wygląda tak: // A tutaj kod w pseudo-C, więc też nie do kopiowania :) int a = 3; show_message(string(postinc(a)) + ", " + string(postinc(a))); show_message(a); Dlatego czasami może być szybsze używanie ++a zamiast a++ (względem wykonywania kodu, nie jego tworzenia ), bo pomijamy etap kopiowania wartości do zmiennej tymczasowej. Chociaż taka mikro-optymalizacja w GM jest bezużyteczna, z wiadomych chyba względów. Oraz warto pamiętać, że używanie kilka razy a++ w jednym wywołaniu skryptu/funkcji może dać nieoczekiwany wynik. 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ę