Anfängerprobleme beim ersten Programm
Verfasst: 05.06.2014 11:22
Hallo,
ich bin seit gestern umgestiegen auf PureBasic. Ich habe vorher bereits Jahre lang in
Dark Basic Professional programmiert. Aber was ich bisher gesehen habe, ist PureBasic
schneller und mächtiger. Mit den allgemeinen Strukturen von Basic bin ich also vertraut.
Aber der Einstig in Pure Basic fällt mir doch sehr schwer, weil ich einige Savchen noch nicht
verstehe.
Normalerweise sind meine Programm immer nach einem gleichen Grundgerüst aufgebaut.
Das versuche ich jetzt nach und nach in Pure Basic zu übersetzen.
Für mich ist schon seltsam, das Prozeduren (in DB functions) vor! dem eigentlichen
Programmtext stehen müssen, aber gut, daran kann man sich ja gewöhnen.
Mein Problem beginnt im Prinzip ab AA_Init:
ich lade ein Bild als Hintergrundbild. Dieses Bild hat geanu die Größe des Fensters
hier also 1024 * 768. Dann will ich unten zwei kleine Bilder grabben um die Zeilen mit denen ích das
Programm steuere entsprechend wieder ausblenden zu koennen
Also etwa:
meldunten("Das ist Quatsch <Taste>") => in der zweiten Zeile von unten wird das ausgegeben
wait key =>ich warte auf einen Tastatureingabe
meluloesch() =>die angezeigte Zeile wird mit dem geladenen Bild 2
also einem Teil des Hintergrundbildes übermalt
so habe ich versucht das im unten stehenden Code umzusetzen, aber irgendwie funktionieren
die Imagenummern nicht so wie ich das will ???
Kann mir da bitte jemand auf die Sprünge helfen ?
Der letzte Absatz AZ_Schleife: soll die eigentliche Spielschleife werden, aber auch die funktioniert
noch nicht wie sie soll.
Danke im voraus
ich bin seit gestern umgestiegen auf PureBasic. Ich habe vorher bereits Jahre lang in
Dark Basic Professional programmiert. Aber was ich bisher gesehen habe, ist PureBasic
schneller und mächtiger. Mit den allgemeinen Strukturen von Basic bin ich also vertraut.
Aber der Einstig in Pure Basic fällt mir doch sehr schwer, weil ich einige Savchen noch nicht
verstehe.
Normalerweise sind meine Programm immer nach einem gleichen Grundgerüst aufgebaut.
Das versuche ich jetzt nach und nach in Pure Basic zu übersetzen.
Für mich ist schon seltsam, das Prozeduren (in DB functions) vor! dem eigentlichen
Programmtext stehen müssen, aber gut, daran kann man sich ja gewöhnen.
Mein Problem beginnt im Prinzip ab AA_Init:
ich lade ein Bild als Hintergrundbild. Dieses Bild hat geanu die Größe des Fensters
hier also 1024 * 768. Dann will ich unten zwei kleine Bilder grabben um die Zeilen mit denen ích das
Programm steuere entsprechend wieder ausblenden zu koennen
Also etwa:
meldunten("Das ist Quatsch <Taste>") => in der zweiten Zeile von unten wird das ausgegeben
wait key =>ich warte auf einen Tastatureingabe
meluloesch() =>die angezeigte Zeile wird mit dem geladenen Bild 2
also einem Teil des Hintergrundbildes übermalt
so habe ich versucht das im unten stehenden Code umzusetzen, aber irgendwie funktionieren
die Imagenummern nicht so wie ich das will ???
Kann mir da bitte jemand auf die Sprünge helfen ?
Der letzte Absatz AZ_Schleife: soll die eigentliche Spielschleife werden, aber auch die funktioniert
noch nicht wie sie soll.
Danke im voraus
Code: Alles auswählen
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MELDAUTOR(titel$,autor$)
StartDrawing(WindowOutput(0))
fa1=RGB(0,0,0): fa2=RGB(90,100,10): fa3=RGB(255,255,0)
FrontColor(fa1):Box (0,736,1024,32)
FrontColor(fa2):Box (1,737,1023,30)
DrawingFont(FontID(2)):DrawingMode(1)
DrawText(11,739,titel$,fa1):DrawText(809,739,autor$,fa1)
DrawText(10,738,titel$,fa3):DrawText(808,738,autor$,fa3)
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MELDUNTEN(meldu$)
fa1=RGB( 0, 0, 0)
fa2=RGB(185,015, 0)
fa3=RGB(255,255, 0)
StartDrawing(WindowOutput(0))
FrontColor(fa1):Box (0,704,1024, 32)
FrontColor(fa2):Box (1,705,1022, 30)
DrawingFont(FontID(2)):DrawingMode(1)
DrawText(101,707,meldu$,fa1)
DrawText(100,706,meldu$,fa3)
StopDrawing()
EndProcedure
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MELDULOESCH()
fa1=RGB( 120,0,120)
StartDrawing(WindowOutput(0))
; FrontColor(fa1):Box (0,704,1024, 32)
DrawImage(ImageID(2),0,0)
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure ZE_HIGRU()
StartDrawing(OutputID)
DrawImage(ImageID(1),0,0)
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AA-INIT:
;-------------------------------------------------------------
;testen ob das Fenster ordnungsgemaess geöffnet werden kann
Global outputID
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Error", "Can't open the sprite system", 0)
End
EndIf
AUTOR$="(c) LOUIS XIV"
TITEL$="Test-PureBAsic"
HBILD$="test-pb.bmp"
OpenWindow(0,300,100,1024,768,titel$) ;hier wird das Hauptfenster geöffnet
OpenWindowedScreen(WindowID(0),300,100,1024,768) ;warum das sein muss, weiss ich noch nicht
OutputID = WindowOutput(0) ;das nehme ich 'mal so hin (kann ein Programm
;mehrere Fenster gleichzeitig bedienen ?)
;hier werden die Schriften vorgeladen, damit sie im Programm zur Verfügung sthen
LoadFont(1,"Arial",32)
LoadFont(2,"Bookman Old Style",18,#PB_Font_Bold )
;jetzt soll das Hintergrundbild geladen werden
bild1=LoadImage(1,HBILD$)
; bis hierher klappt auch alles
;jetzt werden die Teile definiert, die die unteren beiden Zeilen wieder ausblenden
bild2=#PB_Any ;=> warum kann ich das bild nicht einfach wie oben weiter nummerieren
bild3=#PB-Any
GrabImage(1,bild2,0,704,1024,32) ;fehler:das angegebene #image wurde nicht initialisiert
GrabImage(1,bild3,0,672,1024,32) ;mehrere Fenster gleichzeitig bedienen ?)
Global gg() ; als global definieren muss sein
Dim gg(40) ; in DarkBasic gelten arrays immer global
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; so sieht normalerweise mein Programmablauf aus
;
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Vorbereiten des Spieles und des Spielfeldes
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AF_VORSPIEL:
;
;paste image 1,0,0 rem Hintergrundbild darstellen
;MELDAUTOR(titel$,autor$) rem letzte Bildzeile anzeigen
;MELDUNTEN("Information gewuenscht (j/n)") rem Abfrage
; uebersetzung nach PureBasic
ZE_HIGRU()
StartDrawing(ouputID)
DrawingFont(FontID(1))
DrawingMode(1)
FrontColor(RGB(255,255,200)):
DrawText(10,10,"Das ist ein tolles fenster "+Str(bild1)+".."+Str(ImageID(1) ))
StopDrawing()
MELDAUTOR(titel$,autor$)
Meldunten("Informationen gewünscht <j> / <n>")
delay 2000
;ant$="":wait key:ant$=inkey$()
MELDULOESCH()
;If ant$="j" then Gosub CB_INFO
;If ant$="J" then Gosub CB_INFO
rem ------------------------------------------------------------
AG_ANFANG:
;paste image 1,0,0
;MELDAUTOR(titel$,autor$)
;rem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;rem hier beginnt die eigentliche Spielschleife
;rem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AH_HAUPTSPIEL:
;do
; If mouseclick() then MAUSWAHL_1(mouseclick(),MouseX(),MouseY())
; If escapekey() then gg(1)=9
; If spacekey() then dummy=1
; If returnkey() then dummy=1
; If rightkey() then dummy=1
; If upkey() then dummy=1
; If leftkey() then dummy=1
; If downkey() then dummy=1
; If inkey$()<>"" then TASTWAHL(inkey$())
; If gg(1)>0 then exit
;loop
;rem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;rem Nachspiel = Beendigung des Spieles
;rem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AI_NACHSPIEL:
; If gg(1)=9 then MELDUNTEN("Abbruch - <Taste druecken>")
; If gg(1)=3 then MELDUNTEN("Geschafft - Glueckwunsch <Taste druecken>")
; If gg(1)=4 then MELDUNTEN("Du hast gewonnen - Glueckwunsch <Taste druecken>")
; If gg(1)=5 then MELDUNTEN("Ich habe gewonnen <Taste druecken>")
;wait key
;MELDUNTEN("Neustart ? (J/N)")
;ant$="":wait key:ant$=inkey$()
;gg(1)=0
;If ant$="j" then gg(1)=8
;If ant$="J" then gg(1)=8
;MELDULOESCH()
;If gg(1)=8 then Goto AF_VORSPIEL
;paste image 1,0,0
;wait 1000
;cls
End
AZ_Schleife:
;Delay (2000)
;tas=0
;InitKeyboard()
;Repeat
;FlipBuffers()
; tas=0
; ExamineKeyboard()
; If KeyboardPushed(#PB_Key_All)
; tas=1
; MELDUNTEN("Taste gedrueckt")
; EndIf
;Until tas>0
;Delay(1000)
;MELDULOESCH()
;Delay (1500)
;End