12

私は現在、学校の最終学年で、コンピューター研究の高等国家卒業証書を取得するために勉強しています。基本的に、この最終学期には、基本的にシステム全体を組み込んだソフトウェア プロジェクトを開発する必要があります。

今、私がやろうとしていることはRobocodeに沿ったものですが、Java の代わりに .Net Framework でこれを行うつもりです。


ロボコードとは?

Robocode が何かを知らない方のために説明すると、これは基本的にプログラミング ゲームのようなもので、既存のクラス インターフェイスとダウンロード可能なクラスのメソッドを使用して独自のロボットを開発し、自律的な戦闘でお互いに戦います。アリーナ...そのような:

代替テキスト http://articles.techrepublic.com.com/i/tr/cms/contentPics/robocode.gif


基本的に、私が言ったように、.Net Framework を使用してこの種のシナリオを再作成したいと思います..そして、経験豊富な開発者がこのプロジェクトの正しい方向に私を導くことができることを期待して、この質問を StackOverflow に投稿しています。 .

私がこれまでに心に留めていたのは、基本的に次のものを作成することです。

  • 既存のロボットなどとの新しいバトルを作成するためのバトル アリーナおよびユーザー インターフェイスとして機能するオフライン アプリケーション。
  • プレイヤーが新しいロボットを登録したり、過去のトーナメントのスコアを表示したりするために使用できるオンライン インターフェイス...
  • そして明らかに、プレーヤーがロボットを作成するために使用する必要があるクラス インターフェースです。

アニメーションとグラフィック(実戦用)

もちろん、戦闘が発生すると何らかのアニメーションや動きが発生しますが、その媒体として何を使用するかはまだ決めていません。

私が現在考えているオプションは次のとおりです。

  • 上記の最初の箇条書きで述べたように、戦場として機能するオフライン アプリケーションを開発し、すべてのアニメーションは主に C# コードを使用して行われます。
  • または、アニメーションを処理する Silverlight アプリケーションを開発します (したがって、シナリオをオフライン アプリケーションからオンライン アプリケーションに変更します)。
  • または、おそらく最も実現可能性が低いのは、キャンバスのようなものを使用して、JavaScript を使用して戦闘アニメーションを作成することです。

この特定のシナリオにより適したものは何だと思いますか?


クラスとインターフェースの開発

プレイヤーがロボットを開発するために、Robocode のように使用できる特定のクラス インターフェイスを提供します。

そのようなイベントとメソッドの例には、次のものがあります。

public void run () {}
public void onScannedRobot(ScannedRobotEvent e) {}

walk(/* ammount in pixels or w/e to walk to */);
turnRight(/* value in degrees for an angular turn */);
//etc...

Robocode (Java) のコードのスニペットを次に示します。

public class MyFirstRobot extends Robot {
    public void run() {
        while (true) {
             ahead(100);
             turnGunRight(360);
             back(100);
             turnGunRight(360);
         }
    }
}

実際に戦闘を行うには、リフレクションを使用して、ユーザーが実際に使用しているメソッドを実際に読み取り、それらを実行して、戦闘の特定の瞬間に呼び出されるように実装することを考えています。


さて、経験豊富な開発者の皆様に、私が親切かつ謙虚にお願いしたいのは、私のこのプロジェクトを少し案内し、何をする必要があるかについてアドバイスを与えることです...まず第一に、このプロジェクトは実現可能ですか? 実際にそうである場合、どこからプロジェクトを実際に開始する必要がありますか?


私が使用する予定のテクノロジーとソフトウェアに関しては、次のとおりです。

  • .NET Framework 3.5、C# 3.0
  • LINQ (言語統合クエリ)
  • SQL Server 2008
  • マイクロソフト ビジュアル スタジオ 2008
  • jQuery フレームワーク
  • おそらくシルバーライト

私の質問をこの時点まで読むことができたことにも感謝します。このプロジェクトを完了するために得ることができるすべての助けが必要であり、非常に感謝しています.

お時間とご尽力いただきありがとうございます。


ところで、今まで、Robocodeを除いて、私が作成しようとしているものに似たこれらのゲームを見つけました。

