ルーレット

BASIC入門編

ひろじいべーしっくch 第12回の動画の解説・補足。(0-012)

動画の8分23秒あたりに「公式リファレンスブック114ページより」とありますが
2023年9月12日発売の「2023年改訂版」より前の本の情報ですのでご了承下さい。

結論

SPDEF グラフィックページから定義番号ごとに絵を設定したり、原点を設定したりするよ。

LOADG 変更し、保存したグラフィックページを読みこむよ。

SPHOME 原点を設定するよ。

プログラム

今回のプログラムはこちら。(公開キー44425K433、LOAD“N12_ROULETTE”)

本プログラム、「ルーレット」は、Aボタンをおして、左に表示される絵を右に表示される絵に合わせることを目的にするゲームです。

このブログにおいてはなるべく専門用語を使用せずに非常に短く簡潔に説明しています。

詳細を知りたい方は公式リファレンス等も参照してください。

[]については省略可能ですが、一部の命令(例えばDIM命令等)については最低一つの[]は必要です。

動作の説明

おおまかな動作の説明です。

ラベルMAINより上の5行目まではSPSET等の初期設定です。

ラベルMAINの中では、8行目で、Aボタンを押したかどうかの判定。11行目で、ボタンを押してから11枚目から13枚目の絵で、あらかじめ示した右の正解の絵と一致すれば「あたり」の処理。一致していなければ、定義番号に1を足して、次の絵にする。

19行目以降、ラベルHYOUJIについては、絵を表示する処理のみのサブルーチンです。

起動後、絵(スプライト)の変化については、下図(0-0012図1)の通りです。

(0-0012図1)

(0-0012図1)

解決例1

解決例1.同じ絵の部分を新たに差し替えて解決。

上記の図(0-0012図1)では、下図(0-0012図2)の通り、SPDEF定義番号が異なるものの、重複する絵が表示されていました。

(0-0012図2)

(0-0012図2)

SPDEF定義番号が異なっていても絵柄が同じものがあることは想定外ではあったのですが、絵柄が全て異なっている場合との差を観察すると、解決策としては.同じ絵の部分を新たに差し替えて全て異なる仕様に変更して解決するか、絵柄が同じであることを踏まえて、該当する絵の処理をスルーして解決するか2通り考えられます。

具体的には、下記の変更(改造)処理を行うことによって、SPDEF定義を直接変更します。

変更後の絵(スプライト)の変化については、下図の通りです。

改造時に登場したSPDEF命令について解説します。

SPDEF
SPDEF スプライト番号,U,V,W,H[,アトリビュート[,表示フラグ]]

引数

スプライト番号:作成するスプライトの番号:0~4095

U,V:参照する画像のグラフィックページ上の座標

W,H:スプライトの大きさ:0~2048

