Forum



~Coder am 19.09.2010 12:03 #5948


Hallo erstmal,

Hab ne Frage zum Programmcode, da ich gewillt war mich etwas mit der KI zu beschäftigen.
Und zwar wollte ich folgendes "Feature" testweise Einbauen:
Holzfälle sollen nur dann abgerissen werden, wenn sich in der Nähe kein Förster befindet.
Dazu wollte ich JHs KI etwas modifizieren, indem ich ne Funktion gebaut hab, die in der "buildings[förster]"-Liste nachguckt, ob sich ein Förster im Umkreis einer bestimmten Position "MapCoord x, MapCoord y" befindet. Problem dabei: ich hab über das "AIInterface" keinen Zugriff auf die Gebäudelisten, da ein solcher Getter fehlt :( . Im GameClientPlayer gibts ja den getter "GetBuildings(BuildingType)" - und genau sowas bräuchte man da eigentlich auch, oder? Wenns irgendwie nen andren Weg gibts, an die einzelnen Gebäude zu kommen, bitte bescheid sagen!

Habs übrigends auch nicht hinbekommen den Getter ins AIInterface einzubauen (error C2662: 'GameClientPlayer::GetBuildings': this-Zeiger kann nicht von 'const GameClientPlayer' in 'GameClientPlayer &' konvertiert werden):
const std::list<nobUsual *> &GetBuildings(const BuildingType type) const { return player->GetBuildings(type); }

Grüße
und nen schönen Sonntag.


~Coder am 19.09.2010 13:40 #5950


Ok, hab den Getter hinbekommen (musste nur die GetBuildings in GameClientPlayer als const deklarieren).


~Timmy am 22.09.2010 15:13 #5964


Halllllllllo,

Hab mich am letzten Wochenende mal in den KI Code "eingearbeitet" (also mehr oder weniger reviewed). Nachdem mir nu aufgefallen ist, dass der KI Code bisher ja schon recht durchdacht ist, wollt ich auch nichts ganz neues bauen, sondern eine Art KI-Skript-Sprache (beispielsweise nach dem Vorbild Age of Empires II), die im großen und ganzen die vorhandenen Strukturen (BuildJobs, EventManager, etc.) weiterverwendet. Bisher hab ich etwas mit der KI rumgespielt, getestet und so ... gäbe da dann schon einige Sachen, die ich ändern bzw. neu erstellen müsste, sollte sich aber im Rahmen halten.

Was jetzt meiner Meinung nach sinnvoll wäre: dass ich
1.) nen neuen Unterordner in /Quelldateien/KI/ anlegen (verwende Visual Studio 2008), weiß aber nicht, wie ich darin dann neue Quellcode/Headerdateien anlege, sodass die dann auch im src-Ordner des ausgechecken codes landen. Wäre nett, wenn mir da jemand helfen könnte.
2.) Wenn man ein Spiel erstellt, kann man ja die "Art" des Spielers auswählen: Computer, Mensch und da war nochirgendwas (KI die nix macht). Da wärs schön, wenn ich meine KI zusätzlich einfügen könnte - weiß aber nicht, wo ich da überall was im Code ändern müsste - oder obs da ne sinnvolle Lösung für gibt.

Das ganze will ich jetzt auf alle Fälle erstmal nur lokal machen, sodass sich niemand Hoffnung macht, dass das in nächster Zeit fertig wird (da ich nebenbei auch noch arbeite und studiere). Wenns was gescheites wird, würd ich mich natürlich auch mit den Projektleuten hier auseinandersetzten, damit der Code committed werden kann.

Wäre schonmal sehr dankbar für Hilfe,
und wenns noch Rückfragen gibt, weil ich mich unverständlich ausgedrückt hab, nur zu.
Grüße
Timm


jh am 23.09.2010 12:03 #5967


@Coder: Ja, das AIInterface ist sicher noch nicht vollständig; ich habe das immer so nach Bedarf erweitert, kann gut sein dass da das GetBuildings noch fehlt.

@Timmy: Naja, "durchdacht" ist vielleicht etwas übertrieben, ich habe das eigentlich alles so on-the-fly nebenbei entworfen ;) Deswegen ist das auch ein wenig unübersichtlich. Die Idee mit AI-Skripten wie in AoE2 klingt gut, die hab ich mir vor ein paar Jahren auch mal angeguckt. So könnte man das ganze zumindest etwas dynamischer gestalten, ohne immer Code ändern zu müssen.
Zu 1) Eigentlich musst du dann nur Rechtsklick auf den Ordner machen und "Ressource hinzufügen" wählen, da kannst du dann auch den Speicherpfad angeben. Falls das unklar ist, komm am besten mal in den Chat, da müsste meistens jemand sein der dir weiterhelfen kann.

