ふっと思ったこと、スイッチって必要かな?

リンク

ユーザー
本当にしょうもないこと済みませんw
唐突に、スイッチって必要でしょうか?

スイッチというのはよく考えると、「0」と「1」しか入らない、「変数」の一形態にも思うのです。
なら、スイッチじゃなくて全部変数でやれば良いかな?と思うのですが、どう思いますか?

更にいうとその代わり、変数処理のオペランドに対して使える演算子に
「論理和」「論理積」「排他的論理和」
の3つが更に使えたら、更に1個の変数が16個程度のスイッチに化ける様な気もしたんですがどうでしょうね。

論理和は、当該変数に対する数値と比較して、二進数に変換した場合、それぞれの各桁が「1」である物をミックスして代入する。
論理積は、当該変数に対する数値と比較して、二進数に変換した場合、両方の各桁が「1」である物(一方だけが1だと0、両方が0でも0)のみを1として数値を作り代入する。
排他的論理和は、当該変数に対する数値と比較して、二進数に変換した場合、その数値の各桁のうち「1」である箇所の、変数の桁の数値の1と0を逆転させる。

という物です。

またこれの場合だと、元々ツクールでは「街の人全員と話すとストーリーが進む」的なイベントを作りたい場合は、人数分のスイッチでそれぞれの人との会話のあるなしをチェック、全員との会話終了は別に変数を用意して1回目の会話をする度に加算してチェックする方法が定石ですが、変数2個だけで判別できそうな気がします。

例えばAさん、Bさん、Cさんがいる場合は
Aさんと話すと変数に1を論理和
Bさんは2を論理和
Cさんは4を論理和すれば

Aさんのみとの会話終了をチェックする場合は、変数に1を論理積して1になるか
Bさんの場合変数に2を論理積して2になるか
Cさんは4を論理積して4になるか

AさんとCさんが終わってるかチェックする場合は、1+4=5を論理積して5になるか
(他の組み合わせも可能)

そして変数が7であれば、全員が終わっている。
と、従来以上の全部の条件を見られますよね?

とまあなんか、スイッチはなくてもなんとかなりそう。
だけど、変数に使える数式に、「論理和」「論理積」「排他的論理和」の3つが追加されたら、スイッチ+αの機能を変数だけで賄えそう。

そう思ったのですが、どう思いますか?
 

温州みかん

ユーザー
>リンクさま
結論から言うと、まったくその通りで「0」と「1」しか入らない「変数」です。
二進数的には1、2、4ですが、私は1、10、100で同じことをやったことがあります。
スイッチを使った条件分岐では「入れ子」が3つ重なるため、うっとうしかったからです。
「大は小をかねる」という理屈で、無くてもゲームは作れます。
しかし、大きな箱ばかりあってもジャマになるので、「0」か「1」しか入れないのなら、それ専用の箱があっても別に不便ではありません。
 
>「論理和」「論理積」「排他的論理和」の3つが追加されたら
 10代のツクラーさんは石化してしまうんじゃないかと思います。高校受験も裸足で逃げ出す難語かなと。

 ツクールの歴史的に、自分が初めて触れた「RPGツクールSUPER DANTE」はスイッチはあったけど
 変数は無かったと記憶しています。なのでその名残でスイッチは残し、古参のツクラーさんでも
 とっつきやすくしている感はあるのではないかなと。

 スイッチが0と1しか入らない変数という役割に関しては温州みかんさんに同意します。
 そして古いツクールではスイッチしかありませんでしたので、それで作るしか無く、でもそれでも結構なゲームは作れました。
 必要かと言われれば「必ず要る」ではないですが、自分も含めた理解が追い付かない人間には「あってほしい」です。
 もともとツクールのコンセプトが「誰でも手軽にゲームが作れる」だっと思うので(その気になれば小学生でも創れる的な)
 そういう意味でも変数より敷居が低いスイッチ管理は便利だなと思っています。
(当時はそれでも大変だな~と思いながら組み込んでましたが)

 ちなみに格闘ツクールは逆で、変数はあったけどスイッチはありませんでした。ツクールとはいえ全く毛色が違うので、
 スイッチという概念は合わなかった…かもしれません。
 

リンク

