Jakim Opublikowano 23 Stycznia 2007 Opublikowano 23 Stycznia 2007 W przerwie między tworzeniem "Grav" (postanowiłem upiększyć grę, opóźniając nieco datę jej premiery) zrobiłem mały przykład - "obsługa bitów". Oto mały przykładzik, za pomocą którego będziemy mogli, używając tylko jednego wpisu, zapisać ustawienie n przełączników (na zasadzie 0-włączony, 1-włączony). Obszerniejszy opis znajdziecie w Ślimaczku (oczywiście w tym jeszcze niewydanym ;)). http://www.gmclan.org/up506_11_bity.html Wszelkie pomysły, uwagi, zauważone błędy, dawajcie tutaj :). PS. Nie wymagam ani nie żądam umieszczenia mnie w creditsach czy coś w tym rodzaju; nie musicie się pytać o zgodę na użycie itp.
Filar Społeczności Ranmus Opublikowano 23 Stycznia 2007 Filar Społeczności Opublikowano 23 Stycznia 2007 Nie wiem czy wiesz, ale właśnie odkryłeś koło i to dosyć pokraczne, gdyż to co zaprezentowałeś, można uzyskać znacznie łatwiej i wydajniej. Musisz się podszkolić z operatorów bitowych. ;) Otóż tymi przełącznikami (zwanymi często flagami) manipuluje się bardzo prosto. Przykład poniżej: //rodzaje broni, kazdy przelacznik w ramach tej samej grupy musi byc kolejna potega liczby 2. Najlepiej uzyc w tym celu wbudowany w GM system "stałych" (const), ale pokażę to na zwykłych zmiennych. MIECZ = 1; PILA = 2; PISTOLET = 4; SHOTGUN = 8; KARABIN = 16; GRANATNIK = 32; BAZOOKA = 64; // Jak widac powyzej, stworzylismy 7 rodzajow przelacznikow / flag. Zapelnijmy teraz plecak paroma typami broni: plecak = MIECZ ^ BAZOOKA ^ KARABIN; // Sprawdzmy teraz dostepnosc jednego z rodzajow broni: if ( plecak & KARABIN ) show_message( "mamy karabin!" ); // Odejmijmy karabin z plecaka i sprawdzmy ponownie: plecak = plecak ^ KARABIN; if ( plecak & KARABIN ) show_message( "mamy karabin!" ); // I znowu dodajmy: plecak = plecak ^ KARABIN; if ( plecak & KARABIN ) show_message( "mamy karabin!" ); Jak widać operator ^ neguje wartość danego bita. Oczywiście zwykłe operatory + i - zadziałają tutaj jak dodanie i odjęcie broni, ale nie używa się ich w tym przypadku, ponieważ ponowne ich użycie np. gdy dodajemy już dodaną broń (albo odejmujemy odjętą) spowoduje nieprzewidzianą zmianę reszty flag. Jednakże + można zastąpić bezpiecznym operatorem |, ale - nie ma już odpowiednika, więc jako odjęcie służy ww. operator negacji wartości bita ^.
Jakim Opublikowano 24 Stycznia 2007 Autor Opublikowano 24 Stycznia 2007 Gdy tak patrzę na powyższy skrypt, zdaje mi się, że to koło bardziej przypomina kwadrat ;). Ale za to, tak jak w jednym przykładzie Gnyska (o dzieleniu bodajże), będzie to przykład... hm, użycia "return", pętli for czy zapisywania/odczytywania informacji do/z pliku, bo do samych bitów to już nie za bardzo ;).
Tymon Opublikowano 24 Stycznia 2007 Opublikowano 24 Stycznia 2007 Etam, marudzisz. To wygodniejsze niż operacja na stringach czy tablicach :)
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ę