Jakim Opublikowano 23 Stycznia 2007 Udostępnij 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 23 Stycznia 2007 Filar Społeczności Udostępnij 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 ^. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 24 Stycznia 2007 Autor Udostępnij 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 ;). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 24 Stycznia 2007 Udostępnij Opublikowano 24 Stycznia 2007 Etam, marudzisz. To wygodniejsze niż operacja na stringach czy tablicach :) 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ę