Hilfe: Jump'n Run wie geht's?
falls das problem grundlegender natur war:
mit pixel_koordinaten/tilegröße erhältst du die position auf deiner karte und weißt damit, welche tiles du darstellen mußt.
mit pixel_koordinaten%tilegröße (% ist der modulo operator, also der ganzzahl divisionsrest) erfährst du um wieviele pixel du die tiles verschieben mußt um "weich" zu scrollen.
mit pixel_koordinaten/tilegröße erhältst du die position auf deiner karte und weißt damit, welche tiles du darstellen mußt.
mit pixel_koordinaten%tilegröße (% ist der modulo operator, also der ganzzahl divisionsrest) erfährst du um wieviele pixel du die tiles verschieben mußt um "weich" zu scrollen.
Jump'n Run
Ich habe heute den Programmierkurs beendet, bei dem ich ca. schon 1 Jahr mitmache.
Unser letztes Programm war ein Jump'n Run.
Leider :( sind wir nicht mehr fertig geworden. (Wie auch in 3 Stnden?)
Auf jeden Fall habe ich mir den kompletten Quellcode geholt:
InitSprite()
InitKeyboard()
InitMouse()
Enumeration
#bb = 800
#bh = 600
#bilder
#robbi
#stop
#monster
EndEnumeration
OpenScreen(#bb,#bh, 16, "")
LoadSprite(#bilder, "allSprite3.bmp")
LoadSprite(#robbi,"robbi_komplett4.bmp")
LoadSprite(#monster, "monster.bmp")
LoadFont(0,"Trebuchet MS", 18, #PB_Font_HighQuality)
LoadFont(1,"Trebuchet MS", 8, #PB_Font_HighQuality)
Dim ClipX.w(401)
Dim ClipY.w(401)
Dim monsterAuswahl.w(401) ;welches Monster?
Dim monsterX.w(401) ;x-Position aus bildschirm
Dim monsterY.w(401)
Dim monsterSpd.w(401) ;geschwindigkeit (minus oder plus)
Dim monsterAni.w(401)
Global timer.l
;- Variablen zum spielbeginn
feldgroesse.w = 19 ; größe des Spielfeldes (20*20)
level.w= 0
dummy.w ; muss definiert werden, damit read funktioniert
nr.w = 0 ; zählt einfach jede For-Schleife durch
robbiX.w = 0 ;#bb/2
robbiY.w = -100;#bh/2
spd.w = 3 ; Geschwindigkeit Robbi
jump.w = 0 ; kontrolliert die Sprünge: bei 0 darf Robbi springen, bei anderen werten darf er nicht (geht nicht oder er springt gerade...)
sprunghoehe.w = 15 ;maximale Sprunghöhe, wird während des Sprunges langsam kleiner: 15,14,13..0, bei 0 ist der Sprung beendet
fallen.w = 2 ; Fallgeschwindigkeit
klettern = 0 ;wird auf 1 gesetzt, wenn Robbi an ein kletterObjekt kommt
punkte.w = 0 ;Punkte bei Start
leben.w = 3 ; Leben bei Start
sammeln.w = 0 ; Anzahl der Dinge, die Robbi sammeln muss
gewinnfaktor.w = 1 ;multipliziert die Punkte
name.s = "Testspieler"
mSpd.w = 1 ;Fallgeschwindigkeit der Monster
startzeit.w = ElapsedMilliseconds()/1000
maximalzeit.w = 60 ; Zeit in Sekunden pro Level
Gosub LevelLaden
;- Data einlesen
;- Animation für X (geht auch für Y, wenn man statt breitebild hoehebild angibt...)
Procedure aniX(x, aniSpd, breiteBild, anzBilder)
If timer%aniSpd = 0
x + breiteBild
If x >= breiteBild*anzBilder
x = 0
EndIf
EndIf
ProcedureReturn x
EndProcedure
Procedure Kollision(sprite,ckX, ckY)
cknr = 0
ckfeldgroesse = 19
For ckv.w = 0 To ckfeldgroesse
For ckh.w = 0 To ckfeldgroesse
If SpriteCollision(#bilder, ckh*40, ckv*30,sprite,ckX, ckY)
If ClipY(cknr)/30 > 5 And ClipY(cknr)/30 <=9 ; Robbi oder Monster stößt an eine Mauer
ProcedureReturn #stop
EndIf
EndIf
cknr + 1
Next
Next
EndProcedure
;- REEEPEEEAT
Repeat
ExamineKeyboard()
ExamineMouse()
ClearScreen(0,0,200)
timer + 1
;- Spielzeit
spielzeit = startzeit+maximalzeit- ElapsedMilliseconds()/1000
nr = 0
For v = 0 To feldgroesse
For h = 0 To feldgroesse
;- Monster darstellen
If monsterAuswahl(nr) <> 0; falls das Monster tatsächlich existiert
TransparentSpriteColor(#monster, 0,0,255)
ClipSprite(#monster, monsterAuswahl(nr),monsterAni(nr),40,30)
DisplayTransparentSprite(#monster, monsterX(nr), monsterY(nr))
If monsterAni(nr) <> 60 ; falls monster noch lebt
monsterAni(nr) = aniX(monsterAni(nr), 18,30,2)
EndIf
If Kollision(#monster, monsterX(nr), monsterY(nr)+mSpd) = #stop ;entweder horizontale Bewegung
monsterX(nr) + monsterSpd(nr)
Else
monsterY(nr ) + mSpd ; oder vertikale
EndIf
If Kollision(#monster, monsterX(nr), monsterY(nr)) = #stop Or monsterX(nr) < 0 Or monsterX(nr) > #bb-40
monsterSpd(nr) = -monsterSpd(nr)
EndIf
If monsterY(nr) > #bh
monsterY(nr) = -40
monsterX(nr) = 40*Random(feldgroesse)
EndIf
If SpriteCollision(#monster, monsterX(nr), monsterY(nr),#robbi,robbiX,robbiY) And monsterAni(nr) <> 60 And aniRobbiY <> 120; kollision mit lebendem Monster
If robbiY+15 < monsterY(nr)
monsterAni(nr) = 60
monsterSpd(nr) = 0
Else
lebenverloren = 1
EndIf
EndIf
EndIf
;- Hintergrund
ClipSprite(#bilder, ClipX(nr), ClipY(nr), 40, 30)
TransparentSpriteColor(#bilder, 0,0,255)
DisplayTransparentSprite(#bilder, h*40, v*30)
If SpriteCollision(#bilder, h*40, v*30,#robbi,robbiX, robbiY) And lebenverloren = 0
If ClipY(nr)/30 = 0 And ClipX(nr)/40 > 0; Robbi Findet ein Objekt zum Sammeln und ist nicht auf leerfeld
Select ClipX(nr)/40
Case 1
punkte + 100
Case 2
punkte + 200
Case 3
maximalzeit + 10
Case 4
leben + 1
Case 5
gewinnfaktor + 1
Case 6
punkte + 50
Case 7
punkte + 100
Case 8
punkte - 300
Case 9
lebenverloren = 1
aniRobbiY =120
EndSelect
ClipX(nr) = 0
sammeln - 1
EndIf
If ClipY(nr)/30 = 5 ; Robbi kommt an die Leiter
klettern = 1
Else
klettern = 0
EndIf
EndIf
nr + 1
Next
Next
;- Robbi darstellen
TransparentSpriteColor(#robbi,0,0,255)
ClipSprite(#robbi, aniRobbiX, aniRobbiY,20, 29)
DisplayTransparentSprite(#robbi,robbiX,robbiY)
;- Links-Rechts-Animation
If KeyboardPushed(#PB_Key_Left) And Kollision(#robbi, robbiX-spd, robbiY) <> #stop And robbiX > 0
aniRobbiY = 30
aniRobbiX = aniX(aniRobbiX, 8, 20, 3)
robbiX-spd
ElseIf KeyboardPushed(#PB_Key_Right) And Kollision(#robbi,robbiX+spd, robbiY) <> #stop And robbiX < #bb - 20
aniRobbiY = 60
robbiX+spd
aniRobbiX = aniX(aniRobbiX, 8, 20, 3)
Else
aniRobbiY = 0
aniRobbiX = aniX(aniRobbiX, 8, 20, 3)
EndIf
;- Sprunganimation
If KeyboardPushed(57) And Kollision(#robbi,robbiX, robbiY+fallen) = #stop ;Sprungtaste gedrückt während robbi steht
jump = sprunghoehe
EndIf
If Kollision(#robbi,robbiX, robbiY+fallen) <> #stop And klettern = 0 And lebenverloren = 0;fällt, weil er bei der nächsten Runde nicht an einen Stein gerät
robbiY +fallen
aniRobbiX = 80
EndIf
If jump <> 0 And Kollision(#robbi,robbiX, robbiY-jump) <> #stop ;springt gerade und gerät dabei nicht an einen Stein
robbiY - jump
jump-1
EndIf
If Kollision(#robbi,robbiX, robbiY-jump) = #stop ;gerät an einen stein
jump = 0
EndIf
If KeyboardReleased(57) And jump <> 0 ;Sprung wird mitten im Sprung abgebrochen
jump = 0
EndIf
;- Klettern
If klettern = 1
aniRobbiY = 90
If KeyboardPushed(#PB_Key_Up) And Kollision(#robbi,robbiX, robbiY-spd) <> #stop
robbiY-spd
aniRobbiX = aniX(aniRobbiX, 8, 20, 3)
ElseIf KeyboardPushed(#PB_Key_Down) And Kollision(#robbi,robbiX, robbiY+spd) <> #stop
robbiY+spd
aniRobbiX = aniX(aniRobbiX, 8, 20, 3)
Else
aniRobbiX = 0
EndIf
EndIf
;- Game over / Leben verloren /Level weiter
If lebenverloren = 1 ;falls ein Leben verloren
aniRobbiY = 120 ; Engelrobbi wird dargestellt
aniRobbiX = aniX(aniRobbiX, 12, 20, 3) ;Engel wird animiert
robbiY -2 ;Robbi schwebt nach oben
If robbiY < 0 ;wenn er oben angekommen ist
leben -1 ;ein Leben Abzug
lebenverloren = 0 ;Spiel geht weiter
robbiX = 0
robbiY = 0
aniRobbiX= 0
startzeit = ElapsedMilliseconds()/1000 ;Zeit geht neu los
EndIf
EndIf
;- Endgültig verloren
If leben = 0 ;endgültiges Spielende
Repeat
ExamineKeyboard()
StartDrawing(ScreenOutput())
Box(0,0,#bb,text+20)
Locate(#bb/2,text)
text+2
FrontColor(255,0,0)
DrawingMode(1)
DrawText("Game Over")
StopDrawing()
FlipBuffers()
Until KeyboardPushed(1) Or text > #bh
Break ;beendet die äußere Repeatschleife
EndIf
If robbiY > #bh Or spielzeit = 0
lebenverloren = 1
EndIf
If sammeln = 0 ;nächstes Level
level + 1
Gosub LevelLaden
EndIf
;- Punkte und Leben fenster
StartDrawing(ScreenOutput())
Box(0,0,#bb, 20, RGB(0,0,0))
DrawingMode(4)
FrontColor(255,0,0)
Box(1,1,#bb-2, 18)
Locate(10,2)
DrawingMode(1)
DrawingFont(UseFont(1))
DrawText("Wertung für " + name + " - - - Deine Punkte: " + Str(punkte) + " x " + Str(gewinnfaktor) + " - - Level: " + Str(level) + " - Leben: " + Str(leben) + " Restzeit: " + Str(spielzeit) + " Sek. Sammeln:" + Str(sammeln))
StopDrawing()
FlipBuffers()
Until KeyboardPushed(1)
CloseScreen()
End
DataSection
lvl4:
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 10,20,31,30,60,50,70,80,90,40,50,50,50,00,00,00,00,00,00,00
Data.w 00,00,29,18,56,56,66,75,76,43,47,47,47,00,00,00,00,00,00,00
Data.w 00,00,10,00,41,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,78,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 68,68,68,68,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,110,00,00,00,70,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,88,88,88,68,68,68,68,68,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,17,27,37,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,47,00,00,87,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,47,00,00,87,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,06,16,16,26,47,00,00,87,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,45,55,65,35,47,00,00,87,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,45,55,65,35,47,00,00,87,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,45,55,65,35,47,00,00,87,00
Data.w 59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59
lvl1:
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,58,00,00,00,00
Data.w 00,00,10,10,15,50,10,60,00,00,00,00,60,70,00,35,00,00,00,00
Data.w 00,06,16,16,25,16,16,16,00,00,00,07,17,17,37,35,110,310,410,70
Data.w 00,00,00,00,25,00,00,00,00,00,00,00,00,00,00,45,96,96,96,96
Data.w 00,00,00,00,15,00,00,00,00,00,00,00,00,00,00,45,57,57,57,57
Data.w 46,010,510,00,05,00,110,00,10,20,30,40,10,60,50,45,80,90,00,67
Data.w 86,86,86,49,86,86,86,00,86,86,79,86,86,86,86,89,89,89,00,67
Data.w 00,00,00,00,00,00,00,00,75,00,00,00,00,00,00,00,00,00,00,67
Data.w 62,72,82,00,00,00,00,00,75,00,00,00,00,510,00,00,00,00,00,67
Data.w 63,73,83,610,710,810,910,00,75,00,00,00,00,86,00,00,00,00,00,67
Data.w 510,74,86,86,86,00,86,86,75,86,86,86,86,86,00,90,00,00,40,67
Data.w 85,74,20,00,00,00,00,00,00,00,00,00,00,00,00,67,67,00,67,67
Data.w 85,74,20,00,00,00,00,410,00,00,00,00,00,00,00,00,00,00,00,67
Data.w 85,74,20,00,00,00,07,17,17,27,37,00,00,00,00,00,00,00,40,86
Data.w 46,74,20,00,00,00,77,67,00,10,00,50,86,00,86,86,86,00,86,86
Data.w 86,86,86,00,00,67,86,86,00,86,86,86,86,00,00,00,00,00,00,00
Data.w 10,00,00,80,00,58,00,00,00,00,00,00,00,00,00,00,210,00,80,86
Data.w 510,00,00,00,06,00,00,00,00,00,00,86,00,00,00,00,86,86,86,86
Data.w 06,16,26,00,30,00,410,00,00,00,00,86,110,40,86,00,00,00,00,00
Data.w 29,39,00,49,59,68,78,88,89,00,79,86,86,86,00,00,00,00,00,00
lvl5:
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 36,10,20,30,40,50,60,70,80,90,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
lvl3:
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,58,00,00,00,00
Data.w 00,00,10,10,15,50,10,60,00,00,00,00,60,70,00,35,00,00,00,00
Data.w 00,06,16,16,25,16,16,16,00,00,00,07,17,17,37,35,110,310,410,70
Data.w 00,00,00,00,25,00,00,00,00,00,00,00,00,00,00,45,96,96,96,96
Data.w 00,00,00,00,15,00,00,00,00,00,00,00,00,00,00,45,57,57,57,57
Data.w 46,010,510,00,05,00,110,00,10,20,30,40,10,60,50,45,80,90,00,67
Data.w 86,86,86,49,86,86,86,00,86,86,79,86,86,86,86,89,89,89,00,67
Data.w 00,00,00,00,00,00,00,00,75,00,00,00,00,00,00,00,00,00,00,67
Data.w 62,72,82,00,00,00,00,00,75,00,00,00,00,510,00,00,00,00,00,67
Data.w 63,73,83,610,710,810,910,00,75,00,00,00,00,86,00,00,00,00,00,67
Data.w 510,74,86,86,86,00,86,86,75,86,86,86,86,86,00,90,00,00,40,67
Data.w 85,74,20,00,00,00,00,00,00,00,00,00,00,00,00,67,67,00,67,67
Data.w 85,74,20,00,00,00,00,410,00,00,00,00,00,00,00,00,00,00,00,67
Data.w 85,74,20,00,00,00,07,17,17,27,37,00,00,00,00,00,00,00,40,86
Data.w 46,74,20,00,00,00,77,67,00,10,00,50,86,00,86,86,86,00,86,86
Data.w 86,86,86,00,00,67,86,86,00,86,86,86,86,00,00,00,00,00,00,00
Data.w 10,00,00,80,00,58,00,00,00,00,00,00,00,00,00,00,210,00,80,86
Data.w 510,00,00,00,06,00,00,00,00,00,00,86,00,00,00,00,86,86,86,86
Data.w 06,16,26,00,30,00,410,00,00,00,00,86,110,40,86,00,00,00,00,00
Data.w 29,39,00,49,59,68,78,88,89,00,79,86,86,86,00,00,00,00,00,00
lvl0:
Data.w 00,00,00,00,00,71,91,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,51,61,00,00,00,00,00,00,51,81,91,00
Data.w 00,71,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,71,91,00,00,00,00,00,00,00
Data.w 00,00,00,00,51,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,62,72,82,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,63,92,83,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,93,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,93,00,00,00,52,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,93,00,00,00,53,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,93,00,00,00,53,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,93,00,00,00,53,00,00
Data.w 00,00,00,00,10,00,00,00,00,00,00,00,00,93,02,12,22,54,00,00
Data.w 00,00,00,10,70,10,00,00,00,00,00,00,00,93,03,13,23,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,04,00,00,93,110,14,00,84,94,60
Data.w 00,06,16,16,16,16,16,26,00,07,27,17,17,17,17,27,17,17,17,17
Data.w 00,00,00,00,00,00,00,00,00,77,57,77,77,67,77,77,77,57,67,77
lvl2:
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,10,10,10,10,10,10,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 87,87,87,87,87,87,35,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,35,00,41,410,00,00,90,70,60,90,90,90,90,40
Data.w 00,00,00,00,00,00,35,06,16,16,16,16,16,16,16,16,16,16,16,16
Data.w 00,00,00,00,00,00,35,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,35,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,35,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,35,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,35,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,35,00,00,00,00,00,00,00,00,00,00,00,62,72
Data.w 00,00,00,00,00,00,35,00,00,00,65,00,00,00,00,00,00,00,63,73
Data.w 20,20,00,00,00,00,35,610,00,00,65,00,31,00,00,15,00,00,00,74
Data.w 06,26,00,00,06,16,16,16,16,26,65,06,16,16,26,25,00,00,00,74
Data.w 00,00,00,00,00,00,00,00,00,00,65,00,00,00,00,25,62,72,82,74
Data.w 00,00,00,00,00,00,00,00,00,00,65,00,00,00,00,05,03,13,83,74
Data.w 00,00,00,00,00,00,00,00,00,00,65,00,00,00,00,15,00,14,80,74
Data.w 00,00,00,00,00,00,10,00,10,00,65,00,00,00,00,15,00,14,80,74
Data.w 610,00,00,00,11,50,00,50,00,50,65,01,510,00,00,25,21,14,210,74
Data.w 07,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17
EndDataSection
LevelLaden:
robbiX = 0
robbiY = -100
sammeln = 0
gewinnfaktor = 0
startzeit = ElapsedMilliseconds()/1000
maximalzeit = 60
Select level
Case 0
Restore lvl0
Case 1
Restore lvl1
Case 2
Restore lvl2
EndSelect
Dim ClipX.w(401)
Dim ClipY.w(401)
Dim monsterAuswahl.w(401) ;welches Monster?
Dim monsterX.w(401) ;x-Position aus bildschirm
Dim monsterY.w(401)
Dim monsterSpd.w(401) ;geschwindigkeit (minus oder plus)
Dim monsterAni.w(401)
nr = 0
For v = 0 To feldgroesse
For h = 0 To feldgroesse
Read dummy
;Debug dummy ;Int(dummy/10) >= 1 And dummy%10 = 0 And dummy <> 00 And dummy/10 < 10
If dummy < 80 And dummy%10 = 0 And dummy <> 0
sammeln + 1
EndIf
If dummy >=100
monsterAuswahl(nr) = 40*Int(dummy/100)
monsterX(nr) = h*40
monsterY(nr) = v*30
monsterSpd(nr) = mSpd-2*mSpd*Random(1)
Else
ClipX(nr) = 40*Int(dummy/10)
ClipY(nr) = 30*dummy%10
EndIf
nr + 1
Next
Next
Return
End
Könnten eventuell noch ein paar Fehler drin sein. (Habe auch schon ein bisschen ergänzt.)
Man kann natürlich auch noch weiter Level einfügen und zusätzliche Featers einbauen.
P.S.: Habe das Tutorial trotzdem angeschaut und werde vielleicht noch einiges davon benutzen.
Unser letztes Programm war ein Jump'n Run.
Leider :( sind wir nicht mehr fertig geworden. (Wie auch in 3 Stnden?)
Auf jeden Fall habe ich mir den kompletten Quellcode geholt:
InitSprite()
InitKeyboard()
InitMouse()
Enumeration
#bb = 800
#bh = 600
#bilder
#robbi
#stop
#monster
EndEnumeration
OpenScreen(#bb,#bh, 16, "")
LoadSprite(#bilder, "allSprite3.bmp")
LoadSprite(#robbi,"robbi_komplett4.bmp")
LoadSprite(#monster, "monster.bmp")
LoadFont(0,"Trebuchet MS", 18, #PB_Font_HighQuality)
LoadFont(1,"Trebuchet MS", 8, #PB_Font_HighQuality)
Dim ClipX.w(401)
Dim ClipY.w(401)
Dim monsterAuswahl.w(401) ;welches Monster?
Dim monsterX.w(401) ;x-Position aus bildschirm
Dim monsterY.w(401)
Dim monsterSpd.w(401) ;geschwindigkeit (minus oder plus)
Dim monsterAni.w(401)
Global timer.l
;- Variablen zum spielbeginn
feldgroesse.w = 19 ; größe des Spielfeldes (20*20)
level.w= 0
dummy.w ; muss definiert werden, damit read funktioniert
nr.w = 0 ; zählt einfach jede For-Schleife durch
robbiX.w = 0 ;#bb/2
robbiY.w = -100;#bh/2
spd.w = 3 ; Geschwindigkeit Robbi
jump.w = 0 ; kontrolliert die Sprünge: bei 0 darf Robbi springen, bei anderen werten darf er nicht (geht nicht oder er springt gerade...)
sprunghoehe.w = 15 ;maximale Sprunghöhe, wird während des Sprunges langsam kleiner: 15,14,13..0, bei 0 ist der Sprung beendet
fallen.w = 2 ; Fallgeschwindigkeit
klettern = 0 ;wird auf 1 gesetzt, wenn Robbi an ein kletterObjekt kommt
punkte.w = 0 ;Punkte bei Start
leben.w = 3 ; Leben bei Start
sammeln.w = 0 ; Anzahl der Dinge, die Robbi sammeln muss
gewinnfaktor.w = 1 ;multipliziert die Punkte
name.s = "Testspieler"
mSpd.w = 1 ;Fallgeschwindigkeit der Monster
startzeit.w = ElapsedMilliseconds()/1000
maximalzeit.w = 60 ; Zeit in Sekunden pro Level
Gosub LevelLaden
;- Data einlesen
;- Animation für X (geht auch für Y, wenn man statt breitebild hoehebild angibt...)
Procedure aniX(x, aniSpd, breiteBild, anzBilder)
If timer%aniSpd = 0
x + breiteBild
If x >= breiteBild*anzBilder
x = 0
EndIf
EndIf
ProcedureReturn x
EndProcedure
Procedure Kollision(sprite,ckX, ckY)
cknr = 0
ckfeldgroesse = 19
For ckv.w = 0 To ckfeldgroesse
For ckh.w = 0 To ckfeldgroesse
If SpriteCollision(#bilder, ckh*40, ckv*30,sprite,ckX, ckY)
If ClipY(cknr)/30 > 5 And ClipY(cknr)/30 <=9 ; Robbi oder Monster stößt an eine Mauer
ProcedureReturn #stop
EndIf
EndIf
cknr + 1
Next
Next
EndProcedure
;- REEEPEEEAT
Repeat
ExamineKeyboard()
ExamineMouse()
ClearScreen(0,0,200)
timer + 1
;- Spielzeit
spielzeit = startzeit+maximalzeit- ElapsedMilliseconds()/1000
nr = 0
For v = 0 To feldgroesse
For h = 0 To feldgroesse
;- Monster darstellen
If monsterAuswahl(nr) <> 0; falls das Monster tatsächlich existiert
TransparentSpriteColor(#monster, 0,0,255)
ClipSprite(#monster, monsterAuswahl(nr),monsterAni(nr),40,30)
DisplayTransparentSprite(#monster, monsterX(nr), monsterY(nr))
If monsterAni(nr) <> 60 ; falls monster noch lebt
monsterAni(nr) = aniX(monsterAni(nr), 18,30,2)
EndIf
If Kollision(#monster, monsterX(nr), monsterY(nr)+mSpd) = #stop ;entweder horizontale Bewegung
monsterX(nr) + monsterSpd(nr)
Else
monsterY(nr ) + mSpd ; oder vertikale
EndIf
If Kollision(#monster, monsterX(nr), monsterY(nr)) = #stop Or monsterX(nr) < 0 Or monsterX(nr) > #bb-40
monsterSpd(nr) = -monsterSpd(nr)
EndIf
If monsterY(nr) > #bh
monsterY(nr) = -40
monsterX(nr) = 40*Random(feldgroesse)
EndIf
If SpriteCollision(#monster, monsterX(nr), monsterY(nr),#robbi,robbiX,robbiY) And monsterAni(nr) <> 60 And aniRobbiY <> 120; kollision mit lebendem Monster
If robbiY+15 < monsterY(nr)
monsterAni(nr) = 60
monsterSpd(nr) = 0
Else
lebenverloren = 1
EndIf
EndIf
EndIf
;- Hintergrund
ClipSprite(#bilder, ClipX(nr), ClipY(nr), 40, 30)
TransparentSpriteColor(#bilder, 0,0,255)
DisplayTransparentSprite(#bilder, h*40, v*30)
If SpriteCollision(#bilder, h*40, v*30,#robbi,robbiX, robbiY) And lebenverloren = 0
If ClipY(nr)/30 = 0 And ClipX(nr)/40 > 0; Robbi Findet ein Objekt zum Sammeln und ist nicht auf leerfeld
Select ClipX(nr)/40
Case 1
punkte + 100
Case 2
punkte + 200
Case 3
maximalzeit + 10
Case 4
leben + 1
Case 5
gewinnfaktor + 1
Case 6
punkte + 50
Case 7
punkte + 100
Case 8
punkte - 300
Case 9
lebenverloren = 1
aniRobbiY =120
EndSelect
ClipX(nr) = 0
sammeln - 1
EndIf
If ClipY(nr)/30 = 5 ; Robbi kommt an die Leiter
klettern = 1
Else
klettern = 0
EndIf
EndIf
nr + 1
Next
Next
;- Robbi darstellen
TransparentSpriteColor(#robbi,0,0,255)
ClipSprite(#robbi, aniRobbiX, aniRobbiY,20, 29)
DisplayTransparentSprite(#robbi,robbiX,robbiY)
;- Links-Rechts-Animation
If KeyboardPushed(#PB_Key_Left) And Kollision(#robbi, robbiX-spd, robbiY) <> #stop And robbiX > 0
aniRobbiY = 30
aniRobbiX = aniX(aniRobbiX, 8, 20, 3)
robbiX-spd
ElseIf KeyboardPushed(#PB_Key_Right) And Kollision(#robbi,robbiX+spd, robbiY) <> #stop And robbiX < #bb - 20
aniRobbiY = 60
robbiX+spd
aniRobbiX = aniX(aniRobbiX, 8, 20, 3)
Else
aniRobbiY = 0
aniRobbiX = aniX(aniRobbiX, 8, 20, 3)
EndIf
;- Sprunganimation
If KeyboardPushed(57) And Kollision(#robbi,robbiX, robbiY+fallen) = #stop ;Sprungtaste gedrückt während robbi steht
jump = sprunghoehe
EndIf
If Kollision(#robbi,robbiX, robbiY+fallen) <> #stop And klettern = 0 And lebenverloren = 0;fällt, weil er bei der nächsten Runde nicht an einen Stein gerät
robbiY +fallen
aniRobbiX = 80
EndIf
If jump <> 0 And Kollision(#robbi,robbiX, robbiY-jump) <> #stop ;springt gerade und gerät dabei nicht an einen Stein
robbiY - jump
jump-1
EndIf
If Kollision(#robbi,robbiX, robbiY-jump) = #stop ;gerät an einen stein
jump = 0
EndIf
If KeyboardReleased(57) And jump <> 0 ;Sprung wird mitten im Sprung abgebrochen
jump = 0
EndIf
;- Klettern
If klettern = 1
aniRobbiY = 90
If KeyboardPushed(#PB_Key_Up) And Kollision(#robbi,robbiX, robbiY-spd) <> #stop
robbiY-spd
aniRobbiX = aniX(aniRobbiX, 8, 20, 3)
ElseIf KeyboardPushed(#PB_Key_Down) And Kollision(#robbi,robbiX, robbiY+spd) <> #stop
robbiY+spd
aniRobbiX = aniX(aniRobbiX, 8, 20, 3)
Else
aniRobbiX = 0
EndIf
EndIf
;- Game over / Leben verloren /Level weiter
If lebenverloren = 1 ;falls ein Leben verloren
aniRobbiY = 120 ; Engelrobbi wird dargestellt
aniRobbiX = aniX(aniRobbiX, 12, 20, 3) ;Engel wird animiert
robbiY -2 ;Robbi schwebt nach oben
If robbiY < 0 ;wenn er oben angekommen ist
leben -1 ;ein Leben Abzug
lebenverloren = 0 ;Spiel geht weiter
robbiX = 0
robbiY = 0
aniRobbiX= 0
startzeit = ElapsedMilliseconds()/1000 ;Zeit geht neu los
EndIf
EndIf
;- Endgültig verloren
If leben = 0 ;endgültiges Spielende
Repeat
ExamineKeyboard()
StartDrawing(ScreenOutput())
Box(0,0,#bb,text+20)
Locate(#bb/2,text)
text+2
FrontColor(255,0,0)
DrawingMode(1)
DrawText("Game Over")
StopDrawing()
FlipBuffers()
Until KeyboardPushed(1) Or text > #bh
Break ;beendet die äußere Repeatschleife
EndIf
If robbiY > #bh Or spielzeit = 0
lebenverloren = 1
EndIf
If sammeln = 0 ;nächstes Level
level + 1
Gosub LevelLaden
EndIf
;- Punkte und Leben fenster
StartDrawing(ScreenOutput())
Box(0,0,#bb, 20, RGB(0,0,0))
DrawingMode(4)
FrontColor(255,0,0)
Box(1,1,#bb-2, 18)
Locate(10,2)
DrawingMode(1)
DrawingFont(UseFont(1))
DrawText("Wertung für " + name + " - - - Deine Punkte: " + Str(punkte) + " x " + Str(gewinnfaktor) + " - - Level: " + Str(level) + " - Leben: " + Str(leben) + " Restzeit: " + Str(spielzeit) + " Sek. Sammeln:" + Str(sammeln))
StopDrawing()
FlipBuffers()
Until KeyboardPushed(1)
CloseScreen()
End
DataSection
lvl4:
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 10,20,31,30,60,50,70,80,90,40,50,50,50,00,00,00,00,00,00,00
Data.w 00,00,29,18,56,56,66,75,76,43,47,47,47,00,00,00,00,00,00,00
Data.w 00,00,10,00,41,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,78,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 68,68,68,68,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,110,00,00,00,70,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,88,88,88,68,68,68,68,68,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,07,17,27,37,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,47,00,00,87,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,47,00,00,87,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,06,16,16,26,47,00,00,87,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,45,55,65,35,47,00,00,87,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,45,55,65,35,47,00,00,87,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,45,55,65,35,47,00,00,87,00
Data.w 59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59
lvl1:
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,58,00,00,00,00
Data.w 00,00,10,10,15,50,10,60,00,00,00,00,60,70,00,35,00,00,00,00
Data.w 00,06,16,16,25,16,16,16,00,00,00,07,17,17,37,35,110,310,410,70
Data.w 00,00,00,00,25,00,00,00,00,00,00,00,00,00,00,45,96,96,96,96
Data.w 00,00,00,00,15,00,00,00,00,00,00,00,00,00,00,45,57,57,57,57
Data.w 46,010,510,00,05,00,110,00,10,20,30,40,10,60,50,45,80,90,00,67
Data.w 86,86,86,49,86,86,86,00,86,86,79,86,86,86,86,89,89,89,00,67
Data.w 00,00,00,00,00,00,00,00,75,00,00,00,00,00,00,00,00,00,00,67
Data.w 62,72,82,00,00,00,00,00,75,00,00,00,00,510,00,00,00,00,00,67
Data.w 63,73,83,610,710,810,910,00,75,00,00,00,00,86,00,00,00,00,00,67
Data.w 510,74,86,86,86,00,86,86,75,86,86,86,86,86,00,90,00,00,40,67
Data.w 85,74,20,00,00,00,00,00,00,00,00,00,00,00,00,67,67,00,67,67
Data.w 85,74,20,00,00,00,00,410,00,00,00,00,00,00,00,00,00,00,00,67
Data.w 85,74,20,00,00,00,07,17,17,27,37,00,00,00,00,00,00,00,40,86
Data.w 46,74,20,00,00,00,77,67,00,10,00,50,86,00,86,86,86,00,86,86
Data.w 86,86,86,00,00,67,86,86,00,86,86,86,86,00,00,00,00,00,00,00
Data.w 10,00,00,80,00,58,00,00,00,00,00,00,00,00,00,00,210,00,80,86
Data.w 510,00,00,00,06,00,00,00,00,00,00,86,00,00,00,00,86,86,86,86
Data.w 06,16,26,00,30,00,410,00,00,00,00,86,110,40,86,00,00,00,00,00
Data.w 29,39,00,49,59,68,78,88,89,00,79,86,86,86,00,00,00,00,00,00
lvl5:
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 36,10,20,30,40,50,60,70,80,90,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
lvl3:
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,58,00,00,00,00
Data.w 00,00,10,10,15,50,10,60,00,00,00,00,60,70,00,35,00,00,00,00
Data.w 00,06,16,16,25,16,16,16,00,00,00,07,17,17,37,35,110,310,410,70
Data.w 00,00,00,00,25,00,00,00,00,00,00,00,00,00,00,45,96,96,96,96
Data.w 00,00,00,00,15,00,00,00,00,00,00,00,00,00,00,45,57,57,57,57
Data.w 46,010,510,00,05,00,110,00,10,20,30,40,10,60,50,45,80,90,00,67
Data.w 86,86,86,49,86,86,86,00,86,86,79,86,86,86,86,89,89,89,00,67
Data.w 00,00,00,00,00,00,00,00,75,00,00,00,00,00,00,00,00,00,00,67
Data.w 62,72,82,00,00,00,00,00,75,00,00,00,00,510,00,00,00,00,00,67
Data.w 63,73,83,610,710,810,910,00,75,00,00,00,00,86,00,00,00,00,00,67
Data.w 510,74,86,86,86,00,86,86,75,86,86,86,86,86,00,90,00,00,40,67
Data.w 85,74,20,00,00,00,00,00,00,00,00,00,00,00,00,67,67,00,67,67
Data.w 85,74,20,00,00,00,00,410,00,00,00,00,00,00,00,00,00,00,00,67
Data.w 85,74,20,00,00,00,07,17,17,27,37,00,00,00,00,00,00,00,40,86
Data.w 46,74,20,00,00,00,77,67,00,10,00,50,86,00,86,86,86,00,86,86
Data.w 86,86,86,00,00,67,86,86,00,86,86,86,86,00,00,00,00,00,00,00
Data.w 10,00,00,80,00,58,00,00,00,00,00,00,00,00,00,00,210,00,80,86
Data.w 510,00,00,00,06,00,00,00,00,00,00,86,00,00,00,00,86,86,86,86
Data.w 06,16,26,00,30,00,410,00,00,00,00,86,110,40,86,00,00,00,00,00
Data.w 29,39,00,49,59,68,78,88,89,00,79,86,86,86,00,00,00,00,00,00
lvl0:
Data.w 00,00,00,00,00,71,91,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,51,61,00,00,00,00,00,00,51,81,91,00
Data.w 00,71,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,71,91,00,00,00,00,00,00,00
Data.w 00,00,00,00,51,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,62,72,82,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,63,92,83,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,93,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,93,00,00,00,52,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,93,00,00,00,53,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,93,00,00,00,53,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,93,00,00,00,53,00,00
Data.w 00,00,00,00,10,00,00,00,00,00,00,00,00,93,02,12,22,54,00,00
Data.w 00,00,00,10,70,10,00,00,00,00,00,00,00,93,03,13,23,00,00,00
Data.w 00,00,00,00,00,00,00,00,00,00,04,00,00,93,110,14,00,84,94,60
Data.w 00,06,16,16,16,16,16,26,00,07,27,17,17,17,17,27,17,17,17,17
Data.w 00,00,00,00,00,00,00,00,00,77,57,77,77,67,77,77,77,57,67,77
lvl2:
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,10,10,10,10,10,10,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 87,87,87,87,87,87,35,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,35,00,41,410,00,00,90,70,60,90,90,90,90,40
Data.w 00,00,00,00,00,00,35,06,16,16,16,16,16,16,16,16,16,16,16,16
Data.w 00,00,00,00,00,00,35,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,35,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,35,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,35,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,35,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,00,00,00,00,00,35,00,00,00,00,00,00,00,00,00,00,00,62,72
Data.w 00,00,00,00,00,00,35,00,00,00,65,00,00,00,00,00,00,00,63,73
Data.w 20,20,00,00,00,00,35,610,00,00,65,00,31,00,00,15,00,00,00,74
Data.w 06,26,00,00,06,16,16,16,16,26,65,06,16,16,26,25,00,00,00,74
Data.w 00,00,00,00,00,00,00,00,00,00,65,00,00,00,00,25,62,72,82,74
Data.w 00,00,00,00,00,00,00,00,00,00,65,00,00,00,00,05,03,13,83,74
Data.w 00,00,00,00,00,00,00,00,00,00,65,00,00,00,00,15,00,14,80,74
Data.w 00,00,00,00,00,00,10,00,10,00,65,00,00,00,00,15,00,14,80,74
Data.w 610,00,00,00,11,50,00,50,00,50,65,01,510,00,00,25,21,14,210,74
Data.w 07,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17
EndDataSection
LevelLaden:
robbiX = 0
robbiY = -100
sammeln = 0
gewinnfaktor = 0
startzeit = ElapsedMilliseconds()/1000
maximalzeit = 60
Select level
Case 0
Restore lvl0
Case 1
Restore lvl1
Case 2
Restore lvl2
EndSelect
Dim ClipX.w(401)
Dim ClipY.w(401)
Dim monsterAuswahl.w(401) ;welches Monster?
Dim monsterX.w(401) ;x-Position aus bildschirm
Dim monsterY.w(401)
Dim monsterSpd.w(401) ;geschwindigkeit (minus oder plus)
Dim monsterAni.w(401)
nr = 0
For v = 0 To feldgroesse
For h = 0 To feldgroesse
Read dummy
;Debug dummy ;Int(dummy/10) >= 1 And dummy%10 = 0 And dummy <> 00 And dummy/10 < 10
If dummy < 80 And dummy%10 = 0 And dummy <> 0
sammeln + 1
EndIf
If dummy >=100
monsterAuswahl(nr) = 40*Int(dummy/100)
monsterX(nr) = h*40
monsterY(nr) = v*30
monsterSpd(nr) = mSpd-2*mSpd*Random(1)
Else
ClipX(nr) = 40*Int(dummy/10)
ClipY(nr) = 30*dummy%10
EndIf
nr + 1
Next
Next
Return
End
Könnten eventuell noch ein paar Fehler drin sein. (Habe auch schon ein bisschen ergänzt.)
Man kann natürlich auch noch weiter Level einfügen und zusätzliche Featers einbauen.
P.S.: Habe das Tutorial trotzdem angeschaut und werde vielleicht noch einiges davon benutzen.
Kannst Du mal noch die Grafiken irgendwo uploaden, damit man es ausprobieren kann? Hab es nur mal mit Platzhalter-Grafiken versucht, aber es ist wie es scheint eh nicht spielbar 
Ich bin selbst zur Zeit am Überlegen, ob ich mal ein Tutorial darüber schreiben soll... mal schauen. Werd mir auch mal das hier genannte anschauen, dann seh ich, ob es überhaupt notwendig ist
Auf jeden Fall solltest Du auch Deinen Code etwas besser aufteilen. Also kein Gosub und sowas verwenden, sondern nur Funktionen bzw. Prozeduren.
Also wenn Du nochmal Fragen haben solltest, nur zu

Ich bin selbst zur Zeit am Überlegen, ob ich mal ein Tutorial darüber schreiben soll... mal schauen. Werd mir auch mal das hier genannte anschauen, dann seh ich, ob es überhaupt notwendig ist

Auf jeden Fall solltest Du auch Deinen Code etwas besser aufteilen. Also kein Gosub und sowas verwenden, sondern nur Funktionen bzw. Prozeduren.
Also wenn Du nochmal Fragen haben solltest, nur zu



ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Achso das Tutorial wurde hier gar nicht verlinkt, kannst Du mir da evtl. den Link geben?


ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Ein kleiner Tip, wenn du bei größeren Programmen nicht unbedingt den Verstand verlieren willst: Fingerweg von Goto, GoSub und den ganzen leckeren Spaghettiezutaten.
Man sollte stattdessen Prozeduren verwenden, das ist viel übersichtlicher und läßt sich praktischerweise im neuen editor sogar flott mal wegklappen.
Man sollte stattdessen Prozeduren verwenden, das ist viel übersichtlicher und läßt sich praktischerweise im neuen editor sogar flott mal wegklappen.
Tutorial und Jump'n Run
An ZeHa:
Falls du das Tutorial von Zaphod meinst http://jnrdev.72dpiarmy.com/
Sonst gibt es (so meine ich mich erinner zu können) bei http://www.purearea.net/pb/german/index.htm noch ein Sonic Clone Tutorial auf Deutsch.
Vielleicht uploade ich die Datein morgen mal.
(Muss gestehen habe im Forum noch nich Bilder in einen Anhang oder Ähnliches gesetzt aber werde es wahrscheinlich schaffen.)
Bis dahin wünsche ich viel Spaß mit den Tutorials.
P.S.: Habe das Skript um viele Dinge (z.B.: Sound usw.) erweitert.
Pure Basic verursacht allerdings immer ein Fehler, wenn ich ein 10 Level (also Level 9) hinzufügen möchte.
Kann mir jemand erklären wieso und wie ich das ändern kann.
Und überigens, weil es unmenschlich wäre so große DataSections manuell zu erstellen benutze ich folgenden Editor:
InitSprite()
InitKeyboard()
InitMouse()
file$ = ""
ckfile.w = MessageRequester("Auswahl", "Möchtest Du eine bestehende Datei in den Leveleditor einlesen?", #PB_MessageRequester_YesNo)
If ckfile = 6
StandardFile$ = "C:\"
Pattern$ = "Text (*.txt)|*.txt"
Pattern = 0 ; wir verwenden den ersten von drei möglichen Pattern als Standard
file$ = OpenFileRequester("Bitte Datei zum Laden auswählen", StandardFile$, Pattern$, Pattern)
If file$
MessageRequester("Info", "Du hast folgende Datei ausgewählt:"+Chr(10)+file$, 0)
Else
MessageRequester("Info", "Das Programm wird auf deinen Wunsch abgebrochen.", 0)
End
EndIf
Else
file$ =InputRequester("Neues Level","Bitte Gib den Namen der neuen Datei ein (ohne Endung .txt):","")
If file$ = ""
MessageRequester("Info", "Du musst schon etwas eingeben...")
End
Else
file$ = file$+".txt"
EndIf
EndIf
Enumeration
#File
#bb = 1280
#bh = 1024
#bg
#bg2
#maus
#button
EndEnumeration
OpenScreen(#bb,#bh, 16, "")
LoadSprite(#bg, "allSprite3.bmp")
LoadSprite(#bg2, "allSprite3.bmp")
LoadSprite(#maus, "maus.bmp")
LoadSprite(#button, "button.bmp")
auswahl.w = 0
karteX = 0
karteY = 600
feldgroesse.w = 19
Dim ClipX.w(400)
Dim ClipY.w(400)
cx.w = 0
cy.w = 0
buttonX.w = 450
buttonY.w = 700
nr.w = 0
If ckfile = 6
If ReadFile(#File, file$)
For v.w = 0 To feldgroesse
line$ = ReadString()
zeilenlaenge = Len(line$)
line$ = Right(line$,zeilenlaenge-7)
;Debug line$
For h.w = 1 To feldgroesse+1
wert$ = StringField(line$, h,",")
;Debug wert$
If Len(wert$) = 2
ClipX(nr) = 40*Val(Left(wert$,1))
ClipY(nr) = 30*Val(Right(wert$,1))
Else
ClipX(nr) = 40*Val(Left(wert$,1))
ClipY(nr) = 30*Val(Right(wert$,2))
EndIf
nr + 1
Next
Next
CloseFile(#File)
Else
MessageRequester("Info", "Konnte die Datei nicht lesen")
EndIf
EndIf
Repeat
ExamineKeyboard()
ExamineMouse()
ClearScreen(0,0,0)
nr = 0
For v.w = 0 To feldgroesse
For h.w = 0 To feldgroesse
ClipSprite(#bg, ClipX(nr), ClipY(nr), 40, 30)
DisplaySprite(#bg, h*40, v*30)
nr + 1
Next
Next
Falls du das Tutorial von Zaphod meinst http://jnrdev.72dpiarmy.com/
Sonst gibt es (so meine ich mich erinner zu können) bei http://www.purearea.net/pb/german/index.htm noch ein Sonic Clone Tutorial auf Deutsch.
Vielleicht uploade ich die Datein morgen mal.
(Muss gestehen habe im Forum noch nich Bilder in einen Anhang oder Ähnliches gesetzt aber werde es wahrscheinlich schaffen.)
Bis dahin wünsche ich viel Spaß mit den Tutorials.
P.S.: Habe das Skript um viele Dinge (z.B.: Sound usw.) erweitert.
Pure Basic verursacht allerdings immer ein Fehler, wenn ich ein 10 Level (also Level 9) hinzufügen möchte.
Kann mir jemand erklären wieso und wie ich das ändern kann.
Und überigens, weil es unmenschlich wäre so große DataSections manuell zu erstellen benutze ich folgenden Editor:
InitSprite()
InitKeyboard()
InitMouse()
file$ = ""
ckfile.w = MessageRequester("Auswahl", "Möchtest Du eine bestehende Datei in den Leveleditor einlesen?", #PB_MessageRequester_YesNo)
If ckfile = 6
StandardFile$ = "C:\"
Pattern$ = "Text (*.txt)|*.txt"
Pattern = 0 ; wir verwenden den ersten von drei möglichen Pattern als Standard
file$ = OpenFileRequester("Bitte Datei zum Laden auswählen", StandardFile$, Pattern$, Pattern)
If file$
MessageRequester("Info", "Du hast folgende Datei ausgewählt:"+Chr(10)+file$, 0)
Else
MessageRequester("Info", "Das Programm wird auf deinen Wunsch abgebrochen.", 0)
End
EndIf
Else
file$ =InputRequester("Neues Level","Bitte Gib den Namen der neuen Datei ein (ohne Endung .txt):","")
If file$ = ""
MessageRequester("Info", "Du musst schon etwas eingeben...")
End
Else
file$ = file$+".txt"
EndIf
EndIf
Enumeration
#File
#bb = 1280
#bh = 1024
#bg
#bg2
#maus
#button
EndEnumeration
OpenScreen(#bb,#bh, 16, "")
LoadSprite(#bg, "allSprite3.bmp")
LoadSprite(#bg2, "allSprite3.bmp")
LoadSprite(#maus, "maus.bmp")
LoadSprite(#button, "button.bmp")
auswahl.w = 0
karteX = 0
karteY = 600
feldgroesse.w = 19
Dim ClipX.w(400)
Dim ClipY.w(400)
cx.w = 0
cy.w = 0
buttonX.w = 450
buttonY.w = 700
nr.w = 0
If ckfile = 6
If ReadFile(#File, file$)
For v.w = 0 To feldgroesse
line$ = ReadString()
zeilenlaenge = Len(line$)
line$ = Right(line$,zeilenlaenge-7)
;Debug line$
For h.w = 1 To feldgroesse+1
wert$ = StringField(line$, h,",")
;Debug wert$
If Len(wert$) = 2
ClipX(nr) = 40*Val(Left(wert$,1))
ClipY(nr) = 30*Val(Right(wert$,1))
Else
ClipX(nr) = 40*Val(Left(wert$,1))
ClipY(nr) = 30*Val(Right(wert$,2))
EndIf
nr + 1
Next
Next
CloseFile(#File)
Else
MessageRequester("Info", "Konnte die Datei nicht lesen")
EndIf
EndIf
Repeat
ExamineKeyboard()
ExamineMouse()
ClearScreen(0,0,0)
nr = 0
For v.w = 0 To feldgroesse
For h.w = 0 To feldgroesse
ClipSprite(#bg, ClipX(nr), ClipY(nr), 40, 30)
DisplaySprite(#bg, h*40, v*30)
nr + 1
Next
Next
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22