ステップごずにFBDの楜しいシェフ

すべおにご挚拶。



以前の蚘事は、同じ原則に基づいお行われた小芏暡プロゞェクトに関するものでした。





しかし、同時に、最終プログラムでは、いく぀かの解決策は明らかではありたせんでした。 さらに、目の前に数十個のブロックの図があるため、䜕を、どのように、䜕を䜿甚するかをすぐに把握するこずは困難です。 したがっお、この䟋では、わずかに異なるアプロヌチが適甚されたす。 最小限の時間ず劎力を費やしながら、ステップごずに簡単なプログラムを䜜成する方法を簡単か぀明確に実蚌しようずしたす。 同時に、各ステップに぀いお詳しくコメントしたす。



䟋ずしお、ゲヌム「Electronics IM-04-Cheerful Cook」が遞択されたした。







猫の䞋には、このおもちゃをFBDプログラミング蚀語で曞く方法のステップの説明がありたす。



* ネタバレの䞋のすべおの倧きな画像には、オリゞナルぞのリンクがありたす



問題の声明



それで、今日はCheerful Chefゲヌムを䜜っおいたす。



ゲヌムの本質料理人は4぀のアむテムを投げたす 。 タスクは、萜䞋するオブゞェクトに間に合うように実行し、パンを眮き換えお再床投げ䞊げるこずです。 成功したトスごずに、1ポむントが付䞎されたす。 アむテムの飛行速床は、獲埗したポむントの数ずずもに増加したす。 フォヌクで゜ヌセヌゞを定期的にキャッチし、それによっお料理人に干枉する猫もいたす。 アむテムが床に萜ちた堎合、マりスはそれを぀かみ、ペナルティポむントが付䞎されたす。 3぀のアむテムが床に萜ちた埌、ゲヌムは停止したす。



これはずおも簡単なおもちゃです。 次に、それを実装したす。



実装



手順1.空癜のシヌト



コントロヌラを䜜成し、ゲヌムを実装するための新しいタスクを䜜成したす。



クリック可胜な画像




ステップ2.畑を暪切っお走るクック



ここで、オペレヌタステヌションからのコマンドでフィヌルドを駆け回るコックが必芁です。 これを実装するには、最も単玔なスキヌムを䜜成したす。







クリック可胜な画像




ステップ3.゜ヌセヌゞず魚



畑を駆け回る料理人がいるので、今床は圌がゞャグリングする食べ物を䜜る時間です。 ここでも、すべおが暙準です。







クリック可胜な画像




ステップ4.グラフィックむンタヌフェむスを接続したす



料理人はすでに畑を駆け回っおいお、食べ物は飛び跳ねおいるので、今床は最も単玔なグラフィック郚分を固定しお、それがどのように芋えるかを芋おみたしょう。 デバッグのために、私たちは矎しさを必芁ずしないので、可胜な限り迅速か぀簡単にすべおを行いたす。





小蚈



プログラムの基瀎は準備ができおいたす。 5分がすべおに費やされたした。 しかし、珟圚の実装は、倖芋䞊は目的の結果に䌌おいたす。 実際、オブゞェクトは自分でゞャンプしお萜䞋するこずはなく、料理人はフィヌルドの倖を散歩できたす。 しかし、これは唯䞀の基瀎です。 プログラムのスケルトンに远加オプションを远加し始め、元のプログラムに近づけたす。



ステップ5.クックを制限する



芋やすいように、珟時点では、料理人はチヌムによっお巊右に1人ず぀制埡され、奜きな堎所に行くこずができたす。 出力は単玔な加算噚であり、䜕にも制限されたせん。 しかし、ゲヌムのルヌルによれば、料理人は4぀の䜍眮のうち1぀しか占有できず、画面から離れるこずはできたせん。 これを実装するには、フレヌムにクックを远加したす。 これを行うのは非垞に簡単で、2぀の方法がありたす。



  1. クックが右端たたは巊端の座暙それぞれ「4」ず「1」に達したら、「右」ボタンたたは「巊」ボタンを抌す機胜をブロックしたす。
  2. クックが右端たたは巊端の座暙それぞれ「4」ず「1」に達したら、クックの珟圚の座暙を栌玍する加算噚の増分たたは枛分を犁止したす。


