Seite 5 von 5

Verfasst: 13.05.2008 10:30
von X360 Andy
Habe viel alleine geschafft aber jetzt komme ich nicht mehr weiter ( und in der Hilfe finde ich auch nichts ! )

Und zwar habe ich ein paar kleinere Prob. :D

Erstens die Fehlermeldung die sofort kommt.
Ich habe verusucht einen Timer einzubauen ,also wenn F1 zum Starten des Spiels gedrückt wird, das es nicht sofort loslegt mit dem Spiel, sondern erstmal ein Timer. ( 6 Sekunden lang )

"eingebaut" ist er ja , nur ich bekomme eine Fehlermeldung ( Inhalt )
Hab es fast (... ) so gemacht wie es bei den anderm "StopScreen" Timer ist, also gleicher Code nur ein bisschen angepasst.

Auserdem würde ich gern das die Musik ( Movie ) schon am anfang gespielt wird.
Das sollte ja eig. mit "1" gehen ,geht es aber nicht.

Bei mir passiert im Menü nur das es wenn ich F2 drücke neugestarten / angehalten wird. :freak:

Wäre wirklich nett wenn mir jemand helfen könnte. :allright:

Hier das gesamte Packet ( an grafiken , Sounds, Screen Codes )
http://rapidshare.com/files/114543052/V ... 1.rar.html

Ich weis der Code ist sehr sehr unaufgeräumt ... :?

Und hier nur der Code

Code: Alles auswählen

If InitMovie()= 1                                              ; Wenn die Initialisierung = 0 Byte ist (AUS),
  MessageRequester("Fehler","Konnte Dx nicht finden",0)        ; wird eine Nachricht gesendet, in der eine Fehlermeldung steht.
EndIf
LoadMovie(0,"Sound\Hintergrund Sound.mid")
Movie = 0

EnableExplicit 
Enumeration ; Sprites 
  #HINTERGRUND 
  #HINTERGRUND1
  #MENSCH 
  #Augenlinks 
  #Augenrechts 
  #ZAHL1 
  #ZAHL2 
  #ZAHL6 
  #Startbildschirmspieler
  #Movie
  #Startscreen
EndEnumeration 

#ATimer = 6000
#STOPZEIT = 30000 
Structure NOTEN 
  x.l 
  y.l 
  Art.l 
  Speed.l 
EndStructure 



