プレイ日記
Takumi Takumi.K0415
質問です。 プログラムで制限時間をつくりたいのですが、どうしたらよいでしょうか。 誰か教えてください。
1そうだね
プレイ済み
返信[1]
親投稿
TERA(LL) tera0413
方法はいくらでも有りますが、メインループの中にカウンタ仕込んで、規定の時間経過したらブレークするのが、簡単かな? 1フレームおよそ1/60秒なので60回ループでおよそ1秒(10秒なら600を指定、1分なら3600)ただし1ループが1フレームに収まってる必要が有りますが。
0そうだね
プレイ済み
返信[2]
親投稿
そひ ladixsofiya
基本内でやるなら WAIT 1のあるループ内で 変数を足し算(もしくは引き算)して 変数が制限時間の値になったら とする形かな。 ループ開始地点  WAIT 1  A=A+1  IF A==終了時間(フレーム) THEN 時間経過した後の処理 ループ開始地点へ 目的によりけりだけど FOR TO NEXT(回数指定ループ)で 制限時間分だけループさせるって方が楽な場合も有り。 MAINCNTってシステム変数に プチコンを起動してからの時間(フレーム)が入ってるので 最初の形に近いけど ループ前に 変数=MAINCNT+制限時間(フレーム) ループ内に IF MAINCNT==変数 THEN ~ とすると ほんの2,3手だけ楽が出来る場面も有り。
0そうだね
プレイ済み
返信[3]
親投稿
Takumi Takumi.K0415
お二人とも、ありがとうございました。 「A=A+1」や「MAINCLT」なるほどです! しかし、僕はINPUTを使い、その間は動作しなくなるので、A=~が難しく、MAIN~もその時だけの制限時間なので、INPUTを使っても(たくさん)大丈夫な方法を教えてください。 お二人とも、本当にすみません。
0そうだね
プレイ済み
返信[4]
親投稿
TERA(LL) tera0413
そひさんの書かれてる通り、MAINCNTを利用すれば、大丈夫と思います。 (時間の長さは任意に調整)
0そうだね
プレイ済み
返信[5]
親投稿
そひ ladixsofiya
ん~ INPUTから強制的に抜け出したいって事なのかな。 INPUTは 永久ループ⇒文字入力処理 という処理を呼び出すだけの命令と思われるので INPUTみたいな文字入力出来るモノを自作しない事には 多分 強制的に抜けるのは無理です。方法があったら知識として自分も知りたいかも。 INPUT中も時間経過するってだけなら MAINCNT一択かな 多分。 先に書いた通りシステム変数で 命令に左右されず内部で勝手に数値が書き換わってるので INPUTの直前に 変数1=MAINCNT(INPUTを開始した時間) INPUTの直後に 変数2=MAINCNT-変数1(現在の時間-開始時間) INPUT中の経過時間が出るので 経過時間カウント変数に加算して終了…だと思う。
0そうだね
プレイ済み
返信[6]
親投稿
TERA(LL) tera0413
あ~、INPUTで待ってる間も、MAINCNTは進んでいるので、INPUT直後に規定時間過ぎてたら「何らかの処理」は出来ますが、INPUT待ち中に「時間なのでそこで強制終了」ってのはできないと思います。 (プチコンでは、割り込み処理は、でき無かったかと。)
0そうだね
プレイ済み
返信[7]
親投稿
そひ ladixsofiya
あれ 変な事教えたかも。 INPUTの経過時間を出しても同じ事か。
0そうだね
プレイ済み
返信[8]
親投稿
そひ ladixsofiya
あ 良いのか。 AのカウントがINPUTで止まるから 止まった分を加算してんだよな。 数値関係には特に弱いので ちと混乱してしまった。
0そうだね
プレイ済み
返信[9]
親投稿
TERA(LL) tera0413
まぁ、視覚だけで良いのであれば、INPUT待ち中でもSPANIMは動いてるので、カウントダウン的な事は可能かと・・・ (画像はその一例)
0そうだね
プレイ済み
返信[10]
親投稿
そひ ladixsofiya
プログラムから察するに 文字は不要で 数値入力だけして欲しい感じのものなのかな。だとすると 簡易INPUTを自作するってのも手かな。 INPUTを細分化すると 永久ループ  タッチ座標を取得  タッチ座標が 文字座標内なら 文字を取得(※)  表示する為の文字ならPRINT  エンターの座標をタッチしたらループ脱出 数値だけが欲しい場合 ※の部分は 0~9 エンター バックスペース の12個のみ。 タッチでの作成がめんどい/意味不な様なら キー入力で DQの名前入力みたいなのとか。カーソル位置変数がどこどこなら 1とか2って感じのね。 すでにIFで変数判定してる様だし そう時間はかからずに作れるかも。自作しちゃえば 入力途中で強制脱出ってのも組み込めるね。
0そうだね
プレイ済み
返信[11]
親投稿
シュナ S_S_Schneider
横から失礼。 Takumiさんが作成しようとしているのって 制限時間内に 足し算問題を 何個答えられるか? というプログラムでしょうか?(スクショからそう判断した。) だとすれば 多分実装したい仕様として 数値を入力中でも「あと(制限時間が)はんぶんだ」とか表示させたいと思うので INPUTでは無理ですね。 (文字入力でプログラムが止まってしまうため。) そひさんのおっしゃるとおり 自作のINPUTのようなものを作成する必要があります。
0そうだね
プレイ済み
返信[12]
親投稿
シュナ S_S_Schneider
では どうするかというと INKEY$ という命令と INKEY$の中身を常に確認する ループを用意すれば なんとかなりそうです。 あとは 入力された文字が 数値であるかのIF処理と 正解/不正解判断IF処理 制限時間のカウントダウン処理 (カウント変数の増減と 規定カウントでのループ脱出【タイムオーバー】など…)を ループ内に用意して…… ……って考えると 少し大変ですな。
0そうだね
プレイ済み
返信[13]
親投稿
GRS grs8001
INPUT命令を自作するサンプル INPUT "="、C を INPUT5 "=" OUT C に 置き換えられる 簡易DEF です。 (おまけでカウントダウン表示付) 通常のINPUT命令と違うのは[BS]で消せない。 矢印でカーソル移動できない。 コレらを実装するともう少しDEFが長くなります。 (入力した文字列を操作したり、カーソル位置を移動させるだけですが)
0そうだね
プレイ済み
返信[14]
親投稿
Takumi Takumi.K0415
皆さん、ありがとうございました! 結論として、INPUT中は基本は無理で、自分でつくるか、MAINCLTを工夫してしないと無理ということですね!! 本当にありがとうございました!!
0そうだね
プレイ済み
返信[15]
親投稿
Takumi Takumi.K0415
色々と教えてくださったおれいとして、公開キー[BDX3V8V]の足し算の勉強を公開します。 DLしたら『そうだね!』おしてください!!
1そうだね
プレイ済み
返信[16]
親投稿
そひ ladixsofiya
あーINKEY$先生が居たか。プチコンだとBUTTONばっかですっかり存在を忘( 計算ゲームの中身を覗いてみた。 動いてるので全然問題ないんだけど 1行ずつ何をしてるのか考えてみるとLVUPに繋がるかも。 コレいらないんじゃね ってのが出て来たり コレ置く場所違うんじゃね ってのが出て来たり。 こういう些細な事で理解を深めておくと 命令自体は解らずとも書く場所だけは解るとか 何かバグが起きた時に どこで起きてるのか見当が付くとか そんな感じに自然となります。 障害物だらけの校庭を全速力で周回。休憩は一切無し。 こういうのに疑問を覚えたり 意外ッ!ゴールはもう1歩先にあったッ!! みたいな事に気づくと1LVUPします。(最初に書いてる通り 動いてるので無理に直す必要はなく 気づく事が重要。)
1そうだね
プレイ済み
返信[17]
親投稿
TERA(LL) tera0413
プログラム拝見しましたけど、結局制限時間はあきらめたんでしょうか・・・ この内容であれば、INPUTを強制中断しなくても、制限時間内に回答入力が間に合わなかった場合、(正解でも)間違いとして処理すれば、問題ないと思いました。
0そうだね
プレイ済み
返信[18]
親投稿
Takumi Takumi.K0415
今回のことで、 「いらなさそうなもの」や、 「時間がたつと間違い」とできることが分かりました。 ありがとうございました。
0そうだね
プレイ済み