アトリビュート(省略時は0。90度単位の回転や#Aで始まる定数の効果等。)

表示フラグ:作成したスプライトを表示するかどうかを指定する。(1で表示、0で表示しない。省略時は1。)

SPDEF

引数を設定しない場合には、SPDEF定義をデフォルト状態に戻します。(スプライトキャラクタ定義用テンプレートを初期状態に戻す)

上記(SPDEF スプライト番号,U,V,W,H[,アトリビュート[,表示フラグ]]、すなわちSPDEF引数あり)で設定した内容を、設定が無かった状態に戻す命令です。

なお、後述するLOADG命令によって使用しているグラフィックページが変更された場合には、その変更後に従います。この場合において、購入時のデフォルト状態に戻したい時は後述するACLS命令で戻すことができます。

SPDEF

解決例2

解決例2.同じ絵の部分を削除して解決

実際に削除するという訳ではなく、絵柄が同じであることを一旦踏まえて、該当する絵の処理の動作をスルーする方法です。

変更後の絵(スプライト)の変化については、下図の通りです。

補足

プチコン4に内蔵されているGAHAKUというツールと、LOADG、SPHOMEの命令の解説です。

GAHAKUの起動方法は、ダイレクトモード(コンソール画面)あるいはエディットモード(エディッタ画面)でマイナスボタンを長押しし、ソフトキーボードを起動します。コントロールボタン→GAHAKU.PRGで起動できます。

GAHAKU内でお好みにより編集した後には保存を行ってください。例では「SPRITE_TEST」という名でファイルを保存しています。

上方にSAVEボタンがあります。

FILESで表示してみると、「GRP:SPRITE_TEST」ということでGRPファイルとして保存されています。

グラフィックページとスマイルツール(SPDEF定義での表示)、SPSET命令との関係は次の図の通りです。

補足としてLOADG命令やSPHOME命令について解説します。続けて、LOADG命令によって書き換わったグラフィックページの内容を戻す場合には、ACLS命令を利用できるため、その解説も紹介します。

LOADG

LOADG “[ファイル種類:]ファイル名”,グラフィックページ

読み込むファイル名をダブルクォーテーションで挟んで指定します。

グラフィックページ:読み込んだ画像データを格納するグラフィックページ:0~5

LOADGを実行した後にその効果を保つ場合には、ACLS命令を行わない様にしてください。なお、ACLS命令では「ACLS 1」とすると、グラフィックに関するデータを消去せずに画面を消去できます。グラフィックを使用し、かつ画面を消す場合には「ACLS」を「ACLS 1」に変更して下さい。(ACLS命令の引数はグラフィックに関するGRP保存フラグ,SPDEF保存フラグ,GRPF保存フラグ [,ANIMDEF保存フラグ]で、保存する際には1、省略時は0で消去の対象となります。)

サンプルプログラム(グラフィックページの左上、最初のいちごのサイズ32×32を変更した場合で、GAHAKUで保存したファイル名を”SPRITE_TEST”とした場合。)

サンプルプログラム
サンプルプログラムの実行例
SPHOME

SPHOME スプライト番号,座標X,座標Y

スプライトのホーム座標(座標基準点)を指定します。

・ホーム座標はSPOFS(移動)、SPROT(回転)、SPSCALE(拡大・縮小)の基準点として使用します。

・SPCOL(衝突判定)では、始点X,Yを指定しない場合のデフォルト値としてSPHOMEの値を使用します。詳細はSPCOLの解説を参照して下さい。

・SPSET前に使うとエラーになります。

スプライト番号:基準点を設定するスプライトの番号:0~4095

座標X,Y:スプライトの左上を原点(0,0)とした相対座標

・ハードウェアの仕様により、実数値を設定すると参照画像が1ピクセルずれる事があります。

SPHOME 34,16,16

ACLS

ACLS GRP保存フラグ,SPDEF保存フラグ,GRPF保存フラグ [,ANIMDEF保存フラグ]

画面設定を全てクリアし、起動時状態に戻します。
・引数を指定すると、一部の設定のみリセットせずに保存することができます。

引数
GRP保存フラグ
1を指定するとフォントページを除いたグラフィックページをクリアせずに保存する(省略時は0。)

SPDEF保存フラグ
1を指定するとSPDEFの内容を保存する(省略時は0。)

GRPF保存フラグ
1を指定するとフォントページをクリアせずに保存する(省略時は0。)

ANIMDEF保存フラグ
1を指定するとANIMDEFで定義した内容をクリアせずに保存する(省略時は0。)

従って、上記LOADGの項で紹介した「ACLS 1」については、GRP保持フラグで「保持を指定」していることになります。購入時のデフォルトに戻したい時は単に引数無しの「ACLS」で戻すことができます。

まとめ

SPDEF グラフィックページから定義番号ごとに絵を設定したり、原点を設定したりします。また、単に引数無しでSPDEFと命令するとSPDEF定義を購入時のデフォルト状態に戻します。

LOADG 変更し、保存したグラフィックページを読みこみます。LOADGを実行してもACLSの命令によって消去させる場合があるので注意して下さい。

SPHOME 原点を設定します。

想定外のことが起きた場合に、想定内のこととの差を観察して下さい。デバッグ作業のヒントとなります。

コメント

タイトルとURLをコピーしました