Werte aus einer Textdatei in ein Array schreiben
Übersicht

Gray FoxBetreff: Werte aus einer Textdatei in ein Array schreiben |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich bastel grad an einem Kartenspiel im Stile von Magic (im WIP vorgestellt) und nun möchte ich, dass alle Kartenwerte, wie z.B. Name, Stärke, Kosten, BonusID,Grafikpfad aus einer Textdatei gelesen und in ein Array geschrieben werden soll.
Damit soll es möglich sein, neue Karten ohne Programmierarbeit einbinden zu können. Mein Testcode sieht so aus: Code: [AUSKLAPPEN] Graphics 800,600,16,2
Global stelle = 0 Global name$ Global staerke Global verteitigung Global kosten Global bonusid Global leerstelle Global grafik$ Dim kartenfeld(10,10,10,10,10,10) Repeat If KeyHit(59) Then datei =ReadFile("cards.txt") While Not Eof(datei) name$ = ReadLine(datei) kartenfeld(stelle,0,0,0,0,0) = name$ staerke = ReadLine$(datei) kartenfeld(0,stelle,0,0,0,0) = staerke verteitigung = ReadLine$(datei) kartenfeld(0,0,stelle,0,0,0) = verteitigung kosten = ReadLine$(datei) kartenfeld(0,0,0,stelle,0,0) = kosten bonusid = ReadLine$(datei) kartenfeld(0,0,0,0,stelle,0) = bonusid grafik$ = ReadLine$(datei) kartenfeld(0,0,0,0,0,stelle) = grafik$ stelle = stelle + 1 CloseFile(datei) Wend For i = 0 To 9 Text 100,100, kartenfeld(i,0,0,0,0,0) Text 100,125, kartenfeld(0,i,0,0,0,0) Text 100,150, kartenfeld(0,0,i,0,0,0) Text 100,175, kartenfeld(0,0,0,i,0,0) Text 100,200, kartenfeld(0,0,0,0,i,0) Text 100,125, kartenfeld(0,0,0,0,0,i) Next End If Until KeyHit(1) Es werden aber nur 0er angezeigt ![]() Jemand nen Tip oder Verbesserungsvorschlag? ![]() Inhalt der Textdatei "cards.txt": Zombie 1 2 1 0 grafiken\karte_zombie.png |
||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Also so wie ich es verstehe, wird die Karte geladen, wenn f1 gedrückt wird. Bei zweimal drücken müsste man aber eigentlich sofort "Array index out of bounds" kriegen, weil stelle ja nicht zurückgesetzt wird. Noch ein paar Dinge, die mir aufgefallen sind: -Du kannst keine Zeichenkette (name$/grafik$) in einen Array laden, der als Integer angelegt wurde. -Die Datei ist du sechs Zeilen lang. Deshalb dürften eigentlich immer nur der erste eintrag jeder Dimension ausgefüllt werden. Nacher bei der Ausgabe lässt du jedoch alle Einträge ausgeben. Das kannzu Überlagerung kommen, wenn du nacher alle Einträge ausliest (Ist aber nicht so schlimm ![]() -Closefile kommt erst hinter Wend -Und der Grund, warum nur Nullen ausgegeben werden könnte sein: Du setzt die Einträge kartenfeld(stelle,0,0,0,0,0) kartenfeld(0,stelle,0,0,0,0) kartenfeld(0,0,stelle,0,0,0) kartenfeld(0,0,0,stelle,0,0) kartenfeld(0,0,0,0,stelle,0) und kartenfeld(0,0,0,0,0,stelle) da stelle 0 bleibt, wird immer der selbe Eintrag (die selbe Variable) verändert. Immer der Eintrag kartenfeld(0,0,0,0,0,0) Die sind nachher alle auf dem letzten eintrag (0)[/code] |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für die Karten empfiehlt sich Type mehr als Dim:
Code: [AUSKLAPPEN] Type karte Field name$, angriff%, verteidigung%(, etc.) End Type Mit Code: [AUSKLAPPEN] Dim kartenfeld(10,10,10,10,10,10) erstellst du übrigens ein 11*11*11*11*11*11 (Null-Variable mitgezählt) = 11 hoch 6 = 1771561 Einträge großes Feld! Felder mit mehr als 3 Dimensionen sollte man nicht benutzen, deswegen lieber Types nehmen, das ist kompakter und dynamisch. Und zu deinem Problem mit dem Auslesen: Umklammere das Readline() mit Int(), dadurch wird das Eingelesene in eine Ganzzahl umgewandelt. Oder nimm einfach ReadInt(). Wenn du mit Types arbeitest, sieht das dann so aus: Code: [AUSKLAPPEN] Type karte Field name$, angriff%, verteidigung% End Type k.karte = New karte k\name$ = ReadLine(datei$) k\angriff = Int(ReadLine(datei$)) k\verteidigung% = Int(ReadLine(datei$)) MfG garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke werde es mal ausprobieren, hatte bis jetzt noch nicht viel mit Types zu tun?
Wie schätzt ihr den Anspruch ein? Ist der Umgang schwer? |
||
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn man sie einmal verstanden hat, ist es kinderleicht sie zu benutzen. Man sollte jedoch trotzdem prüfen, was je nach Situation besser ist, Types oder Felder/Banks. Types sind gut bei sich ändernden Anzahlen von Einträgen und um verschiedene Datentypen zusammenzufassen. Dims und Banks sind zwar statisch aber etwas schneller (besonders bei hohen Anzahlen an Einträgen).
MfG garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso types, Dim funktioniert doch auch gut ^^
ich schick dir mal was, was ich grad gemacht hab. MOM |
||
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mir oder ihm? ^^ | ||
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dir ^^
Das zeigt, wie man aus einer Datei *.dat einen level laden kann. https://www.blitzforum.de/upload/file.php?id=359 |
||
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schranz0r hat Folgendes geschrieben: Dir ^^
Das zeigt, wie man aus einer Datei *.dat einen level laden kann. https://www.blitzforum.de/upload/file.php?id=359 Danke ![]() |
||
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso willst das den machen? | ||
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schranz0r hat Folgendes geschrieben: Wieso willst das den machen?
Damit ich meine Spielkarten besser verwalten kann. z.B. den Namen der Karte etc. |
||
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
das machst mit dem teil was ich dir geposted hab, mit der map.dat
das reicht doch, oder nicht? Die map.dat kannst du im texteditor öffen. Was in der Datei was ist, steht ja in dem code ![]() Wenn du noch fragen hast, frag ruhig ![]() Code: [AUSKLAPPEN] Apptitle "Dim map" Graphics 640,480,0,2 Setbuffer Backbuffer() frameTimer=CREATETIMER(15) Global spieler = LoadImage("items\player.png") Global tiles = LoadImage("items\blocks.png") Global punkte Const runter = 208, rauf = 200, rechts = 205, links = 203 ;Level aus Datei lesen Dim Level$(14,19) leveldatei = ReadFile("map.dat") For Zeile=0 To 14 A$ = ReadLine(leveldatei) For Spalte=0 To 19 Level$(Zeile,Spalte) = Mid$(A$,Spalte+1,1) Next Next Repeat WAITTIMER (frameTimer) For Zeile=0 To 14 For Spalte=0 To 19 Select Level$(Zeile,Spalte) Case "S" DrawimageRect tiles, Spalte*32, Zeile*32, 32, 0, 32, 32 DrawimageRect spieler, Spalte*32, Zeile*32, 0, 0, 32, 32 SpielerS = Spalte SpielerZ = Zeile Case " " DrawimageRect tiles, Spalte*32, Zeile*32, 32, 0, 32, 32 Case "1" DrawimageRect tiles, Spalte*32, Zeile*32, 0, 0, 32, 32 End select next next If Keydown(runter) And ( Level$(SpielerZ+1,SpielerS) <> "1" ) Then Level$(SpielerZ, SpielerS) = " " SpielerZ = SpielerZ + 1 Level$(SpielerZ, SpielerS) = "S" Endif If Keydown(rauf) And ( Level$(SpielerZ-1,SpielerS) <> "1" ) Then Level$(SpielerZ, SpielerS) = " " SpielerZ = SpielerZ - 1 Level$(SpielerZ, SpielerS) = "S" Endif If Keydown(rechts) And ( Level$(SpielerZ,SpielerS+1) <> "1" ) Then Level$(SpielerZ, SpielerS) = " " SpielerS = SpielerS + 1 Level$(SpielerZ, SpielerS) = "S" Endif If Keydown(links) And ( Level$(SpielerZ,SpielerS-1) <> "1" ) Then Level$(SpielerZ, SpielerS) = " " SpielerS = SpielerS - 1 Level$(SpielerZ, SpielerS) = "S" Endif Flip Until Keyhit(1) End map.dat Code: [AUSKLAPPEN] 11111111111111111111 1S 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11111111111111111111 |
||
- Zuletzt bearbeitet von Schranz0r am So, Aug 13, 2006 17:40, insgesamt 2-mal bearbeitet
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich kann aber keine Namen in ein Arrayfeld schreiben z.B.
Textdatei: Zombie 1 2 1 grafiken\karte_zombie.png verstehste was ich meine oder müssen da "" um den Text? |
||
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich versteh nicht wieso du das willst??
es reicht doch sich in den Code zu schreiben: Code: [AUSKLAPPEN] .... tiles = Loadimage("items.png") ; 1 = Stuhl, 2 = Gras, 3 = Baum .... dann weist du doch auch was welche Zahl bedeudtet!!! Wieso dann so umständlich?? Kartenspiele kannst so normal acuh machen, ist dann halt ne sache der programmierung selbst |
||
- Zuletzt bearbeitet von Schranz0r am So, Aug 13, 2006 17:48, insgesamt einmal bearbeitet
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schranz0r hat Folgendes geschrieben: Ich versteh nicht wieso du das willst??
es reicht doch sich in den Code zu schreiben: Code: [AUSKLAPPEN] .... tiles = Loadimage("items.png") ; 1 = Stuhl, 2 = Gras, 3 = Baum .... dann weist du doch auch was welche Zahl bedeudtet!!! Wieso dann so umständlich?? Ich glaube ich sollte dir erklären, dass ich keine Tilemaps sondern, Spielkarten im Sinne von Magic - The Gathering meine ![]() |
||
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gray Fox hat Folgendes geschrieben: Schranz0r hat Folgendes geschrieben:
Ich versteh nicht wieso du das willst??
es reicht doch sich in den Code zu schreiben: Code: [AUSKLAPPEN] .... tiles = Loadimage("items.png") ; 1 = Stuhl, 2 = Gras, 3 = Baum .... dann weist du doch auch was welche Zahl bedeudtet!!! Wieso dann so umständlich?? Ich glaube ich sollte dir erklären, dass ich keine Tilemaps sondern, Spielkarten im Sinne von Magic - The Gathering meine ![]() Jo habs grad nochmal gelesen OMG wie peinlich ^^ Also du willst an einer bestimmten stelle einen Wert haben. z.B HP = 250 usw und das soll aus der txt gelesen werden, richtig? hmm ich schau mal ob ich was machen kann ![]() EDIT: Ist es nicht besser immer eine bb zu includen? Ist relativ schreibgeschützt <<---HAHA LOL aber wer die endung nicht kennt ^^ kannst du auch dazu schnell machen, quasi als update |
||
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Was hat das unter dem Edit zu bedeuten (nicht das mit "include"?
Mein Problem neber dem Laden von Werten ist, dass ich in Arrays keine Strings speichern kann und ich haber Strings habe z.B. die Namen der "Spielkarten". |
||
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jetzt verstehst du mich nicht ![]() Du lädst informationen aus einer TXT richtig? Versuchs mal mit : "Zombie" 1 2 1 0 LoadImage("grafiken\karte_zombie.png") evtl dann? ist halt immer so ne sache mit den txt. deshalb sag ich ja include doch einfach eine *.bb datei, dann gibts doch keine probleme, und du kannst auch super updates(in form von Karten) für dein Spiel machen |
||
Gray Fox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ach das meinste mit include, die Sache is ja die, es war angedacht, dass "Externe" ohne Programmierkenntnisse, einfach neue Karten(sets) hinzufügen können und zwar mit der txt ![]() |
||
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
achsooo
hmmm... da schau ich morgen mal ob ich was machen kann. hab da schon eine idee ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group