小さなおもちゃ「マむンスむヌパ」は30行ではありたせん

こんにちは。



前回 、 FBDプログラミング蚀語でゲヌム「スネヌク」を簡単か぀迅速に蚘述し、プログラムをコントロヌラヌにロヌドし、最終的に電力ず熱の生産の管理ず自動調敎に関䞎する機噚を取埗する方法を瀺したした。 「圹に立぀」䜕か。



しかし、発電所の運甚担圓者の䜜業に぀いお盎接の知識を持っおいる人から、「ヘビ」は客芳的な理由でACS TPに適切ではないずいう重芁なコメントを受け取りたした。 第䞀に、ステヌションでのすべおの自動化は自動化されたプロセス制埡システムによっお制埡され、芏制および保護も行われおいるずいう事実にもかかわらず、生掻の珟実は、オペレヌタヌが必芁に応じお迅速な介入のために技術的プロセスを監芖するこずも芁求されるようなものです。 そのため、玩具は前に瀺したものずは察照的にオペレヌタヌの泚意を完党に占有せず、アプリケヌションを切り替え、ゲヌムを害するこずなく䜕でもできるようにする必芁がありたす。 第二に、おもちゃの「ヘビ」自䜓は非垞に動的であり、ボタンをすばやく抌す必芁がありたす通垞、瞬時に宝食品ため、簡単に小さな゚ラヌに぀ながる可胜性がありたす。たずえば、おもちゃを制埡する代わりに、いく぀かの重芁な技術この操䜜モヌドでは觊れられない機噚。 もちろん、悪いこずは䜕も起こりたせん。 いずれの堎合でも、保護は機胜したすが、タヌビンを停止したり、保護されたボむラヌを停止したりするず、これらは倚倧な経枈的損倱ず運甚を再開する䞍必芁な䜜業に぀ながりたす。



これはすべお、ロゞックに穏やかなおもちゃを実装する必芁があるずいう明癜な考えに぀ながりたす。 オプションずしお-すべおの皮類の゜リティアゲヌムたたは有名な「マむンスむヌパ」。 すべおの皮類の゜リティアは、むンタヌネット䞊ですぐには芋぀からなかったカヌドの画像を必芁ずするためもちろん、カヌドの図面は簡単に芋぀けるこずができたすが、サむズず品質、およびカヌドのデザむンに特別な芁件がありたした、 Sapperおもちゃを実装するこずが決定されたした 。



これに加えお、この特定のゲヌムの実装には別の重芁な理由がありたす。 ぀たり、FBDでのプログラミングがいかに簡単で楜しいかをもう䞀床瀺したいずいう願望です。



いく぀かの玹介的な蚀葉



しかし、最初に、いく぀かの入門的な蚀葉読むのに疲れおいない人のために。



おそらく、この投皿を最埌たで読んだ人は誰でも蚀うでしょうたたは考えたす。 はい、Cで30行のコヌドで同じこずを蚘述したすC ++、Delphi、JSなど。 そしおそれに同意したす。 しかし、䞀぀だけありたす。 30行のコヌドの高氎準蚀語で䜕かを曞く前に、必芁なこずはただ

抵抗できたせんでした




この高氎準蚀語を孊びたす。

そしお、誰でもFBDでプログラムの䜜成を開始できたす。 さらに、未就孊児には基本的なFBDプログラミングスキルが教えられたす。

私は倚くが子䟛の頃の様子を芚えおいるず思いたす...
...教育甚ゲヌムを装っお、キュヌブを䜿っお単語を収集したした

たずえば、文字から...






蚀葉を集めお......








぀たり、FBDプログラミングはシンプルで盎感的です。

小さな発蚀
ここで私は叀い習慣からFBDを蚀いたすが、このすべおの䞻芁な開発者の䞀人によるず

æ··ä¹± 、 2013幎12月20日12時25分

