|
|
|
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
| |
|
2012/6/25(Mon) 18:49:53|NO.47369
時間のカウントは、どうやっているのでしょう。
関係ない部分が多すぎます、時間に関係するところだけ
で作って下さい。
|
|
2012/6/25(Mon) 18:57:38|NO.47370
あの・・・TABを消されるとすごーく見難いです・・・。
それとコメントが少なすぎて何処がどうなってるのか分かりにくいです。
|
|
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
このような感じでしょうか??
|
|
2012/6/25(Mon) 21:06:18|NO.47372
WAIT 120 で、20分にしたいのでしょうか。
一番肝心な説明が抜けています。
|
|
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
| |
|
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分時が進むのでしょうか?
そう、やってみりゃ分かるでしょ
|
|
2012/6/26(Tue) 22:27:07|NO.47385
何度も親切にありがとうございます。
理解できました。
本当にありがとうございました。
|
|