Zu 2) Da gibts wohl noch kein sinnvolles Interface für, die drei Optionen sind hart reincodiert. Wäre aber auch gut wenn man das mal flexibler machen würde ;)

Und du kannst das ganze auch als Branch in Launchpad aufziehen (statt nur lokal), dann können andere deine KI auch schon parallel ausprobieren.

jh/Isch


~Timmy am 23.09.2010 13:55 #5968


Also "durchdacht" würd ich schon sagen, wenn ich das mit dem Code vergleiche, der dabei rauskommt, wenn Leute einfach drauf losprogrammieren (normalerweise jedenfalls) ^^ - zumindest kann man den Code leicht nachvollziehen, finde ich.

Ach so, Coder = Timmy. Hätte ich vllt dazu sagen sollen ...

zu 1) danke, das hab ich dann kapiert - hab nur sonst wenig mit VS gearbeitet (in der Arbeit hab ich bloß Ultraedit und Eclipse zur Verfügung ^^).

zu 2) okey, dann wärs eventuell nicht dumm, wenn ich mir das ersteinmal anschaue und versuche flexibler zu gestallten. Die eher unschöne Alternative wäre ja, einfach deine KI zu ändern, das ist aber auch ned Sinn der Sache.

Des mit dem Branch klingt zwar ned schlecht, aber ich hab keine Ahnung wie man das mit Bazzar/Launchpad macht - hab bisher immer svn verwendet (Toisdingsbums als Client unter Windows).
Außerdem hab ich ja als "Gast" keine Rechte auf das Repository zu schreiben.
Ist jetzt ersteinmal auch nicht so wichtig - wollte einfach mal anfangen und stand dann eben vor den Problemen 1 und 2 ^^.

Dankeschön für die Hilfe!
Grüße
Timm


FloSoft am 23.09.2010 23:10 #5969

Großmeister
Zitat von Timmy:

Des mit dem Branch klingt zwar ned schlecht, aber ich hab keine Ahnung wie man das mit Bazzar/Launchpad macht - hab bisher immer svn verwendet (Toisdingsbums als Client unter Windows).
Außerdem hab ich ja als "Gast" keine Rechte auf das Repository zu schreiben.
Ist jetzt ersteinmal auch nicht so wichtig - wollte einfach mal anfangen und stand dann eben vor den Problemen 1 und 2 ^^.


Lad dir TortoiseBzr runter, das funktioniert ähnlich wie TortoiseSVN.

Im Prinzip geht das so:
Du legst du dir in launchpad unter deinem benutzer ein repository an.
Dann checkst du dir unser repository aus (bzr branch)
und überträgst es auf deinen launchpad-branch (bzr push)

siehe auch: https://help.launchpad.net/Code/FindingAndDownloading

---
mfg
Flo



~Timmy am 24.09.2010 17:29 #5972


Danke Flohsoft,

werd den Code in nächster Zeit mal hochladen, sobald ich mein Code getestet hab (compilieren tut er schonmal :D). Fehlen allerdings noch ein paar Sachen, die ich vorher einbauen werde ...

Bisher sollte ein Skript in etwa so aussehen:
Code:

MeinSkriptName

DEFINE variable1 = 10
DEFINE dummekuh = -4

// Kommentar blabla
IF
  var dummekuh > 0
THEN
  var variable1 = dummekuh
  inc variable1 1
END-IF


oder allgemein:
Code:

<script name>

DEFINE <variable name> = <initial value>

IF
<condition>
THEN
<command>
END-IF


Zur Implementierung der <conditions> und <commands> muss ich halt noch einiges machen ...
Wird wohl daraus hinauslaufen, dass ich etwas redundanten Code erzeuge, da ich große Teile von JHs KI kopiere und etwas an meine Bedürfnisse anpasse (hoffe das ist ok, JH?).

Soweit wie ich das hier beschrieben hab, steht das schon, fehlen tun halt die conditions und commands (hab bisher nur ein paar wenige). Muss habe auch noch haufenweise testen, was ich bis jetzt noch ned gemacht hab ^^


FloSoft am 25.09.2010 16:01 #5975

Großmeister
und wenn du, statt ner eigenen scriptsprache zu entwerfen, LUA ansiehst? wird ja auch in vielen anwendungen benutzt. Hatten selbst schonmal überlegt das zu benutzen, waren dann nur zu faul uns da einzuarbeiten.