これはFBDではありたせん。 構造を含むデヌタ型のサポヌトがありたす。 デヌタは、ポテンシャル瞬時倀ずコマンドバッファリングされた倀にも分けられたす。 たた、倀の品質の組み蟌みサポヌトもありたす。 フィヌドバックを行うこずができ、それらはシマりマによっお区別されたす。 この堎合、デヌタ型のデフォルト倀が初期倀ずしお䜿甚されたす型自䜓で芏定。

䞀般に、すべおのワゎンがありたす。たた、条件のサポヌトず結び付けの圢で実行順序の制埡をそこに抌し蟌む予定です。 その埌、FBD、SFC、および埓来のフロヌチャヌトの完党なフランケンシュタむンがありたす。




もちろん、この蚀語には深刻なアルゎリズムがあり、コントロヌラヌリ゜ヌスの問題、技術プログラムの実行の最適化、メモリの最適化、党䜓的なパフォヌマンスがありたす。 頭のいい人は、最も単玔なブロックから完璧なアルゎリズムを䜜成する方法に぀いお困惑しおいたす。 しかし、以来 この蚘事は本質的に玔粋に探玢的であるため、これらの埮劙な点はすべお省略し、最終的にプログラミング自䜓に盎接進みたす。



しかし、その前にちょっずした知恵に関する小さな質問がありたす。 誰が掚枬したすか-「尊敬ず尊敬」、せっかちな人のために-答えは以䞋のネタバレです。

そのため、ゲヌム「Snake」ずゲヌム「Minesweeper」は、FBDでのプログラミングずいう点ではたったく同じゲヌムです。 なんで そしお、そのような声明を可胜にする共通点は䜕ですか

答え
すべおが非垞に簡単です。 ゲヌム「Snake」ずゲヌム「Minesweeper」の䞡方に、セルで構成されるフィヌルドがありたす。 このフィヌルドのセルだけが異なる倀を取り、異なる方法で衚瀺されたす。 ぀たり...぀たり、ゲヌム「Snake」のプログラムずそのグラフィカルむンタヌフェむスを䜿甚しお、30分たたは1時間の䜜業でこれをすべお「Minesweeper」ゲヌムにリメむクできたす。実際には、1぀のアルゎリズムのみを倉曎し、フィヌルドの1぀のセルを再描画する必芁があるためです。


プログラミングを開始



そこで、タスクのプログラムを開始したす。

私の意芋では、FBDプログラミングの80は、最終的に䜕を取埗したいかを明確に想像するこずです。 そのため、このような理解が埗られた堎合にのみ、タスクの80が解決され、文字通りコヌドをスケッチしおコヌムする少しの䜜業がありたす。 ここで、実際にこの原理を実蚌しようずしたす。



「ヘビ」20x20セルずの類掚による「サッパヌ」のフィヌルドがあるずしたす。 したがっお、400個のメモリセルが必芁であり、各セルでフィヌルドの各セルが凊理されたす。 プログラムを構成するために、すべおのセルを行に分割したす。 したがっお、それぞれ20のセルアルゎリズムで構成される20の行アルゎリズムが必芁です。 ぀たり プログラムの䞭栞を理解するようになりたした。



アルゎリズム「文字列」



文字列アルゎリズムの詳现を怜蚎しおください。 むしろ、このアルゎリズムの入力で必芁なデヌタず出力で必芁なデヌタ。 最埌から始めるこずをお勧めしたす-぀たり 出力から。



アルゎリズム出力


-たず、ヒュヌマンマシンむンタヌフェむスたたはより単玔にオペレヌタステヌションでレンダリングするために、各セルの状態を決定する出力デヌタラむンが必芁です。

-次に、どの现胞に爆匟が含たれ、どの现胞が安党であるかを瀺すベクタヌが必芁です。

-第䞉に、プレむダヌが爆匟でフィヌルドに「足を螏み入れた」ずいうサむンが必芁で、ゲヌムは倱われたす。この出口を「Big_Bada_Boom」ず呌びたしょう。

-第4に、䟿宜䞊、「サッパヌ」には、爆匟のある近隣のないセルにヒットするず、それず隣接するすべおの空のセルが自動的に開くチップがありたす。 ぀たり プログラム自䜓によっお「セルを開く」ために反察のコマンドを送信する出力が必芁です。

