![見出し画像](https://assets.st-note.com/production/uploads/images/90217651/rectangle_large_type_2_ae0748f28437e3b0c2c336d8a00bffad.png?width=1200)
PICO-8で遊ぼう(ビームを撃つ!編
ブルラビくんがビームを撃てるようにしてみます。
本日の教科書
下準備
![](https://assets.st-note.com/img/1667256520350-oTP7d7WRC9.png)
ただの白兎。
プレイヤーの情報をまとめる
いままではグローバル変数x, y, sなどにプレイヤー(PC)の情報をバラバラに入れていましたが、以前の記事のアイテム(ニンジン)と同様に一つのテーブル(PC)にまとめてみます。
![](https://assets.st-note.com/img/1667257830645-jEx3tjavEk.png)
PC用の情報をまとめただけでなくプレイヤー用にタブを切ってコードを集約させました。既にビームを撃つ処理も入っているので若干分かりにくいかも…。
今までのinput()とは処理を変え、キャラクターの移動や描画をそれぞれupdate_pc()、draw_pc()として関数を切り出し、input()はテーブルPCの数値の変更のみとしています。
機能・処理ごとに関数に分けて変更を加えやすくしています。
pc.dx, pc.dy という変数を導入しています。
input() で押された方向キーに応じて、pc.dx / pc.dyの値を設定します。update_pc()で、pc.dx/pc.dyの値に速さ(spd)を掛け合わせ、PCを移動させます。
ビーム!
![](https://assets.st-note.com/img/1667259108425-m8gFsyBbqS.png)
ほぼ、前回の記事のパーティクルと同じ様な処理ですね。
パーティクルではランダムで決定する部分が多めでしたがビームではランダムな要素はなしです。
前述したPCのinput()内のZキーを押したタイミングでadd_beam()が呼ばれテーブルbeamsにビームが追加されます。
それをupdate_beam()で位置の更新、draw_beam()で描画をします(_update()、_draw()で毎フレーム実行)。
メイン
![](https://assets.st-note.com/img/1667259753687-tr1Lqsu9kH.png)
メインの処理は基本的にPC、BEAMのそれぞれの処理を_update()、_draw()で回してるだけです。BEAMの処理はテーブルbeamsに登録された量だけforeach()でループさせます。
![](https://assets.st-note.com/production/uploads/images/90217458/picture_pc_30aa115c826361d130d8de31ec5ed869.gif)
うーむ。
イマイチですがイエロービーム(?)が撃てました。
ほんとにただの白兎…。
次回は調整編です。もうちょっとかっこよくなるよ!