Sokoban funktion

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

DebbieDanger

Betreff: Sokoban funktion

BeitragSa, Dez 09, 2006 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Dez 09, 2006 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
WAS ist denn genau dein problem?
>> Musikerstellung, Grafik und Design: http://www.pixelshooter.net.tc

SpionAtom

BeitragSa, Dez 09, 2006 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Dez 10, 2006 0:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Dez 10, 2006 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du auch die ganzen Variablen Global gesetzt ?
Quod est faciendum? Nescio!
 

DebbieDanger

BeitragSo, Dez 10, 2006 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, danke daran hats gelegen.

Ich habe bald noch ne frage aber erstmal danke.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group