コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
小学生の父 ◆maw1zv/RAy.b
2019/9/23 15:21
質問
プチコン4の時間について
いま、子供にキーボード入力練習させようと思ってゲーム作ってます。
単に画面表示された文字を入力させて合否判定しているだけですが。。。

そこで質問があります。
10問できるまでにかかった時間はゲームの終了から開始までの時間を引き算すればできたのですが、例えば、60秒で何問出来るかということをどうやって実現させればいいのか想像できません。
どんな関数とか処理を使えばよいのか教えてもらえませんか?
出来れば経過時間を画面表示したいです。

コメント

アバター
アオタク 2019/9/23 15:46 ◆6Tx4tgOERFcr
初期時間となる変数に60を入れて

WHILE  (変数)
?(変数):VSYNC
ーーー
WEND

の形を作り、間(「ーーー」の所)に内部カウントやらINKEY$()やら色々入れると出来るかも
(僕もまだ初心者なのであいまい)
アバター
アオタク 2019/9/23 16:40 ◆6Tx4tgOERFcr
3号での書き方ですが4と酷似または一致してると思いますのでどうぞ
(僕もMILLSECを使ったのは初めてです)
(カウントアップとカウントダウンがあります)

ーーーーーーーーーーーーーーーーー
OPTION STRICT
VAR START=MILLSEC,TIME=60,NOKORI=0
ACLS:WIDTH 16
WHILE 1
?(MILLSEC-START)/1000
NOKORI=TIME-(MILLSEC-START)/1000:?NOKORI
??"したが0になったらおわり
VSYNC:CLS
IF NOKORI<=0 THEN ACLS:BREAK
WEND
アバター
アオタク 2019/9/23 16:42 ◆6Tx4tgOERFcr
...VARの後などに表示上の改行が見えるかもしれませんが繋がっています
アバター
高原のな 2019/9/23 16:45 ◆bY8RViwvoODw
まず前提として,(INPUTやLINPUTなどの命令で入力を受け取る処理を実装されたと推測されますが,)INPUTやLINPUTでの入力中に時間に関する処理はできないので,途中で打ち切ったり残り時間を表示したりするには違うアプローチを取る必要があるということがあります.
途中打ち切り対応のINPUTもどきの処理を作るのはわりと面倒なので,ちょっと考えさせてください(追記:Naさんが示した例などが参考になります)

さて,本題の「60秒で何問できるか」は,例えば次のように分割することで個々の実現すべき目標が見えてくるのではないでしょうか.
「無限に出題し続け,解けた問題数を記録する」「60秒をカウントし,超えた時に出題を終了する」

このうち,60秒をカウントする仕組みはすでにできている「10問できるまでにかかった時間」を応用すれば簡単に実現できそうです.残りの「無限に出題し続け,解けた問題数を記録する」は,ループや配列といった処理を導入することで実現できると思います.(ループの処理はアオタクさんが先ほどから使っているWHILE〜WENDなどが扱いやすいです)
アバター
高原のな 2019/9/23 16:49 ◆bY8RViwvoODw
アオタクさん>
「??」(?が2つ繋がっている)は,プチコン4では別の命令の略記となるので「?:?」とするのが良いですね.(単体「?」はPRINT命令の略記です)

なお,MILLISECは後ろにカッコが必要になりました(プチコン4ではシステム変数が削除され,各種関数となったため)
アバター
Na 2019/9/23 16:52 ◆QoELVrBXBQCI
たぶん入力にINPUT命令を使っていると思うのですが、
INPUTでは入力中は他の命令を実行できませんし、一定時間がたったら入力をやめるみたいなこともできません。
代わりにINKEY$()を使います。
変数=INKEY$() を実行すると、もしその瞬間にキーが押されていればその文字、押されていなければ空文字列("")が変数に入ります。
例えばAが押されていれば"A"が変数に入ります。
実際の使い方としてはINKEY$()を何度も実行し、今まで入力された文字列を別の変数に入れて記憶しておく感じです。
下に簡単な例を書いてみました。
A$に今入力された文字、B$に今まで入力された文字を入れています。

@LOOP
A$=INKEY$() '文字入力
IF A$!="" THEN B$=B$+A$ 'B$に追加
CLS
PRINT B$ '入力された文字を表示
VSYNC 1 '(ループ内にこれを書かないと正しく動きません)
IF B$=="ABC" THEN PRINT "正解"
IF B$!="ABC" THEN @LOOP ' @LOOPに戻る
アバター
アオタク 2019/9/23 17:17 ◆6Tx4tgOERFcr
>>高原のなさん
「??」は違う命令になったんですね、初めて知りました。
MILLSECはカッコが必要になったんですね、これも初めて知りました。
アバター
アオタク 2019/9/23 17:24 ◆6Tx4tgOERFcr
あ、僕の投稿文中の「MILLISEC」のつづりにミスがありました(2つ目の「I」が抜けておりました)。
申し訳ありません。
アバター
Ryou Tanpo 2019/9/23 20:55 ◆AI5iRr9FjmkJ
「編集」で投稿修正できますよ
アバター
アオタク 2019/9/23 21:05 ◆6Tx4tgOERFcr
>>Ryou Tanpoさん
ありがとうございます。
ですがフィルタ回避で来てるからなのかログインが出来ず、編集も出来ません。すみません。
アバター
初心者 2019/9/24 0:41 ◆ULvuffpmw1rp
1秒=60フレームです。
例えば、
変数Aに1フレーム毎に+1ずつ代入し、
変数Aが60に達したら変数Bに+1すると、
変数Bが1秒ずつ増加されますよ。
もっと華麗な仕方があるかもだけど。
アバター
小学生の父 2019/9/24 21:55 ◆maw1zv/RAy.b
みなさんありがとうございます。
内容読んでトライしてみます。
アバター
初心者 2019/9/26 22:31 ◆ULvuffpmw1rp
解決したのかな?
アバター
小学生の父 2019/9/27 19:43 ◆maw1zv/RAy.b
まだです。
inputをinkey$に変えるところをやってます。
inkey$の入力値がリターンキーだったら合否判定するってところをやってます。
のんびりやってるのでなかなか進まずって感じです。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -