Binární matematika a Bit Flagy

Neoficiální editor od Turbo Pascala. Dokáže vytvářet levely do všech dílů TR (TR1-TR5). Nabízí velmi příjemné uživatelské rozhraní a je k dispozici i v češtině.
Stažení a další informace na webu: DXTre3D
  • Advertisement

Binární matematika a Bit Flagy

Příspěvekod Sakul » pát 14. kvě 2010 5:20:27

Tak toto se Vám bude hodit kdikoli, když budete pracovat s Bit Flagy. Je totiž nutné pro správné fungování, pochopit jak to vlastně funguje a jak si spočítáte výsledek. Všichni jistě vědí k čemu se Flagy používají a jistě znají i základní definyci například pro otevření dveří, až teprve po zatažení pěti pák. V tomto případě je situace jednoduchá. Každá páka má definován jeden Flag. Otázkou je, jak to udělat pro třeba pro pák sedm.
V první řadě je nutno si uvést základy binární matematiky:
0+0=0
0+1=1
1+0=1
1+1=0
resp: 1+1+1+1+0 =0


V této ukázce vidíte, že to co Vás učili ve škole není pravda. 1+1 není 2, ale zase jen 0
Tento princip se používá i při počítání Flagů v TR potažmo Editoru.

Takže jak definovat otevření dveří na 7 pák ? Zcela jednoduše:

Paka 1-01111
Paka 2-10111
Paka 3-11011
Paka 4-11101
Paka 5-10011
Paka 6-11100
Paka 7-01110

Jedna taková pomůcka jak vypočítat, zda je po zatažení výsledek 11111 je zde:

T1-01111
T2-10111
T3-11011
T4-11101
T5-10011
T6-11100
T7-01110
________
D0-55555 - Součet čísel ve sloupcích je 5.
D0-11111 - 5 je Liché číslo a tak dosadíme 1 a tím je výsledný součet 11111.

Pokud by byla tato kombinace:

T1-01111
T2-10111
T3-11011
T4-11101
T5-10011
T6-11100
T7-01111
________
D0-55556 6 je Sudá a tak dosadíme 0.
D0-11110

Tím pádem není podmínaka všech pěti Flagů splněna a dveře (D0) se neotevřou. Nevíhoda je, že musíte zajistit, aby neexistovala kombinace jakýchkoli pák s výsledkem 11111, kromě všech, které požadujete. Jednotlivé Flagy se sčítají ve sloupcích samostatně. Takže asi zůstanete u 5ti pák, kde je výpočet naprosto jednoduchý a na první pohled zcela jasný. :roll:

Tady ještě přikládám kus návodu s touto tematikou od Mira:

Pokročilejší využívaní Activation Flag vychází z předpokladu že Spoušť typu Item se vykoná jen a pouze tedy když součet Activation Flagou u spouště a objektu který aktivujeme je 1. (11111)
Příklad: Máme páku která otevírá dveře. Páka má spoušť s flagmi na 11111. Dveře mají flagi vypnuté 00000. Ted když zapneme páku, dveře se otevřu (protože výsledek bude 11111).
11111 –páka
00000 –dveře
-------
11111 –výsledek

Když ale dveřím nastavíme flagy na 11111 tak dveře budou otevřené když páka bude vypnutá (Při zapnutý páky bude součet 00000 a dveře se zavřou, při vypnutí páky budou flagy 11111 a dveře se otevřou).
11111 –páka
11111 –dveře
-------
00000

Z toho vyplívají 2 různě využitý.
Prvý nám umožní aktivovat předmět více spouštěmi než 5. Stačí když nastavíme spouště tak aby celkoví výsledek byl 11111.
Příklad: Pokud chceme aby se objekt aktivoval 7 pákami tak jim definujeme spouště s flagmi:
01111 – spoušť na páce 1
10111 – spoušť na páce 2
11011 – spoušť na páce 3
11101 – spoušť na páce 4
10011 – spoušť na páce 5
11100 – spoušť na páce 6
01110 – spoušť na páce 7
-------
11111 – objekt se aktivuje


Druhý nám umožní aktivovat předmět jen určitou kombinaci pák. Přitom při porušení téhle kombinace se objekt deaktivuje.
Příklad: Pokud máme dvoje dveří a chceme aby se nám Dveře 1 otevřeli při zapnutý pák 2,5,6 (ostatní musí být vypnuté) a Dveře 2 při pákách 1,3,4,6 (ostatní musí být vypnuté).
Páky nastavíme tak jako v předchozím případe. Dveře dáme do spouští všem 7 pákám. Dveřím nastavíme flagi tak že si dopočteme flagi příslušných dveří do 1.
Dveře 1:
10111 – páka 2
10011 – páka 5
11100 – páka 6
-------
11000 – aby výsledek byl 11111, musíme dveřím nastavit 00111.

Dveře 2:
01111 – páka 1
11011 – páka 3
11101 – páka 4
11100 – páka 6
-------
10101 – aby výsledek byl 11111, musíme dveřím nastavit 01010.

Pozor čísla se sčítají jednotlivě po bitech ne jako celek. Napr. 11101 a 11100, když tyhle čísla vložíme do kalkulačky (binární) výsledek je 111001. Jenže správně má být 00001.

Malé odbočení do binární matematiky
0+0=0
0+1=1
1+0=1
1+1=0
INFO:
Sakul WORLD: http://www.sakul.cz/
Sakul Diskuse: http://www.forum.sakul.cz/

Možnost příspěvku (Donate):
PayPal: SakulRaider@seznam.cz
BU: 670100-2208863541/6210
BTC: 12JRVcmawzEPtgTd9SgC5ujDCGaUrgZ9vt
Uživatelský avatar
Sakul
Administrátor
Administrátor
 
Příspěvky: 775
Věk: 37
Registrován: úte 30. bře 2010 18:13:08

Zpět na DXTre3D Editor


  • Advertisement

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník