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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0530
nukocnt23解決


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



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