「プログラムはこうして作られる」 〜 「あのゲーム」を作ってみた
Zinnia さんから言及されてしまったので、ソースを出さないわけにも行くまいと思いまして。
現状は「1ブロックが落ちてきて、積もって、揃ったら消えて、上のブロックが下に落ちてきて、次のブロックが出る」ところまで。あと4つブロックが出せたら「あのゲーム」としては完成かな?現状デバッグ込みで111行。妥当かどうかはわからん。
コレを書いた理由はまあ色々あるんですが、主に「本の内容がどこまで頭に入ってるか」という確認と、あと、実はテトリス作ったこと無かったので取り組んでみるのも良いかな?と思ったもので。
ソースは下↓に張っておきます。
メモリ[55001] → 1 壁色 → 999999 ブロック色 → 998844 消す色 → 0 積もった色 → 442211 縦 → 1 横 → 5 落下時間 → 0 移動時間 → 0 移動方向 → 0 デバッグ(積もった色、 消す色) 壁を描く(壁色) 床を描く(壁色) 1 なかぎり (移動時間 = 0) × (メモリ[50006] + メモリ[50007]) なら 移動時間 → 6 移動方向 → (-1 × メモリ[50006]) + メモリ[50007] 移動方向 なら 移動できる?(縦、 横 + 移動方向) なら 横 → 横 + 移動方向 移動方向 → 0 移動時間 なら 移動時間 → 移動時間 − 1 落下時間 → 落下時間 + 1 落下時間 > 10 なら 当たった? → 移動できる?(縦 + 1、 横) = 0 当たった? なら 積もる(縦、 横、積もった色、 消す色) 縦 → 0 横 → 5 縦 → 縦 + 1 落下時間 → 0 ブロックを更新(縦、 横、 ブロック色、 消す色) 壁を描く(色) とは 回数 → 0 回数 < 20 なかぎり 四角を描く(回数、 0、 色) 四角を描く(回数、 11、 色) メモリ[100 + (回数 × 12) + 0] → 1 メモリ[100 + (回数 × 12) + 11] → 1 回数 → 回数 + 1 床を描く(色) とは 回数 → 1 回数 < 11 なかぎり 四角を描く(19、 回数、 色) 四角を描く(19、 回数、 色) メモリ[100 + (19 × 12) + 回数] → 1 回数 → 回数 + 1 移動できる?(縦、 横) とは 当たり → メモリ[100 + (縦 × 12) + 横] 出力 → 当たり = 0 積もる(縦、 横、 積もった色、 消す色) とは メモリ[100 + (縦 × 12) + 横] → 1 四角を描く(縦、 横、 積もった色) ブロックを消す(縦、 積もった色、 消す色) ブロックを消す(縦、 積もった色、 消す色) とは 回数 → 1 消える? → 1 回数 < 11 なかぎり 消える? → 消える? × メモリ[100 + (縦 × 12) + 回数] 回数 → 回数 + 1 消える? なら 回数1 → 縦 回数1 なかぎり 回数2 → 1 回数2 < 11 なかぎり 位置下 → 100 + (回数1 × 12) + 回数2 位置上 → 位置下 − 12 メモリ[位置下] → メモリ[位置上] メモリ[位置上] → 0 四角を描く(回数1、 回数2、 消す色) メモリ[位置下] なら 四角を描く(回数1、 回数2、 積もった色) 四角を描く(回数1 − 1、 回数2、 消す色) 回数2 → 回数2 + 1 回数1 → 回数1 − 1 ブロックを更新(縦、 横、 ブロック色、 消す色) とは 四角を描く(縦、 横、 ブロック色) メモリ[55000] → 1 四角を描く(縦、 横、 消す色) 四角を描く(縦、 横、 色) とは 縦 → 縦 × 5 横 → 横 × 5 回数1 → 縦 回数1 < (縦 + 4) なかぎり 回数2 → 横 回数2 < (横 + 4) なかぎり メモリ[60000 + (100 × 回数1) + 回数2] → 色 回数2 → 回数2 + 1 回数1 → 回数1 + 1 デバッグ(積もった色、 消す色) とは 回数 → 1 回数 < 11 なかぎり 回数 ≠ 5 なら 積もる(18、 回数、積もった色、 消す色) 回数 → 回数 + 1 積もる(17、 1、積もった色、 消す色) 積もる(17、 10、積もった色、 消す色) 積もる(16、 10、積もった色、 消す色)