Age of Empires 2スクリプトエディターをチューリングマシンに変えることができます

画像

発話の論理、チューリングマシンに費やした夕方に勝るものはありません
およびAOE2スクリプトエディター...

エディターで使用できる他の優れた機能の中で、最も驚くべき機能はトリガー検出機能です。 それらは、条件に基づいたアクションにつながります。 ここから始めるのは、ルールがここに設定されているためだということは、私には明白に思えました。 これにより疑問が生じます。具体的にはどのタイプのトリガーを探す必要がありますか? もちろん、チューリングマシンの要件を満たすものです! これは、これらのトリガーの条件とアクションにより、以下を実装できることを意味します。

1.文字の読み取りと書き込み
2.「メモリスペース」の位置を変更する
3.「テープ」または「メモリ」がある
4.使用済みキャラクターのプールを用意する

さらに、いくつかのルールを書き留める必要があります。 また、ステートメントのロジックに非常に便利にアクセスできます。 これから調査を開始し(つまり、Google検索から)、30分後に必要な答えをすべて受け取りました。

以下のオブジェクト、条件、および効果は、要件を十分に満たしています。

キャラクタープール:任意の数のゲームユニット
メモリプール:ゲームで使用可能なすべての種類のユニット(投稿の最後にある注意を参照)

メモリ内の位置の変更:オブジェクトの作成

メモリ位置への書き込み:オブジェクトの作成、タスクオブジェクト、オブジェクトの強制終了

メモリー位置からの読み取り:独自のオブジェクト、独自の少数のオブジェクト

これは、メモリの「セル」としてのゲームユニットのタイプの使用例です。


この例では、メモリは次のようになります:1、1、1、1、1、1、1、1、1、1、1、1

しかし、トリガーの助けを借りて非常に簡単にメモリを変更できるため、次のようになります。


つまり、8、1、8、1、1、8、1、1、1、1

次のセクションでは、トリガーは「プログラム」を起動し、非常に奇妙なデータストリームを表示する方法として提示されます。 トリガーは、ゲームの開始時に自動的にトリガーするように構成できます。また、無限にループするように常にトリガーするように構成できます。 これがプログラムの主な推進力であり、次の2つの方法でそのような「プログラム」を構成できます。

並列実行:

  T1 T2 T3
 C1(T)C1(F)C1(F)
 C2(F)C2(T)C2(F)
 C3(F)C3(F)C3(T) 

3つのトリガー(T)はすべて同時に起動し、条件(C)が適切なタイミングで起動するように構成されています。

ツリーの実行:

  T1はT2を起動します(T3またはT4) 

T1はプログラムを「制御」し、ゲームが開始して無限ループを実行するときに動作を開始する唯一のトリガーです。 実行をT2トリガーに渡し、次にT2がT3とT4を起動しますが、どちらを実行するかを決定します(並列実行時のトリガーの動作、または以下のXORの動作と同様)。

これは、このようなプログラムを構築するためのより実用的な方法であり、命令が少ないため、より効果的であるように思えます。

スクリプトエディターには式ロジックを実装する方法がありますか? はい 条件にアクセスできます。つまり、if-> thenを作成できます。これにより、OwnオブジェクトおよびOwn Fewerオブジェクトと組み合わせて、メモリにアクセスして比較を実行できます。

2つの式/条件を組み合わせることができるため、単純にAND演算を実装できます。

 自分のオブジェクト(ユニットタイプ:兵士、金額:7)
自分のオブジェクト(ユニットタイプ:射手、量:10) 

トリガーを使用して、部分的な「OR」を実装することもできます。 問題は、両方の分岐が真である場合、両方のトリガーが実行されることです。 したがって、より便利な演算子はXORです。

 トリガー1トリガー2
条件1(T)条件1(F)
条件2(F)条件2(T)
エフェクトエフェクト 

両方のトリガーは同時に起動しますが、一方の条件では条件1が真であり、他方では条件1である必要があり、条件2についてはその逆であるため、エフェクトの1つのブランチのみが実行されます。

また、Own Fewer Objects、Create Object、Task Object、およびKill Objectを使用して、加算と減算を簡単に実装できます。

 トリガー1
自分より少ないオブジェクト(ユニットタイプ:兵士、量:9)
オブジェクトの作成(兵士)
タスクオブジェクト(場所に移動)

トリガー2
自分より少ないオブジェクト(ユニットタイプ:兵士、量:17)
オブジェクトの作成(兵士)
タスクオブジェクト(場所に移動) 

これがゲームでどのように見えるかの例:


ゲームはある時点で複数のオブジェクトを作成しないため、タスクオブジェクトが必要です。

この操作の結果は、画面上部のユニットカウンターで確認できます。

より複雑で便利なトリガーと条件のセットを使用すると、「等しい」、「以下」、「以上」などの等値チェック操作を実行できます。 ただし、適切に動作させるために、特別な「停止」シンボルを導入する必要があります-キング:


「9より大きい23より大きい」の構成は次のようになります。

 トリガー1(起動時、ループ)
自分より少ないオブジェクト(ユニットタイプ:兵士、量:23)
オブジェクトの作成(兵士)
トリガーを有効にする(2)

トリガー2(ループなし)
自分のオブジェクト(ユニットタイプ:兵士、金額:9)
自分より少ないオブジェクト(ユニットタイプ:キング、量:0)
オブジェクトの作成(キング) 

このシステムは、23歳になるまで兵士を常に作成します。9人以上いる場合、23が9を超えていることを意味し、これを指定するためにキングを作成します。 スクリプトの作成プロセスでは、「ブレーク」ユニットを他のものに変更したり、必要な数のスクリプトを作成したりできます。

一般に、これは特に有用ではありませんが、それでも素晴らしいです!

残念ながら、ビデオを録画する簡単な方法を見つけることができませんでしたが、誰かが成功したら、ここに追加します。



だから、チューリングの完全性とは何なのかよくわからなかったようです。 チューリングマシンを作成できるようにするだけでなく、チューリングマシンも作成する必要があります。 それを実現するには、「無限の」メモリが必要です。 私たちの場合、ユニットタイプの数によって制限されていますが、この問題を解決するために任意の量を作成できます: http : //aok.heavengames.com/university/modding/an-introduction-to-creating-units-with-age-2 /

Source: https://habr.com/ru/post/J349374/


All Articles