PureBasic Wikipedia Artikel

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

ich fände ein konsolen hello world besser

Code: Alles auswählen

OpenConsole()
Print("hey! low world!")
Input()
..oder noch zusätzlich.
wenn ich mich im Internet nach Programmiersprachen erkundige, interessiert mich als erstes immer, wie der Code "aussieht"
yo, geht mir auch so :mrgreen: drum find ich auch den drei-zeiler schon besser. aber das PB-Wikibook hat ja auch schon code (nehme ich an) und könnte verlinkt werden, nur ist es halt sehr dünn (immernoch?)
und vielleicht auch deutsche/englische online-referenz verlinken. kann auch interessant sein wenn man die sprache noch nicht kennt.
Zuletzt geändert von #NULL am 10.02.2008 23:55, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Man könnte z.B. das Beispiel "Sprite.pb" benutzen. Hab es allerdings ein wenig abgeändert:

Code: Alles auswählen

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


; Open a 640*480 screen with 32 bit color depth
If OpenScreen(640, 480, 32, "Sprite Example")
  LoadSprite(0, "Data\PureBasic.bmp", 0)
  
  ; Draw some red lines on our sprite
  If StartDrawing(SpriteOutput(0))
    FrontColor(RGB(255, 0, 0))
    
    For k = 0 To SpriteHeight(1) Step 2
      Line(0, k, SpriteWidth(1), 0)
    Next k
    
    StopDrawing()
  EndIf
  
  
  ; Rendering Loop
  Repeat
    ; Fill the screen with black
    ClearScreen(RGB(0,0,0))
    
    ; Draw our sprite
    DisplaySprite(0, x, y)
    
    ; Change sprite coordinates
    x+2
    y+1
    
    ; Bring the final picture to the front buffer
    FlipBuffers()
    
    ; Check the current keyboard state
    ExamineKeyboard()
  Until x > 500 Or KeyboardPushed(#PB_Key_Escape)
Else
  MessageRequester("Error", "Can't open a 640*480 - 32 bit screen !", 0)
EndIf

@ #NULL: Naja, Hello Worlds mag ich persönlich überhaupt nicht, da sie kaum was über den Code aussagen. Ein Hello World ist im Falle von Python z.B. ein einfaches print "Hello World". Das sagt mir aber null über die Sprache aus ;) Da finde ich ein ca. 10 bis 20-zeiliges Beispiel weitaus besser, bei dem auch Ifs und Schleifen usw. drin sind.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

vielleicht ist das auch geschmackssache, aber ich finde sowas zum schnuppern übersichtlicher:

Code: Alles auswählen

InitSprite()
InitKeyboard()

OpenScreen(640, 480, 32, "Sprite Example")

LoadSprite(0, "Data\PureBasic.bmp", 0)
 
If StartDrawing(SpriteOutput(0))
  FrontColor(RGB(255, 0, 0))
  For k = 0 To SpriteHeight(1) Step 2
    Line(0, k, SpriteWidth(1), 0)
  Next k
  StopDrawing()
EndIf


Repeat
  ClearScreen(RGB(0,0,0))
 
  DisplaySprite(0, x, y)
 
  x+2
  y+1
 
  FlipBuffers()
 
  ExamineKeyboard()
Until x > 500 Or KeyboardPushed(#PB_Key_Escape)

End
und die kommentare haben total abgelenkt und nichts gesagt.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

oh, das ist aber ein schlechter Programmierstyle, gerade vor son Loadxyz gehoert nen If :wink:
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Jo, ich hab mich von der Grundstruktur her halt stark an das Beispiel gehalten. Zu den Kommentaren: In der Praxis wären diese tatsächlich nicht sehr aussagekräftig, aber fehl am Platz finde ich sie jetzt auch nicht, weil sie dem Nicht-PB-Programmierer ja zeigen, was dort abgeht. Außerdem werden sie dank dem Highlighting ja auch aus dem eigentlichen Code "herausgehoben".

Es ist aber übrigens noch ein Fehler drin, SpriteHeight(1) und SpriteWidth(1) müssen jeweils Sprite (0) benutzen. Der Übersicht halber würde ich vor und nach der For-Schleife noch eine Leerzeile einbauen.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Geschmacksache... Vlt noch die Variablen ungarisch notieren.
Ich fände das überschaubarer für Nichtkenner von PB die aber schon andere Sprachen kennen.

Vor allem die magischen Zahlen vermeiden und daher lieber Konstanten nutzen.

MfG

Wolf
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Code: Alles auswählen

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

; fullscreen öffnen
If Not OpenScreen(640, 480, 32, "Sprite Example")
  MessageRequester("Error", "Can't open a 640*480 - 32 bit screen.")
  End
EndIf

; eine grafik laden
If Not LoadSprite(0, "Data\PureBasic.bmp")
  MessageRequester("Error", "Can't load sprite.")
  End  
EndIf

; sprite bearbeiten
If StartDrawing(SpriteOutput(0))
  FrontColor(RGB(255, 0, 0))
  For k = 0 To SpriteHeight(0) Step 2
    Line(0, k, SpriteWidth(0), 0)
  Next k
  StopDrawing()
EndIf


; hauptschleife
Repeat
  ClearScreen(RGB(0,0,0)) ; bildschrim leeren
 
  DisplaySprite(0, x, y)  ; sprite positionieren
  x+2
  y+1
 
  FlipBuffers()           ; alles anzeigen
 
  ExamineKeyboard()       ; 
  
Until x > 500  Or  KeyboardPushed(#PB_Key_Escape) ; zum beenden <ESC> druecken

End
..naja, ich hör schon auf :mrgreen:
Zuletzt geändert von #NULL am 11.02.2008 00:31, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

NULLs letzter Code nach Schönheitsoperation.

Code: Alles auswählen

; Identifier-Konstante für unser Sprite deklarieren
#MySprite = 0

Define.l lI , lX , lY

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

; fullscreen öffnen
If Not OpenScreen (640, 480, 32, "Sprite Example")
  MessageRequester ("Error", "Can't open a 640*480 - 32 bit screen.", 0)
  End
EndIf

; eine grafik laden
If Not LoadSprite (#MySprite, "Data\PureBasic.bmp", 0)
  MessageRequester ("Error", "Can't load sprite.", 0)
  End 
EndIf

; sprite bearbeiten
If StartDrawing(SpriteOutput(#MySprite))
  FrontColor (RGB(255, 0, 0))
  For lI = 0 To SpriteHeight(0) Step 2
    Line(0, lI, SpriteWidth(0), 0)
  Next lI
  StopDrawing()
EndIf


; hauptschleife
Repeat
  ClearScreen(#Null) ; bildschrim leeren
 
  DisplaySprite(#MySprite , lX, lY)  ; sprite positionieren
  lX+2
  lY+1
 
  FlipBuffers()           ; alles anzeigen
 
  ExamineKeyboard()       ;
 
Until lX > 500  Or  KeyboardPushed(#PB_Key_Escape) ; zum beenden <ESC> druecken
End
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

hatte noch editiert..
bei MesseReq..() und LoadSprite() kann hinten die ", 0" weg.
kurz ist immer gut, und die beispiele stammen wahrscheinlich noch aus zeit obligat. parameter.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Hmm... das mit dem Define.l lI, lX, lY verkompliziert meiner Meinung nach alles. Der Code könnte einige Anfänger etwas abschrecken ;) ich würde bei den normalen Variablen i, x und y bleiben und sie vorher nicht deklarieren.

Dann noch was zum Kommentar "; sprite bearbeiten": Den finde ich auch nicht so gut, weil man evtl. gar nicht weiß, wozu das gemacht wird oder was da passiert. Wenn man dagegen sowas wie "rote Linien aufs Sprite zeichnen" hinschreiben würde, wüßte man immerhin sofort Bescheid.

EDIT: ClearScreen(#Null) halte ich für sehr irreführend, weil das vom Kontext her auch überhaupt nicht paßt. Man füllt den Screen mit einer Farbe, und hierfür sollte man zum Verdeutlichen entweder einen 24-Bit-Hex-Wert oder eben tatsächlich die RGB()-Funktion benutzen, weil dafür ist die Funktion ja da.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Antworten