Sokoban funktion
Übersicht

DebbieDangerBetreff: Sokoban funktion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo, ich würde gerne für meinen Vater zu Weihnachten ein sokoban proggen, als Basis dient der Code aus Rene Meyers Buch.
Code: [AUSKLAPPEN] ; SOKOBAN2.BB
Graphics 640,480 SetBuffer BackBuffer() timer = CreateTimer(10) tiles = LoadImage("blocks1.bmp") figuren = LoadImage("invader2.bmp") sound1 = LoadSound("soundfx20.wav") sound2 = LoadSound("soundfx11.wav") ; Level von Festplatte lesen Dim Level$(15,20) Dim LevelBackup$(15,20) leveldatei = ReadFile("sokoban.dat") For Zeile= 0 To 14 A$ = ReadLine(leveldatei) For Spalte=0 To 19 B$ = Mid$(A$,Spalte+1,1) Level$(Zeile,Spalte) = B$ LevelBackup$(Zeile, Spalte) = Level$(Zeile,Spalte) If LevelBackup$(Zeile, Spalte) = "S" Then LevelBackUp$(Zeile, Spalte) = " " If LevelBackup$(Zeile, Spalte) = "K" Then LevelBackUp$(Zeile, Spalte) = " " If Level$(Zeile,Spalte) = "Z" Then ZielFelder = ZielFelder + 1 Next Next CloseFile leveldatei Repeat ; Level zeichnen ImZiel = 0 For Zeile=0 To 14 For Spalte=0 To 19 Select Level$(Zeile,Spalte) Case "M" ; Mauer DrawImageRect tiles, Spalte*32, Zeile*32, 172, 342, 32, 32 Case " " ; frei DrawImageRect tiles, Spalte*32, Zeile*32, 104, 274, 32, 32 Case "K" ; Kiste If LevelBackup$(Zeile, Spalte) = "Z" Then ImZiel = ImZiel + 1 DrawImageRect tiles, Spalte*32, Zeile*32, 2, 342, 32, 32 Else DrawImageRect tiles, Spalte*32, Zeile*32, 444, 308, 32, 32 EndIf Case "Z" ; Zielfeld DrawImageRect tiles, Spalte*32, Zeile*32, 444, 172, 32, 32 Case "S" ; Spielfigur If LevelBackup$(Zeile,Spalte) = "Z" Then DrawImageRect tiles, Spalte*32, Zeile*32, 444, 172, 32, 32 Else DrawImageRect tiles, Spalte*32, Zeile*32, 104, 274, 32, 32 EndIf DrawImageRect figuren, Spalte*32, Zeile*32, 481,142,32,26 SpielerS = Spalte SpielerZ = Zeile End Select Next Next Text 0,0, "Im Ziel: " + ImZiel + " von " + ZielFelder Text 0,25, "Schritte: " + Schritte Text 0,50, "Züge: " + Zuege Flip If ImZiel = ZielFelder Then End ; hier Siegauswertung WaitTimer(timer) Until KeyHit(1) (gekürzt) Ich will nun aber mehrere level haben, also das level-Laden und Zeichnen, in eine Funktion packen, könnt ihr mit einen Tipp geben, ich komme damit net ganz klar. -Debbie |
||
![]() |
pixelshooter |
![]() Antworten mit Zitat ![]() |
---|---|---|
WAS ist denn genau dein problem? | ||
>> Musikerstellung, Grafik und Design: http://www.pixelshooter.net.tc |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn ich das richtig überflogen habe, ist folgender Teil für das Laden zuständig:
Code: [AUSKLAPPEN] leveldatei = ReadFile("sokoban.dat")
For Zeile= 0 To 14 A$ = ReadLine(leveldatei) For Spalte=0 To 19 B$ = Mid$(A$,Spalte+1,1) Level$(Zeile,Spalte) = B$ LevelBackup$(Zeile, Spalte) = Level$(Zeile,Spalte) If LevelBackup$(Zeile, Spalte) = "S" Then LevelBackUp$(Zeile, Spalte) = " " If LevelBackup$(Zeile, Spalte) = "K" Then LevelBackUp$(Zeile, Spalte) = " " If Level$(Zeile,Spalte) = "Z" Then ZielFelder = ZielFelder + 1 Next Next CloseFile leveldatei Wo ist das Problem? Edit: So könnte die Funktion dazu aussehen: Code: [AUSKLAPPEN] Function LevelLaden(dateiname$)
leveldatei = ReadFile(dateiname$) For Zeile= 0 To 14 A$ = ReadLine(leveldatei) For Spalte=0 To 19 B$ = Mid$(A$,Spalte+1,1) Level$(Zeile,Spalte) = B$ LevelBackup$(Zeile, Spalte) = Level$(Zeile,Spalte) If LevelBackup$(Zeile, Spalte) = "S" Then LevelBackUp$(Zeile, Spalte) = " " If LevelBackup$(Zeile, Spalte) = "K" Then LevelBackUp$(Zeile, Spalte) = " " If Level$(Zeile,Spalte) = "Z" Then ZielFelder = ZielFelder + 1 Next Next CloseFile leveldatei End Function |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
DebbieDanger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habs jetzt soweit:
Code: [AUSKLAPPEN] ; SOKOBAN2.BB
Graphics 640,480 SetBuffer BackBuffer() timer = CreateTimer(10) tiles = LoadImage("blocks1.bmp") figuren = LoadImage("invader2.bmp") sound1 = LoadSound("soundfx20.wav") sound2 = LoadSound("soundfx11.wav") ; Level von Festplatte lesen Dim Level$(15,20) Dim LevelBackup$(15,20) levelladen("sokoban.dat") Repeat ; Level zeichnen ImZiel = 0 For Zeile=0 To 14 For Spalte=0 To 19 Select Level$(Zeile,Spalte) Case "M" ; Mauer DrawImageRect tiles, Spalte*32, Zeile*32, 172, 342, 32, 32 Case " " ; frei DrawImageRect tiles, Spalte*32, Zeile*32, 104, 274, 32, 32 Case "K" ; Kiste If LevelBackup$(Zeile, Spalte) = "Z" Then ImZiel = ImZiel + 1 DrawImageRect tiles, Spalte*32, Zeile*32, 2, 342, 32, 32 Else DrawImageRect tiles, Spalte*32, Zeile*32, 444, 308, 32, 32 EndIf Case "Z" ; Zielfeld DrawImageRect tiles, Spalte*32, Zeile*32, 444, 172, 32, 32 Case "S" ; Spielfigur If LevelBackup$(Zeile,Spalte) = "Z" Then DrawImageRect tiles, Spalte*32, Zeile*32, 444, 172, 32, 32 Else DrawImageRect tiles, Spalte*32, Zeile*32, 104, 274, 32, 32 EndIf DrawImageRect figuren, Spalte*32, Zeile*32, 481,142,32,26 SpielerS = Spalte SpielerZ = Zeile End Select Next Next Text 0,0, "Im Ziel: " + ImZiel + " von " + ZielFelder Text 0,25, "Schritte: " + Schritte Text 0,50, "Züge: " + Zuege Flip If ImZiel = ZielFelder Then End ; hier Siegauswertung WaitTimer(timer) Until KeyHit(1) End Function LevelLaden(dateiname$) leveldatei = ReadFile(dateiname$) For Zeile= 0 To 14 A$ = ReadLine(leveldatei) For Spalte=0 To 19 B$ = Mid$(A$,Spalte+1,1) Level$(Zeile,Spalte) = B$ LevelBackup$(Zeile, Spalte) = Level$(Zeile,Spalte) If LevelBackup$(Zeile, Spalte) = "S" Then LevelBackUp$(Zeile, Spalte) = " " If LevelBackup$(Zeile, Spalte) = "K" Then LevelBackUp$(Zeile, Spalte) = " " If Level$(Zeile,Spalte) = "Z" Then ZielFelder = ZielFelder + 1 Next Next CloseFile leveldatei End Function aber wenn es ausführe gehts kurz auf, bleib schwarz und geht wieder zu. |
||
![]() |
Nescio |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hast du auch die ganzen Variablen Global gesetzt ? | ||
Quod est faciendum? Nescio! |
DebbieDanger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, danke daran hats gelegen.
Ich habe bald noch ne frage aber erstmal danke. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group