-5番目に、爆匟を蚭眮するためのアルゎリズムには、この行に爆匟がいく぀あるかを瀺す出力が必芁です。 もちろん、この倀は、節2で説明したベクトルから盎接取埗できたす。れロ以倖のビットをすべお远加するだけで十分です。 ただし、䟿宜䞊、この関数をマクロ内に远加したす。

-第6に、統蚈のために、行に残っおいるクロヌズドセルの数を知る必芁がありたす。

サッパヌゲヌムのすべおの機胜に必芁なのはそれだけです。



デヌタを含む出力は6぀のみです。



次に、必芁な出力を圢成できるようにするために、入り口で必芁なものに぀いお考えおみたしょう。



アルゎリズム入力


-アルゎリズムの䞻な入力がオヌプンセルプレヌダヌからのコマンドであるず想定するのは論理的です。 結局のずころ、これがゲヌムの䞻な意味です。

-プログラミングを明確にするために、もう1぀入力を䜿甚したす-「セルにフラグを付ける」。これは爆匟があり、誀っおこのセルをクリックしお爆発しないこずを瀺したす。

-各セルのステヌタスを圢成するにはセルに爆匟がない堎合、そのセルに隣接するセルに爆匟がいく぀あるかを瀺すこずを芚えおいたす、䞊の行ず䞋の行からベクトルを開始する必芁がありたす。 アルゎリズムを汎甚化し、3぀の入力を远加したしょう珟圚の行の䞊の爆匟があるベクタヌの入力、珟圚の行の爆匟があるベクタヌの入力、および珟圚の䞋の行に爆匟があるベクタヌの入力

-新しいゲヌムを開始しおセルの倀を曞き換えるには、論理入力「新しいゲヌム」を远加したす。

-前述のように、セルが空で、近くに爆匟のあるセルがない堎合、隣接するセルが自動的に開きたす。 これに「プログラムで開く」入力を远加したす。

-たあ、もちろん、これはどのようなゲヌムですか したがっお、「Install Bombs」゚ントリが必芁です。



合蚈8぀の入力。



プログラムのメむンアルゎリズムから必芁なのはそれだけです。

マクロに入力ず出力をすばやく入力し、このアルゎリズムを取埗したす。

たたはそれを明らかにした堎合

次に、アルゎリズムに意味を入力したす。 すでに述べたように、メむンアルゎリズムを埋めるコアは「メモリセル」マクロで、これは20個になりたす。



メモリセルアルゎリズム



ゲヌムフィヌルド「サッパヌ」の各セルから必芁になる可胜性があるものず、このためにマクロを送信する必芁があるものに぀いお考えおみたしょう。 最埌からやり盎したしょう。 出口から。 そしお、必芁なすべおのデヌタを定匏化するず、それを受信するために入力で必芁なものが明らかになりたす。



アルゎリズム出力


-たず、セルには、このセルのステヌタスを瀺す出力が必芁です。 サッパヌゲヌムでフィヌルドの各セルがいく぀の状態を取るこずができるか疑問に思ったこずはありたせんか

フィヌルドセルの状態
回答12.これが事実です-12の異なるセルマッピングに察応する12の状態。

次のように゚ンコヌドしたした。

-1-セルは閉じおいたす。

0〜8-セルは開いおおり、隣接するセルの爆匟の数を瀺したす。

9-セルが開いおいお、そこに爆匟がありたした。

10-セルが閉じられ、フラグが蚭定されたす。



-別途、蚈算およびその他の凊理のために、ロゞック出力を「セルが閉じられたした」および「爆匟がセルにむンストヌルされたす」にしたす。

-既に述べたように、空のセルが開かれた堎合、隣接するセルが自動的に開かれたす。 したがっお、「オヌプンネむバヌ」ずいう論理蚘号が必芁です。

-最埌に、プレむダヌがミスを犯し、爆匟でフィヌルドに「螏み蟌んだ」堎合、ゲヌムが倱われたずいう論理的な兆候を圢成する必芁がありたす。 「Bada_Boom」ず呌びたしょう。

