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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0625
A時間がどんどん進みます。9解決


A

リンク

2012/6/25(Mon) 18:23:09|NO.47367

購入ボタンを押すと、時間がどんどん進んでいってしまいます。
なぜそうなるのか、全くわかりません。

理由と対処法を教えていただけないでしょうか。
よろしくお願いします。


//変数// MO = 4;時間 月 DA = 1;時間 日 HO = 9;時間 時 TI = 0;時間 分 M = 10000;所持金 FK = 1000;価格 SK = 780;価格 TK = 800;価格 screen 0,522,219,,150,300 //リピートs// repeat redraw 2 gosub*drow gosub*check_money redraw 1 wait 120 loop //リピートe// *check_money //FK・SK・TKに+するか、−するかを決める// randomize FKA = rnd(2) randomize SKA = rnd(2) randomize TKA = rnd(2) //FK・SK・TKにどれだけ+するか、−するか決める// randomize FKP = rnd(10) randomize SKP = rnd(10) randomize TKP = rnd(12) //FK・SK・TKを計算する// if (FK >= 0 and HO >= 9 and HO < 15 ){ if (FKA = 0) { FK += FKP }else{ FK -= FKP } } if (SK >= 0 and HO >= 9 and HO < 15 ){ if (SKA = 0){ SK += SKP }else{ SK -= SKP } } if (TK >= 0 and HO >= 9 and HO < 15 ){ if (TKA = 0){ TK += TKP }else{ TK -= TKP } } return *drow cls font "",23 color 0,0,0 pos 350,0 : mes""+MO+"月"+DA+"日 "+HO+"時"+TI+"分" if (HO >= 9 and HO < 15){ pos 0,0 color 255,0,0 mes "販売中" } font "",18,1 color 0,0,0 pos 5,40 : mes "会社" pos 190,40 : mes "価格" font "",18 pos 20,70 : mes "金" pos 20,100 : mes "銀" pos 20,130 : mes "銅" pos 400,70 : input FKS,20,16 pos 400,100 : input SKS,20,16 pos 400,130 : input TKS,20,16 objsize ,18 pos 430,70 : button gosub "購入",*FKK pos 430,100 : button gosub "購入",*SKK pos 430,130 : button gosub "購入",*TKK pos 20,180 : mes "残金 "+M+"円" //時間の設定// TI += 20 if (TI = 60){ HO += 1 TI = 0 } if(HO = 24){ DA += 1 HO = 0 } //FK・SK・TKを表示する// pos 200,70 : mes FK pos 200,100 : mes SK pos 200,130 : mes TK return *FKK return *SKK return *TKK return



この記事に返信する


KA

リンク

2012/6/25(Mon) 18:49:53|NO.47369

時間のカウントは、どうやっているのでしょう。

関係ない部分が多すぎます、時間に関係するところだけ
で作って下さい。



GrapeColor(DION)

リンク

2012/6/25(Mon) 18:57:38|NO.47370

あの・・・TABを消されるとすごーく見難いです・・・。
それとコメントが少なすぎて何処がどうなってるのか分かりにくいです。



A

リンク

2012/6/25(Mon) 19:14:08|NO.47371

すいません。
改変してみました。


//変数// MO = 4;時間 月 DA = 1;時間 日 HO = 9;時間 時 TI = 0;時間 分 screen 0,522,219,,150,300 //リピートはじまり// repeat redraw 2 cls gosub*drow;文字などの描画 redraw 1 wait 120;時間の進むスピードを調整する loop //リピートおわり// *drow;文字などの描画 font "",23 color 0,0,0 pos 350,0 : mes""+MO+"月"+DA+"日 "+HO+"時"+TI+"分";時間の表示 objsize ,18 pos 430,70 : button gosub "購入A",*A pos 430,100 : button gosub "購入B",*B pos 430,130 : button gosub "購入C",*C //時間の設定// TI += 20;20分を経過させる if (TI = 60){;60分経過したことになると、 HO += 1;時を1時間経過させて TI = 0;分を0にする } if(HO = 24){;24時間経過したことになると、 DA += 1;1日を経過させて HO = 0;時を0にする } return *A return *B return *C return


