Ball und Fahrstuhl | läuft auch unter PB 3.3, erweiterbar!!!

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Groudon
Beiträge: 55
Registriert: 05.06.2007 19:12
Kontaktdaten:

Beitrag 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
Ich hab auch ein eigenes Forum:
www.g-f.de.am
ich benutze Version3.30
also bitte codes dafür benutzbar machen danke
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

lol, ja, deswegen habe ich es doch umgeschrieben :freak:
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Groudon
Beiträge: 55
Registriert: 05.06.2007 19:12
Kontaktdaten:

Beitrag 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?
Ich hab auch ein eigenes Forum:
www.g-f.de.am
ich benutze Version3.30
also bitte codes dafür benutzbar machen danke
Antworten