Bomberman
Übersicht

DebbieDangerBetreff: Bomberman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo liebe Blitze!
Ich bin mit meinem sokoban clone fertig und nun möchte ich etwas neues machen. Ich will mein Sokoban auf Bomberman umprogrammieren, doch ich habe da ein kleines problem. Die Bewegund von sokoban war feld für feld. Er hat immer getestet ob das nächste feld frei ist. Nun, bei bomberman soll er aber frei laufen können, aber wie kontroliere ich nun ob er gegen eine wand läuft? Mit kollision werdet ihr sagen aber dann müsste ich ja für jeden block eine kollisonsabfrage machen gibt es nicht einen schöneren weg? Die leveldaten, also wo wände sind sind in einem dim feld. Danke für eure tips im vorraus. |
||
![]() |
Bob |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
wenn doch die Daten der Wände in einem Dim Feld sind, und du die Position vom Bomberman hast weist du doch schon alles was du brasuchst. If MeineMap(Bombermann\x,Bombermann\y) = Wand then Kollision. Benutze die Positionsdaten deiner Figur im Array. Fertig. |
||
DebbieDanger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schon aber ich habe nur den startpunkt der wände soll ich jetzt die gesamte größe der wände in ein dim schreiben?
Danke erstmal. |
||
![]() |
DerHase |
![]() Antworten mit Zitat ![]() |
---|---|---|
Prüfe einfach die 9 Felder die um den Spieler rum sind. Das kannst Du dann weiter optimieren, indem Du nur in die Richtung prüfst in die sich der Spieler bewegt. Hier ein kleiner >>>Ansatz<<<. | ||
Play Satyr! |
DebbieDanger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok ich werde damit mal rumspielen, ich poste nochmal wenn ich es nicht geschafft habe.
-Debbie |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
du meinst doch bestimmt pixel für pixel bewegen, oder? wenn ja, dann könntest du das z.B. so machen: Wenn deine Tiles z.B. 32*32 Pixel gross sind, dann benutze halt noch eine Variable z.B. px die halt immer bis 32 Pixel hoch zählen wenn du die spielfigur bewegst und wenn px >= 32 dann wird z.B. Feld X um eins erhöhet und px wieder auf 0 gesetzt. So kannste prüfen auf welches Feld der Spieler dann gerade ist. Beispiel: Code: [AUSKLAPPEN] ;spieler nach rechts bewegen
if keydown(205) then ;wenn feld_x+1 frei ist, dann führe weiter aus if spielfeld(feld_x+1,feld_y) = 0 then px=px+2 spieler_x=spieler_x+2 if px >= 32 then feld_x=feld_x+1 px=0 endif endif endif MfG Andreas |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
DebbieDanger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Auch eine interessante variante, danke ich werde alles mal ausprobieren.
So ich habe nun also die Spalte und Zeile gefunden indem ich x und y durch 32 geteilt habe. Nun mache ich eine abfrage: wenn rechts gedrückt und level§(spielerzeile+1,spielerspalte) <>"M" [mauer] dann bewege spieler drei pixel nach rechts. Das klappt auch er geht genau bis zur wand ![]() allerdings klappt es nicht für links. Wenn ich nach links laufe stopt er schon 2 felder vor der wand. Hier der Code, bitte um hilfe: Code: [AUSKLAPPEN] ; bomber3.BB
Graphics 640,480 SetBuffer BackBuffer() Global timer = CreateTimer(10) Global sound1 = LoadSound("soundfx20.wav") Global sound2 = LoadSound("soundfx11.wav") Global kiste = LoadImage("Kiste.jpg") Global kistez = LoadImage("Kistez.jpg") Global mauer = LoadImage("mauer.jpg") Global ziele = LoadImage("ziel.jpg") Global leer = LoadImage("leer.jpg") Global spieler = LoadImage("spieler.bmp") ; Level von Festplatte lesen Dim Level$(15,20) Dim LevelBackup$(15,20) Global zielfelder Global imziel Global Zeile Global Spalte spielerx=192 spielery=100 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 spielerspalte=(spielerx/32) spielerzeile=(spielery/32) ; Level zeichnen imziel=0 For Zeile=0 To 14 For Spalte=0 To 19 Select Level$(Zeile,Spalte) Case "M" ; Mauer DrawImage mauer, Spalte*32, Zeile*32 Case " " ; frei DrawImage leer, Spalte*32, Zeile*32 Case "K" ; Kiste If LevelBackup$(Zeile, Spalte) = "Z" Then ImZiel = ImZiel + 1 DrawImage kistez, Spalte*32, Zeile*32 Else DrawImage kiste, Spalte*32, Zeile*32 EndIf Case "Z" ; Zielfeld DrawImage ziele, Spalte*32, Zeile*32 End Select Next Next If KeyDown(205) And level$(spielerspalte+1,spielerzeile)<>"M" Then spielerx = spielerx + 3 If KeyDown(203) And level$(spielerspalte,spielerzeile-1)<>"M" Then spielerx = spielerx - 3 If KeyDown(200) And level$(spielerspalte,spielerzeile-1)<>"M" Then spielery = spielery - 3 If KeyDown(208) And level$(spielerspalte,spielerzeile+1) <>"M"Then spielery = spielery + 3 DrawImage spieler,spielerx,spielery Text 200,200,spielerspalte Flip WaitTimer(timer) Until KeyHit(1) End EDIT: oh ich habe zwei variablen falsch benannt, son mist naja jetzt geht er nach unten und oben aber er geht immer nach links zwei felder zu kurz. Soll ich einfach -2 schreiben oder was? Aber warum macht er das? -Debbie |
||
- Zuletzt bearbeitet von DebbieDanger am Mo, Dez 18, 2006 3:50, insgesamt 2-mal bearbeitet
DebbieDanger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh durch edit springt die nachtricht nicht nach oben?
Ok dann eben so: UP Sorry for doubleposting |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Glunsch, genau deshalb ist doppelposten nicht erlaubt - zum pushen. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
DebbieDanger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hier mal eine bessere version aber der feler exestiert immernoch.
Code: [AUSKLAPPEN] ; bomber3.BB
Graphics 640,480 SetBuffer BackBuffer() Global timer = CreateTimer(10) Global sound1 = LoadSound("soundfx20.wav") Global sound2 = LoadSound("soundfx11.wav") Global kiste = LoadImage("Kiste.jpg") Global kistez = LoadImage("Kistez.jpg") Global mauer = LoadImage("mauer.jpg") Global ziele = LoadImage("ziel.jpg") Global leer = LoadImage("leer.jpg") Global spieler = LoadImage("spieler.bmp") ; Level von Festplatte lesen Dim Level$(15,20) Dim LevelBackup$(15,20) Global zielfelder Global imziel Global Zeile Global Spalte spielerx=192 spielery=100 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 spielerspalte=(spielerx/32) spielerzeile=(spielery/32) ; Level zeichnen imziel=0 For Zeile=0 To 14 For Spalte=0 To 19 Select Level$(Zeile,Spalte) Case "M" ; Mauer DrawImage mauer, Spalte*32, Zeile*32 Case " " ; frei DrawImage leer, Spalte*32, Zeile*32 Case "K" ; Kiste If LevelBackup$(Zeile, Spalte) = "Z" Then ImZiel = ImZiel + 1 DrawImage kistez, Spalte*32, Zeile*32 Else DrawImage kiste, Spalte*32, Zeile*32 EndIf Case "Z" ; Zielfeld DrawImage ziele, Spalte*32, Zeile*32 End Select Next Next If KeyDown(205) And level$(spielerspalte+1,spielerzeile)<>"M" Then spielerx = spielerx + 3 If KeyDown(203) And level$(spielerspalte-1,spielerzeile)<>"M" Then spielerx = spielerx - 3 If KeyDown(200) And level$(spielerspalte,spielerzeile-1)<>"M" Then spielery = spielery - 3 If KeyDown(208) And level$(spielerspalte,spielerzeile+1) <>"M"Then spielery = spielery + 3 DrawImage spieler,spielerx,spielery Text 200,200,spielerspalte Text 200,220,spielerzeile Text (spielerspalte)*32,spielerzeile*32,"h" Text 200,240,level$(spielerspalte,spielerzeile) Flip WaitTimer(timer) Until KeyHit(1) End |
||
Beatenvoy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
dann schalt mal dein Hirn an, und überlege!
Und hör auf deinen Thread hier so doof zu pushen! |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group