元のおもちゃを基準にするず、2番目のオプションが望たしいように芋えたす。 プレむダヌがおもちゃのボタンをクリックするこずを犁止するこずはできたせん。 コックが極端な䜍眮に達しただけで、チヌムに同じ方向で反応しなくなりたした。 私たちはそれを実珟したす。 これを行うには、座暙を可胜な最小倀ず最倧倀ず比范するための2぀のアルゎリズムを䜿甚したす。 そしお、最初に実装されたように、盎接「Choice」アルゎリズムではなく、察応する比范の兆候のある「I」を通じお、チヌムを開始したす。

したがっお、料理人が3番目の䜍眮にある堎合、「4番目未満の䜍眮」ずいう条件が満たされ、セレクタからのコマンドはさらに「遞択」アルゎリズムに進むこずが刀明したした。 クックが4番目の䜍眮にある堎合、条件「4番目未満の䜍眮」は満たされず、セレクタヌからのコマンドは、アルゎリズム「And」にれロを乗算しおも、それ以䞊進みたせん。



クリック可胜な画像




ステップ6.料理人が食べ物を投げる



次に、料理人にアむテムを投げる機胜を远加したす。 メむンスキヌムからわかるように、被隓者自身は6぀のポゞションを占めるこずができたす。 積分噚出力の小数郚分を砎棄し、0〜5の敎数を埗たずきにこれを達成したした。 ここで、トリガヌをドロップし、正のむンテグレヌタヌ増分速床を遞択するこずにより、オブゞェクトを䞊に投げるこずを思い出したす。 最初は、積分噚が䞋限しきい倀に達するずトリガヌがリセットされたした。 しかし、今床はこの接続を削陀し、その堎所に最も単玔なスキヌムを远加したす。クックの䜍眮ずアむテムの座暙が単䞀であるずいうサむンを远加したす぀たり、ボトムポむントにありたす。 䞡方の条件が満たされおいる堎合、トリガヌをリセットし、むンテグレヌタヌの構築を開始したす。



クリック可胜な画像




ステップ7.アニメヌションをクックに远加する



料理人が物を投げたら、圌は鍋を䞋から䞊に振らなければなりたせん。 これを行うには、画面に各䜍眮でクックをレンダリングするための2぀のオプションがありたす。





ここにちょっずしたトリックがありたす。 アニメヌションは、たず察象の投げず同期しお動䜜する必芁があり、次に、明確に定矩された短い時間を芁したす。



プログラムで䜕が起こっおいるか想像しおみたしょう





それが䞻な問題です。 そしおそれを解決するのはずおも簡単です。 条件が満たされたずき私たちの食べ物が最初の座暙、぀たり床に萜ちる盎前の䞀番䞋にありたす、料理人がフラむパンを蚭眮したずき、私たちが必芁なものを匷制的に眮き換えるために、珟圚の萜䞋物の座暙1.99たたは1.01は重芁ではありたせんを匷制的に亀換する必芁がありたすそこから積分噚の増分を開始したす。 1.8の倀を取るこずをお勧めしたす。



積分噚の出力の倀が2を超えるず、スロヌされたオブゞェクトは新しい2番目の座暙で再描画され、フラむパンを䞊げた状態でクックを再描画する必芁があるこずを思い出しおください。 しかし、圌は垞に手を挙げお立ち䞊がる必芁はありたせんでしたが、しばらくしおから手を離すべきです。 これを行うには、別の比范アルゎリズムを配眮し、積分噚の出力の倀を2.2の倀ず比范したす。 さらに「そしお」では、次の4぀の兆候を収集したす。





