Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
1122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142154
次のページ(過去)
返信[6]
親投稿
おちゃめ ochame_nako
IF BT AND 16 THEN ~ というのは IF (BT AND 16)==16 THEN ~ から比較演算である「==16」を省略した書き方です。 特定条件下においては比較演算を省略して判定が可能ですが、そうでないと誤動作を招く場合があるためどのような場合に省略できるのかがよく分からないのであればIF (BT AND 16)==16 THEN ~ という書き方をオススメします。(==は付いているけどちゃんと同時入力に対応しているし誤判定も無くなります) もちろんボタン同時入力を考慮しない場面であればANDを使わずにIF BT==16 THEN ~ で全く問題はありません。
1そうだね
プレイ済み
返信[32]
親投稿
おちゃめ ochame_nako
したがって、私のサイトのプチコン3号入門講座では目に付きやすいANDやORを&&や||よりも先に採り上げて、ANDと&&、ORと||は違うものというのを強調しています。 どのように違うかは少しずつ覚えていけばいいので「違うもの」という認識さえあれば問題ないと思います。
1そうだね
プレイ済み
返信[31]
親投稿
おちゃめ ochame_nako
AND、OR、NOTがビット演算子ではなく論理演算子であったらそれはそれで旧来のBASICとは変わってしまうので誤解がありそうですが、比較演算が=ではなく==、<>ではなく!=になっている時点で旧来のBASICとは異なっているので初代プチコンからAND、OR、NOTが論理演算子であったらけいさんが言うような誤解をする人が現れることは無かったかもしれませんね。 ビット演算子はC言語と同じ&、|、~で問題はないですし初心者に分かりやすいモダンな要素を取り入れたBASICを主張するならばそれで良かったかもしれません。
0そうだね
プレイ済み
返信[30]
親投稿
おちゃめ ochame_nako
けいさんへ NOTに限らず、ANDやORも同様ですが、これにについては旧来のBASICを十分に使ったことあるか否かで反応が大きく変わるでしょうね。 私はすでにAND、OR、NOTを完全に理解した状態で&&、||、!を覚えたのでそういった誤解をした経験は全くありませんでしたが、新規に両方を覚える人は混乱する可能性がありそうですね。 もっとも上記コメントにあるように高速化やリスト短縮のため四則演算の算術演算子で代用していたので条件判断の結合としてANDやORを使う機会は少なかったでしたが(笑) pinfuさんへ そもそも論理演算やビット演算について完全に理解すること自体が初心者にはハードルが高いし、似たような意味をもつものが2つあればどのように違うのかが分からなくても当然だと思いますよ。
0そうだね
プレイ済み
返信[10]
親投稿
おちゃめ ochame_nako
上記訂正 DIEを関数の戻り値用の変数にするならばVARは不要ですね(でないと2重定義になってしまう)
0そうだね
プレイ済み
返信[27]
親投稿
おちゃめ ochame_nako
まぁBASICを30年以上使っているのでNOTがビット反転というのは身体に染みついているのも確かですが、分からなければヘルプやマニュアルで見るからビット演算の項目に書かれていれば論理演算の否定(反転)ではなくてビット演算の演算子と思うのが普通だと思いますよ。 と思ってマニュアル(命令表)やヘルプを見たら・・・ NOTが載っとらん(笑)
2そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
私が作ったDAMADE関数に1%(1/100の確率)で即死を追加するためにはVAR DIE=!RND(100)を追加すればOKです。 関数の戻り値にDIEを追加して判定時には即死判定から行えば実装完了です。 !はtrueとfalseを反転する演算子ですが、端的に言えば「0を1」に「0以外を0」に変える効果があります。 RND(100)は100分の1の確率で0を発生させますが、!を付けることで0を1にして、それ以外の値が出たら0にできます。 クリティカル判定もそれと同様の処理を行っています。
0そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
上記のコメントを補足すると「クリティカル」がウィザードリィのように即死を示しダメージとは別物ならば攻撃とは分けて一定確率で発生させることに意味がありますがドラクエの会心の一撃のようにダメージが大きくなるだけならばあえて分けない方が分かりやすく融通を利かせやすいです。(分けない方がクリティカルが出やすい武器を作るなども簡単にできる)
1そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
「%」で指定するならばRND(100)で100個の乱数を発生して場合分けをするというのがポピュラーなのですが、その前にクリティカルは攻撃命中には含まないのかとか、相手の防御力がやたら高くてダメージが与えられない状態のときはミス扱いにならないのかとかの疑問が出てきます。 ちなみにドラクエ風のダメージ計算やクリティカルが簡単に扱えるDAMADE関数を作りましたので興味があれば私の活動からどうぞ(改造自由)
2そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
InDoorさんへ BUTTON()関数の戻り値はVSYNCのタイミングで更新されているため1フレームの間に別のボタンを押しても同じ値を返します。 逆に言えばVSYNC 1を入れておかないと誤動作の原因になってしまうわけです。 本来ならば押した瞬間を得られるBUTTON(2)も瞬間の判定を何回も判定行われてしまいます。
2そうだね
プレイ済み
返信[25]
親投稿
おちゃめ ochame_nako
けいさんへ 「Aボタン以外のボタン」というのは「Aボタンではないボタン」というわけで否定的な表現になるわけですよね。 したがって、NOTはビット演算において否定となるわけです。(別トピの話題ですが) あと上記の15354は計算間違いで正しくは15343です。(偶数の時点で間違っていることに気づくべきだった)
0そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
私は変わらないのはコンピュータではなく使う人間側だと考えています。 今から20年前1995年というとまだスマホは無かったですが、その前身ともいえるPDAはすでに国産PDAの代名詞となっていたザウルスがありました。 大きさも昨今の大型化したスマホと同レベルでしたが、モノクロ液晶ということもあり数10時間の使用が可能でありモバイル性という面では今のスマホを上待っていたかもしれませんね。 20年で変わったことといえばコンピュータが身近になったことでしょう。 今やPCはほとんどの職場や家庭にもあるし、一番身近なコンピュータであるスマホも極めて高い普及率となっています。
4そうだね
プレイ済み
返信[23]
親投稿
おちゃめ ochame_nako
ツララさんへ !(B-16)に関しては私のネタバレコメントでも解説しています。比較演算子もビット演算子も無しで記述するならば必然的にこのようになってしまいます。 昔のBASICではANDやORが使えないものもありましたが「*」や「+」で代用していました。 速度やリスト短縮のメリットがあるためポケコンやプチコン(初代やmkII)では「*」や「+」を使い条件式の結合でANDやORはあまり使いません(複雑な判定ならばかなり短縮可能)
1そうだね
プレイ済み
返信[22]
親投稿
おちゃめ ochame_nako
でんぺんさんへ B==16とB AND 16は「==」が「AND」に変わったという認識(「Bが16の時」という意味と思っている)の人も初心者の中には多いし、初心者に説明する場合にもそのように説明している人を見かけますが、実際はIF (B AND 16)==16 THEN ~の「==16」を省略したものであるということを知っておかないと誤動作をするコードを書く可能性が極めて高くなってしまいますからね。 IF B AND 16 THEN ~は分かって使うならば問題ないですが、そうでないのならば比較演算子を書いておけば誤動作の心配はほぼありません。 比較演算子を省略するならば論理演算を理解しておくのが必要不可欠になると私は考えています。
1そうだね
プレイ済み
返信[21]
親投稿
おちゃめ ochame_nako
けいさんへ NOTの補足ありがとうございます。 pinfuさんの回答を尊重したというのと先日論理反転とビット反転(NOT)を使い分ける意味が分からないという人が居たので意図的にNOTを避けていました(笑) 日本語で書くならば「Aボタンを押している」かつ「Aボタン以外を押してない」となるため「Aボタン以外」というのをどのように行うかという部分になりますね。 NOTを使うのが最も確実ですが、プチコン3号の仕様であればAボタン以外のボタン情報である15354という数値を直接指定しても同じ意味になります。 私のサイトのプチコン3号入門講座のビット演算の回では2進数が分からなくても理解できるビット演算超入門から始まってANDやORだけではなくNOTやXORまで使いこなせるレベルまで書く予定です。
2そうだね
プレイ済み
返信[20]
親投稿
おちゃめ ochame_nako
Taku™¿¼³さんへ 使う機会がないとなかなか分からないから仕方ないと思いますよ。 論理反転の演算子「!」はプチコンmkIIからすでにあったのでmkIIを使っている人ならば知っている人は多いと思います。 あとC言語経験者ならば分かると思います。
1そうだね
プレイ済み
返信[50]
親投稿
おちゃめ ochame_nako
どうでもいい話ですが、OS()と書かれたら引数無しのOS関数にしか見えません(笑)
6そうだね
プレイ済み
返信[12]
親投稿
おちゃめ ochame_nako
それだけではなくAボタンとBボタンの両方を押した場合という判定も簡単に記述が可能になるというメリットがあります。 AボタンとBボタンの両方を押した場合はBUTTON()関数の戻り値は16+32であるため IF B==48 THEN ~と記述が可能です。 A、Bボタン以外のボタンが押された場合のことを考えるとビット演算が必要になります。 IF B==48 THEN ~ → (B AND 48)==48 THEN ~ 初心者が段階的に理解できる IF B==48 THEN ~ → IF B AND 16 && B AND 32 THEN ~ ボタン判定の書き方が急に変わるので理解が難しくなる
3そうだね
プレイ済み
返信[11]
親投稿
おちゃめ ochame_nako
IF B AND 16 THEN ~のように比較演算子のない記述はIF B==16 THEN ~を比較演算子なしで簡単に記述できるくらいの人でないと複数ボタンの入力判定を行う場合に誤動作をするコードを書いてしまう可能性があります。 したがって、100%確実に動く IF (B AND 16)==16 という書き方を私は推奨しています。 これはIF B==16 THEN ~の「B」が「B AND 16」に変わっただけなので論理演算に対する知識は要求されずビット演算に対する知識のみで理解できます。
1そうだね
プレイ済み
返信[10]
親投稿
おちゃめ ochame_nako
プチコン3号では0以外がtrue、0がfalseとして処理されます。 したがって、比較演算子が省略できるのは「0以外」か「0」かという場合で判断が可能な場合に限られます。 (BにBUTTON()関数の戻り値が入っている場合) IF B==16 THEN ~ これは次のようにしても全く同じであることは分かるでしょう。 IF B-16==0 THEN ~ 「0」か「0以外」かで判断可能なので比較演算を省略します。 IF B-16 THEN ~ ただし、この状態だと元のB==16と比べてtrueとfalseが反転していますので論理反転を行います。 IF !(B-16) THEN ~ これで完璧! 簡単でしたが、これがすぐに分かるレベルでないと比較演算子の省略はしない方が無難です。
3そうだね
プレイ済み