Im Prinzip liefe das bei LUA darauf hinaus, das man der interpreterlibrary einen Befehlssatz als Interface zur Verfügung stellt, die einem alle benötigten Daten liefern bzw setzen.

---
mfg
Flo



~Gast am 25.09.2010 18:17 #5976


Hab mir das LUA schon davor angeschaut, aber absolut kein Plan wie man das verwendet. Zugegebenerweise hab ich mich auch nicht lange damit befasst ...
Ich fand schon den LUA-Skript-Code viel zu kompliziert für nen Nicht-Programmierer. Werds mir eventuell trotzdem nochmal anschaun, wenn ich Zeit hab. Im Prinzip wollte ich da ja eh ein bissel an der KI anpassen, sodass man wahrscheinlich später auch LUA mit einbinden kann, wenn mans mal kapiert hat, wie das geht ...
Da ich jetzt aber den Parser hierfür schon fertig hab, mach ich jetzt erstmal so weiter ... hab in den nächsten Wochen eh nicht mehr viel Zeit und wollte das bis Mitte Oktober fertig haben.

Nochmal was ganz andres: wenn ich den Code mit VisualStudio baue, bekomm ich beim Starten im VideoDriverWrapper.cpp [Zeile 124] nen Speicherzugriffsfehler (hab den trunk ausgecheckt) - beim normalen NightlyBuild allerdings nicht. Habs Ihr vielleicht ne Ahnung, woher das kommen kann? Hab letztens nen zweiten Monitor angeschlosse, aber das kann ja kaum das Problem sein (vor allem weil die normale NightlyBuild Version ja funktioniert). Hab ich eventuell irgendwelche falschen libs/bins/wasauchimmer im contrib-Ordner oder woran kann das liegen?
Irgendwann hats jedenfalls mal geklappt :(


FloSoft am 25.09.2010 18:42 #5978

Großmeister
hi naja was genau ist zeile 124? hab das jetzt nicht im kopf. ansonsten evtl ieine alte treiber-dll geladen die dann benutzt wird?

---
mfg
Flo



Siegfried am 25.09.2010 18:53 #5979


Hallo zusammen,
ich kann zwar vermutlich nicht helfen (hab zwar c++-erfahrung, aber keine für ki-entwicklung), aber ich kann euch moralisch unterstützen ;)

Ich finde das ein klasse Projekt! *daumen hoch*


~Timmy am 25.09.2010 19:22 #5980


Zitat von FloSoft:

hi naja was genau ist zeile 124? hab das jetzt nicht im kopf. ansonsten evtl ieine alte treiber-dll geladen die dann benutzt wird?


Code:

if(!videodriver->CreateScreen(800, 600, false))


des wird wohl irgendwas mitm Treiber sein ... denk mal das bekomm ich schon irgendwie raus ...


FloSoft am 25.09.2010 19:47 #5981

Großmeister
hi, evtl von der 0.6 nen treiber geladen? der hatte noch kein versioning, da kanns sein das das dann schief geht oder so.

---
mfg
Flo



jh am 25.09.2010 20:52 #5982


Zitat von Timmy:

Wird wohl daraus hinauslaufen, dass ich etwas redundanten Code erzeuge, da ich große Teile von JHs KI kopiere und etwas an meine Bedürfnisse anpasse (hoffe das ist ok, JH?).


Jojo, ist in Ordnung ;)
Ich hoffe ich komme irgendwann auch mal dazu da ein bisschen weiter dran zu basteln


~Timmy am 28.09.2010 11:46 #5984


Also, hab das Problem leider nach wie vor.
Ich hab zuerst alle aus meiner funktionierenden Version in meinen Test-Ordner kopiert und dannach bloß folgende Dateien durch meine Selbstgebauten ersetzt:
libsiedler2.dll
mygettext.dll
s25client.exe
s25update.exe
sound-convert.exe

Starten tu ich das dann mit der s25client.exe.
Die Ausgabe sieht bei mir folgendermaßen aus:
Code:

lade "C:/Users/Timm/Saved Games/Siedler II.5 RttR/CONFIG.INI": fertig (0ms)


WARNING: Your application version has changed - please recheck your settings!

2 video drivers found!
Drücken Sie eine beliebige Taste . . .


Vielleicht hats was mit der Warning zu tun?


~Timmy am 28.09.2010 11:49 #5985


Okey, habs raus:

-> man muss die audio- und video-driver auch noch mitkopieren


~Timmy am 29.09.2010 15:15 #5988


Hey Isch,