4぀の条件がすべお満たされおいる堎合、クックの珟圚の座暙に4を远加したす。 したがっお、コヌド1,2,3および4を䜿甚しお、フラむパンをそれぞれ1,2,3および4の䜍眮で䞋げた料理を描き、コヌド5,6,7および8で、1,2,3のフラむパンを䞊げた料理を描きたすおよび4。



クリック可胜な画像




ステップ8.カりンタヌを固定する



ここではすべおが簡単です。 シェフがアむテムを投げたずいう兆候が既にありたす「I」に埓っお2぀の条件が凊理されおいたす。アむテム座暙は1で、クック座暙はアむテム番号に察応しおいたす。 フロントを遞択し、加算噚で開始したす。これは、暙準スキヌムに埓っお、加算噚を条件にリセットできるように、「遞択」アルゎリズムを介したフィヌドバックず結び付けられおいたす。



クリック可胜な画像




ステップ9.「開始」および「停止」ボタン



それらなしではありたせん。 人がコントロヌラヌに䌝える必芁がありたす。 ゲヌムを起動しおください」 そしお、結果をリセットし、開始䜍眮に戻るこずができたした。 このタスクを実珟したす。



䞀般に、クックを制埡するためのセレクタヌは既に1぀あり、3番目ず4番目のコマンドをそれぞれ远加しお開始およびリセットするこずで䜿甚できたす。 しかし、回路を乱雑にしないために、ゲヌムを制埡する別のセレクタヌを䜜成したす。 同様に、1番目ず2番目の出力から「OR」を介しおフィヌドバックリセットを開始したす。 そしお、RSトリガヌを出力に配眮したす。これは、「開始」コマンドで開始し、「リセット」コマンドでリセットしたす。 トリガヌが投入されおいる間、ゲヌムはオンです。



同時に、Resetコマンドを䜿甚しおゲヌム内のすべおのカりンタヌをリセットし、Startコマンドの開始䜍眮を蚭定する必芁がありたす。 簡単だから 加算噚ぞのフィヌドバック甚に「遞択」アルゎリズムを事前に甚意し、「リセット」入力にコマンドを発行するこずでトリガヌをリセットしたす。 同時に、「開始」コマンドによっお、前郚1サむクル続く信号を遞択し、この前郚で料理人の䜍眮に単䞀性を远加しこれにより巊端の䜍眮に蚭定したす、むンテグレヌタの食品座暙の初期倀を匷制的に蚭定したす。



クリック可胜な画像




ステップ10.スケゞュヌルを確定したす。



プログラムには新しい芁玠がありたす。 それらをグラフィックパヌツに远加し、ゲヌムを開始したす。



写真からわかるように、私たちが持っおいる料理人は、蚱容可胜な䜍眮によっお制限された間隔でのみ動き、鍋を䞊げお食べ物を投げたす。 すべおのオブゞェクトも、それ自䜓でゞャンプするこずはなくなりたしたが、料理人がそれらをキャッチしお再び空䞭に投げる時間がなかった堎合、萜䞋しお衚瀺されなくなりたした。 料理人が別の萜䞋物を投げる詊みの成功回数のカりンタヌも機胜したす。 これはすでにゲヌムの党機胜の80であり、合蚈で20分かかりたした。 そしお、このゲヌムはすでにプレむ可胜です。 いく぀かのオプションを実装するだけです。





順番に始めたしょう。



手順11.アむテムが萜ちたずきにゲヌムを䞀時停止し、萜ちたアむテムを再開する



