mid弗を使うのであれば、文章の数だけ/=文字の数、配列を用意し、配列分のforループ、一行ごとの文字数のforループ(各行同じ文字数)で、
for i=0 to 行数i
read a
for j=0 to 文字数j
read val(mid弗(a,j,1))
bgput 0,i,j,キャラ
next
next
と出来るのではないでしょうか?
BGGETの式としては正しいですが、取得できるのはアトリビュート込みの値ですので注意です。
奥、というのはその移動をさせない、という意味でしょうか?
移動予定の座標を先に判定をして、移動可能なら実際にその座標に移動させます。
XX=0:YY=0
IF BUTTON(0)==#UP THEN YY=-2
~略(4方向処理)~
IF (BGGET(0,X+XX,Y+YY,1) AND &H999)==0 THEN X=X+XX:Y=Y+YY
SPSET 0,X,Y
みたいな感じで。
実際はキャラのサイズが16x16などの大きさなのに対して、BGGETは1ドットでしか判定しないので、キャラの4隅で4回判定するなどの処理が必要な場合が多いですが。
実際の座標X,Yにいきなり加算してはいけません。(そういうやり方もありますが)
まずは移動予定座標の決定
XX=0:YY=0
IF B AND #UP THEN YY=-2
~略~
SPANIMはボタンを押された瞬間だけ実行。
Bとは別に「B2=BUTTON(2)」をあらかじめ書いておいて、
IF B2 AND #UP THEN SPANIM~
~略~
そして移動予定座標の4隅を判定。
4隅とも障害物でなければ、実際の座標を新座標に置き換える。
IF (BGGET(0,X+XX,Y+YY,1) AND &HFFF)!=416 && (BGGET(0,X+XX+15,Y+YY,1) AND &HFFF)!=416 && (BGGET(0,X+XX,Y+YY+15,1) AND &HFFF)!=416 && (BGGET(0,X+XX+15,Y+YY+15,1) AND &HFFF)!=416 THEN
X=X+XX
Y=Y+YY
ENDIF