kannst du mir vielleicht mit dem "Reinhacken" der KI bei der Spieler-Auswahl-Combobox helfen? Hab selbst ein probiert das reinzuhacken, aber nicht hinbekommen. Eventuell weisst du noch was du so ungefähr anpassen musstest?

Hab inzwischen eine eigene Klasse "AIScriptPlayer" von "AIBase" abgeleitet, sodass es ja eigentlich möglich sein sollte, die als Extra-KI zur Auswahl zu stellen. (auch wenn sie bisher noch nicht allzuviel macht :D)

Grüße
Timm


~Timmy am 30.09.2010 10:50 #5995


Sorry erstmal für den 5fach-Post (kann mich mit meiner email-Addresse nicht mehr anmelden, weil anscheinend schon ein Account existiert, PW will er mir aber auch nicht zuschicken, da kommt dann irgendein Fehler) [timm[dot]hoffmeister(at)gmx.de].

@Isch: hab das reinhacken selbst hinbekommen - ist ja nicht schwer wenn mans gewusst hätte :D


jh am 01.10.2010 10:55 #6000


Oh, sorry, hab dein Posting erst jetzt gesehen, aber ok, hast es ja auch so hinbekommen ;)

Wegen Forumsproblemen: Am besten an FloSoft wenden


~Timmy am 05.10.2010 09:14 #6004


Oweia ...
jetzt hab ich in einer meiner Dateien ein "include GameConsts.h" eingefügt und bekomme die Fehlermeldung:
Code:

...\s25rttr\src\GameConsts.h(420) : error C2065: 'NATION_COUNT': nichtdeklarierter Bezeichner
...\s25rttr\src\GameConsts.h(420) : error C2078: Zu viele Initialisierungen
[\code]

Ist mir eigentlich ein Rätsel wie das überhaupt jemals funktionieren konnte, da "NATION_COUNT" nirgends definiert ist (jedenfalls nicht in GameConsts.h bzw. dessen einzigstem include mygettext.h).

Kann mir da vielleicht jemand auf die Sprünge helfen?

Grüße
Timmy

P.s.:
Zeile 420:
[code]
const GoodType SHIELD_TYPES[NATION_COUNT] = { GD_SHIELDAFRICANS, GD_SHIELDJAPANESE,
GD_SHIELDROMANS, GD_SHIELDVIKINGS};
[\code]



jh am 05.10.2010 10:46 #6005


NATION_COUNT wird in der files.h definiert. Das ist wohl bis jetzt nie aufgefallen, weil die files.h immer in irgendeiner Form zusammen mit der GameConsts.h inkludiert wurde. ein #include "files.h" in der GameConsts.h sollte das ganze aber beheben (wenn dadurch nicht neue Abhängigkeitsfehler entstehen^^).


~Timmy am 05.10.2010 10:58 #6006


Ja hab ich auch schon gemerkt, dass das in der files.h gefiniert wurde - Problem ist, dass das bei mir gleich neue Fehler gab, da hat ich dann kein Bock mehr und dachte mir, ihr wisst da vielleicht weiter :D

Okey, hab den ganzen branch auch mal ins launchpad getan:
Code:

bzr branch lp:~timm-hoffmeister/s25rttr/aiscripting

(kompiliert allerdings wie gesagt nocht nicht, bin aber noch dran)

Bisher kann das Script allerdings auch noch nicht viel - zu Zeiten wo das ganze bei mir noch kompiliert hat, konnte man die die KI über das Script chatten lassen. Ansonsten bin ich grad noch dabei mir den Code den ich brauche zu Copypasten und anzupassen und t.w. neuzuschreiben.

Dankeschön für die Antwort
Grüße
Timm


~Timmy am 05.10.2010 11:07 #6007


Hm ... hab das include eingebaut und bekomm jetzt einen ganz merkwürdigen Compilerfehler:

Code:

1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5940) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Zeichenfolge'
1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5940) : error C2059: Syntaxfehler: 'Zeichenfolge'


Kapier ich ehrlich gesagt nicht ...


CS2001 am 05.10.2010 14:09 #6008


Den Fehler hatte ich, als ich in der build_paths.h die Pfade Windowstypisch mit Backslash angegeben hatte, also versuchs statt mit C:\... mal mit C:/, falls du das auch getan hast.


FloSoft am 05.10.2010 20:45 #6009

Großmeister
oder mit \\ für jeden \ (\ ist das escape-zeichen, d.h man muss das escape-zeichen escapen damit das zeichen rauskommt ;))

---
mfg
Flo



~Timmy am 06.10.2010 09:37 #6010


