Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
1141 142 143 144 145 146 147 148 149 150 151 152 153 154
次のページ(過去)
返信[5]
親投稿
おちゃめ ochame_nako
詳しくは私のサイトのプチコン3号入門講座で書いていますが、BUTTON関数は同一フレーム内ならば同じ値を返します。 そのため60fpsで動作しているならばBUTTON関数の値をそのまま参照しても一旦変数に入れても全く同一動作なので自分が分かりやすい方でいいでしょう。 ただし、60fps以外で動作している場合は結果が変わる場合があるため注意が必要です
0そうだね
プレイ済み
返信[37]
親投稿
おちゃめ ochame_nako
ツララさんへ BUTTON(1)、BUTTON(2)、BUTTON(3)は60fpsで動作時でないと正常な読み出しができないというのは覚えておいた方が良いですね。 そのための対策が今回の問題の意図ですが、瞬時の判定は「前回押してなくて今回押したボタン」であるため基本さえ抑えておけば難しくありません。
0そうだね
プレイ済み
返信[36]
親投稿
おちゃめ ochame_nako
けいさんへ 本来は60fpsで動作しない場合のBUTTON(2)相当の判定方法のテストだったのですが、プログラミングは自由なので仕様通りに作られていれば何ら問題はないです。 最大3フレームの猶予というのが結構曖昧だったので補足で書いているようにVSYNC 3を活かしておけば細かいことは気にせずOKというスタンスでした(笑) Godotさんへ VSYNC 3のままだと前回のボタン情報が必須であるためIFとTHENの間にすべてを収めるのは無理ですね。 VSYNC 1だったら IF (BUTTON() AND 15)==0 AND (BUTTON(2) AND 48)==48 THEN BEEP とすることができますが。
0そうだね
プレイ済み
返信[35]
親投稿
おちゃめ ochame_nako
pinfuさんへ 入門講座のビット演算の回では初心者向けに2進数や16進数の基本からAND、OR、NOT、XORの仕組みについて書く予定です。 BUTTON(2)の代用として(Aに前回のボタン情報、Bに今回のボタン情報が入っている場合)NOT A AND Bで押した瞬間のボタンが取得できますが、それがなぜなのかの解説も書きます。 コア/co.aさんへ VSYNC 3で動作時に3フレームの猶予があるかというと実際は先に押したボタンのタイミングで変わってくるし、私のプログラムでは3フレームの猶予はないため「3フレームまでOK」と解釈した場合にはそのようになってしまいますよね。
1そうだね
プレイ済み
返信[29]
親投稿
おちゃめ ochame_nako
抜けていた人があったので追記 ヒロブミさんへ 正解です。 というわけで正解者のカウント漏れがあったので訂正 回答者は全部でのべ17人、正解者は8人でした(正解率 47 %)
0そうだね
プレイ済み
返信[26]
親投稿
おちゃめ ochame_nako
コア/co.aさんへ 前々回のボタンを取得しているのはなぜかと思いましたが、最大3フレームの猶予という解釈の違いなんですね。 これだと最大で6フレームの差でも同時押しと見なされますが、問題としている部分はクリアしているので正解とします。 Godotさんへ いい線いっているのですが、残念です。 VSYNC 3ではBUTTON(2)が正常動作しないのでこの問題ではそれを何とか工夫して判定できるようにする必要がありました。
0そうだね
プレイ済み
返信[25]
親投稿
おちゃめ ochame_nako
ツララさんへ 現在押しているボタンしか考慮されてないためABボタンを押した瞬間はこれでは分からないですね。 pinfuさんへ せっかく変数BCに前回のボタンを入れているのに条件式ではそれが入ってないのが残念です。 あとサイトを見て頂きありがとうございます。 ねこはちさんへ 4度目の正直(?)で正解です。(比較演算はタイプミスで「=」になっていますが) べーさんへ 正解です。 InDoorさんへ 正解です。
0そうだね
プレイ済み
返信[24]
親投稿
おちゃめ ochame_nako
otta777さんへ 「==0」ならば正解だったのですが、残念です。 スーさんへ 正解です! 察しのようにVSYNC 3だとあくまで「最大」3フレームの猶予なのですが、3フレームの猶予が必要というわけではないです。 けいさんへ 正解です。 問題の意図としてはBUTTON(2)が使えない時の記述方法だったのですが、ちゃんと3フレームの差を考慮してBUTTON(2)が使えるプログラムを作るとはうれしい誤算です。 もやしもどきさんへ 正解です! 強引に1つの比較演算でまとめたところがすごいです。
0そうだね
プレイ済み
返信[23]
親投稿
おちゃめ ochame_nako
VSYNC 3は安易にBUTTON(2)を使えないように60fpsでない場合を意図的に作り出すためです。 あと同時押しというものの解釈において私が意図しているものと異なる解釈ができないように最大3フレームまでの差を許容と書きました。 こうすることであらかじめAボタンを押しておいて後からBボタンを押した瞬間を「ABボタンを同時に押した瞬間」という解釈をできなくしています。
0そうだね
プレイ済み
返信[22]
親投稿
おちゃめ ochame_nako
というわけで正解例はこちらです。 WHILE 1  A=B:B=BUTTON()  IF (A AND 48)==0 AND (B AND 63)==48 THEN BEEP  VSYNC 3 WEND ねっ!簡単でしょ? この正解例では「十字ボタンを押して無く、かつ、ABボタンを両方押している」という判定を(B AND 15)==0 AND (B AND 48)==48ではなく(B AND 63)==48という1つの式にまとめています。 これは私のプチコン3号入門講座でも書いている複数ボタンの入力判定ですがどのようなボタンの組み合わせであっても1つの式で簡単に判断が可能になります。
0そうだね
プレイ済み
返信[21]
親投稿
おちゃめ ochame_nako
回答者は全部でのべ18人、正解者は7人でした(正解率 39%) 《 ここがチェックポイント! 》 BUTTON(2)は60fpsで動作時以外は正常動作しないのでVSYNC 3を活かすには自前で押した瞬間のボタンを取得するプログラムを作る必要があります。 ループの1回前のボタンの状態を変数に入れておいて「前回押して無くて今回押したボタン」を調べればどのボタンを押した瞬間なのかが分かります。 つまり前回はABボタンを両方押して無く、かつ、今回は十字ボタンを押して無くて、かつ、ABボタンを両方押しているという3つの判定を行えば良いわけです。 ただし前回の時点では十字ボタンを押していても問題ないということに注意する必要があります。
0そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
難しいと思うのでとりあえずヒント この問題の鍵になるのはVSYNC 3と同時押しの最大3フレームまでの許容です。 すでに回答している方もこのヒントを見て改めて回答しなおすのも大歓迎です!(これって「正解ではない」と言っているようなものだけど)
0そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
《 補足 》 十字ボタンやABボタン以外のボタンが押されている場合でも正しく動作するようにしてください。 条件判断部分以外にも必要な命令等があれば追記は自由に行っても構いません。 「最大3フレームまでの差は許容」というのは例えばAボタンを押して1~2フレーム遅れてBボタンを押しても問題なく判定できるように意味ですが、これはVSYNC 3を活かせば特に気にする必要はありません。 他にも何か分からない部分、問題の不備な部分があればコメント欄でお願いします。 難易度はかなり高めですが、私のサイトのプチコン入門講座の内容を熟知していれば即答可能な優しい問題です。
0そうだね
プレイ済み
投稿
おちゃめ ochame_nako
プチコン3号のボタン入力判定の中~上級者向けの問題です。 ABボタンを同時に押した瞬間(最大3フレームまでの差は許容する)に十字ボタンを押していなかったらBEEPが鳴るプログラムを作ろうと思います。 条件判断部分を記述してこのプログラムを完成させてください。 WHILE 1  IF 条件判断 THEN BEEP  VSYNC 3 WEND 締め切りは1月22日の23時です。回答をする場合はネタバレチェックを忘れずにお願いします。 締め切り後に正解例を提示して正解者には「そうだね」を押します。 腕に自信のある人の挑戦求む!
1そうだね
プレイ済み
返信[31]
親投稿
おちゃめ ochame_nako
けいさんへ 結局は古くからBASICを使ってきた私と他の言語を使ってきてプチコンではじめてBASICに触れたけいさんとの差ということになるのでしょうね。 ANDを「かつ」として見なすか見なさないかの差も比較演算子が無いのを「省略」と見なすか見なさないかの差もそのためです。 コータさんへ ビット演算子ANDを「かつ」の代わりとして用いる場合には比較演算子さえ省略していなければ何ら問題はないため初心者には「省略しないで書く」というのを強く推していきたいと思った所存です。 そうすれば少なくとも誤動作が起きる心配はなくなります。
0そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
FLOORは要らなかったり/100はループ外に出せたりとか高速化できる余地はたくさんあります。 ちなみにプチコン3号では整数同士の計算は自動的に整数演算が行われているため整数型を使っても高速化できる余地はほとんどありません。
0そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
「ポリゴン アルゴリズム」とか「プチコン ポリゴン」で検索しましょう。 私はポリゴン表示プログラムはmkIIで作りましたが最大で300ポリゴン/秒くらいの速度でした。アンドアジェネシスもポリゴンでぐりぐりとはいきませんがリアルタイム(1~2fps)で回転させることができます。 New 3DSで動作するポリゴン表示プログラムでは最大で7000~8000ポリゴン/秒の速度が出ると思います。
1そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
BASICでは「=」が代入を表す演算子であることを明確にするため昔はLET A=1のようにLET命令が使用されていました。処理系によってはLETが必須だったり省略可能だったりして様々ですが、省略する書き方が広まりプチコン3号ではLET命令そのものがありません。
1そうだね
プレイ済み
返信[12]
親投稿
おちゃめ ochame_nako
A=A+1もINC Aも速度的には同一なので長い変数名を使用しない限りはINCのありがたみがないかもしれませんね。 余談ですが、プチコン3号は1.7976931348623158e+308までの計算が可能ですが、INC Aとしたときは上限値が9007199254740992になっています。
0そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
A$=A$+"DEF"もINC A$,"DEF"も処理時間は同一なので内部では同じ処理をしていると推測されます。 プチコンではマニュアルに記載されてない使い方はたくさんありますが、それが正しい使い方かどうか(正式な仕様かどうか)については制作元であるスマイルブームでないと分かりません。
0そうだね
プレイ済み