Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 25.02.2013, 18:54 Titel: INCLUDE-Datei ändern ohne neu kompilieren zu müssen |
|
|
Hallo,
ich habe ein Spiel programmiert und der Übersicht halber habe ich die Anfangswerte für einen Großteil der Variablen in eine .bi Datei augelagert. Nehme ich nun Änderungen an dieser Datei vor, muss ich das Spiel immer neu kompilieren, damit die neuen Werte berücksichtigt werden.
Meine Frage ist nun folgende:
Wie kann ich erreichen, dass sämtliche Variablen aus der Datei bei jedem Start eingelesen werden, ich bei Änderungen also nicht immer das Spiel neu kompilieren muss. Ich dachte da an etwas in Richtung dieser Config-Dateien (.cfg), nur habe ich leider keine Ahnung, wie ich so eine Datei nun ohne viel Aufwand aus meiner jetzigen Include-Datei machen kann (es sind hunderte Variablen darin festgelegt) und in das Programm einbinden kann.
Bin für jede Hilfe dankbar! |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 25.02.2013, 19:19 Titel: |
|
|
Include Dateien sind ja im Prinzip nichts anderes als ausgelagerter Quellcode, der beim compilieren einfach in den inkludierenden Code rein kopiert wird. Also damit wirst du dein Problem nicht lösen können.
Du musst die Daten zur Laufzeit einlesen. Das funktioniert ganz normal wie der Zugriff auf jede andere Datei mit den eingebauten Befehlen wie etwa OPEN, GET, (LINE) INPUT, PUT und CLOSE. Wenn du dir den Code zum (de)serialisieren (die Einstellungen in ein bestimmtes Format bringen) nicht selber schreiben willst, hast zu z.B. INI oder XML zur Auswahl, für die es bereits fertigen Code, der solche Dateien lesen und schreiben kann.
Für INI z.B.: das oder das oder dieses (mit WinAPI).
Für XML z.B. der Code von nemored, der u.A. in diesem Projekt verwendet wird: wxFBE (Link zum SVN repo) _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 25.02.2013, 19:41 Titel: |
|
|
Du kannst auch mdLanguage "missbrauchen" - da werden letztlich Schlüsselpaare key/value angelegt, und du kannst bequem zu jedem Schlüssel den Wert abfragen. Bei meinem monopolZ mache ich im Prinzip dasselbe, nur ohne Makros und linked list und zielgerichtet auf meinen speziellen Anwendungsfall. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 25.02.2013, 19:42 Titel: |
|
|
Gibt es denn die Möglichkeit, eine eingelesene Zeile als Code zu interpretieren?
Also wenn in der Include
steht und selbiges als String eingelesen wird, soll der String als Codezeile interpretiert und demzufolge die Variable 'vmax' auf '50' gesetzt werden, so , als wenn die Zeile im Code selber stehen würde. Ist das möglich? |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 25.02.2013, 19:51 Titel: |
|
|
Prinzipiel ja, aber der aufwand, den du hier betreiben müsstest, würde wohl ein eigenes neues Projekt schaffen. Da ist alles andere als "mal eben" zu realiseren.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 25.02.2013, 19:57 Titel: |
|
|
Schade, denn genau das bräuchte ich! Alles andere wäre doch recht aufwendig. Aber nun weiß ich jedenfalls, was möglich ist und was nicht. Danke und einen schönen Abend! |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 25.02.2013, 20:06 Titel: |
|
|
Was ist denn das ziel, das du damit erreichen möchtest? .. es muss ja nicht zwingend unbedingt so extrem sein, um eventuell das zu erreichen, was du brauchst.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 25.02.2013, 20:26 Titel: |
|
|
Das Ziel ist, den Variablen Werte zuzuweisen, ohne dass ich das im Code für jeden Variablennamen nochmals im einzelnen tun muss (wie gesagt, es sind viele hundert!). Denn genau das steht ja eigentlich alles schon in der Include, darum wäre es ideal, wenn sie wie Code gelesen werden könnte aber eben zur Laufzeit! |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 25.02.2013, 20:32 Titel: |
|
|
man könnte dir noch volgendes empfehlen:
Code: |
Dim Var1 as String
Dim Var2 as UInteger
Dim Var3 as UByte
Sub ReadVars()
Dim TFN as Integer = FreeFile
Open "myvar.txt" for Binary as #TFN
Dim T as String
Dim T1 as String
Dim XPos as Integer
Do
Line Input #TFN, T
XPos = InStr(T, 1, "=")
T = Trim(T)
If XPos > 0 Then
T1 = Mid(T, XPos + 1)
Select Case LCase(Left(T, XPos - 1))
Case "var1" : Var1 = T1
Case "var2" : Var2 = CUInt(T1)
Case "var3" : Var3 = CUByte(T1)
End Select
End If
Loop
Close #TFN
End Sub
ReadVars()
Print Var1
Print Var2
Print Var3
|
Das ist doch nun wirklich easy.
du musst in der config-datei welche "myvar.txt" heist, jetzt nur foglende Daten Eintragen
Code: |
Var1=Hallo
Var2=12345678
Var3=123
|
[EDIT]
Im Übrigen musst du es mal so sehen. Wenn der Code in deiner Datei "interpretiert" werden würde, wäre es ein leichtest für hacker, dort alles mögliche rein zu schreiben, und damit dein system zu kompromitieren.
oder,
wenn du einen klitzekleinen fehler in der datei rein baust, dann kännte dein prob kraschen.
Oder, was mein Nachredner vorgeschlagen hat. Aber ob sich sowas lohnt?!?
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Zuletzt bearbeitet von ThePuppetMaster am 25.02.2013, 20:34, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 25.02.2013, 20:32 Titel: |
|
|
Dann musst du einen Interpreter in deinem Code schreiben, der alle Befehle beherrscht, die du für dein Vorhaben brauchst. Das ist allerdings sehr viel Aufwand. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 25.02.2013, 23:53 Titel: |
|
|
steini hat Folgendes geschrieben: | Das Ziel ist, den Variablen Werte zuzuweisen, ohne dass ich das im Code für jeden Variablennamen nochmals im einzelnen tun muss (wie gesagt, es sind viele hundert!). Denn genau das steht ja eigentlich alles schon in der Include, darum wäre es ideal, wenn sie wie Code gelesen werden könnte aber eben zur Laufzeit! |
Du kannst auch mdLanguage "missbrauchen" - da werden letztlich Schlüsselpaare key/value angelegt, und du kannst bequem ... oh, hoppla, das habe ich ja schon mal geschrieben ... _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
|