dim position löschen und speichern?
Übersicht

![]() |
SereyanneBetreff: dim position löschen und speichern? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
mein Projekt schreitet voran. Man kann Items einsammeln, die wunderschön angezeigt und mitgezählt werden. Mit der Forumsuche bin ich darauf gekommen, ein Tile beim Darüberlaufen aus der DIM zu löschen, damit man Items nicht unendlich mal einsammeln kann. Der Code dazu: Code: [AUSKLAPPEN] If KeyDown(200) Then
If map(px,py-1)=13 Then ;13 ist die Nummer des Items im Tileset py = py - 1 ;Figur läuft übers Item drüber map(px,py)=08 ;Tile wird aus Dim gelöscht und mit Gras übermalt item=item+1 scrolly = scrolly - 32 move = 1 moving=True richtung = HOCH End If endif Funktioniert wunderbar, wie gesagt. Mein Problem ist folgendes. Wenn ich das Spiel speichere, aus- und wieder einschalte, sind diese eingesammelten Items alle wieder da. Sollen sie aber nicht. Wie speichere ich sowas? Es wäre ganz leicht, wenn das Item nur einmal vorhanden wäre. Bei den geöffneten Schatztruhen klappt das prima: Code: [AUSKLAPPEN] For y = 0 To 49 ;dim wird ausgegeben For x = 0 To 49 DrawImage tileset,x*32-scrollx,y*32-scrolly,map(x,y) If truhe1=1 Then ;wenn die Truhe geöffnet wurde If map(x,y)=156 Then ;übermale das Bild der Truhe map(x,y)=151; mit dem Bild der geöffneten Truhe EndIf EndIf Next Next Aber wie geht das, wenn dasselbe Frame (z.B.13) 20x in der dim auftaucht? ich will ja nur die löschen bzw. speichern, die schon weg sind.... Hat da jemand eine Idee? Vielen Dank schon mal! |
||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
du musst den arry irgenwo zwischenspeichern (in eine speicher-datei )
Damit dein programm beim nächsten Start weis, dass es hier kein item sondern etwas anderes setzen soll. Ein beispiel ausm kopf raus: (beim beenden des spiels wird eine "spiestand datei" erstellt) Code: [AUSKLAPPEN] function save_game() Speicherdatei = writefile("saved_game.txt") for x = 0 to size_x for y = 0 to size_y writeline(speicherdatei, item_arry(x,y)) next next closefile(speicherdatei) end function Und wenn du das spiel wieder startest, brauchts du noch eine funktion die die "saved_game.txt" datei öffnet und dann aus diesen daten die items plaziert. benötigte befehle (hihi gleich mal neue funktion ausprobieren ![]() writefile ![]() ![]() ![]() ![]() ![]() mfg Dottakopf[/code] |
||
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke für die antwort.
leider ist mein problem damit nicht behoben. denn: mit deiner funktion ändere ich alle gleichnamigen tiles. auch die, die ja noch gar nicht eingesammelt wurden! schlag mich, wenn ich mich irre ![]() scheint ziemlich kompliziert zu sein, wenn ich nicht jedes einzelne item abfragen will, ob das eingesammelt wurde... Zitat: benötigte befehle (hihi gleich mal neue funktion ausprobieren )
writefile , writeline , openfile , readline , closefile ähm.... ich erwähnte doch, dass ich das spiel speichere, und dann beim laden wieder alle eingesammelten items auftauchen? die speicherbefehle sind mir durchaus bekannt. mein problem ist wie gesagt, ich will ein tile löschen, von dem es mehrere gibt, ich aber nur dieses eine eingesammelte löschen will. |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ehm...
Ich würde es so machen: 1. Alle Tiles werden aus der Datei geladen. 2. Wenn du dann alle geladen hast, kannst du drauf rumlaufen. 3. Wenn du ein Item einsammelst wird ja das Tile sowieso verändert. "map(px,py)=08 ;Tile wird mit Gras übermalt" 4. Dann speicherst du alle Tiles wieder in der Datei. 5. denk dir einfach wieder, das Programm wird beendet und startet neu ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Tankbuster
hey danke, gute idee. meinst du mit Zitat: Dann speicherst du alle Tiles wieder in der Datei.
Code: [AUSKLAPPEN] For y = 0 To 49
For x = 0 To 49 Read map(x,y) Next Next ? werd ich gleich mal ausprobieren. würde das bedeuten ich muss die array in meine save dat aufnehmen? ![]() |
||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
So hier ist ein lauffähiger code der genau das macht was ich gerade oben schlecht erklärt habe.
Nachdem du die Datei befehle kennst, hab ich mir mal erklärungen im code gespart. Damit das ganze läuft, muss das beispiel gespeichert werden und am gleichen ort eine "s.txt" datei vorhanden sein den inhalt habe ich dir unten dazu geschickt, einfach in die textdatei reinkopieren... Welche normalerweise durch den mapeditor erstellt werden müsste. Aber ich wollte jetzt keinen schreiben darum musst du selber schnell eine datei mit dem namen "s.txt" erstellen. Mit der maus kannst du dann deine items "löschen" und mit "Enter" wird der arry gespeichert und "spiel beendet" Programm neu starten und tata.. die items wurden so übernommen Sry für die schlechte code formatierung. Code: [AUSKLAPPEN] Graphics 800,600,16,2 SetBuffer BackBuffer() Dim map(20,20) Dim items(20,20) ;pseudo item layer erstellen For x = 0 To 19 For y = 0 To 19 items(x,y) = Rnd(0,1) Next Next ;die item posis einlesen ( achtung es muss eine s.txt datei vorhanden sein ...) load_items() Repeat Cls draw_items() ;malen einsammeln() ;items "löschen" If KeyHit(28) Then save(): End ;mit enter speichern Flip Until KeyHit(1) Function draw_items() For x = 0 To 19 For y = 0 To 19 If items(x,y) = 1 Then Rect x*32,y*32,32,32,items(x,y) Next Next End Function Function einsammeln() If MouseDown(1) Then items(MouseX()/32,MouseY()/32) = 0 End Function Function save() daten = WriteFile("s.txt") For x = 0 To 19 For y = 0 To 19 WriteLine(daten,items(x,y)) Next Next CloseFile(daten) End Function Function load_items() daten = OpenFile("s.txt") For x = 0 To 19 For y = 0 To 19 items(x,y) = ReadLine(daten) Next Next CloseFile(daten) End Function Inhalt der s.txt einfach reinkopieren Code: [AUSKLAPPEN] 0 1 0 0 1 1 1 0 0 1 0 0 0 0 1 1 0 1 0 1 0 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 0 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1 1 0 0 0 1 1 1 1 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 0 0 1 1 0 1 1 1 1 1 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 1 1 1 0 1 0 0 1 0 0 1 0 0 0 0 1 1 1 0 1 0 0 1 1 0 1 0 0 1 0 1 1 1 1 1 0 0 0 1 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 1 1 1 0 1 0 0 1 1 1 0 1 0 1 1 0 1 1 1 1 0 0 1 1 0 0 0 1 1 1 0 0 1 0 0 1 1 0 1 0 0 1 0 0 0 1 0 1 1 1 0 1 0 1 1 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1 1 0 1 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 1 1 0 1 0 0 0 1 0 0 1 1 1 0 1 1 1 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 1 1 1 1 0 1 0 0 0 0 1 0 0 1 1 0 1 0 0 1 0 0 0 ~EDIT~ Ganz vergessen, am besten du machst nicht nur einen einzigen "map_arry" sondern hinzukommend auch einen "item_arry" . Der map arry zeichnet die landschaft .. bäume büsche, wasser. Hingegen der "item_arry" zeichnent und verwaltet nur gegenstände. mfg Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
- Zuletzt bearbeitet von Dottakopf am Mi, Apr 23, 2008 16:03, insgesamt einmal bearbeitet
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Dottakopf
jo, auch nich schlecht! danke! werd mal gucken wie ich das am besten bei mir einbaue.... @Tankbuster ähm... wie speicher ich ein dim map??? den Code: [AUSKLAPPEN] WriteInt(save, map(x,y))
mag bb nicht.... |
||
- Zuletzt bearbeitet von Sereyanne am Mi, Apr 23, 2008 17:46, insgesamt einmal bearbeitet
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau so speicherst du die ganze Map ![]() Dabei musst du alle Tiles durchgehen und speichern. Von WriteLine ist aber abzuraten, da die Datei ungefähr doppelt so groß werden würde, wie mit WriteInt <.< |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Genau so speicherst du die ganze Map
Dabei musst du alle Tiles durchgehen und speichern. wie gesagt, obigen befehl nimmt bb nicht. meinst du etwa mit for...next? wie soll das dann aussehen? (sorry stelle mich grad wohl echt doof an) Code: [AUSKLAPPEN] for x=0 to 49
foy y=0 to 49 WriteInt(save, map(x,y)) next next wäre das das was du meinst? und danke für die hilfe! |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das wäre exakt, was ich meinte^^ | ||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja, klappt! spitze, danke!!
vielleicht stell ich mich ja doch nicht sooo doof an... ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group