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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0319
ペリドット変数の中身が思っているものと違う2解決


ペリドット

リンク

2017/3/19(Sun) 03:06:44|NO.78586

0〜9までの数字どうしの足し算を一定数自動でつくり、
その後チェックボックスで回答をつくるというプログラムを作りました。
mondaisu=40
*keisan randomize 0 for i,1,mondaisu left_number=rnd(9) right_number=rnd(9) gokei(i)=left_number+right_number;問題に利用する変数 if (i>0)&(i\20=0) {twenty_check=twenty_check+1};20までいったら20チェックに1追加 pos 100*twenty_check,20*(i-1-20*twenty_check);(20ごとに右へ,20したら上へもどる) mes ""+left_number+"+"+right_number+"";問題文の表示 next for j,1,mondaisu+1 pos ginfo_mesx,20*(j-1);1問ごとに下へ下がる input nyuryoku , 20 , 20;回答ボックスの作成、idは0からなのでj-1 objprm j-1 , 0;回答欄に0を表示、 objsel j-1;解答欄の選択 *kaito await 1;待機 getkey enter,13;キー入力受付 if (enter=1)&(int(nyuryoku)!=gokei(j)):objsel j-1{goto *kaito};間違えたとき、選択しなおして回答へもどる if (enter=1)&(int(nyuryoku)=gokei(j)):objenable j-1,0{next}else{goto *kaito};正解ならボックスを使用不可にし、違うなら回答へもどる
問題数が多くなると表示しきれないため、20問ごとに問題を改行するようにしたところ、
20問目から答えが予想されるものと全く違うものとなってしまい、
直したいのですが原因がわかりません。どうか教えてください。



この記事に返信する


kanahiron

リンク

2017/3/19(Sun) 03:51:10|NO.78587

配列やオブジェクトIDは0から始まるのにループでは1からはじめ1を引いて計算しているのはバグの原因になりますね。
他言語のご経験があるのでしょうか。HSPではfor-nextループよりrepeat-loopでのループがおすすめです。
また、ループ内でgotoを使うのは基本的にNGです。

とりあえず、10行目を

pos 100*twenty_check,50+(20*(i-1-20*twenty_check));(20ごとに右へ,20したら上へもどる)
に置き換えることで文字の表示位置を下げ、
12行目nextの次の行に

screen 1 repeat mondaisu-1 pos 100*(cnt/20), 20*(cnt\20) mes gokei(cnt+1) loop gsel 0
を挿入してみてください。
配列変数のずれが見てわかるようになると思います。

ちなみにinputでエンターを判定するのはgetkeyのループでももちろんできますが、onkeyを使うのがスマートです。
参考:http://lhsp.s206.xrea.com/command/input.html



ペリドット

リンク

2017/3/19(Sun) 20:27:06|NO.78600

そういうことだったんですね。
ありがとうございます。



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