Also ich glaub ich kapier nicht ganz wovon ihr gerade schreibt. Ich hab nur eine build_paths.h - und die ist unter s25rttr/build_paths.h. Da ist allerdings fast alles auskommentiert und an der Datei hab ich nichts geaendert:

Code:

#ifndef LOCAL_H_INCLUDED
#define LOCAL_H_INCLUDED

#ifdef _WIN32
///////////////////////////////////////////////////////////////////////////////
//    Windows Dependant-Configuration

//    disable Memory Leak Detection (comment it out to enable it)
#    define NOCRTDBG

//    disable catching of exceptions (comment it out to enable it)
#    define NOHWETRANS

#    ifdef _DEBUG
//        You can define paths here, but you should only use
//        those definitions in DEBUG-configuration.
#    endif // _DEBUG

//    if you don't define anything here, the current working
//    directory will be used to search the files and paths
//    (the s25rttr-files must be in the SETTLERS II installation folder)

//
///////////////////////////////////////////////////////////////////////////////
#endif

///////////////////////////////////////////////////////////////////////////////
//    Other Configuration

//    set global prefix (normal /usr/local)
//#define PREFIX "/usr/local"

//    set binary directory (normal $(prefix)/bin)
//#define BINDIR PREFIX"/bin"

//    set data directory (normal $(datadir)/s25rttr)
//#define DATADIR PREFIX"/share/s25rttr"

//    set game directory (normal $(datadir)/s25rttr/S2)
//#define GAMEDIR DATADIR"/S2"

//    set driver directory (normal $(libdir)/driver)
//#define DRIVERDIR LIBDIR"/driver"

//    set settings directory (normal $HOME/.s25rttr)
//#define SETTINGSDIR "~/.s25rttr"

//
///////////////////////////////////////////////////////////////////////////////

#endif // !LOCAL_H_INCLUDED




FloSoft am 06.10.2010 11:58 #6012

Großmeister
was steht in der zeile 5940 der datei C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h ?

---
mfg
Flo



~Timmy am 06.10.2010 13:28 #6014


Okey, hat sich erledigt, hab JH im chat getroffen :D


FloSoft am 08.10.2010 13:25 #6018

Großmeister
woran lags denn? (evtl gibts ja mehr die das problem haben)

---
mfg
Flo



~Timmy am 08.10.2010 13:30 #6019


Problem war das "include GameConsts.h" - das gab ja irgendwelche Abhängigkeitsfehler.
Lösung: einfach zusätzlich zur GameConsts.h die main.h inkludieren und es hat funktioniert.


FloSoft am 09.10.2010 14:38 #6020

Großmeister
die main.h hoffentlich aber nur aus den cpp dateien und nicht aus einem anderen header :)

---
mfg
Flo



~Gast am 09.10.2010 14:48 #6021


doch aus na header - allerdings includiert die header nur GameConsts.h und eben main.h - sonst nix. (da drin werden auch keine Klassen, sonder nur enums und consts definiert)


FloSoft am 09.10.2010 18:27 #6022

Großmeister
naja deine cpps sollten die main.h als erstes einziehen, und nicht iein header

---
mfg
Flo



~Timmy am 14.10.2010 20:22 #6027


Hoi, wollt mich mal wieder zurückmelden. Bin zwar ein Stück weiter gekommen (inzwischen kann die KI per Skript chatten, man kann variablen definieren, Variablen-Werte abfragen und setzten, und noch ein paar Kleinigkeiten), allerdings hab ich nen übelst dummen Designfehler gemacht, weshalb ich da jetzt nochmal Einiges überarbeiten muss.

Und da nächsten Montag mal wieder Semester anfängt, wird sich da in nächster Zeit erstmal nicht so viel tun (bissel werd ich auf alle Fälle auch noch während dem Semester machen, wenn ich Zeit finde). In den nächsten Semesterferien gehts dann wieder vollpower weiter *grins*. Vielleicht klappt das Gebäude baun per Skript auch schon vorher (da hab ich die meiste Vorarbeit zumindest schon fertig).


jh am 17.10.2010 14:55 #6043


Hoffentlich studierst du Informatik ;)


~Timmy am 17.10.2010 20:09 #6046


ja ^^ hab sogar zwei ki-vorlesungen dies semester ^^. Allerdings eher unwahrscheinlich, dass ich das hierbei gebrauchen kann.




Feel free to post in English!

Antwort schreiben

Username:
Security code:
Text:

   
  Convert smilies like :), ;) etc. into small graphics?
  Convert WWW-addresses into clickable links?
  Soll Boardcode in ihrer Nachricht aktiviert werden?