このような感じでしょうか??



KA

リンク

2012/6/25(Mon) 21:06:18|NO.47372

WAIT 120 で、20分にしたいのでしょうか。
一番肝心な説明が抜けています。



A

リンク

2012/6/25(Mon) 21:25:15|NO.47373

はい。そういうことです。
実際の2秒でプログラム内の20分にしたいです。

私の書いたソースだと
何もせず放置しているときは、ちゃんと2秒で20分なのですが、
購入ボタンを押すと、押すたびに20分が経過してしまいます。


よろしくお願いします。



暇人

リンク

2012/6/25(Mon) 22:00:35|NO.47374

ボタン押すとWAITの待ち時間関係なくジャンプ先に行く
だから経過時間として使うことは出来ない
gettime()等でWAITとは別に経過時間を見る必要がある

//変数// MO = 4;時間 月 DA = 1;時間 日 HO = 9;時間 時 TI = 0;時間 分 WT = 2000;時間が進む間隔(2秒設定) ms TF = 0;時間経過フラグ screen 0,522,219,,150,300 //clsの代わりにboxfで画面クリアさせるからbuttonはループ前に一回だけ実行 objsize ,18 pos 430,70 : button gosub "購入A",*A pos 430,100 : button gosub "購入B",*B pos 430,130 : button gosub "購入C",*C tim_B = gettime(7) //前回のミリ秒として使用 //リピートはじまり// repeat redraw 2 color 255,255,255 boxf //clsで消すとredrawの意味が無くなってちらつくから(ボタンの作り直しも必要なくなる) gosub *time //時間処理 gosub *drow;文字などの描画 redraw 1 await 16 loop //リピートおわり// *drow;文字などの描画 font "",23 color 0,0,0 pos 350,0 : mes""+MO+"月"+DA+"日 "+HO+"時"+TI+"分";時間の表示 return *time TF = 0 tim_A = gettime(7) //現在のミリ秒 tim += ((tim_A - tim_B) + 1000 )\1000 //現在のミリ秒から前回のミリ秒を引いて経過時間に加算 tim_B = tim_A //前回のミリ秒として使用 if tim >= WT {//指定した間隔より経過したら tim - WT //指定した間隔を経過時間から減算(リセット) //時間の設定// TI += 20;20分を経過させる if (TI = 60){;60分経過したことになると、 HO += 1;時を1時間経過させて TI = 0;分を0にする } if(HO = 24){;24時間経過したことになると、 DA += 1;1日を経過させて HO = 0;時を0にする } TF = 1 //時間が進んだ(時間が進んだ時だけ処理したい時用) } return *A return *B return *C return

後NO.47367ので気になる所
randomizeは最初に一回実行すれば良い
wait 120は2秒じゃ無く1.2秒相当、2秒なら200



A

リンク

2012/6/26(Tue) 21:45:52|NO.47383

返信が遅れてしまい、申し訳ございません。


暇人さん、
指摘・解答ありがとうございます。
理由について理解しました。

ソース内容について質問なのですが、


tim += ((tim_A - tim_B) + 1000 )\1000

部分の\1000とはどのような意味なのでしょうか?

また、

WT = 2000


WT = 3000
にすると、3秒に20分時が進むのでしょうか?


どうぞよろしくお願いします。



暇人

リンク

2012/6/26(Tue) 22:22:40|NO.47384

\1000は1000で割った余りを出す

gettime(7)のミリ秒は0〜999だから前回より現在のほうが小さい場合がある
その補正として+1000して1000で割った余りを出す事で負数になるのを防いでる

tim_B = 900 tim_A = 200 mes ((tim_A - tim_B) + 1000 )\1000

> WT = 3000
>にすると、3秒に20分時が進むのでしょうか?
そう、やってみりゃ分かるでしょ



A

リンク

2012/6/26(Tue) 22:27:07|NO.47385

何度も親切にありがとうございます。
理解できました。

本当にありがとうございました。



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