Skocz do zawartości

Rekomendowane odpowiedzi

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

  • Filar Społeczności

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

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

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