ユーザー
>「論理和」「論理積」「排他的論理和」の3つが追加されたら
 10代のツクラーさんは石化してしまうんじゃないかと思います。高校受験も裸足で逃げ出す難語かなと。

 ツクールの歴史的に、自分が初めて触れた「RPGツクールSUPER DANTE」はスイッチはあったけど
 変数は無かったと記憶しています。なのでその名残でスイッチは残し、古参のツクラーさんでも
 とっつきやすくしている感はあるのではないかなと。

 スイッチが0と1しか入らない変数という役割に関しては温州みかんさんに同意します。
 そして古いツクールではスイッチしかありませんでしたので、それで作るしか無く、でもそれでも結構なゲームは作れました。
 必要かと言われれば「必ず要る」ではないですが、自分も含めた理解が追い付かない人間には「あってほしい」です。
 もともとツクールのコンセプトが「誰でも手軽にゲームが作れる」だっと思うので(その気になれば小学生でも創れる的な)
  
★夢幻台さま

僕も最初に触ったツクールはSUPER DANTEでしたよー。
確かに今よりもお手頃感がありましたね。
今はなんでもできる分なんでも作らないといけない。
あの頃はなんでもはできないけどプリセットを選べばすぐにできたですし。

ただ、やってる事の難しさ自体は今も昔もあまり変わらないかなと思ったんですけどねえ。
確かにあの頃はスイッチしかなく、変数なんて無かったですねー。
逆にあの頃、複数のスイッチを組み合わせて二進数として、変数の代わりにできないかと頑張ったものの、当時のツクールの容量制限であっという間に容量枯渇が起き、頓挫した覚えがあります。

姉妹品のサウンドノベルツクールに変数がありましたが、確かあの時フラグ管理に変数を使い、ムリヤリ一個の変数で複数ビット管理をしようと試みたことがありますw
(ただ、論理演算はできないので、全ての場合分けを分岐に入れて、強引に一個の変数でヤリクリしたのですがね。無駄な努力ですがそういう無駄な努力もしてみたかったのでw)

しかし、ツクールであっても(勿論スクリプトは使わなくてもCS版でも)、プログラミングは不要とまではいかないし、誰でも手軽にはできるかこれ?とは思いましたけどね。

むしろ逆に、今MVTやってますけど、一般的なプログラミングと違い「配列変数」が無いので、ミニゲームをどうやって組もうかと画策している所ですね。
(なぜかメッセージの制御文字では変数をインデックス番号で指定をするのに、肝心の変数処理単体には変数をインデックス番号では指定できない不思議仕様)
これのエンジン部分、頭の中で考えている方法だと、配列変数が使えたら数十倍楽に作れそうだなーってことなんですよねw
(変数の内容を隣接インデックス番号の物に一気に移動させる処理が必要なので、本来は配列のインデックス番号をループ処理しながらずらして代入していけば一発で終わるべき物)
そこは全部分、全部手打ちでやらないかんなーと思ってますw

難度的には、難しいプログラミングとは言わないけど、思考としてはプログラミングに近いことはしないとやりたいことはできない。
今できる制約の中で、使えるものはどれが使えるか推理する力も必要。

本格的ではないけど、初歩のプログラミングの素養は無いと、あとプログラミングとはまた違う形での発想の転換力が無いと、ツクールと言えどゲームを作るのは難しいことはないでしょうかね?
どうでしょう?

ちなみにそれに比べると論理演算を覚える方が簡単だと思いますw
 
>今はなんでもできる分なんでも作らないといけない。
 今はこれが主流になりつつあるかもしれないですね。でもこの発想がツクラーさんの敷居を上げてしまっている気もします。
 個人的には、やってることの難しさは昔の方がゼロ1つか2つレベルで簡単だった、…というか難しい事をやってやろうという
 発想がありませんでした。RPGツクールのガイドブックにあった「手を抜く方向で考えると案外いいアイデアが出る」という
 言葉に感化されたことも大きいですが…。

 自分としては逆転の発想ですが、プログラミング知識が無かったからこそ作れたという感覚もあります。
 知識があったらあったで「これどうにかならないかな」と(例え実現不可能または極端に難しい事でも)試行錯誤してしまった
 気がします。知識がない=これは無理だなと諦めるのも早いので「できることで何とかしよう」という発想になりました。
 そのためにイベントを組み直したりシナリオを再構成したり「ツクールに作品を合わせる」感じでした。
 プログラミング的な思考は必要だけれども、プログラミングの知識は必要ない(場合によっては無い方がツクりやすい)かなと
 考えています。

 そういう意味では、今学校教育で叫ばれているプログラミング教育は「プログラミングの知識ではなく、プログラミング思考」を
 育むことを目的としているので、このツクールにおける「知識は無くても思考が身に付く」は非常に相性がいいんじゃないかなと
 考えています。(話が脱線してすみません)

 スイッチは、特にプログラミング知識の無い方にとっては必要なんじゃないのかなと考えています。これを無くすと
 ある程度プログラミング知識のある人前提になってしまい、ツクール界隈が縮小してしまうんじゃないかと思っています。
 (「一見さんお断り」にするにはある程度効果はあると思いますが)
 