合蚈5぀の出口。



アルゎリズム入力


必芁な出力を圢成するために必芁なものを刀断しおみたしょう。

-たず、アルゎリズムはプレむダヌから「オヌプンフィヌルド」コマンドを受信する必芁がありたす。

-簡単にするために、別のチヌムずしお、ここで「フラグを蚭定」コマンドも蚭定したす。

-先ほど蚀ったように、フィヌルドの各セルは、隣接するセルにいく぀の爆匟が怍えられおいるかを知っおいる必芁がありたす。 このために「隣人」ず呌ばれる別の入り口がありたす。

-爆匟の開始をランダムに確立するには、セルを採掘するための論理蚘号「Here is the bomb」が必芁です。

-もちろん、新しいゲヌムを開始するには、セル内のすべおの情報をリセットするリセット蚘号が必芁です。



このマクロを詰め蟌み、次のアルゎリズムを取埗したす。



次に、メモリセルアルゎリズム自䜓をプログラムしたす。 それは非垞に簡単です



アルゎリズムの原理の簡単な説明
-近隣の状態から圢成されたベクトルは、このアルゎリズムを䜿甚しお展開される「BitDescipher1」アルゎブロックに到達し、ベクトル内のナニット爆匟の数が「Slug1」アルゎブロックで蚈算されたす。 セルに最倧8個の隣接セルしかない堎合、なぜ9ビットあるのかずいう疑問がすぐに生じたす。 答えは、汎甚性のためです。 事実は、埌で芋るように、各セルで隣人を芋぀けるために別のマクロを曞いたずいうこずです。 そしお、すべおの堎合にマクロを普遍化するためにそしお、セルがフィヌルドの䞭心にあるずきは8個の隣人だけでなく、コヌナヌにあるずきは3個、フィヌルドの端にあるずきは5個だけを持぀こずができたす 9ビットをタップしたす。

-トリガヌ「RStrig1」は、セルの「フラグ」を蚭定およびリセットするために䜿甚されたす。 最初のコマンドがトリガヌを投入し、2番目のコマンドがリセットされたす。 図からわかるように、コックされたトリガヌは「I2」アルゎブロックの「Open」コマンドの通過をブロックしたす。 トリガヌ出力からの倀は、反転した「AND」アルゎリズムの入力に蚭定されたす。 ぀たり トリガヌがコックされおいる間、「False」は「And」アルゎリズムの2番目の入力に到達し、「And」アルゎリズムの出力も最初の入力の倀に関係なく「False」になりたす。 「開く」コマンドでは「RS2」トリガヌをリセットできず、開いたくないセルを誀っお開くこずはありたせん。

-「RS2」トリガヌは、セルのステヌタスを圢成するのに圹立ちたす。閉じおいるか開いおいるかです。 図からわかるように、トリガヌはResetコマンド新しいゲヌムの開始によっお起動され、Openコマンドが到着したずきにのみリセットされたす。

-トリガヌ「RS1」は、このセルに爆匟が存圚するこずを瀺すために䜿甚されたす。 「Here is the bomb」プログラムがプログラムから到着するずコックになり、セルに爆匟をセットし、新しいゲヌムが始たるずリセットされたす。

-「I3」アルゎリズムは、このスキヌムで最も重芁なものの1぀です。 「RS1」トリガヌの倀爆匟はここにむンストヌルされたすおよびこのセルぞの「open」コマンドの到着はANDによっお远加されたす。 䞡方の条件が満たされおいる堎合、出力で「True」が圢成されたす。これは、プレヌダヌが爆匟でフィヌルドに足を螏み入れたこずを意味したす。 この倀は「Bada_Boom」の出力に送られ、「Big_Bada_Boom」の出力ですべおのセルから収集され、損倱を意味したす。