アむテムの座暙がれロに等しく、同時に「ゲヌム進行䞭」ずいう蚘号が衚瀺された堎合、アむテムは萜䞋したず芋なされたす。 これらの䞡方の条件が満たされた堎合、前郚を遞択し、この前郚でトリガヌ「Fallen」を投入したす。 同時に、2秒の遅延を䞎えた埌、「Fallen」トリガヌをリセットしたす。 オプションの「遞択」アルゎリズムを䜿甚しおトリガヌがコックされおいる間、すべおのむンテグレヌタヌの増分率をれロに等しくするため、ゲヌム内で䞀時停止が取埗されたす泚ゲヌムには飛行オブゞェクトのみの䞀時停止がありたす。プレむダヌを支揎するために特別に䜜られたした。料理人の動きも同時にブロックする必芁がある堎合、料理人がフィヌルドの倖に出ないようにするために远加した「I」アルゎリズムは、逆システムが開始する別の入力を远加したす トリガに珟金「フェル」。 反察偎「Fallen」トリガヌがリセットされたずきで、同時にトリガヌをリセットしお積分速床を遞択し、初期倀を匷制的に蚭定するコマンドを䞎えたす。



クリック可胜な画像




ステップ12.萜ちたアむテムを数える



すでに倒れたオブゞェクトの信号がありたす「Fallen」トリガヌを発動したす。 この信号により、萜䞋したオブゞェクトのカりンタヌを1぀増やしたす。 カりンタヌをリセットできるようにするために、遞択を介しお加算噚ぞの暙準スキヌムに埓っおフィヌドバックを開始したす「リセット」コマンドによっおこれを行いたす。 次に、加算噚の倀をトリプルず比范したす。 最倧倀に達したら、「GameOver」蚘号を蚭定し、2秒埌に「Fallen」トリガヌの自動リセットを犁止したす。 「OR」により、コントロヌルセレクタからの「リセット」コマンドによっおのみ、このトリガヌのリセットを蚱可したす。



クリック可胜な画像




ステップ13.゜ヌセヌゞを捕たえる猫を远加する



暙準スキヌムを適甚したす







クリック可胜な画像




ステップ14.埗点に応じおゲヌムの速床を䞊げたす



これが最埌の仕䞊げです。 実際、すべおの準備が敎っおいたす。 速床は、「遞択」アルゎリズムを䜿甚しお決定されたす。このアルゎリズムでは、積分噚出力の正および負の増分それぞれ枛少が指定されたす。 デフォルトでは、いく぀かの数字を遞択したした。 速床を倉曎する機胜を実装するには、オブゞェクトのスロヌに成功した詊行のカりンタヌの読み取り倀を任意の係数たずえば50に分割し、結果の倀を最初にセットに远加したす。 したがっお、ポむントが倚いほど、゜ヌセヌゞの跳ね返りが速くなるこずがわかりたす。



クリック可胜な画像




ステップ15.最終チェックのスケゞュヌルを確定したす。



なぜなら より重芁な信号がいく぀か埗られた堎合は、それらを単玔な圢匏で画像に远加したす。 次のようになりたす。



ゲヌムむンタヌフェむスは既に完党に実装されおいたす。 これのみが回路図圢匏で行われたす。 原則ずしお、そのようなおもちゃでさえもすでにプレむするこずができたす。 もちろん、本栌的なゲヌムが実珟されたすが、数分でスケッチされるこのむンタヌフェヌスは、プログラムのデバッグず正しい動䜜のチェックの機胜に完党に察応したす。



ステップ16.技術プログラムの最終フォヌムずステップでの実装のgif



クリック可胜な画像




ステップ17.ゲヌム甚の矎しいグラフィックの䜜成



このためには、むンタヌネットからの写真が必芁です。 ゲヌム「Cheerful Cook」の矎しい写真が撮圱されたす。 现かく切り分けられ、各オブゞェクトクック、゜ヌセヌゞ、マりス、猫が別々の画像ずしお䜜成されたす。 次に、これらの写真がフィヌルドに配眮されたす。 グラフィックパヌツのレむアりトは既に甚意されおいたす。 その䞊でプログラムをデバッグしたした。 円ず小さな正方圢を必芁な画像に眮き換えるだけで、アニメヌション「色の倉曎」の代わりにアニメヌション「衚瀺」を䜿甚したす。 画像の切り取り、線集、凊理をいじらなければなりたせんでした。 ある皮のフォトショップでは15分でこれをすべお実行できるず思いたすが、MSペむントでは必芁なすべおが数時間でペむントされたした。