亀井ろろろ

ユーザー
原理的には無くてもいいでしょうが、
変数は最初、意味が理解できずにネットで解説見ました。
オンとオフだけのやったかやってないかだけの判定の方が
初心者はわかりやすいのではないのでしょうか。

お城で話を聞き→森のボスを倒し→洞窟の奥で会話し
だと一つクリアするたびに変数を加算するより
なにをやったかが一目で見えるので一個ずつスイッチでやってます。
(もちろん一個ずつ変数を作ってそれそれ0か1を代入、でもできるのですが)
 
実際、昔のゲームでは容量削減のために変数にスイッチをいくつも格納してましたね。
ファミコンであれば8ビットなので、8つのスイッチが1つの変数の中に入るわけですねー。

ツクールのスイッチは内部的にはどういう扱いなんでしょう。
スーパーファミコンのSUPER DANTEだったらスイッチ16個がひとつの変数に詰まっていたのかも?
 
ウディタには「スイッチ」が存在せず、変数のみだと聞いたことがあります。

変わった例として、ここで行われた「ツクール学園フェスティバル」という
イベントでは、一人あたり20個までしかスイッチが使えなかったので
変数・スイッチ集「0000」とすることにより
擬似的にスイッチを増やすというテクニックが
存在していました。
つまり、1つの桁をスイッチとして
扱うわけです。
 

リンク

ユーザー
原理的には無くてもいいでしょうが、
変数は最初、意味が理解できずにネットで解説見ました。
オンとオフだけのやったかやってないかだけの判定の方が
初心者はわかりやすいのではないのでしょうか。

お城で話を聞き→森のボスを倒し→洞窟の奥で会話し
だと一つクリアするたびに変数を加算するより
なにをやったかが一目で見えるので一個ずつスイッチでやってます。
(もちろん一個ずつ変数を作ってそれそれ0か1を代入、でもできるのですが)
★亀井ろろろ様
その場合だと僕ならば変数3つでも、スイッチ3つでもなく、変数「1つ」で行うと思います。
スタートした時は変数=0。
お城で話を聞いたところで変数=1
森のボスを倒した所で変数=2
洞窟の奥で会話したら変数=3
です。
厳密にはその間間で意外と細かいストーリー進行があるでしょうから、恐らく変数はもっとハイスピードで上がるでしょうけどね。
順不同に行えるイベントならば、恐らくスイッチを使うと思います。
 

リンク

ユーザー
実際、昔のゲームでは容量削減のために変数にスイッチをいくつも格納してましたね。
ファミコンであれば8ビットなので、8つのスイッチが1つの変数の中に入るわけですねー。

ツクールのスイッチは内部的にはどういう扱いなんでしょう。
スーパーファミコンのSUPER DANTEだったらスイッチ16個がひとつの変数に詰まっていたのかも?
★チョコワ部様
最近のパソコンにせよ、ゲーム機にせよ、メモリが潤沢なので、本来は1ビットで事足りることだと思いますが、普通に整数配列変数をざーっと確保していると思います(容量の無駄遣い)。

ちなみにファミコンの頃はスイッチはちゃんと1ビット単位で節約していたと思いますよ。

有名なドラクエ4の8逃げ会心バグはそれを理由にしています。
メモリ内部でこのようになっています。
[パルプンテの「力が漲ってきた」状態か?(1ビット)][時の砂使用済か?(1ビット)][その戦闘での逃げるの回数の変数(2ビット変数=上限値3)]
これが隣接しています。

本来はドラクエ4は、イベントボス以外は4回逃走を試行すると、必ず逃走できるようバランスにされています。
しかし、イベントボスでは逃走は
できません。

ところが、イベントボスにも関わらず、この変数に逃走回数が加算されてしまう仕様で、おまけにリミッターの設定がなされていないのです(バグで)。

だから
1=[01]、2=[10]、3=[11]となった後、4が代入された所で4=[100]と、バッファオーバーラン状態になってしまいます。
これを8回繰り返すと二つ隣のビットまでバッファオーバーランが波及し
8=[1000]になってしまいます。

