Sokoban funktion
Übersicht BlitzBasic
 BlitzBasic  Beginners-Corner
 Beginners-Corner| DebbieDangerBetreff: Sokoban funktion |  Sa, Dez 09, 2006 20:04 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 |  Sa, Dez 09, 2006 20:28 Antworten mit Zitat   | 
|---|---|---|
| WAS ist denn genau dein problem? | ||
| >> Musikerstellung, Grafik und Design: http://www.pixelshooter.net.tc | ||
|   | SpionAtom |  Sa, Dez 09, 2006 20:31 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 |  So, Dez 10, 2006 0:46 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 |  So, Dez 10, 2006 17:01 Antworten mit Zitat   | 
|---|---|---|
| Hast du auch die ganzen Variablen Global gesetzt ? | ||
| Quod est faciendum? Nescio! | ||
| DebbieDanger |  So, Dez 10, 2006 23:07 Antworten mit Zitat   | |
|---|---|---|
| Ja, danke daran hats gelegen. Ich habe bald noch ne frage aber erstmal danke. | ||
Übersicht
 BlitzBasic
 BlitzBasic  Beginners-Corner
 Beginners-Corner
					Powered by phpBB © 2001 - 2006, phpBB Group
				



