ひろじいべーしっくch 第14回の動画の解説・補足。(0-014)
結論
STICK コントローラーのスティック状態を調べるよ。
READ DATA命令で定義した値を読み込むよ
プログラム
今回のプログラムはこちら。(公開キー44425K433、LOAD“N14_FIXMAZE”)

本プログラム、「固定迷路」は、左ジョイスティックで上下左右に移動、ゴールを目指すゲームです。
このブログにおいてはなるべく専門用語を使用せずに非常に短く簡潔に説明しています。
RESTORE命令など、一部の内容を省略している箇所があります。
詳細を知りたい方は公式リファレンス等も参照してください。
[]については省略可能ですが、一部の命令(例えばDIM命令等)については最低一つの[]は必要です。
STICK
STICK コントローラーID[,スティックID] OUT X,Y
コントローラーのスティック状態を調べる
引数
コントローラーID:調べたいコントローラーのID
(0の場合デフォルトコントローラー、1~4の場合通常コントローラーです。)
今回の動画では0、すなわちデフォルトコントローラーということですが、この話よりもまず通常コントローラーの場合についてはその1~4の数がコントローラーのプレイヤーランプの点灯数に対応します。デフォルトコントローラーというのは、全接続コントローラーの入力を合成して(プログラミング上、この場合、TVモードやテーブルモードでも)携帯モードとして扱う設定です。特にTVモードやテーブルモード、個別のコントローラーの細かい設定を意識しないでこの命令を使う場合は0を設定するものと考えておいてください。
通常モードでのコントローラーのプレイヤーランプの点灯数というのは、点灯箇所については下記サイトで確認してください。

スティックID
0 Lスティック
1 Rスティック
・省略時は0。
・スティックが1本しかない時に1を指定してもエラーにはならず、X,Y共に0が返ってくる。
返値
X,Y
スティックの傾き情報
・横方向(X)には左<->右で-1.0<->1.0。
・縦方向(Y)には上<->下で-1.0<->1.0。
・操作をしていない時にはX,Y共に0が返る。
スティックが劣化している場合において操作していない場合でもX,Y(今回のプログラムではSX, SY)の数値が返る場合が稀にあるようです。この場合においてSwitchで補正する方法は(設定→コントローラーとセンサー→スティックの補正)などがありますが、今回のプログラム上では次の様に-0.2から+0.2までの値を停止とみなすこともできます。
(補正前(17行目から21行目))

(補正後(17行目から21行目):-0.2から+0.2までの値を停止とみなす)

READ
READ 変数1[,変数2…]
DATA命令で定義した値を読み込む
・読み込めるデータがない場合、Out of data エラーが発生する。
引数
変数
読み込む情報を格納する変数(複数指定可能)
・最初のDATA文から順番に取得する。
・RESTORE命令を使用すると、読み込むDATA文を変更できる。
例1
READ X,Y,Z,G$
DATA 200,120,0,”JAN”
DATA 210,120,0,”FEB”
例2

例2の実行結果(READの実行回数とDATAの情報順が対応しています。)

DATA
DATA 定数式[,定数式…]
READ命令で読み込むデータを定義する
引数
定数式
・定数式には数値、文字列、他の定数、CHR$,RGB,RGBF,HSV,HSVF,DEG,RADの各関数、及びそれらの演算が使用できる。
・定数式であれば、数値も文字列も混在可能。
例
DATA 123,#C_RED,56,”SAMPLE”+CHR$(20)
RESTORE
RESTORE @ラベル
READ命令で読み込むDATA文を変更する
引数
@ラベル
読み込むDATA文の先頭に付けられた@ラベル名
・RESTORE “1:@ラベル名” などと、ラベル名の前に”数字:”をつけた場合、他のプログラムスロットも参照できる。
RESTORE 文字列でも指定できます。詳細は公式リファレンスで確認してください。
例

例の実行結果(7行目のRESTOREの実行により、8行目ではREAD文で読み込むDATAの情報の順番が変更され、ラベルの次の行にある-6.2の情報が変数Xに代入れています。)

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

ラベルMAINより上は画面の初期設定です。
ラベルMAINの中についての概略図は以下の通りです。

実行画面

補足
動画内7分36秒あたりにおいてDATA文の値を図式化したものです。

値0(黄色)は移動可能な空間。
値1(茶色)は移動不能な壁。
値2(灰色)は約71%の確率で壁となり、約29%の確率で空間となる。
動画内7分44秒あたり。値0(黄色)の一部において、ゴールまで到達できない場合が存在しない様に設計してある。

本来ならば壁を枝の様に発展させて生成するのが定番の「迷路」のプログラムですが、今回はDATA文の情報で一部を固定させて初心者にも親しみやすい迷路作りにしています。
以下は、動画内で「ナナメ移動は禁止した方がいいのでは?」と語っていた部分についての説明です。

動画の8分14秒当たり。進行方向のヨコとタテに壁が存在している場合においても移動できてしまう。

動画の8分20秒当たり。こんな風にして進むのを禁止する?別に構わない?
解決例
- (変数M[I,J]の情報を直接判定に扱う際には、本プログラムの10行目で値が2である場合において空間か壁かを確率により変更しているため利用できない。)進行方向のヨコとタテを第13回の「鬼ごっこ」で紹介したCHKCHRを利用してどちらか空間(値が32)であれば進行を許可する仕様にする。
- ジョイスティックの仕様から従来のボタンによる判定にする。ボタンの仕様においては、同時押しの場合を排除するプログラム設計にしやすいからです。
まとめ
STICK コントローラーのスティック状態を調べます。
READ DATA命令で定義した値を読み込みます。
RESTORE READ命令で読み込むDATA文を変更します。
本来ならば壁を枝の様に発展させて生成するのが定番の「迷路」のプログラムですが、今回はDATA文の情報で一部を固定させて初心者にも親しみやすい迷路作りにしています。
コメント