コミュニティアイコン プチコン 非公式コミュニティ プレイ日記

アバター
経済さん ◆LjHuF5fUoor/
2020/5/2 16:14
初心者講座を一応全部読みました。しかし、第13章の「サンプルプログラム7」から理解が追いつかなくなってしまいました。また時間を空けてから読み直ししてきます。ここにいる方々はみんな配列宣言やビット演算などを理解していると考えると、尊敬の念しか湧いてこないです。

コメント

アバター
あまさとしおん 2020/5/2 16:53 ◆mzDKTVUAtwqE
>ドラキーマカレーさん
#Aと16の違いはビット演算とは関係ないですよ
IF B==16 THEN BEEP 74
IF B AND #A THEN BEEP 74
という使い方もできます。(#A は 16 と同じ)

ビット演算が役に立つ箇所は==がANDになってる部分で
IF B==#A THEN
は「Aボタンだけを押している」時だけ反応するのに対し
IF B AND #A THEN
だと「少なくともAボタンは押している」時に反応します
(例:AとBを同時に押していてもOK)
アバター
あまさとしおん 2020/5/2 16:55 ◆mzDKTVUAtwqE
※ここまでのすべての説明は 変数B に BUTTON() を代入している前提です
簡単に言うと B=BUTTON() をしているということ
アバター
アオタク 2020/5/2 16:58 ◆6Tx4tgOERFcr
IF BUTTON() AND #A THEN ―
のような形は、指定したボタンが押されていればそれ以外が押されていたとしても通るのがポイントですね

これをAND無しで完全再現するなら、
IF BUTTON()==#A || BUTTON()==#A+#B || BUTTON()==#A+#X || BUTTON()==#A+#B+#X || BUTTON()==#A+#B+#X+#L ||........
...と非常に長く続くことになります
アバター
アオタク 2020/5/2 17:00 ◆6Tx4tgOERFcr
あまさとしおんさんに先を越されてた
アバター
ugly777 2020/5/2 17:08 ◆B7lOIJDWuOqi
ビット演算は門のようなものです。
通れた人=来た人 AND ガード
の様に例えます。
門ANDのトップ(“両方のビットが1の時、その桁は1”※1)
「各桁のガード0は、誰も通さないでね。ガード1は、来た人1を通してね。」
&B1010 AND &B1100→&B1000
門ORのトップ(“どちらかのビットが1であれば、その桁は1”※1)
「各桁のガード0は、来た人1を通してね。ガード1は、皆を通してね。」
&B1010 AND &B1100→&B1110
門XORのトップ(“値が異なる桁が1”※1)
「各桁のガード0は、来た人1を通してね。ガード1は、来た人0を通してね。」
&B1010 AND &B1100→&B0110
自分でも合っているか分かりませんが、多分合っていると思います。
後になっても来た人とガードが種類なのに通れた人が
通れたか否かになっているのは分かりづらいと感じたので、
下記のサンプルでなんとなくイメージを掴んだ方が早いでしょう。
ANDのサンプル:
IF !(VARI AND &B001) THEN
 DIALOG "0びっとめを 1にしてから またきてください"
 END
ENDIF
ORのサンプル:
IF PSWRD$="HOGE" THEN
 VARI=VARI OR &B010
 DIALOG "あんごうの かいどくに せいこうした!"+CHR$(10)+"1びっとめが 1になる"
ENDIF
XORのサンプル:
DIALOG "2びっとめ すいっちお"+"んふ"[!!(VARI AND &B100)]'ここは真似しなくても良い
VARI=VARI XOR &B100
※1 http://petitcom.net/manual/_ronrienzanshi より引用
アバター
さすらいの名無し 2020/5/2 17:42 ◆LWMA5UzCJb3e
bit演算はフラグとかできますね
例えば、N=1<<2だと第2bit(一番下のbitを第0bitとする)がオンになった状態です
※第Nbitは10進数で言う一の位、十の位みたいなかんじで、位取りを表します
これを取り出したい場合は、N AND (1<<2)みたいにできます。
アバター
あんちもん 2020/5/2 17:56 ◆8qCJSJ1bKTIQ
経済さんがどのくらい理解できたのかわからないうちに沢山アドバイスして、皆さんの意見が空回りしてないかちょっと心配。
bit演算について教えたいなら、まずbitが何かとかそういうのが先決な気が。
http://kanadaraimk2.web.fc2.com/keyword.html
http://kanadaraimk2.web.fc2.com/button.html
私が かなだらい さんのサイトを勧めるのは、「bit」って何かとか、&Bや&Hがついてる数はそれぞれ2進数、16進数で書かれていることを示すとか、そういう細かい部分をキチンと説明できてるからです。
私を含めて下手に経験浅い人が教えるのもかえって危ないし。
アバター
うょリウム(元 SPDX) 2020/5/2 20:20 ◆UTOEg1c1vr.B
勉強になりましたー。
(唐突にうょリウム)
BUTTON() AND #Aとすると
L+Aなど同時押しでも
Aを押してさえいれば通過する
ということしか理解してなくてぇー。

しかしながら今までの説明は、
経済さんが「2進数」をわかっている前提になっているように見えます。
ちなみに経済さんは2進数を理解しておられますか?
※もちろん、知らないなら諦めろという意味ではありません。
アバター
Na 2020/5/2 20:50 ◆QoELVrBXBQCI
アオタクさん
IF BUTTON() AND #A THEN をビット演算なしで完全再現すると
IF BUTTON() DIV #A MOD 2==1 THEN
でできると思います(いやそういうことではない)

「プチコン3号&BIG 非公式初心者講座」なら2進数は第11章で説明していますね。「あんまりむずかしいので、飛ばして読んでもいいです。」とは書いてありますが。
http://wiki.hosiken.jp/petc3gou/?Beginner%2FChapter11
個人的には、無理にビット演算を理解しなくても、うょリウムさんのように BUTTON() AND #A とすればいいみたいな覚え方でも最初は大丈夫だと思います。プチコン4だとビット演算なしでボタンが扱えるようになってますし。2進数が本当に必要になったときにまた見直せばいいと思います。

あんちもんさんがお勧めしている かなだらいさんのサイトも見てみました。
確かに用語とか詳しく説明してあって分かりやすいとは思いました。でも、「bitって何か」みたいにそこまで厳密に用語を説明していると、覚えることが多くなって大変じゃないかなと思います。(個人の意見)

ちなみに私が「プチコン3号&BIG 非公式初心者講座」をお勧めするのは、もともとプチコンの公式の初心者講座だったっていうのと、第15章以降は私が3号/BIG用に移植したからです。(おい)
アバター
経済さん 2020/5/2 22:26 ◆LjHuF5fUoor/
コメント遅くなってすみません。
»ドラキーマカレーさん、あまさとしおんさん、アオタクさん、ugly777さん、さすらいの名無しさん、あんちもんさん、うょリウム(元 SPDX)さん、Naさん、長文ありがとうございます!
アバター
経済さん 2020/5/2 22:53 ◆LjHuF5fUoor/
»うょリウム(元 SPDX)さん
 2進数は理解していると思います(あんまり自信ない)。
 
アバター
うょリウム(元 SPDX) 2020/5/3 0:55 ◆UTOEg1c1vr.B
1
2
4
8
16
32
64
128
256
512
ぐらいまで暗記していると便利かも。
ただしBUTTONに関しては
#UP
#DOWN
#A
#B
とように便利な関数があるので必要なくなりましたね。

(初代プチコンで使える技術を使うことにばかり夢中になって
BUTTONを一切使わずに(使えずに)
INPUT”ナニカニュウリョクデススム”;
がやたら出てくるRPGを作ってた人)

@LOOP
PRINT”1 ススム“
PRINT”2 ヤスム”
INPUT”ドウスル?”;A
IF A==1 THEN GOTO @SSM
IF A==2 THEN GOTO @YSM
GOTO @LOOP

@SSM
PRINT”○○km ススンダ”
INPUT”ナニカニュウリョクデススム”;A
CLS
PRINT”ナニモオコラナカッタ”
INPUT”ナニカニュウリョクデススム”;A
GOTO @LOOP
みたいな。
それに比べて経済さんは勉強熱心で
すごいと思います。
アバター
あんちもん 2020/5/3 1:43 ◆8qCJSJ1bKTIQ
私も難しいことは必要になったら覚えるくらいでいいと思ってますよ、かなだらいさんもそういうスタンスで記事書かれてますし。
経済さんにbit演算の深い理解を求めたわけではないです。
わかんなくなりがちなとこは かなだらい さんのサイトに大抵書いてあるよというのと、教える立場の人は十分な理解、説明ができてなきゃね、というのが自分の意見です。おせっかいでスミマセン!

トピックの主旨から外れちゃいますが、経済さんがどんな作品を作りたいのかちょっと気になってます。
アバター
Na 2020/5/3 10:03 ◆QoELVrBXBQCI
#A(=16)は奇数じゃないですよ
アバター
経済さん 2020/5/3 10:33 ◆LjHuF5fUoor/
»ドラキーマカレーさん、あまさとしおんさん、アオタクさん、ugly777さん、さすらいの名無しさん、あんちもんさん、うょリウム(元 SPDX)さん、Naさん、皆様のコメントや紹介してくださったサイトなどを読んでビット演算というものが少しずつ分かってきたような気がします。皆様のおかげです。ありがとうございます!
アバター
アオタク 2020/5/3 11:59 ◆6Tx4tgOERFcr
>>Naさん
あ、そうだったすみませんでした
(久々(?)にやらかした)
アバター
アオタク 2020/5/3 12:00 ◆6Tx4tgOERFcr
1は#UPだったっけ
アバター
うょリウム(元 SPDX) 2020/5/3 13:38 ◆UTOEg1c1vr.B
1=#UP
2=#DOWN
4=#LEFT
8=#RIGHT
16=#A
32=#B
64=#X
128=#Y
256=#L
512=#R
1024=(一応STARTボタン)
2048=(SELECTボタン)

「スクリーンショットを撮った」は
BUTTON() AND 2048
でしか分かりません。

それた話になりますが
私の代表作「エルカミツ」の最新ver
ではステージの最中に
スクリーンショットを撮ると音が鳴る仕掛けがあります。(今思い出した)
さて、この仕掛けを今までの作品に
入れてこようかな…。
アバター
Na 2020/5/3 13:41 ◆QoELVrBXBQCI
SELECTは1024だったはず...
2048=#ZR
4096=#ZL
8192=(なし)
16384=(WiiUのLスティック)
32768=(WiiUのRスティック)

http://petitcom.net/manual/button
アバター
あまさとしおん 2020/5/3 16:10 ◆mzDKTVUAtwqE
1024=START
2048=SELECT
といえば、初代/mkIIでの伝統的な割り当てですね

3DSソフトでは原則としてSTART/SELECTを同じボタンとして扱うルールで、発売当初のプチコン3号もルール通り、START/SELECTのどちらを使ってもRUN/STOPとして機能し、ボタン値は何故か飛ばして8192にしました。
ところが、スクリーンショット機能をプチコン自体に付けるためにボタンを1つ空ける必要が発生しました。
そのためにSTART/SELECTを別扱いする特別の許可をもらい、SELECTでスクリーンショットが撮れるようになったのはいいのですが…

>>>何故かSTARTがBUTTON()に反応しなくなった<<<
結果、mkIIまでは「STARTだけ」を表す値が「SELECTだけ」を表すという気持ち悪い状態になりました。

コメントを書く

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

- WEB PATIO -