|
|
2019/10/10(Thu) 00:25:11|NO.88617
二次元配列への数値の入力がうまくいきません。
教えて君で申し訳ないのですが、4,5時間必死に考えました。
誰か助けてください。
#module
dim back,256
dim jump_capturePos,32
dim jump_way,32
dim jumpBuf_capturePos, 32, 32
dim jumpBuf_way, 32, 32
dim jumpBuf_captureCount, 32
dim jumpBuf_from, 32
dim jumpBuf_to, 32
dim moveBuf_from, 64
dim moveBuf_to, 64
#defcfunc CaptureInput var jumpNum, var from, var to, var captureCount, local i, local j
for i,0,captureCount,1
jumpBuf_capturePos(jumpNum,i) = jump_capturePos(i);ここでエラーとなる。
jumpBuf_way(jumpNum,i) = jump_way(i)
next
jumpBuf_from(jumpNum) = from
jumpBuf_captureCount(jumpNum) = captureCount
jumpBuf_to(jumpNum) = to
jumpNum += 1
return jumpNum
#global
|
|
2019/10/10(Thu) 09:00:17|NO.88618
#module
dim back,256
dim jump_capturePos,32
dim jump_way,32
dim jumpBuf_capturePos, 32, 32
dim jumpBuf_way, 32, 32
dim jumpBuf_captureCount, 32
dim jumpBuf_from, 32
dim jumpBuf_to, 32
dim moveBuf_from, 64
dim moveBuf_to, 64
// これ↓を呼んだだけならそれ↑が実行されてないじゃない。
#defcfunc CaptureInput var jumpNum, var from, var to, var captureCount, local i, local j
for i,0,captureCount,1
jumpBuf_capturePos(jumpNum,i) = jump_capturePos(i);ここでエラーとなる。
jumpBuf_way(jumpNum,i) = jump_way(i)
next
jumpBuf_from(jumpNum) = from
jumpBuf_captureCount(jumpNum) = captureCount
jumpBuf_to(jumpNum) = to
jumpNum += 1
return jumpNum
#global
// それの初期化用の#deffunc作って、ここら辺から呼び出したり
|
|
2019/10/11(Fri) 02:27:31|NO.88619
質問を簡略化してみました。
これどこが間違っているのでしょうか?
gosub *test
stop
dim a,32,32
*test
for i,0,32,1
for j,0,32,1
a(i,j) = 0;ここでエラーとなる。
next
next
return
|
|
2019/10/11(Fri) 08:24:07|NO.88621
横から失礼します。
プログラムの流れを追っていくと、
dim a,32,32
が実行されないのでは?ということかと。
なので、初期化用の命令を実装してその中でdimしたらよいのでは、
ということだと思います。
|
|
2019/10/11(Fri) 08:25:00|NO.88622
Dimの前にGosubしてるからでは?
|
|
2019/10/11(Fri) 11:23:26|NO.88623
HSPからは
gosub *test
stop
*test
for i,0,32,1
for j,0,32,1
a(i,j) = 0;ここでエラーとなる。
next
next
return
としか見えない事が原因だな。
|
|
2019/10/11(Fri) 16:12:24|NO.88625
解決しました。ありがとうございました。
|
|
2019/10/12(Sat) 00:27:50|NO.88627
こんばんわ。解決したとのことですが、解説を少し
MZ-SOFTさんはRubyとかC/C++とか多言語から来た人なのでしょうか
Rubyではルーチンとして通らない場所も実行するっぽいですが
HSPはルーチンとして通ったとこだけ実行します
C/C++とかだと
グローバル変数は関数の外側で定義するっぽいですが
HSPでは基本変数はグローバル変数です
ローカル変数もあるっちゃあるんですが
少々めんどくさいですし、遅いです
で、最初の投稿のdimとかは
ルーチンで通らない場所でdimしてるので
HSPでは意味のない記述になっています
それでも一次元配列はなんとかなるのは
HSPの変数はデフォルトで一次元配列としても動き
配列の
サイズも可変長が可なのでなんとか動きます
dimで定義しているためではないです
(このスレの最初投稿のdimではという意味で)
HSPの2次元配列とかはルーチンで通った時に
サイズを確保するので
dim等で2次元配列を仕様したい時は
2次元配列を定義するdim文を通れば
2次元配列が使えるようになります
|
|
2019/10/12(Sat) 13:15:43|NO.88630
Y_repeatさん、助言ありがとうございます。そのとおりC/C++・C#を主に使っています。
|
|