Code: Alles auswählen
Procedure Zimmerplan_Variablen()
Global Fenster_Hintergrund=RGB(198, 198, 198)
Global Zelle_Hohe.l=20
Global Zelle_Breite.l=20
Global Zimmerbreite.l=100
Global Offset_X.l=20
Global Offset_Y.l=80
Global Zeilen_Abstand_Y.l=20
Global Skalierungsrate.l=5
Global Farbe_1=RGB(222, 222, 222)
Global Farbe_2=RGB(86, 86, 86)
Global Farbe_3=RGB(234, 234, 234)
EndProcedure
Procedure Zimmerplan_Initialisierung()
InitSprite()
OpenWindow(691, 0,0, 800,600, "Hoga-Tec Zimmerplan",#PB_Window_ScreenCentered|#PB_Window_BorderLess)
CreateGadgetList(WindowID(691))
OpenWindowedScreen(WindowID(691), 0, 0, 800, 600, 1, 0, 0)
OpenWindow(500,0,0,300,300,"Menü")
CreateGadgetList(WindowID(500))
ButtonGadget(500,0,0,100,20,"Zell H+")
ButtonGadget(501,0,21,100,20,"Zell H-")
ButtonGadget(502,0,42,100,20,"Zell B+")
ButtonGadget(503,0,63,100,20,"Zell B-")
ButtonGadget(504,0,84,100,20,"Zimmer+")
ButtonGadget(505,0,105,100,20,"Zimmer-")
ButtonGadget(509,110, 0,100,20,"Offset X+")
ButtonGadget(510,110,21,100,20,"Offset X-")
ButtonGadget(511,110,42,100,20,"Offset Y+")
ButtonGadget(512,110,63,100,20,"Offset Y-")
ButtonGadget(514,110,84,100,20,"Z-Abstand +")
ButtonGadget(515,110,105,100,20,"Z-Abstand -")
ButtonGadget(506,0,130,100,20,"Farbe Hintergrund")
ButtonGadget(507,0,151,100,20,"Farbe Linien")
ButtonGadget(508,0,172,100,20,"Farbe Füllung")
ButtonGadget(513,0,193,100,20,"Farbe Fenster")
SetFrameRate(75)
SetRefreshRate(75)
EndProcedure
Procedure Sprites_Updaten() ; Erstellen und Updaten der Sprites sowie Berechnung und Neuskalierung
; Normale Zellen
CreateSprite(0, Zelle_Breite.l, Zelle_Hohe.l)
If StartDrawing(SpriteOutput(0))
Box(0, 0, Zelle_Breite.l, Zelle_Hohe.l, Farbe_1)
Box(1, 1, Zelle_Breite.l-2, Zelle_Hohe.l-2, Farbe_2)
Box(2, 2, Zelle_Breite.l-4, Zelle_Hohe.l-4, Farbe_3)
StopDrawing()
EndIf
; Zellen für Feiertage
CreateSprite(1, Zelle_Breite.l, Zelle_Hohe.l)
If StartDrawing(SpriteOutput(1))
Box(0, 0, Zelle_Breite.l, Zelle_Hohe.l, Farbe_1)
Box(1, 1, Zelle_Breite.l-2, Zelle_Hohe.l-2, Farbe_2)
Box(2, 2, Zelle_Breite.l-4, Zelle_Hohe.l-4, Farbe_3)
StopDrawing()
EndIf
; Zellen für Feiertage
CreateSprite(2, Zimmerbreite.l, Zelle_Hohe.l)
If StartDrawing(SpriteOutput(2))
Box(0, 0, Zimmerbreite.l, Zelle_Hohe.l, Farbe_1)
Box(1, 1, Zimmerbreite.l-2, Zelle_Hohe.l-2, Farbe_2)
Box(2, 2, Zimmerbreite.l-4, Zelle_Hohe.l-4, Farbe_3)
StopDrawing()
EndIf
EndProcedure
Procedure Zimmerplan_Zeichnen() ; Abbilden des Zimmerplans
FlipBuffers()
ClearScreen(Fenster_Hintergrund)
; Positionierung der einzelnen Hintergrundzellen
For Zeile = 0 To 100 Step 1
For Spalte = 1 To 100 Step 1
DisplaySprite(0, Zelle_Breite*Spalte+Zimmerbreite.l+Offset_X,Zelle_Hohe*Zeile+Offset_Y.l+Zeilen_Abstand_Y.l*Zeile)
Next Spalte
Next Zeile
; Positionierung der Zimmer
For Zeile = 0 To 100 Step 1
DisplaySprite(2, 0,Zelle_Hohe*0+Offset_Y.l+Zeilen_Abstand_Y.l*Zeile)
Next Zeile
EndProcedure
Procedure Zimmerplan_Maximalwertuberprufung() ; Festlegen und überprüfen der Maximalwerte
If Offset_X.l <=10
Offset_X.l = 10
EndIf
If Zimmerbreite.l <=80
Zimmerbreite.l = 80
EndIf
If Zimmerbreite.l >=200
Zimmerbreite.l =200
EndIf
If Zelle_Hohe.l <= 15
Zelle_Hohe.l =15
EndIf
If Zelle_Hohe.l >= 50
Zelle_Hohe.l =50
EndIf
If Zelle_Breite.l <= 15
Zelle_Breite.l =15
EndIf
If Zelle_Breite.l >= 50
Zelle_Breite.l =50
EndIf
If Zeilen_Abstand_Y.l <= 20
Zeilen_Abstand_Y.l =20
EndIf
If Zeilen_Abstand_Y.l >= 50
Zeilen_Abstand_Y.l =50
EndIf
EndProcedure
Procedure Zimmerplan_Events() ; Auswertung der einzelnen Fenster und Buttonevents
Event=WaitWindowEvent()
Select EventWindow()
Case 691 ; fenster zimmerplan
Case 500 ; Menüfenster
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 500: Zelle_Hohe.l=Zelle_Hohe.l+5
Case 501: Zelle_Hohe.l=Zelle_Hohe.l-5
Case 502: Zelle_Breite.l=Zelle_Breite.l+5
Case 503: Zelle_Breite.l=Zelle_Breite.l-5
Case 509: Offset_X.l=Offset_X.l+Skalierungsrate.l
Case 510: Offset_X.l=Offset_X.l-Skalierungsrate.l
Case 511: Offset_Y.l=Offset_Y.l+Skalierungsrate.l
Case 512: Offset_Y.l=Offset_Y.l-Skalierungsrate.l
Case 504: Zimmerbreite = Zimmerbreite+Skalierungsrate.l
Case 505: Zimmerbreite = Zimmerbreite-Skalierungsrate.l
Case 506: Farbe_1=ColorRequester()
Case 507: Farbe_2=ColorRequester()
Case 508: Farbe_3=ColorRequester()
Case 514: Zeilen_Abstand_Y.l=Zeilen_Abstand_Y.l+1
Case 515: Zeilen_Abstand_Y.l=Zeilen_Abstand_Y.l-1
Case 513: Fenster_Hintergrund=ColorRequester()
EndSelect
EndSelect
EndSelect
EndProcedure
; Hauptschleife mit vorrangiger Initalisierung und Fenstererstellung
Zimmerplan_Variablen()
Zimmerplan_Initialisierung()
Repeat
Zimmerplan_Maximalwertuberprufung() ; muss als erstes überprüft werden um Flackern bei Max-Wert Überschreitung zu verhindern
Sprites_Updaten()
Zimmerplan_Zeichnen()
Zimmerplan_Events()
FreeSprite(0)
FreeSprite(1)
FreeSprite(2)
Until Event = #PB_Event_CloseWindow