ゲームなどのプログラムでは、一定の大きさの決まったグラフィック(キャラクタ)を表示する必要が出てきます。たとえば、自分自身や敵、アイテムなどを32×32ピクセルのキャラクタとして画面上に表示する、といった処理ですね。 COPY命令とは、「グラフィック画面のある領域の描画内容を他の場所に描画する」ものです。たとえば、(0, 0)から(31, 31)の32×32ピクセルの領域にキャラクタを描いておけば、それを他の場所(たとえば(64, 64)から(95, 95)の32×32ピクセルの領域など)に描くことができます。 LINE (300, 0)-(331, 31), 255, BF LINE (308, 8)-(323, 23), 12, BF として(300, 0)-(331,31)の32×32ピクセルの領域に適当なキャラクタを描いて COPY @3, (300, 0)-(331, 31) TO (300, 200) COPY文を実行してみましょう。下の方に、先ほどのキャラクタがコピーされましたね。 次に、キャラクタをカーソルキーで動かしてみましょう。カーソルキーの状態はSTICK関数で取得できるので、STICKでカーソルキーの状態を監視して、上下左右のキーが押されたら、その方向に新しいキャラクタを描いてみます。これは、キャラクタの現在位置をX、Yという変数に格納し、カーソルキーが押されたらその方向にあわせて増減していけばよいでしょう。そして、その変数で座標を指定してCOPYでキャラクタを描く。こうすれば、カーソルキーで上下左右にキャラクタを描くことができます。 10 CLS(3) 20 LINE(300, 0)-(331,31), 255, BF 30 LINE(308, 8)-(323,23), 12, BF 40 X = 64 50 Y = 64 60 IF STICK(0) = 7 THEN X = X - 32 70 IF STICK(0) = 1 THEN Y = Y - 32 80 IF STICK(0) = 3 THEN X = X + 32 90 IF STICK(0) = 5 THEN Y = Y + 32 100 COPY @3, (300, 0)-(331, 31) TO @3, (X, Y) 110 GOTO 60 STICK関数は、引数に0を渡すと、1なら上、3なら右、5なら下、7なら左……と現在のカーソルキーの状態を返します。この結果を元に変数XとYを更新して、グラフィック画面にCOPYしていくとキャラクタの描画位置をカーソルの動きにあわせて移動できるわけです。 では、実行してみましょう……カーソルキーをいじると一瞬で画面の外にすっ飛んでいきましたね(^^;。描画の後に、一定時間待機するWAITを入れてみましょうか。 105 WAIT(60) WAITは、ミリ秒単位の指定時間だけ待機します。これで、実行してみればカーソルで上下左右にキャラクタを描いていけるはずです。 まず、前回の描画位置を記憶するために変数XXとYYを用意しましょう。これらの変数に。描画位置の変数XとYが更新される前の値を入れます。 55 XX = X 56 YY = Y 続いて、XとYの描画が行われる前に(XX, YY)から32×32の範囲を(今回の背景は黒一色なので)黒く塗りつぶせば、以前描いたキャラクタを消すことができます。 95 LINE (XX, YY)-(XX + 31, YY + 31), 0, BF 実行してみると、多少ちらつく感じはありますが、カーソルキーでキャラクタを「移動」することができるようになっているはずです。 最後に RENUM として、行番号を整理しましょう。今回のプログラム全体は以下のようになります。 10 CLS(3) 20 LINE(300, 0)-(331,31), 255, BF 30 LINE(308, 8)-(323,23), 12, BF 40 X = 64 50 Y = 64 60 XX = X 70 YY = Y 80 IF STICK(0) = 7 THEN X = X - 32 90 IF STICK(0) = 1 THEN Y = Y - 32 100 IF STICK(0) = 3 THEN X = X + 32 110 IF STICK(0) = 5 THEN Y = Y + 32 120 LINE (XX, YY)-(XX + 31, YY + 31), 0, BF 130 COPY @3, (300, 0)-(331, 31) TO @3, (X, Y) 140 WAIT(60) 150 GOTO 60 |