よって、パルプンテを使って「力が漲っている」かどうかを表すスイッチが、バッファオーバーランで0の所が誤って1に書き変わってしまいます。
その結果、以後の攻撃が全て会心の一撃となります。

【追記】
ファミコンが8ビットだから変数1つの中に8つスイッチが入ってる(8ビットである)というのは、ちょっと違う気がします。
基本的にどんな環境でも、1バイト(0-255の整数範囲が扱える)は8ビット、2バイト(0-65535の整数範囲が扱える)は16ビットです。
これは今も昔も変わりません。

これはファミコンのCPUのバス幅が8ビットである、という話ですね。
もっともこのバス幅も、アドレスバス、データバスなど色んな種類があり、外部バスと内部バスでバス幅が違うこともあり、どこを見て何ビットかというのは一概に言えないので、なんとも言えない時もあります。
例えばモトローラのMC68000(メガドライブ、旧型のMacなどに使用)や、インテルのi386SX(30年ぐらい前のPCに使用)では、内部バスが32ビット、外部バスが16ビットだったので、言い様によってはどっちとも言えますね。
(まあ普通はこれらは16ビットプロセッサ扱いでしたが)
PCエンジンも、CPUは8ビット機ですが、グラフィックス周りが16ビットで接続されている事をウリにして、ファミコンに差別化を図っていた覚えです。

しかしながら、このバス幅単位でメモリアクセスをするのがCPUにとってもしやすいので、8ビットだから変数一つにスイッチ8個という言葉で、ひとつだけ合っている点を言うと、プログラミングをするときに変数のサイズを指定せずに変数を作ると、大抵の言語、大抵の場合コンパイラはそのCPUやOSが主なターゲットとしているCPUのバス幅と同じサイズの整数型変数を作ることが多いですね。
(所謂C言語のint型)
 
最後に編集:
確かに変数があるから、スイッチは必要なくなりましたが、
ツクールの歴史を辿っていくと、昔はスイッチしかなく、
変数は、ツクール2000(それとDante98 II)で初めて導入された機能なんですよね。

だからスイッチはなくしてしまっても、制作は出来そうですが、
ゲームを作っていて意外に多いのは「フラグが立つ/立たない」つまり、ON/OFFなんですよね。

だから最近ツクールを始めた人で、技術屋さんなんかは、「スイッチはブール型の変数」
なんていう専門的な考え方をしている人も結構いるようですが、
スイッチの方が分かりやすい側面が意外と多い以上、スイッチの存在価値はあると思っています。
 

たまな

ユーザー
初心者ミスなのですが変数が計算が合わず、どこがおかしいか片っ端から探しました
1か所加算が代入になってた^^;
これだけでミスが起きる変数よりは
初心者にはスイッチの存在ありがたいですよ(ON・OFFは間違えても意外と探しやすいんですよね)
変数もなくては困りますけど・・・

でも、まだまだ、わかんなーい。もうだめーっ。最初からやり直しーっなんてこともやってます^^;
 

リンク

ユーザー
初心者ミスなのですが変数が計算が合わず、どこがおかしいか片っ端から探しました
1か所加算が代入になってた^^;
これだけでミスが起きる変数よりは
初心者にはスイッチの存在ありがたいですよ(ON・OFFは間違えても意外と探しやすいんですよね)
変数もなくては困りますけど・・・

でも、まだまだ、わかんなーい。もうだめーっ。最初からやり直しーっなんてこともやってます^^;
僕はイベントの進行変数はあまり「加算」を使わずに、道筋が決まってるなら「代入」を直接使うことが多いです。

プロジェクトごとに大学ノートを一冊用意し、メモを取ると良いでしょう。
 

Attachments

まるたん

ユーザー
変数でスイッチの変りもできるなら当然なくても「作品は作れる」の一言になりそうですが、私のようにスイッチを多用してる人にとっては
これがなくなると「作品を作る」という根底の部分から問題が発生してしまうので、やはりあってほしいところですね((´゚∀゚`))

もちろん変数を使いこなせる方が良いとは思いますが、いかんせん変数がよくわからないのです(´・ω・`)
スイッチと同様の使い方までならなんとかなると思いますが、それならスイッチで作った方が安心感はありますね((´゚∀゚`))

個人的なイメージとしては、スイッチはゲームのイージーモードの補助機能のような印象です(/)・ω・(ヾ)
慣れた人には特別必要ないけど、初心者やこれがないと上手くできないって人用のって感じで(´・ω・`)b
 
トップ