![見出し画像](https://assets.st-note.com/production/uploads/images/108258626/rectangle_large_type_2_8f3853bbab71ffc9b4063c4e881c9045.png?width=1200)
【ストワ】AND回路
こんにちは
誰得記事を書いているTFです。
AND回路について Storm Works版
![](https://assets.st-note.com/img/1686759633824-Z1tIgx0IUO.jpg?width=1200)
Storm Works版としたのは、
実際の細かい部分をすっ飛ばしてストワで使うであろう部分のみを抜粋するからです。
専門知識は持ち合わせていませんので、ご了承ください。
検証環境
以下の記事の内容は、下記の環境下におけるものです。
アップデート等により仕様が変更になっている場合があります。
Application : Stormworks: Build and Rescue
OS : Windows11
Version : v1.7.11 64bit
Language : English
DLC : N/A
AND回路とは
AND回路は2つのon/off inputと1つのon/off outputを持つ回路です。
入力信号の双方がonであるときにのみon信号を出力します。
片方の入力のみが"on"、もしくは両方が"off"の場合には、信号を出力しません。
![](https://assets.st-note.com/img/1686759734447-E62VnSnj0n.jpg?width=1200)
実例
今回はAND回路の他に、トグルボタンとインジケーターライトを用意します。
![](https://assets.st-note.com/img/1686759835865-rvnrIP5syA.jpg?width=1200)
トグルボタン2つの両方"on"の場合はインジケートライトが"on"となり、どちらかが"off"もしくは両方が"off"の場合にはインジケートライトは"on"になりません。
ANDの条件を増やす場合は以下のように接続することで、3つ以上の条件にも対応することができます。
![](https://assets.st-note.com/img/1686759891023-6LZWvfosxu.jpg?width=1200)
必要に応じてAND回路を増やしてください。
それぞれが最終的に一つにまとまるように接続しましょう。
途切れていると、正常に動作しません。
LUA
※ここからはちょっとした応用です
LUAを使用してAND回路を作ってみましょう。
”実例”と同じようにトグルボタン2つとインジケーターライトを使用します。
![](https://assets.st-note.com/img/1686760083814-7b35wHPRaZ.jpg?width=1200)
用意したon/off信号をコンポジット1,2につなぎます。
出力はコンポジット1につなぎます。
それでは書いていきましょう。
function onTick()
end
普段同様にここから始まります。
大文字小文字の判別があるので注意です。
"end"はプログラムの閉じなので、これからはこの二行の間に書いていきます。
in1 = input.getBool(1)
in2 = input.getBool(2)
今回はコンポジット入力1を"in1"、コンポジット入力2を”in2”と定義しました。
定義しなくても制作することは可能ですが、プログラムが長く見にくくなるので定義しました。
if in1 and in2 then
out1 = true
end
直訳すると、「もし、"in1"と"in2"が両方onならば、"out1"を"on"にする」となります。
プログラム上では、"on=true","off=false" となっています。
if関数は結果の終わりに"end"をつける必要があります。
複数ifを使う場合には使った数だけ"end"が必要です。
上記の条件式では、条件に合わない場合の定義が行われていないため、
"out1"が"on"になった後はどのような操作をしても"off"にはなりません。
if in1 and in2 then
out1 = true
else
out1 = false
end
"else"というのは、「条件に合わない場合に」という意味です。
他にも"elseif"など、更に条件を追加することも可能です。
output.setBool(1,out1)
コンポジット出力1に"out1"の結果を出力します。
ここまで作成したプログラムをまとめてみます。
function onTick()
in1 = input.getBool(1)
in2 = input.getBool(2)
if in1 and in2 then
out1 = true
else
out1 = false
end
output.setBool(1,out1)
end
以上でLUAにてAND回路を作成するのに成功しました。
ANDの条件を2つではなく3つ以上使用することも可能です。
function onTick()
in1 = input.getBool(1)
in2 = input.getBool(2)
in3 = input.getBool(3)
if in1 and in2 and in3 then
out1 = true
else
out1 = false
end
output.setBool(1,out1)
end
以上のように、条件を増やすだけで問題なく動作します。
"in1"や"in2"などを定義せずに作ってみます。
function onTick()
if input.getBool(1) and input.getBool(2) then
output.setBool(1,true)
else
output.setBool(1,false)
end
end
となります。
入力信号を複数回使わない場合などには文字数を減らすのに使えます。
"if"の"end"とプログラム全体を括る"end"の二つが必要であるため、"end"が二つ並ぶ形になります。。
おわり
以上、AND回路の紹介でした。