Skocz do zawartości

Operacje na stringach


Rekomendowane odpowiedzi

Mam dwie sprawy związane ze stringami:

1. Chce sprawdzać czy jakaś zmienna(string) zawiera na początku jakąś frazę np. "idz", a jeżeli tak to przyjmując całowity wygląd zmiennej za np.: "idz (West,3)" jak zrobić tak, aby pominął frazę "idz " i odczytał wartości West oraz 3 i przypisał je do zmiennych(integerów lub stringów) dir i dist, a nastepnie wykonał:

if (obj_player.x=idzX && obj_player.y=idzY) then switch(dir)
{case West: obj_player.direction=0; obj_player.speed=3;idzX=obj_player.x+lengthdir_x(dist,obj_player.direction);idzY=obj_player.y+lengthdir_y(dist,obj_player.direction);
case North: obj_player.direction=90;
obj_player.speed=3;idzX=obj_player.x+lengthdir_x(dist,obj_player.direction);idzY=obj_player.y+lengthdir_y(dist,obj_player.direction);
case East: obj_player.direction=180; obj_player.speed=3;idzX=obj_player.x+lengthdir_x(dist,obj_player.direction);idzY=obj_player.y+lengthdir_y(dist,obj_player.direction);
case South: obj_player.direction=270; obj_player.speed=3;idzX=obj_player.x+lengthdir_x(dist,obj_player.direction);idzY=obj_player.y+lengthdir_y(dist,obj_player.direction);};

2.Jeżeli część "idz" zmiennej zaprezentowanej w problemie powyżej będzie błędna(np będzie "iidz"), ale podobna do prawidłowej wersji, czy da się tak zrobić, aby program sam zaproponował prawidłową wersję?

 

Wszystkim, którzy zechcą pomóc dzięki wielkie.

PS.: Zastanawiałem się czy dać do Początkujących czy Zaawansowanych. Jak źle dałem to proszę o przeniesienie.

Odnośnik do komentarza
Udostępnij na innych stronach

1) Do wycięcia wartości użyj funkcji string_copy(a,b,c) gdzie:

 

a - string

b - pozycja od której zacząć kopiowanie (liczona od 1 a nie od zera)

c - ilość kopiowanych znaków

 

Funkcja wycina fragment tekstu z innego tekstu.

 

Zamiana stringa na wartość rzeczywista zrób po przez funkcję: real(str);

 

Jeśli chodzi o wyszukanie frazy w stringu, to GM raczej niema takiej funkcji, musisz sobie ją sam napisać.

 

Swoja drogą twoje rozwiązanie jest nieco karkołomne, ze względu na ilość wykonywanych operacji (operacje na stringach i konwersje typów niepotrzebnie ocbciążają procek), ja bym użył samych wartości liczbowych.

 

2) Pewnie że się da, ale trzeba by napisać skrypt, który by sprawdzał poprawność, no i to znowu dodatkowe i niepotrzebne operacje do wykonania. co wpływa ujemnie na fps gry.

Odnośnik do komentarza
Udostępnij na innych stronach

1) Do wycięcia wartości użyj funkcji string_copy(a,b,c) gdzie:

 

a - string

b - pozycja od której zacząć kopiowanie (liczona od 1 a nie od zera)

c - ilość kopiowanych znaków

 

Funkcja wycina fragment tekstu z innego tekstu.

 

Zamiana stringa na wartość rzeczywista zrób po przez funkcję: real(str);

 

Jeśli chodzi o wyszukanie frazy w stringu, to GM raczej niema takiej funkcji, musisz sobie ją sam napisać.

 

Swoja drogą twoje rozwiązanie jest nieco karkołomne, ze względu na ilość wykonywanych operacji (operacje na stringach i konwersje typów niepotrzebnie ocbciążają procek), ja bym użył samych wartości liczbowych.

 

2) Pewnie że się da, ale trzeba by napisać skrypt, który by sprawdzał poprawność, no i to znowu dodatkowe i niepotrzebne operacje do wykonania. co wpływa ujemnie na fps gry.

Zgodnie z radą zmieniłem to na to, aby po rozpoznaniu polecenia się pytał o kierunek i długość wymarszu. A jeżeli chodzi o string_copy() to czy nie będzie to zbyt pamięciożerne jeśli przy sprawdzaniu wielu komend będę musiał pobierać to kilka razy na step(tyle razy ile maxymalna możliwość liter w komendzie)? A jeśli tak, to czy można czyścić taki string_copy, kiedy nie jest już potrzebny?

Hmm. Co do 2 to może ktoś ma jakąś propozycję, bo ja raczej nie byłbym zdolny, żeby jakiś wisdom z kompa wykrzesać?

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ę...