Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
StChase - Ein kleiner Wettkampf zwischen Programmierern
stes
myCSharp.de - Member

Avatar #avatar-3381.png


Dabei seit:
Beiträge: 67

Themenstarter:

StChase - Ein kleiner Wettkampf zwischen Programmierern

beantworten | zitieren | melden

Hallo zusammen,

ich möchte euch gerne mein neues Projekt vorstellen.

Angelehnt an eine Aufgabe aus dem Informatikunterricht (mit Java :P) habe ich ein kleines 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 [email protected] schicken.

Frohes Schaffen!

stes
Attachments
private Nachricht | Beiträge des Benutzers
stes
myCSharp.de - Member

Avatar #avatar-3381.png


Dabei seit:
Beiträge: 67

Themenstarter:

beantworten | zitieren | melden

...und hier noch schnell ein Screenshot:
Attachments
private Nachricht | Beiträge des Benutzers
MrFluffy
myCSharp.de - Member



Dabei seit:
Beiträge: 39

beantworten | zitieren | melden

Wer sich an KI Programmierung erfreut und diese gerne gegen andere KI anderer Programmierer antreten lassen möchte sollte sich vielleicht mal AntMe anschauen.

Dieses Framework wurde durch einen MS Entwickler in seiner Freizeit mit C# erschaffen und besitzt neben einer Visualisierung auch eine statistische Auswertung.

Und das wichtigste vor allem es besitzt bereits eine große Community

Das Projekt vom Threadersteller geht ebenfalls in diese Richtung, daher der kleine Hinweis ;)
private Nachricht | Beiträge des Benutzers
NeuroCoder
myCSharp.de - Member



Dabei seit:
Beiträge: 337
Herkunft: NRW

beantworten | zitieren | melden

Hallo stes,

mir sind spontan folgende Verbesserungsvorschläge für dein Projekt eingefallen (ohne dass ich mir den Code angeschaut habe):
  • Lagere die Verhaltenssteuerung in ein Interface aus und gib dem Jäger und Wolf eine Instanz davon. Die entsprechenden Events können dann die Funktionen aus dem Interface aufrufen.

    So vermeidest du, dass Programmierer an der Programmbasis und den EventHandlern "herumpfuschen" können. Das hast du zwar in Textform in deinem Post verboten, kann aber auch über solches Design erzwungen werden.
  • Damit man den Basiscode gar nicht anfassen braucht, kannst du ein Plugin-System implementieren. Jeder Duellant braucht dann nur seine Assembly mit dem Verhalten zur Verfügung zu stellen. Das Hauptprogramm (dein Simulator) kann diese DLLs laden und das Duell simulieren.

    Wenn du das Verhalten sowieso schon in Interfaces ausgelagert hast, ist ein Plugin-System nicht mehr weit weg.
  • Ich habe deinen Code nicht gesehen, aber für den Einstieg ist es sicherlich nützlich, wenn du Beispiel-Verhaltensmuster dazu legst, mit denen man direkt auch testen kann.
  • Halte die Einstiegshürden so gering wie möglich. D.h. biete schon vorgefertigte Solutions / Projekte zum Erstellen seines Verhaltens an, damit der geneigte Programmierer nur noch den Code für das Verhalten in die Funktionsrümpfe gießen muss.

    Zu diesem Punkt zählt auch (vielleicht sogar vor allem) ein sinnvoll gewähltes Interface-Design.


Mfg NeuroCoder
private Nachricht | Beiträge des Benutzers
stes
myCSharp.de - Member

Avatar #avatar-3381.png


Dabei seit:
Beiträge: 67

Themenstarter:

beantworten | zitieren | melden

Hallo NeuroCoder,

danke für die Tipps, ich werde mich demnächst mal dransetzen ;)
Besonders die Verlagerung der benutzerspezifischen Verhaltensweisen in DLLs halte ich für eine gute Idee.
Die aktualisierte Version werde ich dann demnächst hier posten..

Gruß
stes
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von stes am .
private Nachricht | Beiträge des Benutzers
Levion
myCSharp.de - Member

Avatar #avatar-3432.png


Dabei seit:
Beiträge: 116

beantworten | zitieren | melden

Hi, das ganze erinnert mich an Codewars. Allerdings funktioniert Codewars über Sockets mit einem entsprechenden Protokoll. Das Projekt ist richtig Klasse. Man programmiert Bots die man mit bestimmten Fähigkeiten ausstattet und aufeinander loslassen kann. Die Map konnte dabei verschiedene Hindernisse wie Mauern und Wasser enthalten. Im Gegensatz zu Ant! oder deinem Projekt funktioniert CodeWars mit allen Programmiersprachen die Sockets beherrschen. Wer hat da nicht mal Lust den hochnäsigen PHP-Bot in den Boden zu stampfen :D

Leider wird das Projekt nicht mehr richtig weitergeführt :(

Gruß

Levi
private Nachricht | Beiträge des Benutzers