-カスケヌドに配眮された3぀の「遞択」アルゎリズムがセルの状態を圢成したす。 「Choice1」アルゎリズムでは、セルが開かれた堎合に䜕を出力するかが圢成されたす。番号「0-8」は近隣のセルの爆匟の数に察応し、番号「9」はマむニングされたセルに察応したす。 フィヌルドがただ閉じおいる堎合「RS2」トリガヌが䜜動しおいる堎合、「-1」アルゎリズムは「-1」に蚭定されたす。これは、前に合意したように、閉じたセルのステヌタスに察応したす。 フィヌルドが閉じおいる「RS2」トリガヌがコックされおいるず同時に「I4」アルゎリズム「Trig1」トリガヌがコックされおいる堎合、「Choice3」アルゎリズムでは、蚭定されたフラグに察応する倀が匷制的に「10」に倉曎されたす

-隣接セルを自動的に開くために、最新の比范アルゎリズムが䜿甚されたす。 「Vybry3」の出力でれロになった堎合、プレヌダヌはセルを開き、その隣には爆匟がありたせん。 次に、隣接するセルを開くためにチヌムが送られたす。



この原始的なアルゎリズムは、ゲヌム党䜓の基瀎です。 いく぀かのコヌミングプログラムずdopilivaniya機胜のみがありたした。



20個の「メモリセル」で構成されるマクロ「String」を開始したしょう。


マクロ自䜓ず説明。 写真は倧きいです。


マクロ自䜓は非垞に単玔です。 䞀般的なマクロの入力ず出力に関連付けられた20のアルゎリズム「メモリセル」。 セルのステヌタスに぀いおは、残りの郚分に぀いおは、この関係は盎接行われたす-論理倀をベクトルにパックする「BitShifter」アルゎリズム、たたは行の必芁な芁玠の数を蚈算する加算噚、たたは「OR」アルゎリズムを介しお隣接セルを開くか終了する出力コマンドを生成するゲヌム "Big_Bada_Boom"。

ブロック「オヌプン」、「ベクトルの倉換」、および「オヌプンネむバヌ」のみに特別な泚意が払われたす。

このような各ブロックを個別に怜蚎したす。

ブロックから始めたしょうOpen


ここでは、空のセルの隣接セルを開くずきに、プレヌダヌずプログラムからの「OR」コマンドが単玔に加算されるこずがわかりたす。



ブロックを考えおみたしょうベクトル倉換


アむデアはずおもシンプルです。 3぀のベクトルが衚瀺され、特定の䜍眮で各セルを囲む鉱山の数を蚈算する必芁がありたす。 これを行うために、単玔にベクトルを䜍眮-2だけ右にシフトし、シフト埌の各ベクトルの最初の3ビットの1の数をカりントするこずを意図したした。 しかし、その埌、私は面癜いこずに出くわしたした。 しかし、セルの䜍眮が最初の堎合はどうでしょうか 次に、残りずの類掚により、負の倀぀たり、右ではなく巊だけベクトルをシフトする必芁がありたす。 もちろん、巊に移動したビットはすべおれロになりたすが、カりントの䞀般的な原則は保持されたす。 ただし、アルゎリズムの実装の埮劙な点によりこれが蚱可されなかったため、セルの䜍眮をチェックし、セルの最初の䜍眮が別の凊理を実行するようにチェックする必芁がありたした。 実際のずころ、この凊理は、珟圚の行の2番目のビットずすべおの行の3番目のビットを凊理するだけです。 暙準マクロでは、ロゞックで必芁な8ビットではなく、9ビットのネむバヌを圢成する必芁があるこずを曞きたした。 これはたさにこの状況によるものです。



最も泚意深い読者は、明らかに䞍必芁な操䜜がここで実行されおいるこずにすでに気付いおいたす。 隣人を説明するビットを取埗し、それらをベクトルにパックしおから、アンパックしお再床合蚈したす。 ぀たり 梱包ず開梱の操䜜は明らかに冗長です。 しかし、デバッグず芖芚化のためにこのオプションを残したした。



ブロックを考えおみたしょう隣人を開く


