stes - Fr 04.03.11 15:18
Titel: StChase - Ein kleiner Wettkampf zwischen Programmierern
Hallo zusammen,
ich möchte euch gerne mein neues Projekt vorstellen.
Angelehnt an eine Aufgabe aus dem Informatikunterricht (mit Java) habe ich ein kleines C# Programm entwickelt, mit dem sich zwei (oder auch mehr) Programmierer "duellieren" können.
Wie das geht?
Die GUI besteht prinzipiell aus einem Spielfeld mit Start + Stop Button. Auf dem Spielfeld sind die Spielfiguren, der Wolf und der Jäger, in Form von zwei verschiedenfarbigen Symbolen zu sehen.
Ziel des Wolfs ist es, dem Jäger möglichst lange davonzulaufen; Ziel des Jäger ist es, den Wolf möglichst schnell zu fangen.
Sprich: Ein Spieler programmiert das Verhalten des Wolfs, der andere das des Jägers.
Hierzu habe ich einige Events implementiert, wie z. B. den Zusammenprall mit einer Spielfeldkante oder der Ausführung einer Bewegung. Die Objekte kennen jeweils nur die Entfernung zum anderen Objekt (und sollten auch nichts anderes benutzen, das ist die Regel ) und sollen anhand der Veränderungen an der Entfernung ihre Wege so anpassen, wie es für sie am günstigsten ist. Zudem können sie natürlich auf die eigenen Eigenschaften wie Richtung und Position zugreifen.
Hier nochmal die Regeln im Überblick:
1. Die Objekte dürfen lediglich die Entfernung zum Zielobjekt abfragen
2. Die Objekte haben freien Zugriff auf all ihre Eigenschaften, mit Ausnahme der Active-Eigenschaft, die angibt, ob das Objekt gefangen wurde bzw das andere gefangen hat.
3. Hat sich der Jäger bis auf (momentan) 10 Pixel genähert, ist der Wolf gefangen.
Der verantwortliche Eventhandler darf entsprechend nicht verändert werden.
[Die Liste wird ggf. noch ergänzt]
Alles in allem finde ich das Prinzip ganz interessant, es gibt ja auch schon andere Spiele mit ähnlichen Ansätzen.
Ich hoffe, dass sich einige von euch ebenfalls für diese Art des "Computerspiels" begeistern kann und ihr evtl. weitere Codedateien für Wolf und/oder Jäger hier der Allgemeinheit zugänglich macht
Meine Bitte: Wenn ihr etwas verändern & hochladen wollt, dann bitte NUR Wolf und Jäger. Werden die anderen Klassen verändert, bekommen wir bald Probleme mit der Kompatibiliät der Codeschnipsel
Ihr könnt mir gern auch eine Mail an
stes94@ymail.com schicken.
Frohes Schaffen!
stes
Kha - Fr 04.03.11 17:06
:welcome: in der EE und erst einmal Hut ab für die tolle Idee :zustimm: !
Auch an der Umsetzung gibt es nichts zu meckern, aber ich frage mich, ob komplexere KIs nicht doch darauf hinauslaufen, die Position der anderen Spielfigur abzuschätzen :) . Gegen einfacher gestrickte Jäger sollte sich dagegen mein im Kreis laufender Wolf nicht schlecht schlagen ;) :
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| #region Specific fields const int radius = 100; const int midPoint = 200; double _oldDistance; int _turnDirection = 1; #endregion #region Eventhandler public override void ChaseObject_HasMoved(object sender, EventArgs e) { StepSize = 10.0;
if (this.Distance() + 5 < _oldDistance) _turnDirection *= -1; _oldDistance = this.Distance();
double angle = Math.Atan2(Location.Y - midPoint, Location.X - midPoint) + _turnDirection * Math.Atan(10.0 / radius); PointF target = new PointF((float)(midPoint + radius * Math.Cos(angle)), (float)(midPoint + radius * Math.Sin(angle))); Direction = (int)(Math.Atan2(target.Y - Location.Y, target.X - Location.X) * 180 / Math.PI); } ... |
Edit: Schön wäre es natürlich, wenn man seine Klassen einfach als Assemblies zur Exe hinzuschmeißen könnte und das Programm diese dann dynamisch einbindet. Falls dir Reflection schon bekannt ist :) .
stes - Fr 04.03.11 17:57
Hallo Kha,
vielen Dank für deine Antwort. Ich habe diesbezüglich ein paar Anmerkungen:
Kha hat folgendes geschrieben : |
:welcome: in der EE und erst einmal Hut ab für die tolle Idee :zustimm: ! |
Danke, aber wie gesagt, "so ganz meine Idee" wars dann doch nicht :D Ich nehm das Lob trotzdem mal gerne entgegen ^^
Kha hat folgendes geschrieben : |
Auch an der Umsetzung gibt es nichts zu meckern, aber ich frage mich, ob komplexere KIs nicht doch darauf hinauslaufen, die Position der anderen Spielfigur abzuschätzen :) |
Darauf wird es hinauslaufen, es geht aber einfach darum, dass die Spielfiguren nicht direkt auf die Position des anderen zugreifen können ;) Sonst wärs schließlich langweilig..
Kha hat folgendes geschrieben : |
Gegen einfacher gestrickte Jäger sollte sich dagegen mein im Kreis laufender Wolf nicht schlecht schlagen ;) |
Das stimmt :D Der "Standard"-Jäger, den ich probehalber ins Programm gestellt hab (und zugegeben, der ist doch eher etwas blöd) verzweifelt jedenfalls..
Ich überlege schon, wie man deinen Wolf möglichst effektiv überlisten könnte :D
Auf jeden Fall vielen Dank für deinen Beitrag, sieht schon gut aus ^^
Kha hat folgendes geschrieben : |
Edit: Schön wäre es natürlich, wenn man seine Klassen einfach als Assemblies zur Exe hinzuschmeißen könnte und das Programm diese dann dynamisch einbindet. Falls dir Reflection schon bekannt ist :) . |
In einem anderen Forum habe ich bereits den gleichen Tipp bekommen ;) Ich habe wirklich noch wirklich nicht mit der Reflection beschäftigt, aber ich werde die Gelegenheit dazu gerne an dieser Stelle nutzen und das Programm verbessern ;)
Viele Grüße
stes