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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
1014
daruma配列の要素が無効です』について10解決


daruma

リンク

2016/10/14(Fri) 23:49:36|NO.77124

こんばんは。
とあるサイトを参考にゲームを作ろうとしているのですが、

pos forwardx.tmp*30+winx-50,forwardy.tmp*30+winy-50

この行に対して、『配列の要素が無効です』というエラーが出てしまいます。 原因がわからなくて困っています。 HSP初心者でわからないことが多いのですが、よかったら教えてください



この記事に返信する


沢渡

リンク

2016/10/15(Sat) 00:55:56|NO.77127

forwardxとforwardyは、事前にdim命令で配列宣言しているでしょうか?
もしくは、tmpの数値が配列の要素数をオーバーしているということはないでしょうか?
ソース全体を見ればハッキリするのですが、おそらくそのどちらかではないかと思います。

それから、その配列変数の書き方は古いバージョンのHSPのもので、現在は推奨されません。
forwardx(tmp)のような書き方が推奨されます。



Space

リンク

2016/10/15(Sat) 01:01:25|NO.77128

そのエラーに関しては以下のページが詳しくてわかりやすいかと。
http://www.geocities.co.jp/Playtown-Yoyo/6130/hsp/hsp-error-array.html



daruma

リンク

2016/10/15(Sat) 10:49:21|NO.77130

>沢渡さん
ありがとうございます。
前のバージョンだったのですね。
元のソースはhttp://www.rinku.zaq.ne.jp/ultimate/dat/lecture/maze1.asなのですが、わかりますか?

>Spaceさん
ありがとうございます
参考にさせてもらいますね



沢渡

リンク

2016/10/15(Sat) 12:08:34|NO.77132

いえ、HSPBCのソースではなく、ご自身が作られたソースを見せていただきたいのですが。
HSPBCのソースなら何ら問題はないですし、エラーも発生しません。



daruma

リンク

2016/10/15(Sat) 13:05:22|NO.77135

>沢渡さん
そうなのですか!?
いえ、実はこのスクリプトをコピペして実行しようとしたら、line47にエラーが出てしまったんです



SquidSky

リンク

2016/10/15(Sat) 13:22:29|NO.77138

旧世代互換保持のためにドットを配列要素番号指定に使用しているために
浮動小数点がただ単一に0.1と書くだけでは小数にはならないのですね。
そろそろこれを廃止するべきだと考えます。



daruma

リンク

2016/10/15(Sat) 13:50:44|NO.77140

>SquidSkyさん
ありがとうございます
0.1では小数点にならないのですね・・・
ちなみにどうすればエラーがなくなるのでしょうか?



沢渡

リンク

2016/10/15(Sat) 13:54:53|NO.77141

すみません、上のは検証しないで書きました。
理由がわかりました。リンク先のソースはHSP2用のもので、HSP3の仕様に合っていない部分が多いのです。
HSP3の仕様に合わせた形で書き直してみました。

dim forwardx,4 dim forwardy,4 dim direction,1 forwardx=0,-1,0,1 forwardy=-1,0,1,0 exist "maze.dat" if strsize<0 : dialog "マップデータがありません" : end sdim map,strsize+1 bload "maze.dat",map notesel map ichix=6 : ichiy=10 gosub *draw repeat stick key,15 if key&15 : gosub*move wait 1 loop *move x=0 : y=0 if key=2 { x=forwardx.direction : y=forwardy.direction noteget tmp,ichiy+y tmp=strmid(tmp,ichix+x,1) if tmp="0" : ichix+=x : ichiy+=y : gosub*draw } if key=1 : direction=(direction+1)\4 if key=4 : direction=(3-(direction*-1))\-4 if key&5 : gosub*draw wait 10 return *draw redraw 2 repeat 9 noteget tmp,(cnt/3+ichiy)-1 tmp=strmid(tmp,cnt\3+ichix-1,1) if tmp="1" : color 100,150,150 : else : color 255,255,255 if direction=0 : tmp=cnt if direction=1 : tmp=(1+(cnt\3))*3-(cnt/3)-1 if direction=2 : tmp=8-cnt if direction=3 : tmp=(2-(cnt\3))*3+(cnt/3) boxf tmp\3*(ginfo_winx/3),tmp/3*(ginfo_winy/3),tmp\3*(ginfo_winx/3)+(ginfo_winx/3),tmp/3*(ginfo_winy/3)+(ginfo_winy/3) color ,100 tmp=(3-direction+1)\4 pos forwardx.tmp*30+ginfo_winx-50,forwardy.tmp*30+ginfo_winy-50 : mes "北" pos ginfo_winx-50,ginfo_winy-50 : mes"▲" loop color 200 : boxf ginfo_winx/3+10,ginfo_winy/3+10,ginfo_winx*2/3-10,ginfo_winy*2/3-10 redraw return



沢渡

リンク

2016/10/15(Sat) 14:03:56|NO.77142

エラーを起こしていた元凶は

tmp=3-direction+1\4
です。
HSP2では式の前の方から順番に計算していたため、これでもtmpの中身は
適切なものになるのですが、HSP3だと1\4が最初に計算されるので、
tmpの数値が3をオーバーしてしまうのです。
したがって、3-direction+1の部分を括弧で囲みました。
他の問題ある部分もこれと同様の変更を行っています。
あとは、winx→ginfo_winx、winy→ginfo_winyと、
strmidをHSP3の仕様に変えました。

HSP2と3はだいぶ仕様の違う部分があるので、入門用にHSP2の記事を参考にするのは
できれば避けた方が無難です。



daruma

リンク

2016/10/15(Sat) 15:13:41|NO.77143

>沢渡さん
ありがとうございます!
とても勉強になりました



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