ここでは、䞀般に、すべおが非垞に簡単です。 セルが空の堎合は、1぀ではなく8぀の隣接セルを開く必芁がありたす。 生掻の統䞀ず簡玠化のために、8個の隣接するセルではなく、9個を開きたすはい、そしおそれ自䜓。FBD蚀語では、プログラムの䜜業やリ゜ヌスに圱響しない最も単玔な仮定でさえ、生掻を倧幅に単玔化したす。 したがっお、マクロアルゎリズムは単玔です。 セルの䜍眮を確認したす。 セルが2番目たたはそれ以䞊の䜍眮にある堎合、最初の連続したビットからベクトルを圢成し、それらをシフトしたすベクトルの凊理ず同様に、ベクトルの䞀郚を先頭に持っおこないため、右だけでなく巊に移動したすが、それどころか、必芁な郚分だけ初期ベクトルを䜍眮-2だけシフトしたす。 最初のセルがある堎合、2ビットの初期ベクトルを圢成し、䜍眮-1= 0だけシフトしたす。 本圓にどこにも動いおいない。

次に、準備されたすべおのベクトルを「OR」に埓っお远加し、メむン出力に䞎えるだけです。





別のマクロに぀いおも蚀及したいず思いたす。 ゲヌムを開始する前に、フィヌルドに地雷をランダムに配眮する必芁がありたす。 しかし、乱数ゞェネレヌタがなく、「ランダム」コマンドが利甚できない堎合はどうでしょう。 もちろん、むンタヌネット䞊で擬䌌乱数シヌケンスを生成するための倚くのアルゎリズムがありたす。 しかし、それらは非垞に耇雑であり、その実装自䜓は別の蚘事に倀したす。 したがっお、通垞の方法でマクロ「ランダムゞェネレヌタヌ」を䜜成する必芁がありたした。



マクロの仕組みの簡単な説明
したがっお、乱数ゞェネレヌタヌはありたせん。 じゃあ 自分で䜜っおください

このアむデアは原始的であり、以前のプログラムですでに䜿甚されおいたしたが、ここで開発が行われたした。

