アクセスしやすく、強力で、コードをすばやく記述できるプログラミングシステムをゲームに実装するにはどうすればよいですか?


15

現在、宇宙ベースのサンドボックスゲームに取り組んでいます。これは、システムをカスタムプログラムする機能を大幅に備えています。私はこれを両方の方法で実装したい

  1. アクセス可能、
  2. 強力(最低限はチューリング完全性になります)
  3. コーディングが速い

テキストベースの言語は通常、後者の2つの要件のみを満たします。最初の2つを満たす視覚言語を設計することは難しくありませんが、視覚言語はマウスを大量に使用する必要があるため、プログラムに苦労します。非常にアクセスしやすいテキストベースの言語がいくつかありますが、完全な非プログラマーがプログラミングを簡単にできるようにしたいと思います。


誰かが実際にあなたに例を与えることができるならば、私は驚くでしょう。私は本当にこれは(そのような人間が、ロジックと何ではない、心理的要因が何であれ、すべてのこれらの人間がものを中心に適用する方法など)いくつかの大規模な研究が必要であると思います原因
Sidar

2
スクラッチについては誰も言及していませんか?
ラッセル

2
近い投票を提案するつもりはありませんが、これは「あなたの質問に答える本全体を想像できるなら、あなたはあまり質問しすぎている」カテゴリの質問にかなり便利に分類されることを指摘したいと思いますFAQから。これは非常に難しい問題であり、ここの人々はアドバイスを提供できますが、これは解決すべきSEサイトの範囲を超えている可能性が高い問題です。
スティーブンスタドニッキ

チューリング完全性は、ConwayのゲームオブライフMinecraft、およびプログラミング用に設計されていない他のそのようなシステムによって実現できることに注意してください。
ウィル

回答:


10

実際、すべての機能を使用する唯一の方法は、複数のインターフェースを実装することです。多くの場合、アクセス可能で強力なのは、スペクトルの両端です。これを行う最も簡単な方法は、強力なシステムを実装することです。このシステムには、初心者が直感的にシステムと対話できるようにする追加のインターフェイスがあります。

初心者が視覚的にプログラムできるシステムを可能にします。おそらく、レゴマインドストームプログラミングツールに似ています。

ここに画像の説明を入力してください

ドラッグ/ドロップコンポーネントがある場所。コンポーネントには入力と出力があります。コンポーネントはAND、などの単純なもの、またはORゲート、または近くの敵のテストのようなより複雑なものです。

理想的には、視覚的表現は、バックグラウンドで記述言語スクリプトをコンパイルする必要があります。これは、言語を学習するための強力なツールも提供します。初心者が自分のプログラムを視覚的に「書く」ことができる場合、それが生成するコードを読むと、彼らはそれを理解し、生成されたコードを変更できる可能性がはるかに高くなります。最終的には、視覚ツールだけで許可されるよりも強力なコードを作成できるようになります。これにより、ユーザーのプログラミングが容易になります。

もちろん、システムのバックボーンは記述言語です。視覚的なツールは、ユーザーが簡単なプログラムをすばやく作成できるようにし、初心者が始められるようにすることです。

記述言語により、上級ユーザーは高度なことを行うことができます。また、カスタムスクリプトを作成することで、ユーザーが独自のコンポーネントを作成できるようにすることもできます。その後、作成したコンポーネントを迅速かつ簡単なインターフェイスで再利用して、プログラミングを高速化できます。

幸運を!楽しいプロジェクトのようですね。


ご説明ありがとうございます。私は実際にNXT-Gのようなことを自分でやろうと考えていましたが、そのような言語で複雑なプログラムを作成することがどれほど難しいかは経験から知っています。視覚的なプログラムをコードに変換し、プレーヤーがより経験を積んだときに戻ってテキストでプログラムを編集できるようにするアイデアが大好きなので、おそらくそれを使用します。
-Dimitriye98

1
グラフィカル表現からいくつかのスクリプトコードを生成するのは簡単ですが、スクリプトから(意味のある読みやすい)グラフィカル表現を生成するのは非常に難しいことに注意してください。したがって、おそらく非常に制限された独自のスクリプト構文になります。
イミ

1
その正確な理由から、script-> visualを実装することはまずありません。visual-> scriptに固執します。
マイケルハウス

マクロブロック(入出力を提供し、内部に任意のブロックを配置する機能)を使用して、階層、カプセル化、再利用を提供し、複雑なプログラムの作成を容易にすることができます。マクロをマクロ内に配置できないようにするか、そのような場合を検出してください...そのような無限ループの検出に失敗するプログラムを少なくとも1つ知っています。
Exilyth

5

Googleのblocklyを見ると、視覚的な要素と認識可能なプログラミング用語を組み合わせながら、かなりのレベルのアクセシビリティを維持できます。

ここに画像の説明を入力してください

Mazeデモを見ることができますインスピレーションについてをご覧ください。プログラマーではない友人の多くは、それを使用してパズルのほとんどの部分を取得し、実際に少なくともいくつかの基準を満たしています。


アクセシビリティの観点から興味深い言語ですが、そのプログラミングは非常に遅いです(試したばかりです)
パシャ

