Code: Alles auswählen
;
; Author: Maximilian Stilke
; Date: 3.3.08
; OS: Windows
; Demo: Yes
;Game menu by Max
;v1.0 - Alpha 1
;Have fun ;)
;-Constants
#Name = "The Game"
#Version = "v1.0 Alpha 1"
#Copyright = "Copyright © 2008 QuackFack."
#ScreenWidth = 1024
#ScreenHeight = 768
#ScreenDepth = 32
;-Enumeration
Enumeration ;Menues
#mnu_None
#mnu_Main
#mnu_SinglePlayer
#mnu_Extras
#mnu_Credits
#mnu_Options
#mnu_Steuerung
EndEnumeration
Enumeration ;Fonts
#fnt_Impact_18
#fnt_Impact_24
#fnt_Impact_120
EndEnumeration
Enumeration ;Sprites
#spr_Cursor
#spr_ScreenShot
EndEnumeration
;-Variables
Global MB_Left, Menu = #mnu_Main
;-Procedures
Procedure DrawTextCentered(X,Y,String$)
DrawText(X-TextWidth(String$)/2,Y-TextHeight(String$)/2,String$)
EndProcedure
Procedure DrawTextXCentered(X,Y,String$)
DrawText(X-TextWidth(String$)/2,Y,String$)
EndProcedure
Procedure MB_Left() ;0 = False, 1 = Pressed, 2 = Down, 3 = Released
If MouseButton(1)
If MB_Left = 0
MB_Left = 1
Else
MB_Left = 2
EndIf
Else
If MB_Left = 3
MB_Left = 0
ElseIf MB_Left = 2
MB_Left = 3
EndIf
EndIf
EndProcedure
Procedure SaveScreen()
Static Number
Number + 1
GrabSprite(#spr_ScreenShot,0,0,#ScreenWidth,#ScreenHeight)
SaveSprite(#spr_ScreenShot,"screenshot"+Str(Number)+".bmp")
FreeSprite(#spr_ScreenShot)
EndProcedure
Procedure.l DrawMenuButton(X,Y,Text$)
Protected Pressed, Width = 300, Height = 48
X - Width/2
Box(X,Y,Width,Height,RGB(0,96,64))
If MouseX() > X And MouseX() < X+Width And MouseY() > Y And MouseY() < Y+Height
If MB_Left = 3
Pressed = #True
MB_Left = 0
EndIf
Box(X+3,Y+3,Width-6,Height-6,RGB(0,184,64))
FrontColor(RGB(200,0,0))
Else
Box(X+3,Y+3,Width-6,Height-6,RGB(0,128,64))
FrontColor(RGB(100,0,0))
EndIf
DrawingFont(FontID(#fnt_Impact_24))
DrawTextCentered(X+Width/2,Y+Height/2,Text$)
ProcedureReturn Pressed
EndProcedure
Procedure.l MainMenu()
Protected Selected = -1
Repeat
ExamineKeyboard(): ExamineMouse(): MB_Left()
If KeyboardReleased(#PB_Key_Escape)
Selected = 4
ElseIf KeyboardReleased(#PB_Key_F12)
SaveScreen()
EndIf
Delay(2): FlipBuffers(): ClearScreen(0)
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor(RGB(0,0,198))
DrawingFont(FontID(#fnt_Impact_120))
DrawTextXCentered(#ScreenWidth/2,68,#Name)
FrontColor(RGB(198,0,0))
DrawingFont(FontID(#fnt_Impact_24))
DrawTextXCentered(#ScreenWidth/2,240,#Version)
DrawingFont(FontID(#fnt_Impact_18))
DrawTextXCentered(#ScreenWidth/2,620,#Copyright)
DrawTextXCentered(#ScreenWidth/2,645,"All rights reserved.")
If DrawMenuButton(#ScreenWidth/2,300,"Single player")
Selected = 0
ElseIf DrawMenuButton(#ScreenWidth/2,362,"Extras")
Selected = 1
ElseIf DrawMenuButton(#ScreenWidth/2,486,"Credits")
Selected = 2
ElseIf DrawMenuButton(#ScreenWidth/2,424,"Options")
Selected = 3
ElseIf DrawMenuButton(#ScreenWidth/2,548,"Exit")
Selected = 4
EndIf
StopDrawing()
DisplayTransparentSprite(#spr_Cursor,MouseX()-16,MouseY()-16)
Until Selected > -1
ProcedureReturn Selected
EndProcedure
Procedure.l Options()
Protected Selected = -1
Repeat
ExamineKeyboard(): ExamineMouse(): MB_Left()
If KeyboardReleased(#PB_Key_Escape)
Selected = 0
ElseIf KeyboardReleased(#PB_Key_F12)
SaveScreen()
EndIf
Delay(2): FlipBuffers(): ClearScreen(0)
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor(RGB(0,0,198))
DrawingFont(FontID(#fnt_Impact_120))
DrawTextXCentered(#ScreenWidth/2,68,"Options")
FrontColor(RGB(198,0,0))
DrawingFont(FontID(#fnt_Impact_24))
DrawTextXCentered(#ScreenWidth/2,240,"Game options")
If DrawMenuButton(#ScreenWidth/2,400,"Steuerung")
Steuerung()
EndIf
If DrawMenuButton(#ScreenWidth/2,548,"Back")
Selected = 0
EndIf
StopDrawing()
DisplayTransparentSprite(#spr_Cursor,MouseX()-16,MouseY()-16)
Until Selected > -1
ProcedureReturn Selected
EndProcedure
Procedure Steuerung()
Delay(2): FlipBuffers(): ClearScreen(0)
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor(RGB(0,0,198))
DrawingFont(FontID(#fnt_Impact_18))
DrawTextXCentered(#ScreenWidth/2,100,"Steuerung")
StopDrawing()
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Escape)
Menu = #mnu_Options
EndIf
EndProcedure
Procedure.l Extras()
Protected Selected = -1
Repeat
ExamineKeyboard(): ExamineMouse(): MB_Left()
If KeyboardReleased(#PB_Key_Escape)
Selected = 0
ElseIf KeyboardReleased(#PB_Key_F12)
SaveScreen()
EndIf
Delay(2): FlipBuffers(): ClearScreen(0)
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor(RGB(0,0,198))
DrawingFont(FontID(#fnt_Impact_120))
DrawTextXCentered(#ScreenWidth/2,68,"Extras")
If DrawMenuButton(#ScreenWidth/2,480,"Musik")
Selected = 5
EndIf
If DrawMenuButton(#ScreenWidth/2,548,"Back")
Selected = 0
EndIf
StopDrawing()
DisplayTransparentSprite(#spr_Cursor,MouseX()-16,MouseY()-16)
Until Selected > -1
ProcedureReturn Selected
EndProcedure
Procedure.l Credits()
Delay(2): FlipBuffers(): ClearScreen(0)
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor(RGB(0,0,198))
DrawingFont(FontID(#fnt_Impact_18))
DrawTextXCentered(#ScreenWidth/2,100,"Credits")
FrontColor(RGB(0,0,198))
DrawingFont(FontID(#fnt_Impact_18))
DrawTextXCentered(#ScreenWidth/2,200,"Lead Designer")
DrawingFont(FontID(#fnt_Impact_18))
DrawTextXCentered(#ScreenWidth/2,223,"M a x i m i l i a n S t i l k e")
DrawingFont(FontID(#fnt_Impact_18))
DrawTextXCentered(#ScreenWidth/2,260,"Main Idea")
DrawingFont(FontID(#fnt_Impact_18))
DrawTextXCentered(#ScreenWidth/2,283,"M a x i m i l i a n S t i l k e")
DrawingFont(FontID(#fnt_Impact_18))
DrawTextXCentered(#ScreenWidth/2,306,"F a b i a n S c h r u m")
DrawingFont(FontID(#fnt_Impact_18))
DrawTextXCentered(#ScreenWidth/2,329,"B e n e d i k t V e t t e l s c h o ß")
DrawingFont(FontID(#fnt_Impact_24))
DrawTextXCentered(#ScreenWidth/2,360,"MSSoft©")
StopDrawing()
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Escape)
Menu = #mnu_Main
EndIf
EndProcedure
;-Initialize and open screen
If Not (InitKeyboard() And InitMouse() And InitSprite())
MessageRequester("Warning!","DirectX 7 or later not found!",#PB_MessageRequester_Ok)
End
EndIf
If Not OpenScreen(#ScreenWidth,#ScreenHeight,#ScreenDepth,#Name)
MessageRequester("Warning!","Can't open a "+Str(#ScreenWidth)+"x"+Str(#ScreenHeight)+" "+Str(#ScreenDepth)+"bit screen!",#PB_MessageRequester_Ok)
End
EndIf
;-Load resources
;LoadFont(#fnt_Arial_08_Bold,"Arial",8,#PB_Font_Bold)
LoadFont(#fnt_Impact_18,"Impact",18)
LoadFont(#fnt_Impact_24,"Impact",24)
LoadFont(#fnt_Impact_120,"Impact",120)
;Create a crappy mouse cursor
CreateSprite(#spr_Cursor,32,32)
StartDrawing(SpriteOutput(#spr_Cursor))
DrawingMode(#PB_2DDrawing_Outlined)
Circle(16,16,16,255+256*255+256*256*255)
Circle(16,16,1,255+256*255+256*256*255)
StopDrawing()
MouseLocate(#ScreenWidth/2,415)
;-Main loop start
Repeat
;-Menu handling
Select Menu
Case #mnu_Main
Select MainMenu()
Case 0: Menu = #mnu_None ;Single player
Case 1: Menu = #mnu_Extras ;Extras
Case 2: Menu = #mnu_Credits ;Credits
Case 3: Menu = #mnu_Options
Case 4: Break
EndSelect
Case #mnu_Options
Select Options()
Case 0: Menu = #mnu_Main
Case 1: Menu = #mnu_steuerung
EndSelect
Case #mnu_Extras
Select Extras()
Case 0: Menu= #mnu_main
EndSelect
Case #mnu_Credits:
Select Credits()
EndSelect
EndSelect
If Menu <> #mnu_None: Continue: EndIf
;-The game...
Delay(2): FlipBuffers(): ClearScreen(0)
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor(RGB(0,0,198))
DrawingFont(FontID(#fnt_Impact_18))
DrawTextXCentered(#ScreenWidth/2,100,"You lose! Press escape to continue! (really fun game)")
StopDrawing()
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Escape)
Menu = #mnu_Main
EndIf
ForEver