Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
#12: "Sternmanöver" Typ: Spezial
Deadline: 23.08.2009
Abgabe: helmut4242 [at] web (pünktchen) de
Bitte beachten:
- Ablauf und Regeln
- Die KI muss deterministisch sein (bei gleichen Parametern jedes mal das gleiche Ergebnis)
- Keine statischen Variablen. Die sind aber auch nicht nötig, da ihr eine Klasse implementiert (ihr könnt Member anlegen)
- Keine Threads
- C++ Zugriffsschlüsselwörter private und const dürfen nicht umgangen werden
Aufgabenstellung:
Wir sind in einem Raumschiff in den tiefen Weiten des Weltalls. Doch wir sind nicht allein, ein dunkler Doppelgänger ist in Sicht. Zum Glück hat unser Raumschiff einige Raketen an Bord, mit denen man den von Grund auf bösen Doppelgänger sicher leicht abschießen kann. Dummerweise sind wir so nah an der Sonne, dass die Raketen abgelenkt werden. Wir müssen die Flugbahnen also präzise berechnen, denn wir haben nicht unendlich Raketen an Bord. Genaugenommen haben wir sogenannte Ökoraketen: Raketen, die nach der Detonation die eigenen Materialien wieder zurück in unser Schiff beamen und dort erneut abgeschossen werden können. Wir können also nur eine bestimmte Zahl an Raketen gleichzeitig ins All schicken.
Wie nicht anders zu erwarten ist unser Erzfeind aber so böse, dass er uns mit gefährlichen Raketen beschießt. Eine Detonation kann unser Schiff unmöglich aushalten, aber zum Glück haben wir einen Schubantrieb, mit dem wir den Raketen ausweichen können. Doch wer steuert das Schiff? Da kommen Sie in's Spiel Commander! Hier ist Ihr Bedienungsinterface:
C-/C++-Quelltext
1
2
3
4
5
6
7
8
9
class Pilot
{
virtual~Pilot(){}
virtualvoid Destroy() =0;
virtualconstchar* WhatIsYourNameCommander() const=0;
virtualint WhatDoYouWantToDoNow(const GameState& GS, int Me, int You) =0;
virtualvoid LetsStartANewGame() =0;
};
GS gibt die präzisen Informationen unserer Umgebung wieder. Me gibt den Index des Schiffes an, das auf der guten Seite steht (wir). You ist der böse Erzfeind.
Der int-Rückgabewert ist Ihr Befehl: Eine Kombination von K_Forward, K_Left, K_Right und K_Shoot. Oder einfach nur 0. Ziemlich viele Kombinationen.. Aber Sie dürfen nicht zu lange überlegen! Das Gehirn baut unter so hektischen Bedingungen nämlich schnell ab, sobald Sie insgesamt länger als 5 Minuten gedacht haben, werden Sie so müde, dass Sie einfach einschlafen und das Raumschiff dem Feind ein leichtes Ziel wird!
Ein Anfänger Pilot ist bereits implementiert, der den Gegner zielsicher trifft (und trotzdem nur paar Zeilen benötigt).
Für Windowsuser liegt eine VS Projektdatei bei. Linuxuser sehen sich Linux.txt an.
Bei der Auswertung wird jeder gegen jeden spielen. Genaueres sollte aus dem Quellcode ersichtlich sein.
Paket hier herunterladen (1MB)
Lohnt sich übrigens auch für die Nicht-Teilnehmer. Das Spiel macht auch Spaß, wenn man es selber steuert
Steuerung:
Pfeiltasten Links/Rechts: Drehen
Pfeiltaste Oben: Gas geben
Leertaste: Schießen
+/- Schnelllauf an/aus
Und falls ihr jetzt denkt, dass so ne KI schwer zu programmieren ist, irrt ihr euch Schaut euch mal das Beispiel an, das ist kinderleicht und genausoleicht zu erweitern. Ich hoffe also mal, dass viele mitmachen.
Bei Fragen oder Problemen einfach hier melden
Viel Spaß!
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)
Hm, also die Idee klingt cool, aber das er Windowsonly ist, ist natürlich etwas, das nicht sein müsste.
Vielleicht mach ich da ja auch noch mit, mal sehen.
Jetzt freut euch doch mal, dass sich jemand die Mühe gemacht hat...und wer es auf Linux machen will, kann es ja als Herausforderung nehmen und den Quellcode portieren.
Super Helmut! Endlich mal wieder ein Contest! Danke dafür!
Hab mich gerade mal hingesetzt und ein paar Zeilen Code getippt. Und siehe da - die Referenz ist schon geschlagen *g*.
"I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." (Bjarne Stroustrup)