積分噚では、のこぎりに沿っお非垞に急速に倉化する倀がカスタム範囲で圢成されたす「䞊限しきい倀」ず「䞋限しきい倀」の入力が範囲に関䞎したす。 さらに、「秒」アルゎリズムでは、開始時からコントロヌラヌの動䜜時間を蚈算したすが、これも継続的に増加しおいたす。 コントロヌラの動䜜時間を急速に倉化する数倀で陀算し、陀算の残りを取埗したす。 次に、残りから必芁な数字を遞択したす偶然、X座暙は小数点以䞋4〜5桁、Y座暙は小数点以䞋6〜7桁にしたした。 攟電は非垞に簡単です。 1,000,000で陀算しお剰䜙を乗算し、100で剰䜙を陀算したす。その結果、剰䜙で倀[0..100を取埗したす。 この倀は任意に100に近づけるこずができたすが、同じになるこずはありたせん。 必芁なランダム倀は[1..20]の範囲にあるため、剰䜙を5で陀算しDelOst3アルゎリズム、陀算の敎数郚分を取埗し、型コンバヌタヌを䜿甚しお敎数に倉換したす。 すでに述べたように、配圓は100になるこずはありたせん。これは、商が自然数の範囲にあるこずを意味したす[0..19]。 結果に1を远加するだけで問題を解決したす。 これで、乱数の準備ができたした。 プレむダヌが「新しいゲヌム」ボタンをクリックする瞬間ず、その瞬間にむンテグレヌタヌが持぀䟡倀がわからないずいう事実ず、小数点以䞋4〜7桁の倀を取るずいう事実により、自信を持っお蚀うこずができたす。良い乱数ゞェネレヌタヌがありたした。



すべおの郚品を぀なぎ合わせお矎しさを加えたす



これで、プログラムのすべおの郚分が準備できたした。 それらを䞀緒に接続し、ストラッピングを行いたす。

メむンプログラムを描画したす。






少し説明
図からわかるように、ここで最も重芁な䜜業アルゎリズムはRuchSelector1であり、1サむクルの出力で論理ナニットを出力し、新しいゲヌムを起動したす。 新しいゲヌムの起動は、信号が「New_game」入力ぞのすべおの「String」マクロに送信され、この信号が「Memory_cell」マクロの「SR2」トリガヌを蚭定し、セル内の爆匟ずフラグの存圚に関䞎する他のすべおのトリガヌをリセットするずいう事実にありたす。

同時に、「Rukselector1」アルゎリズムの同じ出力は「RS1」トリガヌをリセットしたす「Game_over」-爆匟が隠されたセルをプレむダヌが開いた堎合、このトリガヌはコックされ、プレむダヌが勝った堎合にコックされた「RS3」勝利トリガヌ、぀たり、フィヌルドに隠されたすべおの爆匟を怜出したす。同時に、同じ信号が「Memory1」アルゎリズムの入力に送信され、珟圚のゲヌムに蚭眮された爆匟の数を蚘録したすプレむダヌは、フィヌルド内の爆匟の数をい぀でも倉曎できたすが、プログラムでは蚭定は新しいゲヌムの開始時にのみ発生したす s。

次に、サむクルの遅延「Delay1」アルゎリズムメモリセル内のすべおのトリガヌをリセットするために必芁で、爆匟を蚭定する手順を含む「RS2」トリガヌ「Put_bombs」がコックされたす。 ぀たり 「Generator_Random」マクロの出力で生成されたランダムな座暙を「Column」および「Row」アルゎリズムに送信したす。これらのアルゎリズムは、指定された座暙で「Memory cell」のRS1トリガヌを蚭定するコマンドを送信したす。

むンストヌルされおいる爆匟の数を監芖するのは簡単です。 蚭眮された爆匟の総数が蚈算され、「Memory1」アルゎリズムで蚭定された数ず比范されるずすぐに、「SR2」トリガヌがリセットされ、それによっお新しい爆匟の蚭眮が停止されたす。



アルゎリズム36〜40は、プレヌダヌが指定した数の爆匟の正確さを確認するのに圹立ちたす。 ここでは、デバッグのために、爆匟の最小数ず最倧数をそれぞれ0個ず400個に制限したした。 この範囲倖の数倀を蚭定するず、自動的に最も近い境界ず芋なされたす。



勝利条件の充足の怜蚌は非垞に簡単です。 すべおのクロヌズドセルが考慮されたす。 それらの数が指定された数の爆匟ず等しくなり、トリガヌ「RS1」「Game_over」がコックされないず同時に、トリガヌ「RS3」「勝利」がコックされたす。



2぀のアルゎリズムのみを考慮する必芁がありたす。

「OR2」アルゎリズム。 その䞊で、論理ORによっお、3぀のトリガヌすべおの出力が収集されたす。 「OR2」アルゎリズムの出力1に等しい堎合に応じお、プレヌダヌのアクションのロックが蚭定されたす。 ぀たり (.. , , ) . , .

«1» , . . 400. 400, , .



.



グラフィックむンタヌフェむスを固定したす



これは数分で完了したす。セルに12個の画像が描画されこのためにペむントを䜿甚したした、それらの衚瀺はセルの状態に応じお蚭定されたす。次に、このセルが400回コピヌされたす400のセルはCtrl + c-Ctrl + vの9぀の操䜜であるため、怖がる必芁はありたせん。地雷原が衚瀺されたす。むンタヌネット䞊で、「サッパヌ」のロゎにずっお意味のある最初の画像を芋぀けたす。タむマヌ衚瀺ず「新しいゲヌム」ボタンを固定したす。

そしお今、最も難しいのは、ゲヌムでの勝利ず敗北のために写真を遞ぶこずです。次に、「原子爆発」ず「勝利」のリク゚ストのために怜玢゚ンゞンで取埗した最初の写真を撮りたした。これでゲヌムの準備は完了です。

開始䜍眮






遊ぶ






負け


: , , , .


そしお勝ちたす






たずめるず



この投皿党䜓を圧倒できた人は誰でも、単玔なプログラムでありながら「Hello、World」プログラムではなく、同時にディレクトリ、ヘルプ、プログラマヌのフォヌラムに座っおいる、喫煙する必芁はたったくないこずに気づいたでしょう。マニュアルなど必芁なこずはすべお、数時間でそしお個人的には写真甚のアルゎリズムブロックの矎しい配眮に費やしたほずんどの時間で実珟したしたが、加算アルゎリズム、枛算アルゎリズム、乗算アルゎリズム、および孊生にも明らかな「AND」、「OR」のアルゎリズムを䜿甚したしたさらに、いく぀かの最も単玔なRSトリガヌが関䞎したした。プログラムで䜿甚される最も耇雑なアルゎリズムは「積分噚」です。そしお、フィヌドバックず境界チェックを行う加算噚ずしお䜿甚したした。぀たり実際、積分噚を「加算」アルゎリズムず2぀の「比范」アルゎリズムに眮き換えるこずができたす。

蚀い換えるず、FBDでのプログラミングはシンプルで楜しいものであり、初期レベルでは、基本的なロゞックを理解するこずを陀いお、知識やスキルはたったく必芁ありたせん。䞻なものは、最終結果の明確なアむデアです。もしそうなら、プログラム自䜓がその論理的な結論です。ただし、「これたでに取埗したいもの」がただ提瀺されおいない堎合は、タスクをより明確に定匏化する必芁がありたす。䞊蚘のすべおは、FBDで実装されたすべおのプロゞェクトではなく、この䟋で瀺したような単玔な小さなタスクに適甚されるこずをすぐに蚀わなければなりたせん。なぜなら数䞇の信号がある巚倧なプロゞェクトの堎合、これらすべおを頭の䞭で接続するこずはおそらく䞍可胜です。ただし、この堎合でも、巚倧なプロゞェクトは小さなサブタスクに分割されたす。このサブタスクでは、すでにプロゞェクトの䞀般的な芁件を考慮しお、アプロヌチが既に完党に適甚可胜になっおいたす。

なぜなら FBD蚀語は普遍的であり、プログラムの実装に基本的な最も単玔なアルゎリズムを䜿甚したした。このプログラムは、囜内倖のコントロヌラヌたずえば、SiemensたたはABBのコントロヌラヌで最小限の劎力で再珟できたす。



未実珟のたた


叀兞的なサッパヌゲヌムの3぀の機胜は未実珟のたたでした。

1぀目は、蚭定でフィヌルドのサむズを蚭定する機胜です。これは簡単に行えたす。実際のずころ、フィヌルドにあるセルの数だけ、単玔に「メモリセル」アルゎリズムがコピヌされたす。唯䞀の問題がありたす動的メモリの䞍足、぀たりデヌタを「オンザフラむ」で远加たたは削陀できない。そしお、これから単玔な結論が続きたす-倉化するフィヌルドサむズを䜜るのは非垞に簡単です-最初に最倧フィヌルドサむズのタスクをプログラムする必芁があり、それからアむドルセルに論理属性を蚭定するだけです。この属性によっお、この属性によっおグラフィカルむンタヌフェむスに衚瀺されず、ゲヌム䞭に凊理されたせん

2぀目は、爆匟が元々その䞭にあった堎合、最初のクリックでのセルの眮換です。぀たりこのプログラムでは、Windowsの「サッパヌ」ずは異なり、最初のクリックで倱う可胜性がありたす。これも簡単に行えたす。「Game_over」トリガヌの受信信号ずクロヌズドセルの数を確認するだけで十分です。クロヌズドセルの数が399で、信号が「Game_over」トリガヌを䜜動させるようになった堎合、この信号をブロックし、クリックされたセルをリセットし、アルゎリズムを実行しお別の地雷をランダムにむンストヌルする䞀方で、地雷を既に開いおいる状態に蚭定する機胜をブロックする必芁がありたすセル。

説明からわかるように、統蚈を収集する機胜は実装されおいたせん。぀たり最良の結果は蚘憶されおいたせん。蚘録を蚭定した人の名前です。勝利ず敗北の割合など しかし、これは非垞に些现なこずなので、文字通りマりスを数回クリックするだけなので、この関数を実装するために党員に任せたす。



この蚘事を最埌たで読んでくれたみんなに感謝したす。面癜かったず思いたす。



All Articles