cnt
nuko 2013/5/30(Thu) 01:03:27|NO.54414
cnt命令がよくわからないです。
HSP最近はじめたものです。
cnt命令を使ってメッセージボックスに数値をカウントしてるサンプルだれか作ってもらえませんか?><
kanahiron 2013/5/30(Thu) 01:37:35|NO.54415
ヒントだけ
cntは命令ではなくただの変数です
repeat-loop内に mes cnt
と書けばわかるでしょう
適切なwait、もしくはループ回数を指定するのをお忘れなく
菊岡万次郎 2013/5/30(Thu) 06:08:25|NO.54416
ぼくもHSPはじめたばかりですけど、
よかったらどうぞ(´Д`)
repeat
mes ""+cnt
loop
cntって言うのはどうやらループした回数が入る変数みたいなものらしいですね!
check 2013/5/30(Thu) 10:56:54|NO.54419
ちなみに、菊岡万次郎氏の投稿したスクリプトを実行した場合、
HSPがフリーズし、PCも重くなるので注意。
以下のように、wait, awaitを挟んでやればいい。
wait, awaitについてはF1ヘルプで検索してくれ。
repeat
mes cnt
await 16
loop
菊岡万次郎 2013/5/30(Thu) 13:02:37|NO.54420
あ!しまった!waitいれるの忘れました。
すいません!
nuko 2013/5/30(Thu) 14:41:36|NO.54422
なるほどー!
このループから一度外れてしまうと0からまた再度カウントって感じですねー
repeat : await 16
mes cnt
loop
これですっきりしました^^
ありがとうございます!
nuko 2013/5/30(Thu) 14:55:01|NO.54423
度々すみません
最初に決めている数値にcntを入れる場合はどうしたらいいんでしょうか?
例えば最初に40っていう値があれば
そこから41,42,43,44みたいな感じで。
あと、cntは+1しますが、+4とかはできないんですか??
nuko 2013/5/30(Thu) 15:02:43|NO.54424
例えば
repeat 100
value.cnt = cnt
loop
; 数値表示
repeat 10
; 要素番号が0と10の倍数だけ
mes value(cnt * 4)
loop
これで0から掛×4をしていく形ですが
初期値が0ではなくて40とか60とかにしたいです
nuko 2013/5/30(Thu) 15:09:10|NO.54425
度々度々度々すみません><
上に書いてるものは解決しました;;
count=90000 //初期値
repeat 10
mes count
count=count+4
loop
ですが
count=$90000
repeat 10
mes count
count=count+4
loop
これだとカウントできません。
これはどうすれば解決できますか?
たびたびたびたびもうしわけありません;;
fortunehill 2013/5/30(Thu) 15:23:25|NO.54426
/*蛇足*/
repeat 10
mes cnt
if (cnt == 5) {continue cnt+3}
await
loop
nuko 2013/5/30(Thu) 15:48:53|NO.54428
度々度々度々度々度々マジで申し訳ないです;;
(16進)(10進)
$90000=589824
ですが
16進数にそのまま+4を永遠にループしていきたいです。
なんか説明下手ですみません
あり 2013/5/30(Thu) 16:19:37|NO.54429
16進数表示ならstrfを使います。
count=$90000
repeat 10
mes strf("$%x",count)
count=count+4
loop
nuko 2013/5/30(Thu) 19:41:58|NO.54433
ありsann
うほっ!
なるほどお!
新しい関数頑張って覚えていきます^^
ありがとうございました!!
nuko 2013/5/30(Thu) 20:32:30|NO.54436
repeat
suuti.0 = $10 :suuti.1 = $20 :suuti.3 = $30 :suuti.4 = $40・・・・・・・・・・・・・・・
suuti.cnt
loop
*owari
stop
このソースですが、suuti.60になったら*owariに飛ぶようなソースコード書いてもらえませんか?
loopの前に
suuti.60=goto*owari
とかは宣言できませんでした;;
ht. 2013/5/30(Thu) 20:38:17|NO.54438
変数に命令を格納することはできません。関数の戻り値なら可能ですが。
repeat
suuti.cnt = 16 * cnt + 16
mes strf("$%x",suuti.cnt)
if cnt == 60 : goto *owari
loop
*owari
stop
nuko 2013/5/30(Thu) 20:51:33|NO.54439
htさん
なるほど。。。いろいろルールみたいなのあって覚えるの大変ですね。。
では
repeat
suuti.0 = $10 :suuti.1 = $20 :suuti.3 = $30 :suuti.4 = $40・・・・・・・・・・ : suuti.854 = $8540
suuti.cnt
loop
*owari
stop
上のソースで最後の数値が不明の場合に854をメッセージで表示して
またcntで855になった場合エラーが起こりますが
その対処法はどうすればいいですかね??
つまり854を表示して*owariにジャンプする方法です!
ht. 2013/5/30(Thu) 21:37:45|NO.54440
最後の数値が不明という意味がよく分かりませんが、
854要素目の代入でループから抜けたいのならcnt==60を854に変更すればいいと思うのですが。
どういうソースを書いた結果どういうエラーが起きたのかが分からないと何とも言えません。
ht. 2013/5/30(Thu) 21:53:31|NO.54442
そういえば、repeatの最中にgotoを使わない方がいいのを忘れていました。
repeat内でgotoを使ってループを抜けるという処理を30回程行うとエラーが発生します。
先程書いたソースを使用する場合は以下のように変更しておいてください。
repeat
suuti.cnt = 16 * cnt + 16
mes strf("$%x",suuti.cnt)
if cnt == 60 : break
loop
goto *owari ;この場合はすぐ下に*owariが続くので書かなくても同じ
*owari
stop
nuko 2013/5/30(Thu) 23:24:07|NO.54443
ht.さん
ありがとうございます
そういえば、repeatの最中にgotoを使わない方がいいのを忘れていました
もしこれをしてしまうとネストが深すぎる。。みたいなのが出ますよね。
そこでそのエラーをonerrorで無理矢理出さないようにもできますよね?
それとcntが一定の数値以上になるとそれ以上あがらない。とかできますか?
ht. 2013/5/31(Fri) 00:16:47|NO.54444
> cntが一定の数値以上になるとそれ以上あがらない。とかできますか?
cntを変更できるのは初期値(repeatの第二引数)だけで上限値を決めることはできません。
その代わりにcntを一度別の変数に代入して加工したものを使用することで解決できます。
下限,上限を指定したlimit関数を使うことで、ある数値の範囲を制限した結果を得ることができます。
n = 0
repeat 20
n = limit(cnt, 0, 10)
suuti.cnt = 16 * n + 16
mes "" + cnt + "回目:" + strf("$%x",suuti.cnt)
loop
> そこでそのエラーをonerrorで無理矢理出さないようにもできますよね?
エラーの種類によってはそういうことも可能ですが、本来onerrorはエラーメッセージや
ログ等を自分で管理するための命令なので根本的な解決には至らないことが多いです。
適当に実験してみた結果、なんだかちゃんと復帰できてるっぽい…?
ですが真似するのはやめた方がいいです。徐々に空きメモリが侵食されている可能性もありますし、
何よりエラーを前提とした仕様は紛らわしく、HSPの仕様変更が起きたときにも正常な動作が保障されないからです。
onerror *error
*main
repeat
i++
if i == 600 : break
goto *main
loop
mes "end"
title "エラー回数:" + err_cnt
stop
*error
err_cnt++
mes "nest error"
goto *main
nuko 2013/5/31(Fri) 00:20:38|NO.54445
ht.さん
すごいですね・・・
かなり知識ある方に教えてもらうととても解りやすいですw
エラーは根本的な解決にはならんのんですね・・・。。
それと、HSPのバージョンがあがって対応しない言語やらが出るとおもいますが
それは随時自分で対応していかないとだめなんですか?
変換みたいなのはできないんですかね・・・。。
それと、分かりやすい解説ありがとうございます^^
ht. 2013/5/31(Fri) 00:39:15|NO.54446
どんなプログラム言語・ソフトウェアでも大抵そうですが、
バージョンは3.2.5みたいに番号をいくつかに区切ることで変更点が大まかに分別されています。
ver表記等で検索すれば分かりますが、メジャーバージョンやマイナーバージョンなどと呼ばれます。
HSP2とHSP3では互換性が無いので変換作業が必要ですが、同じHSP3系ならそういう心配はほぼありません。
HSPではマイナーバージョンアップで新規命令が追加されることがありますが、
過去の命令についてはバグ修正が行われても仕様が一気に変更されたりすることはありません。
nuko 2013/5/31(Fri) 01:02:25|NO.54448
ht.さん
ほうほう、よくわからない単語が多いですがとりあえず大丈夫みたいですね^^
ありがとうございます!!
htさんのコードを今後生かしていきます^^
ありがとうございました!!!!
ヒロソフ 2013/5/31(Fri) 19:31:37|NO.54456
もう解決しているようですが
cntの初期値は下記のようにrepeatの第2パラメータで指定できます。
repeat 100 , 50
print cnt
loop