Odczyt i zapis stanu gry binarnie - jak to zrobić ?

0

Mam prostą gierkę rozbraja się bombę przez odcięcie powiedzmy 6 kabli. Musisz odciąć wszystkie właściwe kable i pozostawić jeden zły który gdybyś przeciął to bomba by wybuchła. Chodzi mi teraz o to żeby zapisać stan gry które kable już zostały odcięte.

kabel 1 - 1 (wartosc)
kabel 2 - 2
kabel 3 - 4
kabel 4 - 8
kabel 5 - 16
kabel 6 - 32

Czyli chcę ustawić sobie dane wartości i przypisać im wartość a potem dodać opracjami na bitach
Jeżeli uzytkownik przetnie kabel nr 3 a potem kabel nr 4 to do bazy zapisze sie liczba

000100 AND
001000

001100 (12)

i w bazie powinienem mieć wpisaną liczbe 12 ? czy bitowo to zapisac 001100 ?
Gdzieś widziałem strone z przykładem kolorów albo części samochodowych ale nie moge znaleźć
Może ktoś mogłby pomóc i podesłać jakiś link ?

Potem gdy ktoś odswieży strone to system ma odczytać liczbę 12 i wie że kable 3 i 4 ma pokazać ze
zostały już odciete. Tylko nie wiem jak to zrobić.

0

Generalnie to 12 i 001100 to nie jest Dokładnie to samo? Przecież 12 jest w pamięci przechowywana właśnie w postaci bitów :P Przechowuj to najlepiej to zwyczajnie jako int. Przydałaby się jakaś sprytna klasa do obsługi tego, żeby nie musieć się babrać w aplikacji z pojedynczymi bitami.
http://stackoverflow.com/questions/2791869/most-efficient-way-to-extract-bit-flags
http://www.databasejournal.com/features/mssql/article.php/3359321/Storing-Multiple-Statuses-Using-an-Integer-Column.htm (po pobieżnym przejrzeniu nie panikowałbym po spojrzeniu na datę)

0

@masterO - od kiedy to 000100 and 001000 = 001100?

Chyba pomyliłeś operacje logiczne, bo 12 wyjdzie nie za pomocą koniunkcji tylko alternatywy, czyli 000100 or 001000 = 001100 będzie prawidłowym warunkiem.

0

Zrobiłem coś w stylu:

define('WIRE1', 1);
define('WIRE2', 2);
define('WIRE3', 4);
define('WIRE4', 8);
define('WIRE5', 16);
define('WIRE6', 32);

I odczytujac z bazy danych (FLAGS) liczbe np 16+8+2 = 26
mam If

if ($FLAGS & WIRE1) oznacz ze ten juz przeciety
if ($FLAGS & WIRE2) oznacz ze ten juz przeciety
if ($FLAGS & WIRE3) oznacz ze ten juz przeciety
if ($FLAGS & WIRE4) oznacz ze ten juz przeciety
if ($FLAGS & WIRE5) oznacz ze ten juz przeciety
if ($FLAGS & WIRE6) oznacz ze ten juz przeciety

Może nie jest to super ale w sumei tanim kosztem pamięci załatwia sprawę.

3

Piszesz w PHP i przejmujesz się pamięcią?

0

Dlaczego w PHP nie trzeba zwracać uwagi na pamięć ?

0
Patryk27 napisał(a):

Piszesz w PHP i przejmujesz się pamięcią?
dla mnie to wazne zeby aplikacja byla jak nanbardziej optymalna.

0
frode napisał(a):

Dlaczego w PHP nie trzeba zwracać uwagi na pamięć ?

Bo php wydajnością nie grzeszy. Poza tym, jeżeli chodzi o zużycie pamięci to zarządza tym php i nie mamy na to wpływu (przynajmniej tyle ile mi wiadomo)

1 użytkowników online, w tym zalogowanych: 0, gości: 1