HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0928
TAerror7のわけ2解決


TA

リンク

2012/9/28(Fri) 21:07:38|NO.49613

こんばんは。
よろしければ、回答よろしくおねがいします。

http://pokopokogame.blog55.fc2.com/category9-2.html
のサイトさんに掲載されているプログラム(STEP2-6)の 配列変数map を少しいじって、壁に穴をあけました。

そして、
そのプログラムを実行し、あけた穴に突っ込むと error7 がでました。
なぜエラーが出るのか、その理由がわかりません。


理由と解決策を教えていただけませんか?
よろしくお願いします。


<以下、変更後プログラム>


screen 0, 400, 400 randomize title "step2-2" font "", 20 x = 5 // X座標 y = 5 // Y座標 // 配列変数[ マップ ]を用意する dim map, 20, 20 map(0, 0) = 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 map(0, 1) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 2) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 3) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 4) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 5) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 6) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 7) = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 8) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 9) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 10) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 11) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 12) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 13) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 14) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 15) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 16) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 17) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 18) = 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 map(0, 19) = 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 // メインルーチン *main redraw 0 wait 5 // 背景を塗りつぶし color 255, 255, 255 boxf color 0, 0, 0 gosub *draw_map gosub *draw_chr gosub *check_key redraw 1 goto *main // マップを描写 *draw_map mx = 0 // X座標を保持するための変数 my = 0 // Y座標を保持するための変数 repeat length(map) repeat length2(map) // マップデータが1の場合壁を描写 if map(mx, my) = 1 { color 200, 200, 200 boxf mx*20, my*20, mx*20+20, my*20+20 } mx += 1 loop my += 1 : mx = 0 loop return // キャラクター描写 *draw_chr color 0, 0, 0 pos x*20, y*20 mes "●" return // キー入力チェック *check_key stick key, 15 gosub *check_map // [ move ]フラグが0の時だけ移動可能です if move = 0 { if key = 1 : x -= 1 : if x < 0 : x = 0 if key = 2 : y -= 1 : if y < 0 : y = 0 if key = 4 : x += 1 : if x >= 20 : x = 19 if key = 8 : y += 1 : if y >= 20 : y = 19 } return // 壁があるか調べる *check_map move = 0 // 動けるか判断するフラグ if key = 1 : a = x - 1 : b = y if key = 2 : a = x : b = y - 1 if key = 4 : a = x + 1 : b = y if key = 8 : a = x : b = y + 1 if key > 8 : a = x : b = y // 移動したい座標に壁がある場合は[ move ]に1を代入 if map(a, b) = 1 : move = 1 return



この記事に返信する


ZAP

リンク

2012/9/28(Fri) 21:15:55|NO.49614

外壁のさらに外側をチェックしようとして、
配列の要素数をオーバーしていませんか?



TA

リンク

2012/9/30(Sun) 23:18:59|NO.49647

わかりました
ありがとうございました!!



ONION software Copyright 1997-2023(c) All rights reserved.