自機の表示
ウィンドウを表示
まずは、ウィンドウを表示しなければ始まりません。
今回は、ワイド型スクリーンの比率に合わせて800×480ピクセルの
ウィンドウにしましょう。
;スクリーンを作成
screen 0, 800, 480
自機を表示する
今回のゲームの自機は、画像ではなく、文字の「●」です。
つまり、mes命令で表示できます。
表示する位置はどこにしたらいいでしょうか?
自機は移動するので、位置は常に変化します。
ということは・・・・変数を使います。
;スクリーンを作成
screen 0, 800, 480
;自機の位置
player_x = 100
player_y = 200
その変数の位置に、緑色で●を表示しましょう。
ついでに、そのままだと少し小さいので、フォントのサイズを32にします。
;自機の位置
player_x = 100
player_y = 200
;フォントの設定
font "MS ゴシック", 32
;自機を表示
color 0, 255, 0
pos player_x, player_y
mes "●"
これで、左から100、上から200の位置に、緑色で●が表示されると思います。
自機を移動させる
自機は、カーソルキーの押した方に移動しますが、
キー入力は次ページ以降で説明するとして、
とりあえず単純に右方向に移動させてみましょう。
変数player_xとplayer_yは、ウィンドウの左上からの距離を表しています。
つまりplayer_xの値を大きくすれば右に移動します。
;自機を表示
color 0, 255, 0
pos player_x, player_y
mes "●"
;自機移動
player_x = player_x + 5
これで実行すれば移動するでしょうか・・・?
しませんね。
これは、表示した後に変数の値を変えただけなので意味がありません。
移動させるためには、表示→移動→表示→移動→・・・を、
繰り替えさなければなりません。
繰り返し処理は以前repeat-loopを紹介しました。
それを使ってもいいのですが、今回は違う方法を紹介します。
次のように追加してください。
*メインループ
;自機を表示
color 0, 255, 0
pos player_x, player_y
mes "●"
;自機移動
player_x = player_x + 5
await 16
goto *メインループ
awaitは前に紹介したから大丈夫ですね?
「*メインループ」と書いていますが、これは「ラベル」と呼ばれるものです。
先頭に「*」をつければラベルになります。「*」の後ろは何でもOK。
で、ラベル自体は何かをする命令ではなく、
プログラム中にはさむ 「しおり」のようなものです。
なお、ラベルは先頭に空白を入れず、左端に書くのが通例です。
で、最後に追加した「goto *メインループ」。
これは「“*メインループ”というラベルのところにジャンプしろ」いう意味の命令です。
歌の歌詞によくある「※くりかえし」ってやつに似てますね。
これで、表示→移動→表示→移動→・・・を
1秒間に約60回繰り返すことになります。
実行してみましょう。
残像が残るので、太い線が伸びていくように見えますが、
●が右に移動している証拠です。
「repeat – loop」と「goto」の使い分け
さて、今回新しいループの方法を紹介しました。
ですが、今回のプログラムをrepeat – loopで書いても特に問題はありません。
では、どういう時はrepeat – loop を使い、
どういう時はgotoを使ってループを書けばいいのでしょうか?
これに関しては、特に正解はないのですが、次のように考えてください。
【repeat – loopがいいパターン】
・ループ回数が決まっている場合
・ループさせる処理があまり多くない場合
【gotoがいいパターン】
・ループ回数が決まってない場合
・ループさせる処理がある程度多い場合
今回のループは、★にぶつかってゲームが終了するまで
繰り返すわけですから、実際何回ループするか分かりません。
こういう場合はgotoを使ったほうがいいと思います。
画面をクリアする
●を移動させましたが、
残像が残っているので1本の線のようになってしまっています。
ちゃんと移動しているように見せるには、
一度表示した●を消してからちょっと右に移動する必要があります。
今回のゲームは、完成版サンプルを見てもらうと分かるとおり、
背景は青で塗りつぶしているので、
●を表示する前に画面を青一色で塗りつぶしましょう。
塗りつぶすには「boxf」命令を使います。
*メインループ
;画面をクリア
color 0, 0, 255
boxf
;自機を表示
color 0, 255, 0
pos player_x, player_y
boxfは「Box(四角く) Fill(塗りつぶす)」の略で、
画面全体を塗りつぶす命令です。
これで、画面真っ青→●表示→移動→画面真っ青→●表示→移動→・・・
というループになり、●が移動しているように見えると思います。
なお、PCのスペックによっては●がチラつく場合もありますが、
あとで修正しますので、とりあえず我慢しておいてください。
今回のポイント
-
「*○○○」と書くことでラベルという目印をつけることができる。
-
「goto *○○○」と書くと、指定したラベルの位置に ジャンプする。
-
「boxf」と書くと、画面全体を塗りつぶす。