プレイ日記
ピクロスに使うタイム表示を作りたいのですが、どうプログラムを組めば作れますかね…?
4そうだね
プレイ済み
返信[1]
親投稿
あきと SideBurnsM
MAINCNTというシステム変数があります。 これはプチコンが起動してから1/60秒ごとに数字が増えていく変数です。 ゲームを開始した時にこの数字を別の変数に保存しておき、ゲームを遊んでいる最中もMAINCNTを取得してその差分を見れば経過時間が取得できます。 CLS STARTCNT = MAINCNT @LOOP A =MAINCNT-STARTCNT MS =((A*100) DIV 60) MOD 100 S =(A DIV 60) MOD 60 M =(A DIV (60*60)) MOD 60 T =A DIV (60*60*60) T$=FORMAT$("%02D:%02D:%02D.%02D",T,M,S,MS) LOCATE 1,10:? T$ VSYNC GOTO @LOOP
1そうだね
プレイ済み
返信[2]
親投稿
MSの小数をカットして同じようなプログラムを作り、表示ができました。ありがとうございました。
0そうだね
プレイ済み
返信[3]
親投稿
何度もすいません…ピクロス内で「ポーズメニュー」を開いた時だけタイムを停止させて、プレイを再開した時にタイム加算も再開するようにしたいのですがどうたらできますか?
0そうだね
プレイ済み
返信[4]
親投稿
もうひとつ質問なのですが、ノーマルルールのピクロスで間違えて塗ったごとにタイムを4分加算したいのですが、どうすればいいですかね…?
0そうだね
プレイ済み
返信[5]
親投稿
あきと SideBurnsM
MAINCNTの方が正確な時間が取れるのですが、おおざっぱでも良いのであればMAINCNTではなくVSYNCを呼ぶたびに自分で時間を加算するという方法でも計測できます。 PLAYTIME=0 @LOOP ゲームの処理 IF PAUSEFLAG==0 THEN INC PLAYTIME VSYNC GOTO @LOOP A=PLAYTIMEとして代入すればあとは同じ処理で時間が表示できます。 VSYNCはだいたい1/60秒毎に呼ばれているというのを使って計算していることになります。 PAUSEFLAGという変数を作ってポーズ画面中は1、ゲーム中は0という風に作ればポーズ中は時間が加算されないという事が実現できます。
0そうだね
プレイ済み
返信[6]
親投稿
yos yos-taro
ADDCNT=0 A=MAINCNT-STARTCNT-ADDCNT などとしておく  ↓ ポーズメニューを開いたときにMAINCNTを取得  ↓ ポーズ解除時にMAINCNT取得  ↓ 差分をADDCNTに加算 ↑とかはどうでしょ?(ポーズメニュー時TIME停止の件) 間違えたときの 4分加算もADDCNT変数を使っちゃって DEC ADDCNT,60*60*4 などとするとか…
0そうだね
プレイ済み
返信[7]
親投稿
あきと SideBurnsM
PLAYTIMEは単純に数字が増えていくだけの変数なので、ミスした時は4*60*60をPLAYTIMEに足せばペナルティタイムを実現できます。 4*60*60の数字の根拠は大丈夫ですね?
1そうだね
プレイ済み
返信[8]
親投稿
yos yos-taro
おっとと・・・あきとさんの投稿に気付かず、助言しちゃいました…。失礼しました;; ピクロス、大好きなので、完成、楽しみにしてます~bb
0そうだね
プレイ済み
返信[9]
親投稿
正確なタイムにしたいのでyosさんの方法を使って作っていますが、なかなかうまくいかず…
0そうだね
プレイ済み
返信[10]
親投稿
なかなか動作しません…
0そうだね
プレイ済み
返信[11]
親投稿
あきと SideBurnsM
どんな風に書いているのか貼ってもらうのが早そうですね
0そうだね
プレイ済み
返信[12]
親投稿
私は単純にvsync で 60回目1秒・・・っと(´ρ`)
0そうだね
プレイ済み
返信[13]
親投稿
VSYNCだとnewと旧3DSで時間が変わりませんか?
0そうだね
プレイ済み
返信[14]
親投稿
あきと SideBurnsM
しょうごさんのプログラムが凄く重い計算をしているとかじゃないかぎり旧でもnewでもvsyncが1/60待つ時間は変わりませんよ。
0そうだね
プレイ済み
返信[15]
親投稿
ちなみにボタン操作の部分にGOSUBでTIME表示の部分を呼び出して、RETURNをしています。
0そうだね
プレイ済み
返信[16]
親投稿
変わらないんですね。ただなるべく正確にしたいので…
0そうだね
プレイ済み
返信[17]
親投稿
あきと SideBurnsM
YOSさんの方法をコードにしたものです。 Aボタンでポーズ。Bボタンで解除になります。一つ困ったのはポーズ中も時間はすすんでしまって、ポーズ解除したときに時間が減る動作をしていました。これはポーズ解除したときにやっとポーズしていた時間が確定するからなのですが、リアルタイムに表示しているときはプレィ時間を更新しないようにするのがいいかもですね。(このコードは対策されています)
0そうだね
プレイ済み
返信[18]
親投稿
ありがとうございます。ポーズメニュー中は停止することができました。
0そうだね
プレイ済み
返信[19]
親投稿
質問ばかりですいません…時間上限を99:59:59にしたいのですが時間は99で止まるようにできたのですが、分秒が59になると00に戻ってしまいます…どうしたら表示できますか?
0そうだね
プレイ済み
返信[20]
親投稿
あきと SideBurnsM
一番簡単なのは99*60*60*60+59*60*60+59*60以上になったら足さないようにする事だと思います。
0そうだね
プレイ済み
返信[21]
親投稿
なぜかボタン操作ができなくなりました。
0そうだね
プレイ済み
返信[22]
親投稿
あきと SideBurnsM
分からなくなったら画面にプリントしてボタンが取得できてるか、カーソル判定のルーチンに来ているか確認することが大事です
0そうだね
プレイ済み
返信[23]
親投稿
なぜかマスが飛んだりします。
0そうだね
プレイ済み
返信[24]
親投稿
あきと SideBurnsM
上のスナップショットのソースではvsyncをコメントアウトしていますね。 ボタン入力はvsyncを呼んでループしていないとうまく動きませんよ
0そうだね
プレイ済み
返信[25]
親投稿
先程保存一度プログラムを保存していたので、一度読み込み直したら動作しました。どうやら99:59:59の処理をするときにVSYNCをする前にRETURNしていたので動作しなかったみたいです。
0そうだね
プレイ済み
返信[26]
親投稿
あきと SideBurnsM
vsyncはメインループで重要な命令なのでメインループ側に置いておいた方がいいですよ。 今のままだと@TIMEをコメントアウトするとvsyncも呼ばれなくなって動作がおかしくなる可能性が。
1そうだね
プレイ済み