Verfasst: 12.05.2008 14:10
Im Prinzip musst du nur alle Variablen auf den Startwert setzen und vor allem den Timer wieder mit der aktuellen Zeit füttern...
Ich teste und spiele mit den Codes seit 3 Tagen rumm.BlueHoschi hat geschrieben:@Xandy
Naja, wenn Du nach 2 Sekunden den Hauptcode verläßt und die Ergebnisse Anzeigst ohne Stopzeit wieder auf einen Wert zu setzen funktioniert es nicht.
Ich würde Dir raten Dein Spiel immer komplett durchzutesten bevor Du es postest. Dann fallen Dir die meisten Gedankenfehler zunächst selbst auf und Du kommst dann vielleicht auch selbst dahinter was fehlt. Mit "If", "Repeat" und solchen Sachen kommst Du doch eigentlich klar, denke ich. Nur die Logik fehlt, weil Du es kaum selbst versuchst.
Damit will ich Dir nicht an´s Bein pissen oder sowas sondern nur raten Dir Zeit zum überlegen zu nehmen. Das lernt auch viel besser als es Andere machen zu lassen.
Nicht böse gemeint, oder sowas.
Code: Alles auswählen
TransparentSpriteColor(#ZAHL6, 0)
NewList Noten.NOTEN()
Anfang:
x = ScreenX / 2
y = ScreenY - SpriteHeight(#MENSCH) + 10
Speed = 5
;/
Stopzeit = ElapsedMilliseconds()
Repeat
Code: Alles auswählen
If KeyboardPushed(#PB_Key_F5)
MessageRequester("Neues Spiel","Neues Spiel neues Glück!", #PB_MessageRequester_Ok )
ClearList(Noten())
MeinePunkte = 0
Neu = 1
EndI
Code: Alles auswählen
Delay(1)
FlipBuffers()
Until Quit Or Neu
If Neu
Goto Anfang
EndIf
If Quit
Code: Alles auswählen
EnableExplicit
Enumeration ; Sprites
#HINTERGRUND
#MENSCH
#Augenlinks
#Augenrechts
#ZAHL1
#ZAHL2
#ZAHL6
EndEnumeration
#STOPZEIT = 10000
;/
Structure NOTEN
x.l
y.l
Art.l
Speed.l
EndStructure
;/
Define Quit, Titel$, MeinePunkte
Titel$ = "Schlechte Noten ? <-->made by AndyX<-->"
;/
Procedure Window()
Protected EventID
Shared Quit
EventID = WindowEvent()
Repeat
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
EventID = WindowEvent()
Until EventID = 0
EndProcedure
;/
Procedure Ende(Text$)
Shared Titel$
MessageRequester (Titel$, Text$)
End
EndProcedure
;/
Procedure StopScreen()
Protected Start, x, y, StartTimer, Init, Zeit
Shared Quit, MeinePunkte
Repeat
Zeit = ElapsedMilliseconds()
Window()
ClearScreen(0)
DisplaySprite(#HINTERGRUND, 0, 0)
DisplayTransparentSprite(#Augenlinks, 530, 200)
DisplayTransparentSprite(#Augenrechts, 0, 200)
ExamineKeyboard()
If KeyboardPushed(#PB_Key_F5)
StartTimer = Zeit + 5000
Init = 1
EndIf
If Init
If StartTimer < Zeit
Start = 1
EndIf
EndIf
If KeyboardPushed(#PB_Key_Escape)
Quit = 1
EndIf
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
x = 200
y = 250
If Init
DrawText(x, y, "Neues Spiel neues Glück!", $FFFFFF)
y + 50
DrawText(x, y, "in " + Str((StartTimer - Zeit)/1000) + " sekunden geht's los !", $FFFFFF)
Else
DrawText(x, y, "Wow dein Highscore beträgt "+Str(MeinePunkte)+" Punkte",RGB(250,250,250), RGB(0,0,0))
y + 20
DrawText(x, y, "Nochmal spielen mit F5",RGB(250,250,250), RGB(0,0,0))
y + 20
DrawText(x, y, "Oder spiel durch ESC beendet werden",RGB(250,250,250), RGB(0,0,0))
EndIf
StopDrawing()
Delay(1)
FlipBuffers()
Until Start Or Quit
If Quit
End
EndIf
EndProcedure
;/
Define Zeit, NotenTimer, Stopzeit, ScreenX, ScreenY, x, y, SpielerX, SpielerY
Define testX, testY, Test$, Speed
;/
If Not (InitSprite() And InitKeyboard())
Ende("Init Error")
EndIf
ScreenX = 650
ScreenY = 550
If OpenWindow(0, 0, 0, ScreenX, ScreenY, Titel$, #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0), 0, 0, ScreenX, ScreenY, 0, 0, 0)
SetFrameRate(50)
Else
Ende("Screen Error")
EndIf
Else
Ende("Window Error")
EndIf
;/ Startbildschirm
LoadSprite(#HINTERGRUND, "Images\Panorama.bmp",1)
Repeat
Window()
ClearScreen(0)
DisplaySprite(#HINTERGRUND, 0, 0)
ExamineKeyboard()
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
x = 80
y = 20
DrawText(x, y, "Ihr müsst versuchen so viele Punkte zu machen wie nur möglich !")
y + 40
DrawText(x, y, "Zur erklärung der Punkte vergabe:")
x + 250
y + 20
DrawText(x, y, "Die 1 gibt 100 Punkte")
y + 20
DrawText(x, y, "Die 2 gibt noch 10 Punkte")
y + 20
DrawText(x, y, "Und die 6 gibt -50 Punkte")
x - 250
y + 50
DrawText(x, y, "Bei jeder nicht gefangenen >1< und jeder >2< werden 25 Punkte abgezogen")
x + 130
y + 300
DrawText(x, y, "Taste drücken, dann geht's los !",RGB(250,250,250), RGB(0,0,0))
StopDrawing()
Delay(1)
FlipBuffers()
Until KeyboardPushed(#PB_Key_All) Or Quit
If Quit
End
EndIf
;/ Spiel
UsePNGImageDecoder()
LoadSprite(#MENSCH,"Images\Spieler.PNG",0)
TransparentSpriteColor(#MENSCH,0)
LoadSprite(#Augenlinks,"Images\Spieler augen links.PNG",0)
TransparentSpriteColor(#Augenlinks, 0)
LoadSprite(#Augenrechts,"Images\Spieler augen rechts.PNG",0)
TransparentSpriteColor(#Augenrechts, 0)
LoadSprite(#ZAHL1,"Images\Note1.PNG",0)
TransparentSpriteColor(#ZAHL1, 0)
LoadSprite(#ZAHL2,"Images\Note2.PNG",1)
TransparentSpriteColor(#ZAHL2, 0)
LoadSprite(#ZAHL6,"Images\Note6.PNG",1)
TransparentSpriteColor(#ZAHL6, 0)
SpielerX = ScreenX / 2
SpielerY = ScreenY - SpriteHeight(#MENSCH) + 10
Speed = 5
NewList Noten.NOTEN()
Stopzeit = ElapsedMilliseconds() + #STOPZEIT
Repeat
Zeit = ElapsedMilliseconds()
If Stopzeit < Zeit
StopScreen()
ClearList(Noten())
MeinePunkte = 0
Stopzeit = ElapsedMilliseconds() + #STOPZEIT
EndIf
Window()
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
Quit = 1
EndIf
If KeyboardPushed(#PB_Key_Right)
If SpielerX < ScreenX-120
SpielerX + Speed
EndIf
EndIf
If KeyboardPushed(#PB_Key_Left)
If SpielerX > 0
SpielerX - Speed
EndIf
EndIf
If KeyboardPushed(#PB_Key_A)
testX + 1
EndIf
If KeyboardPushed(#PB_Key_S)
testX - 1
EndIf
; neue noten (alle 500ms)
If NotenTimer < Zeit
NotenTimer = Zeit + 500
AddElement(Noten())
Noten()\x = Random(ScreenX-40)
Noten()\y = - 60
Noten()\Art = #ZAHL1 + Random(2)
Select Noten()\Art
Case #ZAHL1
Noten()\Speed = 10
Case #ZAHL2
Noten()\Speed = 3
Case #ZAHL6
Noten()\Speed = 2
EndSelect
EndIf
ClearScreen(0)
DisplaySprite(#HINTERGRUND, testX, testY)
DisplayTransparentSprite(#MENSCH, SpielerX, SpielerY)
ForEach Noten()
Noten()\y + Noten()\Speed
DisplayTransparentSprite(Noten()\Art, Noten()\x, Noten()\y)
If Noten()\y - SpielerY > -60 And Noten()\y - SpielerY < 120
If Noten()\x - SpielerX > -10 And Noten()\x - SpielerX < 110
Select Noten()\Art
Case #ZAHL1
MeinePunkte + 100
Case #ZAHL2
MeinePunkte + 10
Case #ZAHL6
MeinePunkte - 50
EndSelect
DeleteElement(Noten())
EndIf
ElseIf Noten()\y > ScreenY
Select Noten()\Art
Case #ZAHL1, #ZAHL2
MeinePunkte - 25
Case #ZAHL6
MeinePunkte - 0
EndSelect
DeleteElement(Noten())
EndIf
Next
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor(0)
DrawText(170,0,"Dein Score beträtgt sagenhafte "+Str(MeinePunkte)+" Punkte")
StopDrawing()
Delay(1)
FlipBuffers()
Until Quit
End
Code: Alles auswählen
DataSection
bild:
IncludeBinary "test.bmp"
EndDataSection
Debug CatchImage(0,?bild)
Der Befehl gibt dir also nur zurück wie hoch die Schrift ist mit der du gerade schreibst...PB-Hilfe hat geschrieben:Ermittelt die Höhe (in Pixel) des angegebenen String, der auf dem aktuellen Ausgabekanal mittels des aktuellen Zeichensatzes dargestellt wird.
Code: Alles auswählen
LoadFont(1,"Arial",50,#PB_Font_Bold)
Code: Alles auswählen
DrawingFont(FontID(1))