Seite 2 von 2

Verfasst: 15.08.2007 13:09
von STARGÅTE
Hier, umgeschrieben für 3.3er

Code: Alles auswählen

; Test von Folker Linstedt aka xaby
; PB 4.x
; 2007|08|13


If InitSprite() = 0 Or InitKeyboard() = 0
 MessageRequester("Error", "Can't open DirectX 7 or later", 0)
 End
EndIf


Global HeldX : HeldX=100
Global HeldY : HeldY=100
Global hoch : hoch=150
Global Richtung : Richtung=1



Procedure Held()
 If KeyboardPushed(#PB_Key_Left)
  HeldX-10
  If HeldX<20
   HeldX=630
  EndIf
 EndIf
 If KeyboardPushed(#PB_Key_Right)
  HeldX+10
  If HeldX>620
   HeldX=-10
  EndIf
 EndIf
 
 ; WandAbfrage
 Wand=0
 
 For i=0 To 9
  If SpriteCollision(0,HeldX,HeldY,1,0+64*i, 400)
   Wand=1
   DisplaySprite(2, 0+64*i, 400)
  EndIf
 Next
 If SpriteCollision(0,HeldX,HeldY,1,264,Hoch)
  Wand=2
  DisplaySprite(2,264,Hoch)
 EndIf
 If SpriteCollision(0,HeldX,HeldY,1,328, 200)
  Wand=1
  DisplaySprite(2,328,200)
 EndIf
 If SpriteCollision(0,HeldX,HeldY,1,200, 200)
  Wand=1
  DisplaySprite(2,200,200)
 EndIf
 
 ; Guter Vorschlag von DarkDragon!!!
 If Wand = 2
  ziel = hoch - 30
  If ziel < HeldY
   HeldY - 1
  ElseIf ziel > HeldY
   HeldY + 1
  EndIf
 EndIf
 
 If Wand=0
  HeldY+5
 EndIf
 
 DisplayTransparentSprite(0, HeldX, HeldY)
EndProcedure


Procedure Mauer()
 
 DisplaySprite(1, 200, 200)
 DisplaySprite(1, 328, 200)
 
 For i=0 To 9
  DisplaySprite(1, 0+64*i, 400)
 Next
 
EndProcedure


Procedure Beweg()
 hoch+1*Richtung
; Debug hoch
 If Hoch>400
  Hoch=400
  Richtung*-1
 EndIf
 If Hoch<150
  Hoch=150
  Richtung*-1
 EndIf


 DisplaySprite(1, 264, Hoch)


EndProcedure



If OpenScreen(640, 480, 16, "Sprite")


 ; Erstelle Kreis auf Sprite
 CreateSprite(0,32,32)
 StartDrawing(SpriteOutput(0))
 Circle(15,15,15,RGB(255,128,128))
 StopDrawing()

 ; Erstelle Balken auf Sprite
 CreateSprite(1,64,4)
 StartDrawing(SpriteOutput(1))
 Box(0,0,64,4,RGB(0,128,255))
 StopDrawing()

 CreateSprite(2,64,4)
 StartDrawing(SpriteOutput(2))
 Box(0,0,64,4,RGB(0,255,0))
 StopDrawing()

 Repeat
  ExamineKeyboard()

  Mauer()
  Beweg()
  Held()


  Delay(10)

  FlipBuffers()
  ClearScreen(0,0,0)
 Until KeyboardPushed(#PB_Key_Escape)

Else
 MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0)
EndIf

End
Ich musste aber das Debug rausnehmen, da sonst der Bildscirm flackert.

Verfasst: 16.08.2007 12:03
von Groudon
bei mir sagt der das die Fehler an den Makiertenstellen wären:

Code: Alles auswählen


; Test von Folker Linstedt aka xaby 
; PB 4.x 
; 2007|08|13 


If InitSprite() = 0 Or InitKeyboard() = 0 
  MessageRequester("Error", "Can't open DirectX 7 or later", 0) 
  End 
EndIf 


Global HeldX=100                         ;hier
Global HeldY=100                          ;hier
Global hoch=150                           ;hier
Global Richtung=1                         ; hier


Procedure Held() 
  If KeyboardPushed(#PB_Key_Left) 
    HeldX-10 
    If HeldX<20 
      HeldX=630 
    EndIf 
  EndIf 
  If KeyboardPushed(#PB_Key_Right) 
    HeldX+10 
    If HeldX>620 
      HeldX=-10 
    EndIf 
  EndIf 
  
  ; WandAbfrage 
  Wand=0 
  
  For i=0 To 9 
    If SpriteCollision(0,HeldX,HeldY,1,0+64*i, 400) 
      Wand=1 
      DisplaySprite(2, 0+64*i, 400) 
    EndIf 
  Next 
  If SpriteCollision(0,HeldX,HeldY,1,264,Hoch) 
    Wand=2 
    DisplaySprite(2,264,Hoch) 
  EndIf 
  If SpriteCollision(0,HeldX,HeldY,1,328, 200) 
    Wand=1 
    DisplaySprite(2,328,200) 
  EndIf 
  If SpriteCollision(0,HeldX,HeldY,1,200, 200) 
    Wand=1 
    DisplaySprite(2,200,200) 
  EndIf 
  
  ; Guter Vorschlag von DarkDragon!!! 
  If Wand = 2 
    ziel = hoch - 30 
    If ziel < HeldY 
      HeldY - 1 
    ElseIf ziel > HeldY 
      HeldY + 1 
    EndIf 
  EndIf 

  If Wand=0 
    HeldY+5 
  EndIf 
  
  DisplayTransparentSprite(0, HeldX, HeldY) 
EndProcedure 


Procedure Mauer() 
  
  DisplaySprite(1, 200, 200) 
  DisplaySprite(1, 328, 200) 
  
  For i=0 To 9 
    DisplaySprite(1, 0+64*i, 400) 
  Next 
  
EndProcedure 


Procedure Beweg() 
  hoch+1*Richtung 
  Debug hoch 
  If Hoch>400 
    Hoch=400 
    Richtung*-1 
  EndIf 
  If Hoch<150 
    Hoch=150 
    Richtung*-1 
  EndIf 
  
  
  DisplaySprite(1, 264, Hoch) 
  
  
EndProcedure 



If OpenScreen(640, 480, 16, "Sprite") 

  
  ; Erstelle Kreis auf Sprite 
  CreateSprite(0,32,32) 
  StartDrawing(SpriteOutput(0)) 
  Circle(15,15,15,RGB(255,128,128)) 
  StopDrawing() 
    
  ; Erstelle Balken auf Sprite 
  CreateSprite(1,64,4) 
  StartDrawing(SpriteOutput(1)) 
  Box(0,0,64,4,RGB(0,128,255)) 
  StopDrawing() 
  
  CreateSprite(2,64,4) 
  StartDrawing(SpriteOutput(2)) 
  Box(0,0,64,4,RGB(0,255,0)) 
  StopDrawing() 
  
  Repeat 
    ExamineKeyboard() 
    
    Mauer() 
    Beweg() 
    Held() 
    
    
    Delay(10) 
    
    FlipBuffers() 
    ClearScreen(RGB(0,0,0))                                ;und hier
  Until KeyboardPushed(#PB_Key_Escape) 
  
Else 
  MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0) 
EndIf 

End    

das umgeschriebene von STARGÅTE funktioniert bei mir

Verfasst: 16.08.2007 12:21
von STARGÅTE
lol, ja, deswegen habe ich es doch umgeschrieben :freak:

Verfasst: 16.08.2007 12:31
von Kaeru Gaman
@Groudon

vielleicht solltest du in deine Signatur schreiben, dass du PB 3.30 benutzt.

...und dann solltest du dir angewöhnen, bei codes auch in den header zu gucken,
wenn schon einer da ist, wo drinsteht, dass es für version 4.0 ist...

Verfasst: 16.08.2007 14:40
von Xaby
@Groudon

es gibt einige Verbesserungen in PB 4.x
die ich nicht mehr missen möchte.

Es wurden nicht nur ne Menge Bugs entfernt, sondern auch viele Erweiterungen hinzugefügt.

Fehlermeldungen sind ja auch dazu da, um das Programm zu ändern.

Nur verstehen muss man sie :shock:

Normalerweise sollte man alle Variablen am Anfang deklarieren.
Also dem Compiler (das Programm, was aus dem Code eine ausführbare Datei macht) sagen, welche Variable welchen Typs ist.

Und ob auf diese Variable von jeder Prozedur aus zugegriffen werden kann oder nicht.

Bei PB 3.3

Konnte man entweder gleich einer Variable einen Wert zu weisen, oder bestimmen, ob andere Prozeduren drauf zugreifen können.

Deshalb musste Stargate zwei Zeilen benutzen.

In PB 4.x
kann man nun beides gleichzeitig machen. Das erspart dem Programmierer, den Namen der Variable noch einmal hinzuschreiben.

Mein Programm sollte auch mit der Demo von PB 4.x laufen.

Wieso funktioniert die Demo-Version bei dir denn nicht so, wie sie sollte?


Gruß, Folker :allright:

Verfasst: 16.08.2007 19:47
von Groudon
ich hab es mal um geändert http://home.tiscali.de/auktionslogo/PBSpiel.zip

a=Auto
h=Hubschrauber


Und hat es schon jemand Gedownloadet?