← 課題一覧

小惑星をよける(3D)

宇宙船の後ろから見た視点で、迫ってくる小惑星をよけます。3D はライブラリを使わず自分で書きました——3D の点を回し、透視投影で画面に落とし、奥の面から塗って、光の向きで陰影を付ける。全部 Python です。音を出してお使いください。

0 ・ よけた 0 ・ コンボ ・ ベスト 0 ステージ 1 ・ ゲート あと 10 残り ♥♥♥ ・ 速さ 10.0 コマ/秒

 



    
やること:「スタート」(スペースでも)で始め、矢印キー(または w a s d、画面のボタン)で宇宙船を動かし、小惑星をよける。p か画面タップで一時停止。
  1. 小惑星は奥から迫ってきます。近づくほど大きく、回りながら来ます。いまの位置のままだとぶつかるものは赤みがかります。
  2. ぶつかると ♥ が 1 つ減り、しばらく点滅します。3 回で終わり。
  3. よけるたびに速さが上がります。速いほど視野が広がり、星が流れます。どこまでいけるか。
  4. よけた数が 10 になるたびに緑のゲートが来ます。中を通れば ♥ が 1 つ戻り、ステージが進みます。ステージが進むと小惑星の出方が増えます(1 個 → 左右 2 個 → 横一列の帯 → 大きいの)。
  5. 終わるとベスト(点・最高コンボ・よけた数)がこのブラウザに残ります。
  6. ギリギリで通ると点が高い:スレスレ +3、近い +2、それ以外 +1。スレスレ・近いが続くとコンボで ×2 ×3 …(×5 まで)。遠くをよけるか、ぶつかるとコンボは 0。ぶつかると画面が揺れます。
遠近:近いものは大きい(x' = x / z) 視差:近い星ほど速く流れる 隠面:奥の面から描き、裏側の面は描かない 陰影:面の向きと光の向きの内積

Python を読み込んでいます… (初回は数秒かかります)

このページは Python のコードがブラウザの中でそのまま動いています(PyScript)。 3D の点・回転・透視投影・面を塗る処理・隠面消去・陰影・世界の動きは CLI 版と 1 文字も違いません。端末は 128 × 80 ドットを ▀ の並びで、ここでは同じ式を 2 倍の板(256 × 160)で回して canvas に出しています。