
Please read the comment on top of the code.
update: fixed some small bugs and added an ending

Code: Select all
EnableExplicit
; #############################################################
;
; Welcome to SPIDLE
;
; This is a simple idle game such as cookie clicker.
; Click to add lines of code until you can buy upgrades.
;
; The game is pretty much untested and probably has issues.
; It was just written to test new mobile ui in SpiderBasic 3.
;
; It's recommended to use the cool new webview feature
; in the ide. Makes coding for mobile so much nicer!
; Otherwise don't forget to resize your browser window
; before running.
;
;
; uncomment this line to see Spidle in Android style:
;MobileStyle(#PB_Mobile_Android)
;
; #############################################################
Enumeration
#up1b
#up2b
#up3b
#up4b
#up5b
#up6b
#up7b
#up8b
#up1o
#up1p
#up2o
#up2p
#up3o
#up3p
#up4o
#up4p
#up5o
#up5p
#up6o
#up6p
#up7o
#up7p
#up8o
#up8p
#Info
#InfoDialog
#InfoDialogClose
#WinDialog
#TabHome
#TabBar
#Laptop
#CodeButton
#loC
#lpS
#bank
#bank2
#upgrades
#achievements
EndEnumeration
Enumeration images
#IMG_Laptop
EndEnumeration
Global lines.d = 0
Global linesPerClick.d = 1
Global linesPerSecond.d = 0
Global linesBank.d = 0
Global multiplier.f = 1
;{ upgrades
Structure upgrade
name.s
action.s
price.i
loc.i
multiply.f
owned.i
pID.i
oID.i
bID.i
EndStructure
Global NewList upgrades.upgrade()
AddElement(upgrades())
upgrades()\name = "CODE MONKEY"
upgrades()\action = "+1 line of code per second."
upgrades()\price = 15
upgrades()\loc = 1
upgrades()\pID = #up1p
upgrades()\oID = #up1o
upgrades()\bID = #up1b
AddElement(upgrades())
upgrades()\name = "PRO CODER"
upgrades()\action = "+10 lines of code per second."
upgrades()\price = 100
upgrades()\loc = 100
upgrades()\pID = #up2p
upgrades()\oID = #up2o
upgrades()\bID = #up2b
AddElement(upgrades())
upgrades()\name = "BETTER PIZZA"
upgrades()\action = "+10% output"
upgrades()\price = 2500
upgrades()\multiply = 0.1
upgrades()\pID = #up3p
upgrades()\oID = #up3o
upgrades()\bID = #up3b
AddElement(upgrades())
upgrades()\name = "TIPS FROM PETER"
upgrades()\action = "+500 lines of code per second."
upgrades()\price = 10000
upgrades()\loc = 500
upgrades()\pID = #up4p
upgrades()\oID = #up4o
upgrades()\bID = #up4b
AddElement(upgrades())
upgrades()\name = "READ THE FABULOUS MANUAL"
upgrades()\action = "+1000 lines of code per second."
upgrades()\price = 250000
upgrades()\loc = 1000
upgrades()\pID = #up5p
upgrades()\oID = #up5o
upgrades()\bID = #up5b
AddElement(upgrades())
upgrades()\name = "AI CODING SUPPORT"
upgrades()\action = "+10000 lines of code per second."
upgrades()\price = 10000000
upgrades()\loc = 10000
upgrades()\pID = #up6p
upgrades()\oID = #up6o
upgrades()\bID = #up6b
AddElement(upgrades())
upgrades()\name = "DOUBLE IMPACT"
upgrades()\action = "x2 output from each coder!"
upgrades()\price = 100000000
upgrades()\multiply = 2
upgrades()\pID = #up7p
upgrades()\oID = #up7o
upgrades()\bID = #up7b
AddElement(upgrades())
upgrades()\name = "RIGHT SAID FRED"
upgrades()\action = "x4 output with SB4!"
upgrades()\price = 1000000000
upgrades()\multiply = 4
upgrades()\pID = #up8p
upgrades()\oID = #up8o
upgrades()\bID = #up8b
;}
;{ achievements
Structure achievement
name.s
lines.d
earned.i
EndStructure
Global NewList achievements.achievement()
AddElement(achievements())
achievements()\name = "Code 42 lines"
achievements()\lines = 42
AddElement(achievements())
achievements()\name = "Code 100 lines"
achievements()\lines = 100
AddElement(achievements())
achievements()\name = "Code 1000 lines"
achievements()\lines = 1000
AddElement(achievements())
achievements()\name = "Kaprekar!"
achievements()\lines = 6174
AddElement(achievements())
achievements()\name = "Code 100 000 lines"
achievements()\lines = 100000
AddElement(achievements())
achievements()\name = "Code 1 000 000 lines"
achievements()\lines = 1000000
AddElement(achievements())
achievements()\name = "Code 10 000 000 lines"
achievements()\lines = 10000000
AddElement(achievements())
achievements()\name = "Code 100 000 000 lines"
achievements()\lines = 100000000
AddElement(achievements())
achievements()\name = "Code 1 000 000 000 lines"
achievements()\lines = 1000000000
;}
;- IMAGES
ExamineDesktops()
;{ Laptop
If CreateImage(#IMG_Laptop, DesktopWidth(0)*0.9, DesktopWidth(0)*0.85, #PB_Ignore, #White)
Define font = LoadFont(0, "Arial", DesktopWidth(0)*0.7)
StartDrawing(ImageOutput(#IMG_Laptop))
DrawingFont(FontID(0))
DrawText(DesktopWidth(0)*0.45-TextWidth("💻")*0.5,0,"💻")
StopDrawing()
EndIf
;}
;- DIALOGS
;{ Info
If ContainerMobile(#InfoDialog, #PB_Mobile_Dialog, "padding:12px")
ContainerMobile(#PB_Any, #PB_Mobile_Row, "padding:12px")
TextMobile(#PB_Any, "SpiderBasic 3 rocks!", #PB_Mobile_Center)
CloseMobileContainer()
ContainerMobile(#PB_Any, #PB_Mobile_Row, "padding:12px")
ButtonMobile(#InfoDialogClose, "OK", #PB_Mobile_Center)
CloseMobileContainer()
CloseMobileContainer()
EndIf
; Trillionaire
If ContainerMobile(#WinDialog, #PB_Mobile_Dialog, "padding:12px")
ContainerMobile(#PB_Any, #PB_Mobile_Row, "padding:16px")
TextMobile(#PB_Any, "TRILLIONAIRE!", #PB_Mobile_Center)
HtmlMobile("<br\>")
TextMobile(#PB_Any, "You are now the richest person on earth. "+
"What will you do with all the money?", #PB_Mobile_Center)
HtmlMobile("<br\>")
TextMobile(#PB_Any, "Thanks for playing. Have a nice day!", #PB_Mobile_Center)
CloseMobileContainer()
CloseMobileContainer()
EndIf
;}
;- PAGES
;{ Home
If ContainerMobile(#PB_Any, #PB_Mobile_Template, "background-color:#ffffff;", "Home")
ContainerMobile(#Laptop, #PB_Mobile_Row, "padding-top:30px" )
ImageMobile(#Laptop, ImageID(#IMG_Laptop), #PB_Mobile_Center)
CloseMobileContainer()
ContainerMobile(#PB_Any, #PB_Mobile_Row)
ButtonMobile(#CodeButton, "Click to Code")
CloseMobileContainer()
ContainerMobile(#PB_Any, #PB_Mobile_Row, "padding-top:40px")
TextMobile(#bank, "Cash: " + Str(linesBank)+ " €", #PB_Mobile_Center)
CloseMobileContainer()
ContainerMobile(#PB_Any, #PB_Mobile_Row, "padding:20px")
TextMobile(#LoC, "Lines of Code: " + Str(lines) , #PB_Mobile_Center)
CloseMobileContainer()
ContainerMobile(#PB_Any, #PB_Mobile_Row, "padding-bottom:100px")
TextMobile(#LpS, "Lines per second: " + Str(linesPerSecond) , #PB_Mobile_Center)
CloseMobileContainer()
CloseMobileContainer()
EndIf
;}
;{ Upgrades
If ContainerMobile(#PB_Any, #PB_Mobile_Template, "background-color:#ffffff;", "Upgrades")
ContainerMobile(#PB_Any, #PB_Mobile_Row, "padding:20px" )
TextMobile(#bank2, "Cash: "+Str(linesBank)+" €")
CloseMobileContainer()
ResetList(upgrades())
While NextElement(upgrades())
ContainerMobile(#PB_Any, #PB_Mobile_Row, "padding:20px" )
TextMobile(upgrades()\oID, Str(upgrades()\owned), #PB_Mobile_Left)
TextMobile(#PB_Any, upgrades()\name, #PB_Mobile_Center)
HtmlMobile("<br\>")
TextMobile(#PB_Any, upgrades()\action)
HtmlMobile("<br\>")
TextMobile(upgrades()\pID, "Cost: " + FormatNumber(upgrades()\price,0,",",".")+" €")
ButtonMobile(upgrades()\bID, "Buy", #PB_Mobile_Right)
CloseMobileContainer()
Wend
CloseMobileContainer()
EndIf
;}
;{ Achievements
If ContainerMobile(#PB_Any, #PB_Mobile_Template, "", "Achievements")
ContainerMobile(#PB_Any, #PB_Mobile_Row, "padding:20px" )
TextMobile(#PB_Any, "You got 1 from " + Str(ListSize(achievements()))+ " achievements.", #PB_Mobile_Center)
CloseMobileContainer()
ListMobile(#achievements, #PB_Mobile_InSet)
CloseMobileContainer()
CloseMobileContainer()
EndIf
;}
;- MAIN Container
;{
If ContainerMobile(#PB_Any, #PB_Mobile_Page, "", "")
ToolBarMobile(#PB_Any)
TextMobile(#TabHome, "S · P · I · D · L · E", #PB_Mobile_Center)
ButtonMobile(#Info, "md-info", #PB_Mobile_Icon | #PB_Mobile_Right)
CloseMobileContainer()
TabBarMobile(#TabBar)
AddTabBarMobileItem(#TabBar, "Home", "md-home", "md-home", "Home")
AddTabBarMobileItem(#TabBar, "Upgrades", "md-caret-up-circle", "md-caret-up-circle", "Upgrades")
AddTabBarMobileItem(#TabBar, "Achievements", "md-badge-check", "md-badge-check", "Achievements")
CloseMobileContainer()
CloseMobileContainer()
EndIf
;}
Procedure Update()
If linesBank > 1000000000000
RemoveTimer(0)
ShowMobile(#WinDialog, #True)
ProcedureReturn 0
EndIf
SetMobileText(#loC, "Lines of code: " + FormatNumber(lines.d, 0, ",", "."))
SetMobileText(#lpS, "Lines per second: " + FormatNumber(linesPerSecond.d, 0, ",", "."))
SetMobileText(#bank, "Cash: " + FormatNumber(linesBank.d, 0, ",", ".") + " €")
SetMobileText(#bank2, "Cash: " + FormatNumber(linesBank.d, 0, ",", ".") + " €")
ResetList(upgrades())
While NextElement(upgrades())
DisableMobile(upgrades()\bID, #True)
If linesBank > upgrades()\price-1
DisableMobile(upgrades()\bID, #False)
SetMobileAttribute(#TabBar, "badge", "+", 1)
EndIf
Wend
ResetList(achievements())
While NextElement(achievements())
If achievements()\earned = 0
If lines > achievements()\lines
achievements()\earned = 1
AddListMobileItem(#achievements, achievements()\name, #PB_Mobile_LongDivider)
SetMobileAttribute(#TabBar, "badge", "+", 2)
EndIf
EndIf
Wend
EndProcedure
AddTimer(0, 1000)
Procedure TimerEvents()
lines + linesPerSecond
linesBank + linesPerSecond*0.25
Update()
EndProcedure
BindEvent(#PB_Event_Timer, @TimerEvents())
Procedure MobileEvents()
Protected clicked = EventMobile()
Select clicked
Case #CodeButton
lines + linesPerClick
linesBank + linesPerClick*0.25
Update()
Case #up1B To #up8b
SelectElement(upgrades(),clicked)
linesBank - upgrades()\price
linesPerSecond + upgrades()\loc
multiplier + upgrades()\multiply
linesPerSecond * multiplier
SetMobileAttribute(#TabBar, "badge", "", 1)
upgrades()\price * 1.15
upgrades()\owned + 1
SetMobileText(upgrades()\pID, "Cost: " + Str(upgrades()\price) + " €")
SetMobileText(upgrades()\oID, Str(upgrades()\owned))
Update()
Case #TabBar
If GetMobileState(#TabBar) = 2
SetMobileAttribute(#TabBar, "badge", "", 2)
EndIf
Case #Info
ShowMobile(#InfoDialog, #True)
Case #InfoDialogClose
ShowMobile(#InfoDialog, #False)
EndSelect
EndProcedure
BindEvent(#PB_Event_Mobile, @MobileEvents())