マリオのクリボーのように、壁でも互いにでも向きを変える歩き手
二つの壁の間にいる、私たちの二つの歩き手。そばには固さのレッスンの四角もいる。遊んで、出会っては向きを変え、壁まで歩いて戻るのを見てほしい。プログラムは 1,129 バイトの命令 415 個で、作り方も確かめ方も同じだ。
ここで遊ぶ 机の上で変えてみる カートリッジ。NES のカートリッジを遊べるところならどこでも遊べる: walkers.nes
画面の上では
歩き手に要るのは二つの決まりだけ
スーパーマリオブラザーズのクリボーは、二つの簡単な決まりで動く。一フレームに半ピクセル、つまり二フレームに一ピクセルずつ進み、壁に歩き当たると向きを変える: 一フレームだけ壁の中に一ピクセル入り、押し戻されて反対へ歩き出す。二つが出会うと、同じフレームで両方が向きを変える。ゲームが調べる箱は絵より小さいので、そのときにはもう少し重なっている。私たちの歩き手は同じ速さで進み、四角と同じように前の縁でレベルを調べ、触れたとたんに向きを変えるので、壁の中にいるところも重なるところも見えない。
| このカートリッジ | スーパーマリオブラザーズ | |
|---|---|---|
| 一歩のピクセル数と、歩く間隔のフレーム数 | 1、2 フレームおき | 1、2 フレームおき |
| 見えた壁での方向転換の数 | 4 | 3 |
| 一フレーム、壁の中に一ピクセル入る | いいえ | はい |
| 見えた出会いの数(どれも同じフレームで両方が向きを変える) | 3 | 1 |
| 向きを変えるときに重なるピクセル数 | 0 | 7 |
書いたとおりに
このレッスンが扱うプログラムの部分。プログラム全体は、ただのテキストファイルだ: walkers.s
;; The walkers, on every second frame: each takes its step, and if its
;; leading edge is then in a wall it goes back and turns. Then, if the one
;; on the left walks right and the one on the right walks left and they
;; touch (16 apart), both turn.
walkers:
LDA $44
EOR #$01
STA $44
BEQ resting
LDX #$00
JSR stride
LDX #$01
JSR stride
LDA $42
CMP #$01
BNE resting
LDA $43
CMP #$FF
BNE resting
SEC
LDA $41
SBC $40
CMP #$11
BCS resting
LDA #$FF
STA $42
LDA #$01
STA $43
resting:
RTS
;; Walker X: a step, and the block at its leading edge (its right edge
;; walking right, its left walking left), at its feet's height less one.
stride:
CLC
LDA $40,X
ADC $42,X
STA $40,X
LDY $42,X
CPY #$01
BNE leftward
CLC
ADC #$0F
leftward:
STA $20
LDA #$CF
STA $21
STX $26
JSR solid
LDX $26
CMP #$00
BEQ strode
SEC
LDA $40,X
SBC $42,X
STA $40,X
LDA #$00
SEC
SBC $42,X
STA $42,Xこの前は: マリオのように固い、地面とブロックと壁