2011-01-10 16 views
0

Ich möchte einen Wettbewerb durchführen, in dem die Teilnehmer Code in Java/C programmieren und KI oder Gameplay entwerfen müssen. Das Spiel sollte eine visuelle Simulation haben, damit die Spieler ihre Designs (KI oder Gameplay) auch grafisch genießen können.Simulation in Java/C für AI Design

Ein mögliches Beispiel kann Fußball sein, in dem Teilnehmer den ai der Spieler entwerfen müssen und auf das Teamspiel entschieden haben. Außerdem spielen sie in einem solchen Spiel gegen einen anderen Spieler über das Netzwerk.

Wie kann ich darüber gehen?

+0

Haben Sie keine Angst, dass am Ende eines solchen Tests die Hälfte Ihrer Kandidaten für Sony PS3 FIFA 2011 kodieren wird? :) – Osw

Antwort

1

Nun, Sie brauchen ein Protokoll, einen Server und idealerweise einige Hilfsbibliotheken für die Clients.

Ich schlage vor, dass Sie in Thrift oder Protobuf für Ihre Netzwerkschnittstelle schauen. Beides wird Ihnen kostenlos eine sprachübergreifende Datenkodierung geben. Thrift Sie erhalten Stubs sowohl von Server- als auch von Client-Code; Ich bin mit Protobuf weniger vertraut, aber ich glaube, dass Sie etwas Ähnliches daraus machen.

Der Server ist etwas, das Sie ausführen, das den autoritativen Spielstatus speichert, das Spiel koordiniert und sicherstellt, dass jeder die Regeln befolgt. Sie könnten auch eine HTML5-Visualisierungsschicht direkt auf dem Server erstellen. Alternativ können Sie einen Nicht-Spieler-Client schreiben, der den Spielstatus in einer Schleife erfasst und anzeigt. Wenn Sie die Bibliotheken verwenden, die ich vorschlage, ist es egal, in welcher Sprache Sie den Server schreiben.

Sie möchten auch einen stubbed-Client mit keiner realen KI in jeder unterstützten Sprache mit plattformübergreifender bereitstellen Bauanleitungen. Es würde wissen, wie man sich mit dem Server verbindet, den Spielstatus abfragt und einige einfache Aktionen ausführt. Auf diese Weise müssten sich die Teilnehmer nicht um den Netzwerkcode kümmern und könnten sich auf das KI-Zeug konzentrieren.

Schließlich wäre eine Art von Einreichung oder Login-System erforderlich. Sie können entweder Quellcode einreichen und die KI selbst erstellen und ausführen (wodurch Sie die CPU- und Speichernutzung steuern können). Dies würde erfordern, dass Sie Ihre eigenen Tools für die Verarbeitung dieser Übermittlungen und deren Erstellung erstellen und entscheiden, welche Arten von Bibliotheken verfügbar wären, wie viele Dateien und wie groß sie eingereicht werden könnten. Sicherheit wird auch zu einem Problem, da Sie die Übergaben ausführen Code. Alternativ können Sie auch den Regel erzwingenden Spielserver verfügbar machen und Kunden eine Möglichkeit geben, Ihnen mitzuteilen, wessen Aufgabe sie sind.Das würde den Spielern mehr Freiheit geben, ungewöhnliche Lösungen auszuprobieren oder ihre eigenen Bibliotheken zu benutzen, um die Aufgabe zu erledigen, und wäre einfacher zu implementieren, könnte aber Wettbewerbern mit viel CPU und Speicher einen Vorteil verschaffen.

Werfen Sie einen Blick auf Dino Island für Facebook auf eine ähnliche konkurrierende Simulation Programmierung Puzzle nehmen.

1

Vielleicht möchten Sie den Wettbewerb JavaHispano JavaCup überprüfen. Es ist fast genau das, was Sie fragen, aber leider ist es in Spanisch, Sie könnten versuchen, mit Google zu übersetzen.

Sie bieten einen Rahmen für Menschen mit Strategien zu bauen. Dann konkurrieren die gebauten Strategien mit anderen Entwicklerstrategien.

Hoffe, dass es Ihnen hilft.

+0

Ich habe vergessen zu erwähnen, dass die Leute ihre Strategien programmieren müssen, ist ein Entwickler-Wettbewerb. – jhurtado

0

Der allgemeinste Fall ist, eine einfache Netzwerk-Socket-basierte Schnittstelle bereitzustellen. Es sollte der KI das notwendige Wissen geben und Aktionen akzeptieren, die die KI ausführt. Verwenden Sie ein Format, das einfach zu serialisieren und zu deserialisieren ist (vermeiden Sie XML usw.). Wenn Sie eine Zeitbeschränkung für die verbrauchte CPU oder die verstrichene Zeit haben, müssen Sie dies in das Protokoll einbauen oder ein Überwachungsprogramm den Prozess überwachen lassen.