; PureBasic Visual Designer v3.95 build 1485 (PB4Code) ;- Window Constants ; Enumeration #Window_Sodoku #Window_Progress EndEnumeration ;- MenuBar Constants ; Enumeration #MenuBar_0 EndEnumeration Enumeration #Game_New #Game_Load #Game_Save #Game_DBColor #Game_OColor #Game_NColor #Game_HBColor #Game_MBColor #Game_Create #Game_Enter #Game_Solve #Game_Exit #Undo_Undo #Undo_Delete #Undo_Color #Undo_Reset #Sound_On #Sound_Off #Sound_Custom #Sound_Default #Sound_WOff #Sound_WON #Sound_WCustom ;Help_Undo options moved to Undo Menu ;#Help_Undo ;#Help_Delete ;#Help_Color ;#Help_Reset #Help_Rules #Help_Help #Help_Menu #Help_About EndEnumeration Global Sound_Mode.l Global Sound_Custom.s="*.wav" ;- Gadget Constants ;string gadgets are used by the player ;to enter numbers 1-9 .... ;in a grid 9x9 there are 81 string gadgets ;BTop is used to highlight virtical columns ;BSide is used to highlight horzontal rows ;BImage is used to select a text color for entering numbers ;BNum is used to select a number to enter by mouseclick Global Dim Color(8) Enumeration #BString_0 #BString_80=#BString_0+80 #BTop_0 #BTop_8=#Btop_0+8 #BSide_0 #BSide_8=#BSide_0+8 #Text_0 #Text_1 #BNum_0 #BNum_8=#BNum_0+9 #BImage_0 #BImage_8=#BImage_0+8 #BMark #ProgressGadget EndEnumeration Procedure Open_Window_Sodoku() If OpenWindow(#Window_Sodoku, 306, 114, 266, 333, "Waffle's Sodoku", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered |#PB_Window_SizeGadget ) If CreateMenu(#MenuBar_0, WindowID(#Window_Sodoku)) MenuTitle("Game") MenuItem(#Game_New, "New") MenuItem(#Game_Load, "Load") MenuItem(#Game_Save, "Save") ;MenuBar() ;OpenSubMenu("Colors") ;MenuItem(#Game_DBColor,"Empty Back Color") ;MenuItem(#Game_OColor,"Master Back Color") ;MenuItem(#Game_NColor,"Number Back Color") ;MenuItem(#Game_HBColor,"Highlight Back Color") ;MenuItem(#Game_MBColor,"Marking Back Color") ;CloseSubMenu() MenuBar() MenuItem(#Game_Create, "Create") MenuItem(#Game_Enter, "Enter") MenuItem(#Game_Solve, "Solve") MenuBar() MenuItem(#Game_Exit, "Exit"+Chr(9)+"Alt+F4") MenuTitle("Undo") MenuItem(#Undo_Undo, "Undo"+Chr(9)+"Ctrl+Z") MenuItem(#Undo_Delete,"Delete Number") MenuItem(#Undo_Color,"Delete Color") MenuItem(#Undo_Reset,"Reset Game") MenuTitle("Sound") MenuItem(#Sound_On,"On") MenuItem(#Sound_Off,"Off") MenuItem(#Sound_Custom,"Load") MenuItem(#Sound_Default,"Default") MenuBar() MenuItem(#Sound_WOff,"Win Sound Off") MenuItem(#Sound_WON,"Default Win Sound") MenuItem(#Sound_WCustom,"Custom Win Sound") MenuTitle("Colors") MenuItem(#Game_DBColor,"Empty Back Color") MenuItem(#Game_OColor,"Master Back Color") MenuItem(#Game_NColor,"Number Back Color") MenuItem(#Game_HBColor,"Highlight Back Color") MenuItem(#Game_MBColor,"Marking Back Color") MenuTitle("Help") ;MenuItem(#Help_Undo, "Undo"+Chr(9)+"Ctrl+Z") ;MenuItem(#Help_Delete,"Delete Number") ;MenuItem(#Help_Reset,"Reset Game") ;MenuBar() MenuItem(#Help_Rules, "Rules") MenuItem(#Help_Help, "Help"+Chr(9)+"F1") MenuItem(#Help_Menu, "Options") MenuBar() MenuItem(#Help_About, "About") EndIf AddKeyboardShortcut(#Window_Sodoku, #PB_Shortcut_Control | #PB_Shortcut_Z, #Undo_Undo) AddKeyboardShortcut(#Window_Sodoku, #PB_Shortcut_F1, #Help_Help) If CreateGadgetList(WindowID(#Window_Sodoku)) ;string gadget grid LastGadget.l=#BString_0 StartGY.l=100 For BG=1 To 3 For gy=1 To 3 StartGX.l=50 For gx=1 To 3 For SG=1 To 3 StringGadget(LastGadget, StartGX, StartGY, 20, 20, "", #PB_String_Numeric | #ES_CENTER) LastGadget + 1 StartGX + 20 Next SG StartGX + 10 Next gx StartGY+20 Next gy StartGY+10 Next BG ;Top Button StartBX.l=50 LastBG=#BTop_0 For BG=1 To 3 For B=1 To 3 ButtonGadget(LastBG, StartBX, 70, 20, 20, "",#PB_Button_Toggle) LastBG + 1 StartBX +20 Next B StartBX+10 Next BG ;Side Button StartBY.l=100 LastBG=#BSide_0 For BG=1 To 3 For B=1 To 3 ButtonGadget(LastBG, 20, StartBY, 20, 20, "",#PB_Button_Toggle) LastBG + 1 StartBY +20 Next B StartBY+10 Next BG TextGadget(#Text_0, 10, 10, 30, 20, "Color:") ;button image gadgets ;first create 9 colors Dim C(8) Color(0)=RGB(255,0,0) color(1)=RGB(0,255,0) Color(2)=RGB(0,0,255) Color(3)=RGB(128,0,0) Color(4)=RGB(0,128,0) color(5)=RGB(0,0,128) Color(6)=RGB(129,129,129) color(7)=RGB(128,128,0) color(8)=RGB(0,128,128) ;then assign to buttons StartBX.l=50 For BG=0 To 8 C(BG)=CreateImage(#PB_Any,15,15) StartDrawing(ImageOutput(C(BG))) Box(0,0,15,15,Color(BG)) StopDrawing() ButtonImageGadget(#BImage_0+BG, StartBX, 10, 20, 20, ImageID(C(BG))) StartBX+20 Next BG TextGadget(#Text_1, 10, 40, 40, 20, "Number") StartBX.l=50 BT.l=1 For BG=#BNum_0 To #BNum_8 ButtonGadget(BG, StartBX, 40, 20, 20, Right(Str(BT),1),#PB_Button_Toggle) StartBX+20 BT+1 Next BG SetGadgetText(#BNum_8,"X") GadgetToolTip(#BNum_8, "Clear a spot") ButtonGadget(#BMark, 20, 70, 20, 20, "M",#PB_Button_Toggle) GadgetToolTip(#BMark, "Mark all numbers matching toolbar") EndIf EndIf EndProcedure Procedure ResizeGame(Width.l,Height.l) ;size is based on width and the original is 266, 333 RWindow.l=0 If Width=0 Width=WindowWidth(#Window_Sodoku) Height=WindowHeight(#Window_Sodoku) EndIf If Width<266 Width=266 RWindow=#True EndIf ;Height.l=333 ;RWindow=#True ;Else ; Height=WindowHeight(#Window_Sodoku) ;EndIf If Height<333 Height=333 ;Width=266 RWindow=#True EndIf If RWindow ;ResizeWindow(#Window_Sodoku,#PB_Ignore,#PB_Ignore,width,height) EndIf ;convert all starting postions to % of width/height ;string gadget grid LastGadget.l=#BString_0 StartGY.l=Int((100/333)*Height) SGX.l=Int((50/266)*Width) BXW.l=Int((20/266)*Width) BXS.l=Int((10/266)*Width) BYH.l=Int((20/333)*Height) BYS.l=Int((10/333)*Height) For BG=1 To 3 For gy=1 To 3 StartGX.l=SGX For gx=1 To 3 For SG=1 To 3 ResizeGadget(LastGadget, StartGX, StartGY, BXW, BYH) LastGadget + 1 StartGX + BXW Next SG StartGX + BXS Next gx StartGY+BYH Next gy StartGY+BYS Next BG ;Top Button StartBX.l=SGX StartBY.l=Int((70/333)*Height) LastBG=#BTop_0 For BG=1 To 3 For B=1 To 3 ResizeGadget(LastBG, StartBX, StartBY, BXW, BYH) LastBG + 1 StartBX +BXW Next B StartBX+BXS Next BG ;Side Button StartBY.l=Int((100/333)*Height) LastBG=#BSide_0 For BG=1 To 3 For B=1 To 3 ResizeGadget(LastBG, BXW, StartBY, BXW, BYH) LastBG + 1 StartBY +BYH Next B StartBY+BYS Next BG ResizeGadget(#Text_0,BXS, BYS, 3*BXS, BYH) ;then assign to buttons StartBX.l=Int((50/266)*Width) For BG=0 To 8 ResizeGadget(#BImage_0+BG, StartBX, BYS, BXW, BYH) StartBX+BXW Next BG ResizeGadget(#Text_1, BXS, 4*BYS, 4*BXS, BYH) StartBX.l=Int((50/266)*Width) BT.l=1 For BG=#BNum_0 To #BNum_8 ResizeGadget(BG, StartBX, 4*BYS, BXW, BYH) StartBX+BXW BT+1 Next BG ResizeGadget(#BMark, BXW, 7*BYS, BXW, BYH) EndProcedure Procedure ProgressWindow() OpenWindow(#Window_Progress, 100, 200, 300, 40, "Sodoku - Progress Window") StickyWindow(#Window_Progress,1) DisableWindow(#Window_Sodoku,1) CreateGadgetList(WindowID(#Window_Progress)) ProgressBarGadget(#ProgressGadget, 10, 10, 280, 20, 0, 81) EndProcedure Procedure RestoreWindow() StickyWindow(#Window_Progress,0) CloseWindow(#Window_Progress) DisableWindow(#Window_Sodoku,0) SetActiveWindow(#Window_Sodoku) EndProcedure Procedure.l PackerProgress(Position.l) SetGadgetState(#ProgressGadget, Position) Repeat WE=WindowEvent() If WE=#PB_Event_CloseWindow ProcedureReturn 0 EndIf Until WE=0 ;Debug "Return 1" ProcedureReturn 1 EndProcedure