Odpovídáte na názor k článku Ovládání hráčů ve hře klávesnicí nebo joystickem na ZX Spectru. Názory mohou přidávat pouze registrovaní uživatelé. Nově přidané názory se na webu objeví až po schválení redakcí.
K te hadance pro kapitolu 9.
Poznámka: relativně jednoduchým přeskládáním kódu a modifikací instrukcí pro rotaci lze program nepatrně zkrátit i nepatrně urychlit. Přijdete na to, v jakém místě kódu?
V registru A mame po cteni z portu: A=???67890, kde misto cislic je 0 kdy je klavesa stisknuta a nebo 1 kdyz neni.
Nic me nenapada, spis mam pocit, ze jsi tam mel puvodne misto:
left_not_pressed:
keypress KB_ROW_4_PORT ; test stisku klávesy 6,7,8 (joystick dolů, nahoru a doprava)
rra ; třetí bit do příznaku carry
rra
rra
jr c, right_not_pressed ; přeskok dalších instrukcí, pokud klávesa není stisknuta
changeAttribute ORIG_BLOCK ; smazat hráče na původní pozici
inc hl ; posun doprava o jeden bajt
changeAttribute RED_BLOCK ; vykreslit hráče na nové pozici
right_not_pressed:
rra ; čtvrtý bit do příznaku carry
jr c, down_not_pressed ; přeskok dalších instrukcí, pokud klávesa není stisknuta
changeAttribute ORIG_BLOCK ; smazat hráče na původní pozici
sub_from_hl 32 ; posun nahoru (o 32 bajtů)
changeAttribute RED_BLOCK ; vykreslit hráče na nové pozici
down_not_pressed:
rra ; pátý bit do příznaku carry
jr c, up_not_pressed ; přeskok dalších instrukcí, pokud klávesa není stisknuta
changeAttribute ORIG_BLOCK ; smazat hráče na původní pozici
add_to_hl 32 ; posun dolů (o 32 bajtů)
changeAttribute RED_BLOCK ; vykreslit hráče na nové pozici
Neco jako:
left_not_pressed:
keypress KB_ROW_4_PORT ; test stisku klávesy 6,7,8 (joystick dolů, nahoru a doprava)
bit 2,a ; 2:8 třetí (imho je to druhy bit a pocita se od nuly) bit do příznaku zero
jr nz, right_not_pressed ; přeskok dalších instrukcí, pokud klávesa není stisknuta
changeAttribute ORIG_BLOCK ; smazat hráče na původní pozici
inc hl ; posun doprava o jeden bajt
changeAttribute RED_BLOCK ; vykreslit hráče na nové pozici
right_not_pressed:
bit 3,a ; čtvrtý (imho je to treti bit a pocita se od nuly) bit do příznaku zero
jr nz, down_not_pressed ; 2:8 přeskok dalších instrukcí, pokud klávesa není stisknuta
changeAttribute ORIG_BLOCK ; smazat hráče na původní pozici
sub_from_hl 32 ; posun nahoru (o 32 bajtů)
changeAttribute RED_BLOCK ; vykreslit hráče na nové pozici
down_not_pressed:
and 0x10 ; 2:7 pátý (imho ctvrty) bit do příznaku zero
jr nz, up_not_pressed ; přeskok dalších instrukcí, pokud klávesa není stisknuta
changeAttribute ORIG_BLOCK ; smazat hráče na původní pozici
add_to_hl 32 ; posun dolů (o 32 bajtů)
changeAttribute RED_BLOCK ; vykreslit hráče na nové pozici
Takze ukazujes reseni hadanky.
...ale zkratit by to asi slo, kdyz se nebude resit prekresleni postavicky po kazdem pohybu (mysleno jako 2x pri sikmem posunu), ale az ve vysledku. Neco jako zmena do DE a na konci "ex HL,DE". Odpadne 6x changeAttribute kazda za 2 bajty. A potrebujeme 3 bajty na kopii do DE a prohozeni. Plus neco bude stat zmenit add_to_ a sub_to_ na 8 bitovou aritmetiku.