Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Dynamic Link Fighters (https://www.delphipraxis.net/156894-dynamic-link-fighters.html)

Mikescher 19. Dez 2010 18:11

Dynamic Link Fighters
 
Liste der Anhänge anzeigen (Anzahl: 2)
So, ich möchte hier jetzt auch mal das Ergebnisse meines geistigen Schaffens präsentieren:

Dynamic Link Fighters
(DLF)


Version: 1.0.2

Zur Idee:
Die Idee hatte ich eigentlich einmal als mir überlegt habe wie man - relativ einfach - ein Spiel realisieren könnte bei dem 2 KI's gegeneinander kämpften. Damals dachte ich mir dass man dies eigentlich mithilfe von DLL's lösen könnte

Zur Geschichte:
Naja, die Idee lag dann ziemlich lange am unteren Ende meiner Programmier-Ideen-Liste. Als ich dann vor kurzem meine OpenGL-Kenntnisse mal wieder ein bisschen auffrischen wollte und ich das obligatorische "Würfel-der-sich-dreht"-Programm immer weiter ausbaute wurde irgendwann DLF daraus :-D. Also falls wirklich ein Masochist anwesend ist der es sich antun möchte meinen Quelltext zu lesen ... der sei gewarnt, ich müsste eigentlich noch einmal alles von neu schreiben damit, wenigstens annähernd - leserlicher Quelltext dahinter steckt.

Das Spiel:
Also jetzt kurz und knapp: Was ist DLF ? In DLF programmieren 2 Menschen jeweils eine KI-DLL in Delphi die dann gegeneinander antreten. Das Spiel ist so aufgebaut dass jeder Spieler/KI eine Anzahl an Käfern hat. Es werden immer abwechselnd alle Käfer von Player1 und Player2 gezogen. Ziel ist es entweder alle Käfer des Gegners zu eliminieren oder (alá Capture The Flag) die gegnerische Flagge zu stehlen und in die eigene Basis zu bringen.
Wenn 2 Käfer aufeinander treffen stirbt der Käfer der weniger Teammitglieder um sich herum stehen hat - wenn beide gleich viele haben sterben beide.
Wenn ihr genaueres über das Spielprinzip wissen wollt oder wie man eine KI schreibt kann in der "Help.exe" nachschauen.


Bemerkungen:

Wie immer ist Kritik nicht nur erlaubt sondern ausdrücklich erwünscht :mrgreen:

Wer eine KI geschrieben hat kann sie ja hier in diesen Thread stellen (mich würds freuen)

Geschrieben ist das ganze in OpenGL (ThX an DelphiGL )

Crosspost im DelphiGL-Forum: Link

Download:

Leider ist der Download sowohl mit Sourcecode als auch ohne zu groß für die DP (Texturen und Sounds...)
Es steht auf meiner ToDo Liste das alles mal kleiner/komprimierter zu machen, bis dahin könnt ihrs (ohne Sourcecode) auf meiner Seite laden:

Download

Oder (fals ihr das wirklich wollt) hier mit Sourcecode:

Download


Also:
MfG Mikescher

Aphton 19. Dez 2010 22:29

AW: Dynamic Link Fighters
 
Woow, hut ab. Ich finde die Idee hervorragend. Ich hab mir zwar die Umsetzung noch nicht angesehen, aber bin grad so bewältigt von der Idee..
Ich könnte mir sogar ne eigene Game-Genre vorstelen ala Programmer-games/Programmer-duelling-games.

MfG

mleyen 19. Dez 2010 23:09

AW: Dynamic Link Fighters
 
Hehe, ich hab mir so etwas ähnliches auch schon mal überlegt.
Es gibt ja auch AntMe und vor kurzem wurde ja auch die Season 2 der Google AI-Challenge beendet. :wink:

himitsu 20. Dez 2010 04:03

AW: Dynamic Link Fighters
 
Zitat:

Zitat von mleyen (Beitrag 1069465)
Es gibt ja auch AntMe

AntMe wollt' ich och grad nennen :lol:
Das Büchlein gibt's auch grade bei Microsoft im Adventskalender.
(nur blöd, daß dieses die VisualBasic-Version des Buchs für AntMe ist ... C# wäre bestimmt schöner)

Mikescher 20. Dez 2010 16:16

AW: Dynamic Link Fighters
 
Zitat:

Zitat von mleyen (Beitrag 1069465)
Es gibt ja auch AntMe

Aahh die haben meine Idee gestohlen :mrgreen: Nein Spass beiseite, wie ich das sehe kann man in AntMe ja keine KI mit Delphi programmieren :-D Also hat DLF den Vorteil dass man in "gewohnter Umgebung" programmieren kann :wink:

MfG Mikescher

himitsu 20. Dez 2010 19:54

AW: Dynamic Link Fighters
 
Zitat:

Zitat von Mikescher (Beitrag 1069597)
wie ich das sehe kann man in AntMe ja keine KI mit Delphi programmieren :-D

Delphi Prism = C# ... geht also doch :lol:

mleyen 20. Dez 2010 20:30

AW: Dynamic Link Fighters
 
Wollts gerade mal antesten: :-D
- Wenn keine Soundkarte installiert ist, schmiert alles beim Programmstart ab.
- TglBitmap2D.GenTexture - Rendercontex dosn't support non power of two texture.
- DynamicLinkFighters.exe hängt einfach, wenn ich auf start drücke.

Evtl wäre eine VM-Canvas-Version ohne sound ganz praktisch.

Mikescher 20. Dez 2010 20:55

AW: Dynamic Link Fighters
 
@ mleyen: Ahh endlich was zu tun :mrgreen:

Zitat:

Zitat von mleyen
- Wenn keine Soundkarte installiert ist, schmiert alles beim Programmstart ab.

Mhh, dachte eigentlich das Problem sei behoben, konnte aber bisher nicht testen obs funktioniert (Scheinbar nicht). Ich werde mal eine - soundkartenlose - VM zum testen anlegen.
Zitat:

Zitat von mleyen
- TglBitmap2D.GenTexture - Rendercontex dosn't support non power of two texture.

:oops: Stimmt da war mal was in den Anfängertutorials - ist ja aber zum Glück leicht zu beheben (imho sind die meisten Texturen ja eh schon Potenzen von 2)
Zitat:

Zitat von mleyen
- DynamicLinkFighters.exe hängt einfach, wenn ich auf start drücke.

Ok, das wiederum ist komisch - könnte jedoch mit einem der vorherigen Probleme zusammenhängen (ich werd die erst mal beheben und dann schauen ob der Fehler immernoch auftritt)
Zitat:

Zitat von mleyen
Evtl wäre eine VM-Canvas-Version ohne sound ganz praktisch.

Eigentlich eine gute Idee... ich werd mal sehen wie man das umsetzten kann

Auf jeden Fall danke das du probiert hast es zu testen :-D , ich werd probieren so schnell wie möglich ein Update zu machen.

MfG Mikescher

[Edit] *Gähn* Zu Müde - ich mach morgen mittag weiter *Gähn* [/Edit]

mleyen 20. Dez 2010 21:31

AW: Dynamic Link Fighters
 
Zitat:

Zitat von Mikescher (Beitrag 1069675)
Ok, das wiederum ist komisch - könnte jedoch mit einem der vorherigen Probleme zusammenhängen (ich werd die erst mal beheben und dann schauen ob der Fehler immernoch auftritt)

Ok, das passiert nur wenn man den Trailer abbricht und direkt auf Start drückt.

2 Vorschläge:
- Automatisierte Kämpfe und Wettbewerbe.
- Ich kenn zwar deinen Server nicht, aber eie Art Online-Highscoreliste der Nicks bzw ein Ranking von hochgeladenen KI-Dll´s wäre motivierend. :wink:

Mikescher 22. Dez 2010 13:46

AW: Dynamic Link Fighters
 
Ok, ich habe Version 1.0.1 hochgeladen,
Alle Texturen sind jetzt auch mit älteren Grafikkarten kompatibel
und wenn man keine Soundkarte hat wird das Spiel gemuted (war eigentlich schon implementiert nur hab ich vergessen die Exception auch rauszunehmen)

@mleyen:
Ein "Tournament"-Modus hab ich mir auch schon gedacht (vllt so Fußball-WM mäßig), also dass man ein Wettbewerb mit zB 10 KI's machen kann um die beste zu finden, ich werd auf jeden Fall mal sehen wie ich das basteln könnte.
Zum Thema Online-Highscore: Da sehe ich pers ein paar Probleme, erstens werden die KI's ja meist nicht mir zugeschickt (man fügt KIs ja einfach hinzu indem man die DLL in den Ordner KIs schiebt), außerdem bräuchte ja jede KI eine Art eindeutige ID.
Mein Server ist übrigens eigentlich nur für Websiten - das ganze Update-überprüf-system etc läuft über php Dateien :duck:

MfG Mikescher

Sherlock 22. Dez 2010 14:14

AW: Dynamic Link Fighters
 
Eindeutige ID -> Generiere doch eine GUID für jede KI.

Sherlock

Mikescher 22. Dez 2010 15:09

AW: Dynamic Link Fighters
 
Zitat:

Zitat von Sherlock (Beitrag 1069973)
Eindeutige ID -> Generiere doch eine GUID für jede KI.

Ja aber auf welcher Basis ? Mein Programm sieht ja nur die fertige DLL. Man müsste im DLL-Template eine Methode "GetID" einbauen jedoch woher soll diese ID kommen, wenn der, der die KI programmiert die ID selber zuweist besteht immer die Gefahr dass es diese ID zufälligerweise schon gibt oder noch schlimmer mehrere Leute lassen den Standard Wert stehen (OK da könnte dann eine Fehlermeldung kommen wenn man die KI benutzt).
Imho müsste für so eine GUID jeder der eine KI entwickelt sie bei mir einschicken so dass ich ihm dann eine ID geben kann. Dass würde ich aber nur ungern so machen, weil dann der ganze KI-Entwicklungsprozess von mir abhängt (was wenn ich mal im Urlaub bin :-D).
Ich weiss nicht, irgendwie würde so etwas ja das System von "einfach eine DLL mit Delphi programmieren" kaputtmachen.

Oder wie hast du das gemeint ?

MfG Mikescher

stahli 22. Dez 2010 16:44

AW: Dynamic Link Fighters
 
Im automatischen Turnier könnten z.B. nur KI´s berücksichtigt werden, die eine eindeutige ID haben.

- Menüaufruf "Automatisches Turnier"
- Anzeige aller gefunden KI´s mit ID (String, egal ob als GUID oder anders)
- (KI´s ohne ID oder mit gleicher ID sind inaktiv)
- alle aktiven gegeneinder spielen lassen (jeder gegen jeden) und laufend Ergebnisse veröffentlichen

Mikescher 15. Feb 2011 19:41

AW: Dynamic Link Fighters
 
So, ich hab mal die neue Version 1.0.2 hochgeladen.

Im Großen und Ganzen sind es eigentlich nur Bugfixes.
Online-Highscores etc hab ich mal versucht jedoch hält mein Server das nicht aus (müsste ich alles via php machen :? )

Auf jedenfall sollte DLF jetzt stabiler und auch ein wenig flüssiger laufen (hab auch nochmal alles so verbessert dass man DLF auch auf älteren GraKas ausführen kann)

MfG Mikescher

Assarbad 15. Feb 2011 21:03

AW: Dynamic Link Fighters
 
Zitat:

Zitat von Mikescher (Beitrag 1081979)
Online-Highscores etc hab ich mal versucht jedoch hält mein Server das nicht aus (müsste ich alles via php machen :? )

SQLite-Datenbank und Mini-PHP-Skript, was gibt's denn da auszuhalten? :shock:

Coole Idee jedenfalls. Wir könnten ja mal unsere DLLs gegeneinander antreten lassen. Mit allen schmutzigen Tricks :mrgreen:

Assarbad 15. Feb 2011 21:09

AW: Dynamic Link Fighters
 
So, also die Idee ist schonmal gut (habe ich ja gesagt), aber bei der Umsetzung scheint es Probleme zu geben. Da ich mich mit OpenGL nicht auskenne (und auch nicht so tue), kann ich nicht sagen was, aber auf Windows 7 x64 hängt das Ding. Ich lasse es nicht als Admin laufen (versteht sich ja von selbst).

Versuche es nachher nochmal in VMware (mit XP SP3). Mal sehen ob das besser geht ...

Siehe da: in XP SP3 funzt es tadellos in der VM. Allerdings habe ich das Gefühl, daß bei gerader Feldanzahl (vertikal) die Programmierung theoretisch auf Sieg sein könnte, aber der ausschlaggebende Käfer auf einer Seite einen Vorteil hat (je nachdem). Oder irre ich?

mleyen 16. Feb 2011 10:22

AW: Dynamic Link Fighters
 
Oder man schaut sich etwas aus vorhandenen sources ab.

Zitat:

Zitat von Assarbad (Beitrag 1082011)
Coole Idee jedenfalls. Wir könnten ja mal unsere DLLs gegeneinander antreten lassen. Mit allen schmutzigen Tricks :mrgreen:

Wollen wir wirklich die Dinge in euren Viren-Sammel-Tresoren kennen lernen, die vsl besser nie das Licht der Welt erblicken sollten? :stupid::stupid:

himitsu 16. Feb 2011 10:31

AW: Dynamic Link Fighters
 
Zitat:

Zitat von Assarbad (Beitrag 1082011)
SQLite-Datenbank und Mini-PHP-Skript, was gibt's denn da auszuhalten? :shock:

eventuell ja einfach sowas http://www.delphipraxis.net/148076-m...mysql-dll.html

Memnarch 16. Feb 2011 10:45

AW: Dynamic Link Fighters
 
Zu dem ID Problem:

Der DLL Programmierer startet ein Hilfsprogram von dir. Das generiert aus dem SourceCode der DLL einen SHA-2 Wert(nen Hash), und bügelt noch das aktuelle Datum + Uhrzeit in den wert. Damit sollte es schwer werden, 2mal die gleiche ID zu bekommen(wen auch nicht unmöglich, aber fast).

Dieser Wert wird dann z.B. als String in der DLL hinterlegt und kann dort abgerufen werden(über ne funktion)

PS: Eventuell kommt die funktion für das auslesen der ID und der ID-String in eine seperate Unit, welche beim generieren der "ID" nicht berücksichtigt wird. So verändert der eingefügte Hash die Hash generierung nicht wen mans nochmal macht.

Anstatt SAH-2 könnte man auch z.B. CRC32 nehmen, ist aber wohl unzuverlässiger was dubletten angeht.

MFG
Memnarch

himitsu 16. Feb 2011 10:57

AW: Dynamic Link Fighters
 
CRC32 = 4 Milliarden IDs (2^32 ist auch schon recht eindeutig)
ansonsten kann man auch die SHA-1-API direkt von Microsoft nutzen (2^160 Möglichkeiten)

Memnarch 16. Feb 2011 11:29

AW: Dynamic Link Fighters
 
@Himitsu: Ach stimmt, CRC war ja da "relativ ungenau".

Hatte die zahlen nicht mehr so im Kopf^^.

MFG
Memnarch

Mikescher 16. Feb 2011 13:22

AW: Dynamic Link Fighters
 
Hi,
Zitat:

Zitat von Assarbad (Beitrag 1082015)
Siehe da: in XP SP3 funzt es tadellos in der VM. Allerdings habe ich das Gefühl, daß bei gerader Feldanzahl (vertikal) die Programmierung theoretisch auf Sieg sein könnte, aber der ausschlaggebende Käfer auf einer Seite einen Vorteil hat (je nachdem). Oder irre ich?

Hmm also warum es auf Win7 x64 nicht geht weiss ich auch nicht - hab leider auch kein 64bit System hier zum testen, auf 32bit Win7 läuft es (bei mir) auf jeden Fall.
Was für ein Käfer bei gerader, vertikaler Feldanzahl einen Vorteil haben soll verstehe ich leider nicht ganz, wenn es um ein etwas "dämliches" verhalten der KI geht :wink: liegt das vermutlich daran dass ich die Beispiel KI's mehr zu Demo-Zwecken dabei liegen habe (d.h. die sind lange nicht perfekt und ziemlich einfach zu besiegen).

Zum Thema Online-Highscore:
Leider hab ich nur bei strato einen kleinen Server und kann somit nur MySQL verwenden. Trotzdem hört sich die Idee ganz interessant an zusammen mit Memnarch's Vorschlag zu dem Hash des Quellcodes und der PHP-Tunnel-Datei könnte das was werden :-D. Ich werde auf jeden Fall mal schauen was ich da machen kann.

Mit freundlichen Grüßen Mikescher

Assarbad 16. Feb 2011 14:21

AW: Dynamic Link Fighters
 
Zitat:

Zitat von mleyen (Beitrag 1082102)
Wollen wir wirklich die Dinge in euren Viren-Sammel-Tresoren kennen lernen, die vsl besser nie das Licht der Welt erblicken sollten? :stupid::stupid:

:shock: ... das verstieße nun wirklich gegen meine Berufsethik.

Nein, ich dachte mehr an suizidale Käfer auf der Gegnerseite usw :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz