Code: Alles auswählen
;Datei menu.pb
#menuFrontColor = #Yellow
#menuBackColor = #Black
#menuSelectedColor = #Red
#menuAbstandY = 50
#menuStartX = 50
#menuStartY = 200
#menuTitleFontSize = 50
#menuItemFontSize = 20
Global menuTitleFont = LoadFont(#PB_Any, "Arial", #menuTitleFontSize, #PB_Font_Bold)
Global menuItemFont = LoadFont(#PB_Any, "Arial", #menuItemFontSize, #PB_Font_Bold)
Global Dim menu.s(0)
Procedure.l showMenu(titel.s, index.l)
;Zeigt ein Menü an und gibt den ausgewählten Eintrag zurück, oder -1 wenn nichts ausgewählt wurde
Define menuIndex.l = index
Define menuY.l = #menuStartY
;Index in gültigen Bereich setzen
If menuIndex < 0
menuIndex = 0
ElseIf menuIndex > ArraySize(menu())
menuIndex = ArraySize(menu())
EndIf
;Menü-Schleife
Repeat
;Eingabe
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Escape)
menuIndex = -1
Break
ElseIf KeyboardReleased(#PB_Key_Return)
Break
ElseIf KeyboardReleased(#PB_Key_Up)
menuIndex-1
If menuIndex < 0
menuIndex = 0
EndIf
ElseIf KeyboardReleased(#PB_Key_Down)
menuIndex+1
If menuIndex > ArraySize(menu())
menuIndex = ArraySize(menu())
EndIf
EndIf
;Ausgabe
ClearScreen(#menuBackColor)
StartDrawing(ScreenOutput())
;Titel Haupt
DrawingFont(FontID(menuTitleFont))
;Titel Ergänzung
DrawingFont(FontID(menuTitleFont))
;Menüpunkte
DrawingFont(FontID(menuItemFont))
menuY.l = #menuStartY
DrawingMode(#PB_2DDrawing_Outlined)
For i = 0 To ArraySize(menu())
If i = menuIndex
DrawText(#menuStartX, menuY, menu(i), #menuSelectedColor, #menuBackColor)
Circle(#menuStartX-5-#menuItemFontSize,menuY+(#menuItemFontSize/2), #menuItemFontSize/2, #menuSelectedColor)
Circle(#menuStartX+10+(#menuItemFontSize/2)+TextWidth(menu(i)),menuY+(#menuItemFontSize/2), #menuItemFontSize/2, #menuSelectedColor)
Else
DrawText(#menuStartX, menuY, menu(i), #menuFrontColor, #menuBackColor)
EndIf
menuY+#menuAbstandY
Next i
;Sonstiges
StopDrawing()
;
FlipBuffers()
Delay(1)
ForEver
ProcedureReturn menuIndex
EndProcedure
Code: Alles auswählen
;Datei start.pb
#scrWidth = 1280
#scrHeight = 1024
#scrDepth = 32
If Not InitSprite() Or Not InitKeyboard() Or Not InitMouse()
Debug "Kann DirectX nicht initialisieren!"
End
EndIf
If Not OpenScreen(#scrWidth, #scrHeight, #scrDepth, "Menü-Test")
Debug "Kann Screen nicht öffnen!"
End
EndIf
XIncludeFile "menu.pb"
ReDim menu(3)
menu(0) = "Neues Spiel"
menu(1) = "Spiel Laden"
menu(2) = "Optionen"
menu(3) = "Beenden"
Define menuIndex.l = showMenu("Hauptmenü", 0)
Select menuIndex
Case -1
Debug "Menü: Abbruch (ESC gedrückt)"
Case 0
Debug "Menü: "+menu(menuIndex)
Case 1
Debug "Menü: "+menu(menuIndex)
Case 2
Debug "Menü: "+menu(menuIndex)
Case 3
Debug "Menü: "+menu(menuIndex)
EndSelect