4

6 に答える 6

6

私が WPF (Silverlight とほとんど同じ) を使い始めたとき、私は物事を行う方法を理解するのに多くの時間を費やすことになりました。これは、私が試した他の方法とは非常に異なる GUI の作成方法であり、何十億もの異なる方法があるようです。要点は、WPF/Silverlight の経験がない場合、理解するのにかなりの時間がかかると思われるということです。それはあなたがすでに知っていることに依存すると思います。

それとは別に、漸進的開発に関する ChrisW の提案を心から支持します。ゲームのデザインにどのようにアプローチできるかについてのアイデアを提供します。ボット用の非常に単純な API から始めます。たとえば、イベント、入力、または世界の知識を持たない 2 つの関数です。ボットを動かすことから始めましょう。ポイントは、クライアント コードのロードから結果の「バトル」の表示までのすべての部分を含む、単純な機能を備えた完全に機能するプログラムを取得することです。

各ボットは、単一のメソッド run() を持つインターフェイスを実装し、独自の dll ファイルに含める必要があります。戦闘が始まると、インターフェイスが実装された各 dll が特定の場所から (リフレクションを使用して) ロードされ、インスタンス化されます。次に、1 分が経過するまで (何かが起こっていることを確認するためだけに) ループで戦闘を開始します。

while (time is not up)
   generate random sequence for bots
   call run() on each bot
   draw(world)

時間になると戦闘終了。これで、必要なすべての機能を作成する時間がない場合でも、肉付けを開始でき、動作するプログラムを作成できるスケルトン アプリケーションができました。run メソッドで、ボットは、API で定義したいくつかの移動アクションを呼び出すことができます。これらを呼び出すと、世界の状態が変化します。おそらく、タイルのグリッドと各ボットの位置だけです。

次のステップは、ボットの run メソッドに世界観を追加して、ループを次のように変更することです。

while (time is not up)
   generate random sequence for bots
   call run(WorldView) on each bot
   draw(world)

ボットが run メソッドでまだいくつかの移動アクションしか実行できないとしましょう。現在、彼らは世界(またはその一部)のビューを取得するオプションを使用して、敵に近づいたり遠ざかったり、壁を避けたりすることができます.

次のイテレーションでは、大砲 (またはゲームに適したもの) を発射する単一の API 関数を作成できます。これが世界の状態をどのように変更するか、弾丸がどのように追跡されるか、アニメーションがどのように表現されるかなどを実装します。ループは次のようになります。

while (time is not up and there are more than 1 bot alive)
   advance projectiles
   calculate projectile-bot collisions and damage
   generate random sequence for bots
   call run(WorldView) on each bot
   draw(world)

これにより、ゲームのすべての領域を反映する作業プログラムを作成しながら、プログラムを反復的に具体化する方法についてのアイデアが得られることを願っています。私はゲームを実装した経験があまりないので、批判的な目で私のアドバイスを見てください。

于 2009-02-02T23:01:27.843 に答える
1

それは非常に実現可能です。

「コンパイルされた」ロボコードに応答するバックエンド システムとオブジェクトから始めることをお勧めします。「コンパイルされた」コードがどのような形式を取るかは、あなた次第です。

次に、ロボコードのインタープリターを作成します。または、.NET クラスを作成できるように思えます。それは最も難しい部分の景品です。

最後に、必要な UI を作成します。これで準備完了です。

ロボットを .dll としてコンパイルしたい場合もありますが、共通のインターフェイスと機能を作成するだけで済みます。

于 2009-02-02T21:40:42.700 に答える
0

それで、ちょっと virii のよう

于 2009-02-02T21:42:10.233 に答える
0

Real Robocode は、まもなく .NET ロボットを実行するためのプラグインを取得します。それを達成するのに2年かかりました。最初の 1 年間はオリジナルの Robocode のリファクタリングに費やされました。2 つ目は、Java から .NET へのブリッジに関するものです。そしてアルファビットがあります。このアプローチには、最高の Java ロボットと戦うことができるという利点があります。実はロボットには大きな宝物があります。

于 2010-01-15T00:12:49.810 に答える