更新処理を使って動きをつける

この記事はPICO-8を使ってゲームを作りに挑戦する初心者向けの記事です。連載になっているので初回から見たい方はこちらからどうぞ。

▷ レトロ風ゲームエンジンPICO-8でゲーム作ってみよう

 

今回からPICO-8のプログラムを勉強していきましょう。

PICO-8はLua言語というものを使います。あまりメジャーな言語ではないようですが言語なんて難しいことをするようにならない限り書き方がちょっと違うくらいでどの言語も同じようなもんですよ(笑)

というわけでやっていきましょう(‘ω’)ノ

プログラムで文字を表示する

まずは文字の表示からしてみましょう。プログラミングで最初にやる「hello world」ってやつですね!

PICO-8を起動したらESCキーを押してエディターを開きます。そこに

cls()
print("hello world", 60, 60, 7)

PICO-8エディタ画面

と入力してCTR+Rを押してください。

下の画像のように表示されると思います。

内容を簡単に説明すると、cls()は表示されているものを全部消してくれる関数です。

※関数は命令みたいなものです。また命令時に値を渡すことがありますがこれを引数と言って()内に書きます。

print()は文字を表示する関数です。引数は表示する文字列、x座標、y座標、色になっています。とりあえずこれらの引数を変えて遊んでみてください。ただしいくつかルールがあります。

  • 文字列は必ず「”」または「’」で囲むこと
  • 日本語は使わない(入力できなくなります)
  • x、y座標はどちらも0~127(これ以外は画面外になる。)
  • 色は1~15(0は黒で見えない)

変更したらまたCTR+Rで実行してください。

プログラムを保存する

では作ったプログラムを保存しましょう。

で、保存先ですが練習のプログラムをまとめて入れておくフォルダを作ってそこに保存するようにしましょう。

フォルダを作るにはコマンドプロンプトで「mkdir フォルダ名」と入力します。好きな名前を付けて作ってください。

フォルダを作ったら「cd フォルダ名」で移動します。そして「sample ファイル名」でプログラムを保存します。名前はなんでもいいですが

save sample1

とかにしておくと良いかと思います。

一度名前を付けると次回からはCTR+Sで保存できます。

コマンドプロンプトで「dir」か「folder」と入力して作ったファイルがあるか確認してください。

ファイルを作ったら今後はテキストエディタで開いて編集できます。

ゲームの更新処理

では次はもうゲームっぽいことをやっていきましょう。

PICO-8ではゲームに使われる重要な関数が3つあります。

  • _init()・・ゲーム開始時に最初に実行される
  • _update()・・更新処理。1秒間に30回行われる
  • _draw()・・描画処理。画面を書き換えるタイミングで呼ばれる(_updateの後)

この3つの関数は自動的に実行されます。

とりあえず実際に作ってみましょう

function _init()
  x = 0
  y = 0
end
function _update()
  x = x + 1
  y = y + 1
end
function _draw()
  cls()
  print("a", x, y, 7)  
end

さっき作ったプログラムの2行を消して↑のように入力して実行してみてください。Aの文字が左上から右下に移動していくはずです。

ざっくり説明するとx、yは座標を入れておく変数(入れ物)でゲーム起動時に_init()で両方とも0が入ります。そして_update()で座標が毎回1ずつ増えます。で、_draw()で毎回画面を一度奇麗にしてからAの文字をx、yの位置に表示しています。

関数の作り方

functionは関数を作るときに使う言葉です。functionの後は関数名で()を付けます。そして関数の終わりはendで閉じます。

functionとendの間が関数の中身です。この中身は中身だと分かりやすいように右に寄せます(インデント)。これはTABキーでする派とスペース2回でする派があります。ちなみにこの2派はキノコの山とたけのこの里の争いと同じくらい争われています(知らんけど)。

画面外に出ないように条件を付ける

update

今はAが画面外まで行ってしまいます。これを条件を付けて画面外に行かないように変更しましょう。

function _init()
  x = 60
  y = 0
  vx = 1 --追加
  vy = 1 --追加
end
function _update()
  x = x + vx
  y = y - vy
  if y < 0 or y > 127 then --追加 
    vy = -vy --追加 
  end --追加
  if x < 0 or x > 127 then --追加
    vx = -vx --追加
  end --追加
end
function _draw()
  cls()
  print("a", x, y, 7)  
end

「–追加」と書かれてる行が今回追加した部分です。ちなみに–はコメントでこれ以降の文字はプログラムに影響しません。※pico-8内ではひらがなとカタカナが使えますが漢字と濁点は使えません。↑をコピペすると文字化けします。

vx、vyはAの移動量です。この移動量を画面外に出そうになったときに+ーを反対にして画面外に出ていかないようにしています。

if文と条件

if文は指定された条件が正しいときにthen以下の処理を行います。条件はifとthenの間に書きます。

上の例では条件は2つあってy < 0とy > 127です。これはどちらか一つが満たされればいいのでorでつないでいます。もし両方満たす必要があればandを使います。

ifの終わりはendで閉じます。

数値を変えて遊んでね

今回はここまでです。

更新処理を使うことで動きが出てゲームっぽくなりましたね。

あとは数値をいじくって遊んでみてください。小数点以下も使えます。条件式も変えてみてください。

次回 ▷ 線、四角、円を動かして遊ぼう

 

BOOTHでサンプルプログラム無料ダウンロードできます

BOOTHでこのPICO-8入門講座で紹介したサンプルプログラムをダウンロードできます。

今回の記事の最後のプログラムが「sample2.p8」という名前で入っています。

◇ Posted by いんわん