@PashaS確かにそうです、両方の世界の最高を得るためにあなたが払わなければならない代価の一部だと思います。
ケツァルコアトル

4

これについてはこれまで言及されていなかったことに驚いていますが、MITのScratchはコード化が高速なブロックインターフェイスを使用しています。これにより、ユーザーは独自の関数を作成でき、コード。

Stencylは、ブロックコーディングのもう1つの例です。このようなブロックを使用したコーディングは、Lego NXTで使用されているような視覚的なプログラミングインターフェイスよりもはるかに効率的で時間がかかりません。Stencylを使用すると、ユーザーはActionscriptまたはブロックでコーディングできます。

写真がないことをおaびします。まだ画像を投稿するほどの評判はありません。


2

BPELプログラミング言語は、視覚的な表現とそれに対応する多くのツールがあります。それはプログラミング言語ではなく、ワークフロー言語ですが、チューリング完全です。冗長ですが、プログラマとビジネスマンの両方にとって簡単に記述でき、視覚的な形式からテキスト形式に簡単に翻訳できます。良いゲーム言語になるとは思いませんが、インスピレーションの源泉になる可能性があります。そして、BPELエンジンとツールの量を考えると、いくつかのアイデアやコードを再利用することができるはずです。

BPELのような言語は、プログラミングのようには感じず、ルーティングや接続システムのように感じます。そのため、ターゲットシステムをいくつかのロジックを介してガンシステムに接続できます。


+1:BPEL自体は支持しませんが、そのアプローチはまさに私が提供した答えです。テキストまたは視覚的に表現しやすく、「通常の」プログラミングパラダイムよりもイベントルーティング/応答に重点を置いた、非常に規則的な言語。
ショーンミドルディッチ

1

このアプローチを検討してください:

  1. スクリプトロジックは、単純なルールベースのメカニズムで表現できることを確認してください。たとえば、「条件」に関連付けられたゲームプレイ中に発生する「トリガー」があり、それをいっぱいにしてから「アクション」を実行します(Starcraft 2 Editorから恥知らずに盗まれました)。
  2. 次に、いくつかの定義済みのアクション/条件/トリガーをドラッグアンドドロップできるUIを提供します。これにより、ユーザーが通常行いたいユースケースの90%を構築できます。
  3. Lua、Python、C#などの強力で人気のあるスクリプトエンジンを統合してください
  4. 最後に、これらのアクション/条件/トリガーを数十個、その言語で自分で記述します。カスタマイズユーザーが、ドラッグアンドドロップエディター内でこれらのアクションと新しいアクションを簡単にコピー、貼り付け、編集、統合できることを確認してください。
  5. おそらくトリガー、条件、アクションをパラメーター化できるようにしたいので、これら3つよりも多くのプリミティブ(「GameObject」、「Position」、「Number」、「String」など)が必要です。UIでは、これらのパラメーターを割り当てるためにいくつかのダイアログが必要になりますが、UI操作を介してスクリプト全体を構築できるようにする必要がある場合よりも、作業がはるかに少なくなります。

それは私が考えることができる最も速い方法であり、あまり苦痛なしですべてのキャンディーを手に入れることができます。クリックしてドラッグするだけでなく、ボード上のvimオタクも入手できます。また、メカニクスをシンプルに保つと(たとえば、[トリガー]-> [条件]-> [アクション])、強力で使いやすいグラフィカルスクリプトエディターのUIを開発するのに人手を費やす必要はありません。

意味を明確にするためのいくつかの例:

  • トリガーは、「Game Framework Initialized」、「Game loaded」、「Unit created」、「Unit destroyed」、「Player damageed」などです。トリガーには通常、いくつかのパラメーターがあります(たとえば、作成されたUnitは作成されたGameObjectを取得します)
  • 条件はすべて、標準のブール値および基本的な算術条件(および/または/ではない/等しい/より大きい...)に加えて、「ユニットが完全な状態にある」または「少なくとも2人のプレイヤーが接続されている」などのゲームで見つける典型的な条件です。通常、条件にはユーザーが入力する必要があるパラメーターがあります(UIを使用)
  • アクションは、いくつかの単純なパラメーターを使用するスクリプトです。「カメラをXXXにパンする」、「ユニットYを殺す」、「ゲームオーバー」、「トリガーを実行する」、「アクションX、Y、Zを順番に呼び出す」など

プログラミングはゲーム内のコンピューター用であり、プラグイン用ではないことに注意してください。とにかくありがとう。
Dimitriye98

なるほど。それは面白いゲームアプローチのようですね;)。ゲームの没入感を損なうことなくコーディング機能を提供しようとする「Code Hero」や「Garry's Mod」のような類似のゲームを検討しましたか?とにかく、あなたはまだ私の基本的なアドバイスを救い、問題をスクリプトとUIの部分に分けることができます。あなたのゲームで頑張ってください。:)
イミ

さて、コーディングはゲーム内のコンピューターコンソールで行われます。ただし、ユーザーはゲーム外でコードを作成してから、保存したコードまたはプレイするサーバーにコードをインポートできます。
-Dimitriye98
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.