Hilfe: Jump'n Run wie geht's?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

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.
Elrasm
Beiträge: 5
Registriert: 21.03.2006 21:43
Wohnort: Dortmund

Jump'n Run

Beitrag von Elrasm »

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.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

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 ;)
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Achso das Tutorial wurde hier gar nicht verlinkt, kannst Du mir da evtl. den Link geben?
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

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.
Elrasm
Beiträge: 5
Registriert: 21.03.2006 21:43
Wohnort: Dortmund

Tutorial und Jump'n Run

Beitrag von Elrasm »

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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

CODE TAGS!

is dat denn so schwierig?

...sin die Mods in Urlaub?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

> ...sin die Mods in Urlaub?
Die haben wohl alle keine Lust mehr auf uns und haben uns ohne
Aufsicht in Stich gelassen.
Bild
Mr.Hahn
Beiträge: 62
Registriert: 09.09.2005 18:24

Beitrag von Mr.Hahn »

Also ich hab ja vor ein paar Tagen meinen Mario-Klon ins Spiele-Feedback-Forum gesetzt, wenn Interesse besteht, könnt ich hier auch den Sourcecode posten...
Antworten