远加のコントロヌルボタン、ポむントカりンタヌ、および「GameOver」ずいう碑文を画像に远加したす。 すべお準備が敎いたした。プレむできたす。







ステップ18.再生





* アニメヌションは毎秒1フレヌムの頻床で行われ最初のゲヌムの速床はかなり遅いため、倍速で再生されたした。



たずめ



この蚘事では、FBDプログラミング蚀語で最も単玔なおもちゃを䜜成するプロセスを可胜な限り明確にしようずしたした。 これで、おもちゃの準備ができたした。 プログラムは合蚈133のアルゎリズムを䜿甚したした。 ただし、プログラムの実装プロセスを順を远っお順守しおいくず、䞀郚のアルゎリズムが䞍芁であるこずがわかりたす。 冒頭でいく぀かの䞍必芁な匷調があるこずはすぐに明らかです。なぜなら、冒頭で述べたように、制埡はフィヌドバックによるリセットを備えたセレクタヌを䜿甚しお実装されたためです。 ぀たり 元のコマンドの期間はすでに1サむクルであり、そこから前線を遞択しおも意味がありたせん。



プログラムの䞻芁郚分は、4぀のオブゞェクトを凊理するための4぀の同䞀のアルゎリズムシヌケンスで構成されおいるこずにも気付くこずができたす。 䟋倖は、「猫の介入」ず最初の゜ヌセヌゞを凊理するためのアルゎリズムのみです。 しかし、すべおの介入は、远加の「I」アルゎリズム猫がフォヌクで拟った兆候が珟れたずきに゜ヌセヌゞの飛行を䞀時停止するだけで構成されおいたす。 ぀たり このシヌケンス党䜓をマクロにたずめお、耇数の入力パラメヌタヌず出力パラメヌタヌを持぀小さなアルゎリズムを取埗できたす。 これにより、タスクが芖芚的に倧幅に簡玠化され、新しい機胜の远加も容易になりたす4぀の同䞀のアルゎリズムチェヌンではなく、1぀のマクロのみで倉曎が行われるため。



䞊蚘の改善により、前の䟋ず同様のタスクに぀ながりたす。 可愛さず最適性の芳点から、ブロックのプログラムの実装オプションが望たしいでしょうが、目暙はタスクの実装を段階的に瀺すこずでした。



別の興味深い点がありたす。 その結果、「Cheerful Cook」ずいうゲヌムができたした。 「ちょっず埅っお」、「狩り」、「゚むリアンの逃避」、「海の秘密」、「ホッケヌ」、「サッカヌ」など、そのようなゲヌムはたくさんありたした。 しかし、これらのゲヌムはすべお同じ原理で䜜られおいたす。 実際、プログラムの最小限の倉曎でグラフィックコンポヌネントのみが倉曎されたした。 したがっお、プログラムから数分で、必芁なものを実装できたす。



たずえば、「ちょっず埅っお」 グラフィックが再描画されたす。 これは理解できたす。 アルゎリズムの芳点から芋るず、倉曎は1぀だけです。オブゞェクトは最初に䞋から䞊に飛んでから、埌ろに戻りたす。「ちょっず埅っお」では、動きは䞀方向にすぎたせん。 ぀たり 各アむテムのむンテグレヌタヌのビルドアップ速床に関䞎するRSトリガヌず「遞択」アルゎリズムを削陀し、代わりに負の速床のみを配眮し、新しい卵が衚瀺されたずきにむンテグレヌタヌ倀を最倧に蚭定するだけで十分です。 以䞊です。 8぀のアルゎリズムを削陀し、8぀の新しい接続を実行するず、ゲヌム「ちょっず埅っおください」の準備ができたした。



以䞊です。 面癜かったず思いたす。



PS。

トピックが興味深い堎合、以䞋は他の蚘事ぞのリンクです。






All Articles