LoadFont(1,"Arial",12,#PB_Font_Bold)
LoadFont(2,"Arial",10,#PB_Font_Bold)
LoadFont(3,"Arial",8,#PB_Font_Bold)  
LoadFont(4,"Arial",10,#PB_Font_Bold)
LoadFont(5,"Arial",6,#PB_Font_Bold)
;/ 
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()

EnableExplicit 
Enumeration ; Sprites 
  #X
  #Y
EndEnumeration  
  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 + 6000 
      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 beenden",RGB(250,250,250), RGB(0,0,0)) 
          y + 245
    x - 200
    DrawText(x, y, "Auto. beenden in 10 Sek <-- Funktion noch nicht eingebaut",RGB(250,250,250), RGB(0,0,0))
    x + 490
    DrawText(x, y, "Spiel is made by AndyX",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 
UsePNGImageDecoder() 
LoadSprite(#HINTERGRUND, "Images\Panorama.bmp",1) 
LoadSprite(#HINTERGRUND1, "Images\Steuerung.png",0)   
    
         UsePNGImageDecoder() 

LoadSprite(#Startbildschirmspieler,"Images\Spieler augen mitte.PNG",0) 
TransparentSpriteColor(#Startbildschirmspieler,0)    


  Procedure Steuerung()



           
           Repeat
Window() 
    ClearScreen(0) 
    DisplaySprite(#HINTERGRUND1, 0, 0) 
ExamineKeyboard()

StartDrawing(ScreenOutput()) 
    DrawingMode(#PB_2DDrawing_Transparent) 
 


; Hier kommen noch die "Steuerungs erklärungsbefele" rein



 StopDrawing() 
  Delay(1) 
  FlipBuffers() 
  
Until KeyboardPushed(#PB_Key_All)



EndProcedure    

; A Timer = Anfangstimer 

ATimer = ElapsedMilliseconds() + #ATimer
 

 
  Repeat
  
  If KeyboardPushed(#PB_Key_F1) 
      ATimer = Zeit + 6000 
      Init = 1 
    EndIf 
    If Init 
      If ATimer < Zeit 
        Start = 1 
      EndIf 
 
  Window() 
  ClearScreen(0) 
  DisplaySprite(#HINTERGRUND, 0, 0)
  DisplayTransparentSprite(#Startbildschirmspieler, 25, 290) 
  ExamineKeyboard() 
  StartDrawing(ScreenOutput()) 
    If Init 
    DrawingMode(#PB_2DDrawing_Transparent) 
    x = 80 
    y = 20 
    DrawText(x, y, "Spiel Start in " + Str((anfangstimer - Zeit)/1000) + " sekunden geht's los !", $FFFFFF) 
    Else 
    DrawingFont(FontID(2))
    DrawText(x, y, "Ihr müsst versuchen so viele Punkte zu machen in 30 Sekunden 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 + 10 
    DrawText(x, y, "") 
    y +20
      DrawText(x, y, "Bei jeder nicht gefangenen 1 und jeder 2 werden 25 Punkte abgezogen") 
    x - 50 
    y + 280 
    DrawingFont(FontID(1))
    DrawText(x, y, "Spielstarten[F1]",RGB(250,250,250), RGB(0,0,0)) 
    y +30
    DrawText(x, y, "Musik an/aus [F2]",RGB(250,250,250), RGB(0,0,0)) 
    y +18
    DrawingFont(FontID(5))
    DrawText(x, y, "Kann nur im Hauptmenü bedient werden....",RGB(250,250,250), RGB(0,0,0))
    y+ 12
    DrawingFont(FontID(1))
    DrawText(x, y, "Steuerung anzeigen[F3]",RGB(250,250,250), RGB(0,0,0)) 
    y+ 30
    DrawText(x, y, "Beenden[ESC]",RGB(250,250,250), RGB(0,0,0)) 
  StopDrawing() 
  Delay(1) 
  FlipBuffers() 
  
  If KeyboardPushed(#PB_Key_F3)
  Steuerung()
  EndIf
  
  
  ;Hier wird die Musik "installiert"| eingebaut 
  ; Aber die Musik sollte schon am anfang laufen, und sollte durch drücken von F2 Starten oder Beginnen., aber bei mir wird nur ein "neustart durchgeführt.
  If KeyboardPushed(#PB_Key_F2)
  movie = 1                                    
  Else                                           
    movie = 0                                    
  EndIf      
  If movie = 1                                   
    PlayMovie(0,0)                               
  EndIf   
  
  
Until KeyboardPushed(#PB_Key_F1) Or Quit 
If Quit 
  End 
EndIf 



  
           
      
             
  
  
 

;/ Spiel 
 
UsePNGImageDecoder() 

LoadSprite(#Startbildschirmspieler,"Images\Spieler.PNG",0) 
TransparentSpriteColor(#Startbildschirmspieler,0) 
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 = 9 
      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

Verfasst: 13.05.2008 23:59
von tobe
mein tip:
erstmal den code aufräumen, dann lösen sich vielleicht schon die meisten probleme von selbst ;)

Verfasst: 14.05.2008 03:01
von KeyKon
Sry, aber der Code is echt unüberschaubar, mir ist unklar wie der so komisch werden konnte...
Du hast x Variablen nicht Defined...
Manche Ifs sind nicht geschlossen...
Du scheinst dir uneins über die Variablennamen zu sein (ATimer,Anfangstimer...)

Du solltest wirklich erst einmal diese Grundlegenden Fehler selbst beseitigen, dann läuft er wohl auch wieder...

Verfasst: 14.05.2008 14:55
von BlueHoschi

Code: Alles auswählen

 If KeyboardPushed(#PB_Key_F2) 
  movie = 1                                    
  Else                                            
    movie = 0                                    
  EndIf    
sobald Du losläßt ist die Bedingung false und der Else-Zweig wird aktiv

Besser:

Code: Alles auswählen

If (Bedingung 1) ;Tastendruck von F2 z.B.
...
   If (Entprellvariable) = 0  
   ; Auszuführender Code 
   ; vielleicht sowas wie: If (Einzustellendevariable) = 0
   ;                               (Einzustellendevariable) = 1
   ;                       Else
   ;                               (Einzustellendevariable) = 0
   ;                       Endif
   ;Das wird dann nur einmal ausgeführt egal wie lange Du drückst
   (Entprellvariable) = 1  ; <---wichtig
   Endif
Else
(Entprellvariable) = 0  ; wenn "Bedingung 1" nicht mehr erfüllt
Endif
Damit wird pro Tastendruck von F2 nur einmal "Einzustellendevariable" verändert. Je nach Wert vorher von 0 auf 1 oder umgekehrt.

Noch was, falls Du´s nicht schon tust:
Speichere Dir alle Codeschnipsel die Dir helfen mit Kommentaren in einer Datei mit eindeutigem Namen ab. Dann kannst Du die Datei jederzeit öffnen und nochmal nachsehen wie´s geht.