Seite 9 von 16
Verfasst: 10.02.2008 23:52
von #NULL
ich fände ein konsolen hello world besser
..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

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.
Verfasst: 10.02.2008 23:54
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.
Verfasst: 11.02.2008 00:05
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.
Verfasst: 11.02.2008 00:07
von edel
oh, das ist aber ein schlechter Programmierstyle, gerade vor son Loadxyz gehoert nen If

Verfasst: 11.02.2008 00:11
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.
Verfasst: 11.02.2008 00:19
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
Verfasst: 11.02.2008 00:23
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

Verfasst: 11.02.2008 00:27
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
Verfasst: 11.02.2008 00:30
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.
Verfasst: 11.02.2008 00:37
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.