;-> MacBurgher by Stefano Maria Regattin
;d> 7 agosto 2008 dalla versione per Windows
;m> 9,10,11,12,14,17 agosto 2008
;m> 11 settembre 2008
;m> 15,17 ottobre 2008
;m> 9 gennaio 2009
;m> 24,26 luglio 2009
;m> 15,17,27 novembre 2009
;m> 13,14,15,16,19,20,21 dicembre 2009
;m> 8,9,10,11,24,25 aprile 2010
;m> 4,5,7,8,9 maggio 2010
;m> 11,21 luglio 2010
;m> 6,7 marzo 2011
;m> 2,15 aprile 2011
;--------------------
JMP InizioDelProgramma
Dc.b "$VER: MacBurgher 1.0 (15.4.2011)"
Even
InizioDelProgramma
;--------------------------------------------------
;le seguenti costanti indicano il tipo di finestra
;the following constants state the window's kind
;------------------------------------------------
;window sizing button
#BottoneRidimensionaFinestra=1
;draggable window
#FinestraMovibile=2
;window depth button
#BottoneNascondiFinestra=4
;window close button
#BottoneChiudiFinestra=8
;sizing window right border (you must set gimme-zero-zero to use it)
#BordoDestraFinestraRidimensionabile=16
;sizing window bottom border (you must set gimme-zero-zero to use it)
#BordoBassoFinestraRidimensionabile=32
;backdrop window
#FinestraDiSfondo=256
;gimme-zero-zero window
#FinestraConMemoriaBottoni=1024
;borderless window
#FinestraSenzaBordi=2048
;window activated
#FinestraAttivata=4096
;---------------------------------------
;questi sono gli eventi di una finestra
;these are the events of a window
;---------------------------------
;you have pressed a mouse button
#HaiPremutoUnTastoDelTopo=8
;you have moved the mouse
#HaiMossoIlTopo=16
;you have pressed a button
#HaiPremutoUnBottone=32
;you have released a button
#HaiRilasciatoUnBottone=64
;you have activated a menu
#HaiAttivatoUnMenu=256
;you have closed the window
#HaiChiusoLaFinestra=512
;you have pressed a key
#HaiPremutoUnTasto=1024
;you have inserted a diskette
#HaiInseritoUnDisco=32768
;you have removed a diskette
#HaiToltoUnDisco=65536
;you have activated the window
#HaiAttivatoLaFinestra=262144
;you have deactivated the window
#HaiDisattivatoLaFinestra=524288
;-----------------------------------------
;questi sono i valori validi per MenuItem
;this are the valid values for MenuItem
;---------------------------------------
;normal menu
#MenuNormale=0
;switch menu
#MenuAttivoONonAttivo=1
;one of the deactivated voices
#UnaDelleVociNonAttive=2
;the current switch menu is active
#MenuAttivo=3
;the current voice is active
#UnaDelleVociAttiva=4
;-------------------------------------------
;questi sono i valori ascii dei tasti usati
;this are the used key ascii values
;-----------------------------------
;esc key ascii value
#TastoFugaASCII=27
;cursor up key ascii value
#TastoCursoreSuASCII=28
;cursor down key ascii value
#TastoCursoreGiuASCII=29
;cursor right key ascii value
#TastoCursoreDestraASCII=30
;cursor left key ascii value
#TastoCursoreSinistraASCII=31
;space bar key ascii value
#TastoSpazioASCII=32
;---------------------------
;queste sono altre costanti
;these are other constants
;--------------------------
;hamburgher image screen bitmap
#AreaGraficaSchermo=2
;window referring number
#Finestra=0
;high resolution screen flag
#SchermoAdAltaRisoluzione=8
;interlaced screen flag
#SchermoInterallacciato=16
;hamburgher screen
#SchermoPanino=1
;workbench screen referring number
#SchermoWB=0
;main window properties
#TipoFin=#BottoneChiudiFinestra+#FinestraConMemoriaBottoni+#FinestraAttivata
;menu referring number
#Menu=0
;topaz font height
#GrandezzaFonteTopaz=8
;empty block
#BloccoVuoto=0
;stairs
#Piattaforma=1
;bread above
#PaneSopra=2
;lettuce
#Lattuga=3
;beef
#Carne=4
;bread below
#PaneSotto=5
;create play map
#CreaLaMappa=0
;draw play map
#DisegnaLaMappa=1
;map height
#AltezzaMappa=30
;map width
#LarghezzaMappa=40
;block size
#GrandezzaBlocco=10
;hamburgher length
#LunghezzaFetta=8
;text without background colour
#TestoSenzaColoreDiSfondo=0
;at start
#Inizio=0
;in game
#Gioco=1
;hamburgher image height
#AltezzaImmaginePanino=#AltezzaMappa*#GrandezzaBlocco
;hamburgher image colours
#ColoriPanino=16
;hamburgher image
#ImmaginePanino=0
;hamburgher image width
#LarghezzaImmaginePanino=#LarghezzaMappa*#GrandezzaBlocco
;sandwiches maximum
#MassimoPanini=8
;workbench colours map
#MappaColoriWB=0
;hamburgher colours map
#MappaColoriPanino=1
;colour match
#PrecisioneColori=1
; window font size,level, hostile at right,hostile at left,hamburgher made, hamburghers made,in game hamburghers
DEFTYPE .b GrandezzaFonte, Livello,OstileADestra, OstileASinistra,PaninoCompletato,PaniniCompletati,PaniniMessi
; white colour,beef colour,leaf colour, black colour,hostiles colour,near hostiles colour,bread over colour
DEFTYPE .w ColoreBianco,ColoreCarne,ColoreLattuga,ColoreNero, ColoreOstili, ColoreOstiliVicino, ColorePaneSopra
; bread below colour,stairs colour, workbench colours
DEFTYPE .w ColorePaneSotto, ColorePiattaforma,ColoriWB
;end of the game
FineDelGioco.b=False
;main window width
XLunFin.w=#LarghezzaMappa*#GrandezzaBlocco
;main window height
YLunFin.w=#AltezzaMappa*#GrandezzaBlocco
;main window title
TitoloFinestra$="MacBurgher 1.0 by Stefano Maria Regattin"
Dim Mappa(#LarghezzaMappa-1,#AltezzaMappa-1)
;hostile characters variables
NEWTYPE .Ostile
;pepper time
TempoPepato.w
;hostile x position
XPos.w
;hostile y position
YPos.w
End NEWTYPE
Ostili.Ostile\TempoPepato=0,0,0
;hamburgher variables
NEWTYPE .Panino
;hamburgher x position
XPos.b
;bread over y position squares
YPosPaneSopra.w[#LunghezzaFetta]
;bread over final y position
YPosFinalePaneSopra.w
;lettuce y position squares
YPosLattuga.w[#LunghezzaFetta]
;lettuce final y position
YPosFinaleLattuga.w
;beaf y position squares
YPosCarne.w[#LunghezzaFetta]
;beaf final y position
YPosFinaleCarne.w
;bread below y position squares
YPosPaneSotto.w[#LunghezzaFetta]
;bread below final y position
YPosFinalePaneSotto.w
End NEWTYPE
Dim Panini.Panino(#MassimoPanini-1)
;opens the main window
Statement ApriLaFinestra{}
SHARED ColoreBianco
SHARED ColoreNero
SHARED ColoriWB
SHARED TitoloFinestra$
SHARED XLunFin
SHARED YLunFin
IndirizzoSchermo.l=Peek.l(Addr Screen(#SchermoWB))
LarghezzaSchermo.w=Peek.w(IndirizzoSchermo+12)
AltezzaSchermo.w=Peek.w(IndirizzoSchermo+14)
ColoreBianco=FindColor(#MappaColoriWB,255,255,255,#PrecisioneColori)
ColoreNero=FindColor(#MappaColoriWB,0,0,0,#PrecisioneColori)
XPosFin.w=(LarghezzaSchermo-XLunFin)/2
YPosFin.w=(AltezzaSchermo-YLunFin)/2
Window #Finestra,XPosFin,YPosFin,XLunFin,YLunFin,#TipoFin,TitoloFinestra$,ColoreNero,ColoreBianco
XLunFin+XLunFin-InnerWidth
YLunFin+YLunFin-InnerHeight
CloseWindow #Finestra
Window #Finestra,XPosFin,YPosFin,XLunFin,YLunFin,#TipoFin,TitoloFinestra$,ColoreNero,ColoreBianco
WJam #TestoSenzaColoreDiSfondo
End Statement
;moves the hostile characters close to the player character
Statement AvvicinaGliOstiliAlCuoco{XPosCuoco,YPosCuoco}
SHARED Mappa()
SHARED OstileADestra
SHARED OstileASinistra
SHARED Ostili
OstileADestra=False:OstileASinistra=False
XPosOstile.b=Ostili\XPos:YPosOstile.b=Ostili\YPos:YDistanza.b=YPosOstile-YPosCuoco
If YDistanza>0
If YPosOstile MOD 3=0
XDistanza.b=#LarghezzaMappa
For XPosScala.b=0 To #LarghezzaMappa-1
If Mappa(XPosScala,YPosOstile+1)=#Piattaforma
If Mappa(XPosScala,YPosOstile)=#Piattaforma
XNuovaDistanza.b=XPosOstile-XPosScala
If Abs(XNuovaDistanza)<Abs(XDistanza) Then XDistanza=XNuovaDistanza
EndIf
EndIf
Next XPosScala
XPiattaforma.b=Min(Max(XPosOstile-Sgn(XDistanza),0),#LarghezzaMappa-1)
If Mappa(XPiattaforma,YPosOstile+1)=#Piattaforma Then Ostili\XPos-Sgn(XDistanza):If XDistanza=0 Then Ostili\YPos-1
Else
Ostili\YPos-1
EndIf
EndIf
If YDistanza=0
XDistanza=XPosOstile-XPosCuoco
If YPosOstile<#AltezzaMappa-1
XPiattaforma=Min(Max(XPosOstile-Sgn(XDistanza),0),#LarghezzaMappa-1)
If Mappa(XPiattaforma,YPosOstile+1)=#BloccoVuoto Then XDistanza=#LarghezzaMappa
EndIf
If XDistanza<#LarghezzaMappa AND Abs(XDistanza)>1 Then Ostili\XPos-Sgn(XDistanza):XDistanza=Ostili\XPos-XPosCuoco
If XDistanza=-1 Then OstileASinistra=True
If XDistanza=1 Then OstileADestra=True
EndIf
If YDistanza<0
If YPosOstile MOD 3=0
XDistanza=#LarghezzaMappa
For XPosScala=0 To #LarghezzaMappa-1
If YPosOstile=#AltezzaMappa-3 Then FineScala.b=2 Else FineScala=3
For ScalaSotto=1 To FineScala
If Mappa(XPosScala,YPosOstile+ScalaSotto)=#Piattaforma
Scala.b=ScalaSotto
Else
Scala=0
EndIf
Next ScalaSotto
If Scala=FineScala
XNuovaDistanza=XPosOstile-XPosScala
If Abs(XNuovaDistanza)<Abs(XDistanza) Then XDistanza=XNuovaDistanza
EndIf
Next XPosScala
XPiattaforma=Min(Max(XPosOstile-Sgn(XDistanza),0),#LarghezzaMappa-1)
If YPosOstile<#AltezzaMappa-1 AND Mappa(XPiattaforma,YPosOstile+1)=#Piattaforma
Ostili\XPos-Sgn(XDistanza):If XDistanza=0 Then Ostili\YPos+1
Else
Ostili\XPos-Sgn(XDistanza):If XDistanza=0 Then Ostili\YPos+1
EndIf
Else
Ostili\YPos+1
EndIf
EndIf
End Statement
;clears the play map
Statement CancellaLaMappa{}
For Quadretto.b=#GrandezzaBlocco/2 To 1 Step -1
AllargamentoBlocco.b=#GrandezzaBlocco/2-Quadretto
For YMappa=0 To #AltezzaMappa-1
For XMappa=0 To #LarghezzaMappa-1
XInizioBlocco.w=XMappa*#GrandezzaBlocco+AllargamentoBlocco
YInizioBlocco.w=YMappa*#GrandezzaBlocco+AllargamentoBlocco
XFineBlocco.w=XInizioBlocco+Quadretto*2-1
YFineBlocco.w=YInizioBlocco+Quadretto*2-1
Wline XInizioBlocco,YInizioBlocco,XFineBlocco,YInizioBlocco,0
Wline XFineBlocco,YInizioBlocco,XFineBlocco,YFineBlocco,0
Wline XFineBlocco,YFineBlocco,XInizioBlocco,YFineBlocco,0
Wline XInizioBlocco,YFineBlocco,XInizioBlocco,YInizioBlocco,0
Next XMappa
Next YMappa
Next Quadretto
End Statement
;creates the hamburghers
Statement CreaIPanini{}
SHARED Livello
SHARED Mappa()
SHARED Panini()
SHARED PaniniMessi
Panino.b=0:PaniniMessi=(Livello-1) MOD #MassimoPanini+1
Repeat
For YMappa.b=1 To 16 Step 3
For XMappa.b=0 To #LarghezzaMappa-#LunghezzaFetta-1
If Panino<PaniniMessi
Casualita.b=Rnd(127-Min(Livello,127))
If Casualita=0
If Panino=0
FettaPresente.b=False
Else
FettaPresente=False
For PaninoPrima.b=0 To Panino-1
XPosPanino.b=Panini(PaninoPrima)\XPos
For Fetta.b=0 To #LunghezzaFetta-1
If XPosPanino=XMappa AND Panini(PaninoPrima)\YPosPaneSopra[Fetta]=YMappa*#GrandezzaBlocco-1 Then FettaPresente=True
If XPosPanino=XMappa AND Panini(PaninoPrima)\YPosLattuga[Fetta]=YMappa*#GrandezzaBlocco-1 Then FettaPresente=True
If XPosPanino=XMappa AND Panini(PaninoPrima)\YPosCarne[Fetta]=YMappa*#GrandezzaBlocco-1 Then FettaPresente=True
If XPosPanino=XMappa AND Panini(PaninoPrima)\YPosPaneSotto[Fetta]=YMappa*#GrandezzaBlocco-1 Then FettaPresente=True
Next Fetta
Next PaninoPrima
EndIf
If FettaPresente=False
For Fetta=0 To #LunghezzaFetta-1
Panini(Panino)\YPosPaneSopra[Fetta]=YMappa*#GrandezzaBlocco-1
Panini(Panino)\YPosLattuga[Fetta]=(YMappa+3)*#GrandezzaBlocco-1
Panini(Panino)\YPosCarne[Fetta]=(YMappa+6)*#GrandezzaBlocco-1
Panini(Panino)\YPosPaneSotto[Fetta]=(YMappa+9)*#GrandezzaBlocco-1
Mappa(XMappa+Fetta,YMappa+10)=#BloccoVuoto
Mappa(XMappa+Fetta,YMappa+11)=#BloccoVuoto
Mappa(XMappa+Fetta,YMappa+12)=#BloccoVuoto
Mappa(XMappa+Fetta,YMappa+13)=#BloccoVuoto
If YMappa<16 Then Mappa(XMappa+Fetta,YMappa+14)=#BloccoVuoto
Next Fetta
Panini(Panino)\YPosFinalePaneSopra=(YMappa+10)*#GrandezzaBlocco-1
Panini(Panino)\YPosFinaleLattuga=(YMappa+11)*#GrandezzaBlocco-1
Panini(Panino)\YPosFinaleCarne=(YMappa+12)*#GrandezzaBlocco-1
Panini(Panino)\YPosFinalePaneSotto=(YMappa+13)*#GrandezzaBlocco-1
Panini(Panino)\XPos=XMappa
Panino+1
EndIf
EndIf
EndIf
Next XMappa
Next YMappa
Until Panino=PaniniMessi
End Statement
;creates the play map
Statement CreaLaMappa{}
SHARED Mappa()
SHARED Livello
For YMappa.b=1 To #AltezzaMappa-1
Casualita.b=Rnd(Livello)
Repeat
Scala.b=0
For XMappa.b=0 To #LarghezzaMappa-1
If YMappa MOD 3=1
If Casualita=0
ElementoDellaMappa.b=#Piattaforma
Else
ElementoDellaMappa=#BloccoVuoto
EndIf
Else
If Mappa(XMappa,YMappa-1)=#Piattaforma
If Casualita=2
Casualita=1
Else
Casualita=Rnd(8+Livello) MOD 2+1
EndIf
Select Casualita
Case 1
ElementoDellaMappa=#BloccoVuoto
Case 2
ElementoDellaMappa=#Piattaforma
End Select
Else
ElementoDellaMappa=#BloccoVuoto
EndIf
EndIf
Mappa(XMappa,YMappa)=ElementoDellaMappa
If YMappa>2
If YMappa MOD 3=0
If Mappa(XMappa,YMappa)=#Piattaforma Then Scala+1
Else
Scala=2
EndIf
Else
Scala=2
EndIf
Next XMappa
Until Scala>1
Next YMappa
End Statement
;draws the ostile characters
Statement DisegnaGliOstili{}
SHARED OstileADestra
SHARED OstileASinistra
SHARED Ostili
SHARED ColoreOstili
SHARED ColoreOstiliVicino
XInizioBlocco.w=Ostili\XPos*#GrandezzaBlocco
YInizioBlocco.w=Ostili\YPos*#GrandezzaBlocco
XFineBlocco.w=XInizioBlocco+#GrandezzaBlocco-1
YFineBlocco.w=YInizioBlocco+#GrandezzaBlocco-1
Colore.w=ColoreOstili
If OstileADestra=True OR OstileASinistra=True Then Colore=ColoreOstiliVicino
WBox XInizioBlocco,YInizioBlocco,XFineBlocco,YFineBlocco,Colore
End Statement
;draws the player character
Statement DisegnaIlCuoco{XPosCuoco.b,YPosCuoco.b,ViteCuoco.b}
SHARED ColoreBianco
SHARED ColoreNero
SHARED GrandezzaFonte
XInizioBlocco.w=XPosCuoco*#GrandezzaBlocco
YInizioBlocco.w=YPosCuoco*#GrandezzaBlocco
XFineBlocco.w=XInizioBlocco+#GrandezzaBlocco-1
YFineBlocco.w=YInizioBlocco+#GrandezzaBlocco-1
WBox XInizioBlocco,YInizioBlocco,XFineBlocco,YFineBlocco,ColoreBianco
WLocate XInizioBlocco+1,YInizioBlocco-GrandezzaFonte:WColour ColoreBianco:Print ViteCuoco
End Statement
;draws the hamburghers
Statement DisegnaIPanini{XPosCuoco.w,YPosCuoco.w}
SHARED ColorePaneSopra
SHARED ColoreLattuga
SHARED ColoreCarne
SHARED ColorePaneSotto
SHARED Panini()
SHARED PaniniMessi
For Panino.b=0 To PaniniMessi-1
For Fetta.b=0 To #LunghezzaFetta-1
XPosBlocco.b=Panini(Panino)\XPos+Fetta
XPosFetta.w=XPosBlocco*#GrandezzaBlocco
YPosFetta.w=Panini(Panino)\YPosPaneSopra[Fetta]
If XPosCuoco=XPosBlocco AND YPosCuoco MOD 3=0
If YPosFetta>YPosCuoco*#GrandezzaBlocco-1 AND YPosFetta-YPosCuoco*#GrandezzaBlocco-1<#GrandezzaBlocco+#GrandezzaBlocco/2
Panini(Panino)\YPosPaneSopra[Fetta]+#GrandezzaBlocco/2
EndIf
EndIf
WBox XPosFetta,YPosFetta,XPosFetta+#GrandezzaBlocco-1,YPosFetta+#GrandezzaBlocco-1,ColorePaneSopra
YPosFetta=Panini(Panino)\YPosLattuga[Fetta]
If XPosCuoco=XPosBlocco AND YPosCuoco MOD 3=0
If YPosFetta>YPosCuoco*#GrandezzaBlocco-1 AND YPosFetta-YPosCuoco*#GrandezzaBlocco-1<#GrandezzaBlocco+#GrandezzaBlocco/2
Panini(Panino)\YPosLattuga[Fetta]+#GrandezzaBlocco/2
EndIf
EndIf
WBox XPosFetta,YPosFetta,XPosFetta+#GrandezzaBlocco-1,YPosFetta+#GrandezzaBlocco-1,ColoreLattuga
YPosFetta=Panini(Panino)\YPosCarne[Fetta]
If XPosCuoco=XPosBlocco AND YPosCuoco MOD 3=0
If YPosFetta>YPosCuoco*#GrandezzaBlocco-1 AND YPosFetta-YPosCuoco*#GrandezzaBlocco-1<#GrandezzaBlocco+#GrandezzaBlocco/2
Panini(Panino)\YPosCarne[Fetta]+#GrandezzaBlocco/2
EndIf
EndIf
WBox XPosFetta,YPosFetta,XPosFetta+#GrandezzaBlocco-1,YPosFetta+#GrandezzaBlocco-1,ColoreCarne
YPosFetta=Panini(Panino)\YPosPaneSotto[Fetta]
If XPosCuoco=XPosBlocco AND YPosCuoco MOD 3=0
If YPosFetta>YPosCuoco*#GrandezzaBlocco-1 AND YPosFetta-YPosCuoco*#GrandezzaBlocco-1<#GrandezzaBlocco+#GrandezzaBlocco/2
Panini(Panino)\YPosPaneSotto[Fetta]+#GrandezzaBlocco/2
EndIf
EndIf
WBox XPosFetta,YPosFetta,XPosFetta+#GrandezzaBlocco-1,YPosFetta+#GrandezzaBlocco-1,ColorePaneSotto
Next Fetta
Next Panino
End Statement
;draws the play map
Statement DisegnaLaMappa{Modo.b}
SHARED Mappa()
SHARED ColoreCarne
SHARED ColoreLattuga
SHARED ColoreNero
SHARED ColorePaneSopra
SHARED ColorePaneSotto
SHARED ColorePiattaforma
If Modo=#Inizio
For Quadretto.b=1 To #GrandezzaBlocco/2
AllargamentoBlocco.b=#GrandezzaBlocco/2-Quadretto
For YMappa.b=0 To #AltezzaMappa-1
For XMappa.b=0 To #LarghezzaMappa-1
ElementoDellaMappa.b=Mappa(XMappa,YMappa)
If ElementoDellaMappa=#Piattaforma Then Colore.b=ColorePiattaforma Else Colore=ColoreNero
XInizioBlocco.w=XMappa*#GrandezzaBlocco+AllargamentoBlocco
YInizioBlocco.w=YMappa*#GrandezzaBlocco+AllargamentoBlocco
XFineBlocco.w=XInizioBlocco+Quadretto*2-1
YFineBlocco.w=YInizioBlocco+Quadretto*2-1
WBox XInizioBlocco,YInizioBlocco,XFineBlocco,YFineBlocco,Colore
Next XMappa
Next YMappa
Next Quadretto
EndIf
If Modo=#Gioco
For YMappa=0 To #AltezzaMappa-1
For XMappa=0 To #LarghezzaMappa-1
ElementoDellaMappa.b=Mappa(XMappa,YMappa)
Select ElementoDellaMappa
Case #BloccoVuoto
Colore=ColoreNero
Case #Piattaforma
Colore=ColorePiattaforma
Case #PaneSopra
Colore=ColorePaneSopra
Case #Lattuga
Colore=ColoreLattuga
Case #Carne
Colore=ColoreCarne
Case #PaneSotto
Colore=ColorePaneSotto
End Select
XInizioBlocco=XMappa*#GrandezzaBlocco
YInizioBlocco=YMappa*#GrandezzaBlocco
XFineBlocco=XInizioBlocco+#GrandezzaBlocco-1
YFineBlocco=YInizioBlocco+#GrandezzaBlocco-1
WBox XInizioBlocco,YInizioBlocco,XFineBlocco,YFineBlocco,Colore
Next XMappa
Next YMappa
EndIf
End Statement
Statement FaiCadereLeFette{}
SHARED Panini()
SHARED PaniniMessi
For Panino.b=0 To PaniniMessi-1
For TipoDiFetta.b=#PaneSotto To #PaneSopra Step -1
FettaCaduta.b=0
For Fetta.b=0 To #LunghezzaFetta-1
Select TipoDiFetta
Case #PaneSopra
YPosFetta.w=Panini(Panino)\YPosPaneSopra[Fetta]
YPosFettaSotto.w=Panini(Panino)\YPosLattuga[Fetta]
Case #Lattuga
YPosFetta=Panini(Panino)\YPosLattuga[Fetta]
YPosFettaSotto=Panini(Panino)\YPosCarne[Fetta]
Case #Carne
YPosFetta=Panini(Panino)\YPosCarne[Fetta]
YPosFettaSotto=Panini(Panino)\YPosPaneSotto[Fetta]
Case #PaneSotto
YPosFetta=Panini(Panino)\YPosPaneSotto[Fetta]
End Select
If (YPosFetta+1)<Panini(Panino)\YPosFinalePaneSopra
If ((YPosFetta+1)/#GrandezzaBlocco) MOD 3=2 Then FettaCaduta+1
If ((YPosFetta+1)/#GrandezzaBlocco) MOD 3=0
If YPosFetta+#GrandezzaBlocco=YPosFettaSotto
Select TipoDiFetta
Case #PaneSopra
Panini(Panino)\YPosLattuga[Fetta]+#GrandezzaBlocco/2
Case #Lattuga
Panini(Panino)\YPosCarne[Fetta]+#GrandezzaBlocco/2
Case #Carne
Panini(Panino)\YPosPaneSotto[Fetta]+#GrandezzaBlocco/2
End Select
EndIf
FettaCaduta+1
EndIf
Else
FettaCaduta+1
EndIf
Next Fetta
If FettaCaduta=#LunghezzaFetta
For Fetta=0 To #LunghezzaFetta-1
Select TipoDiFetta
Case #PaneSopra
If Panini(Panino)\YPosPaneSopra[Fetta]<Panini(Panino)\YPosFinalePaneSopra
Panini(Panino)\YPosPaneSopra[Fetta]+#GrandezzaBlocco/2
EndIf
Case #Lattuga
If Panini(Panino)\YPosLattuga[Fetta]<Panini(Panino)\YPosFinaleLattuga
Panini(Panino)\YPosLattuga[Fetta]+#GrandezzaBlocco/2
EndIf
Case #Carne
If Panini(Panino)\YPosCarne[Fetta]<Panini(Panino)\YPosFinaleCarne
Panini(Panino)\YPosCarne[Fetta]+#GrandezzaBlocco/2
EndIf
Case #PaneSotto
If Panini(Panino)\YPosPaneSotto[Fetta]<Panini(Panino)\YPosFinalePaneSotto
Panini(Panino)\YPosPaneSotto[Fetta]+#GrandezzaBlocco/2
EndIf
End Select
Next Fetta
FettaCaduta=0
EndIf
Next TipoDiFetta
Next Panino
End Statement
;setups the menu
Statement ImpostaIlMenu{}
MenuTitle #Menu,0,"Gioco"
MenuItem #Menu,#MenuNormale,0,0,"Nuovo"
MenuItem #Menu,#MenuNormale,0,1,"Pausa"
MenuItem #Menu,#MenuNormale,0,2,"Esci"
SetMenu #Menu
End Statement
;hamburgher completed
Statement PaninoCompletato{}
SHARED ColoreBianco
SHARED FineDelGioco
SHARED Panini()
SHARED PaninoCompletato
SHARED PaniniCompletati
SHARED PaniniMessi
PaninoCompletato=0
For Panino.b=0 To PaniniMessi-1
FetteAPosto.b=0
For Fetta.b=0 To #LunghezzaFetta-1
If Panini(Panino)\YPosPaneSopra[Fetta]=Panini(Panino)\YPosFinalePaneSopra Then FetteAPosto+1
If Panini(Panino)\YPosLattuga[Fetta]=Panini(Panino)\YPosFinaleLattuga Then FetteAPosto+1
If Panini(Panino)\YPosCarne[Fetta]=Panini(Panino)\YPosFinaleCarne Then FetteAPosto+1
If Panini(Panino)\YPosPaneSotto[Fetta]=Panini(Panino)\YPosFinalePaneSotto Then FetteAPosto+1
Next Fetta
If FetteAPosto=#LunghezzaFetta*4 Then PaninoCompletato+1
Next Panino
If PaninoCompletato>PaniniCompletati
PaninoCompletato=True:PaniniCompletati+1:If PaniniCompletati=PaniniMessi Then FineDelGioco=True
EndIf
End Statement
;finds the needed colours
Statement TrovaIColori{}
SHARED ColoreCarne
SHARED ColoreLattuga
SHARED ColoreOstili
SHARED ColoreOstiliVicino
SHARED ColorePaneSopra
SHARED ColorePaneSotto
SHARED ColorePiattaforma
ColorePiattaforma=FindColor(#MappaColoriWB,63,63,127,#PrecisioneColori)
ColorePaneSopra=FindColor(#MappaColoriWB,255,191,127,#PrecisioneColori)
ColoreLattuga=FindColor(#MappaColoriWB,63,191,63,#PrecisioneColori)
ColoreCarne=FindColor(#MappaColoriWB,191,63,63,#PrecisioneColori)
ColorePaneSotto=FindColor(#MappaColoriWB,191,127,63,#PrecisioneColori)
ColoreOstili=FindColor(#MappaColoriWB,255,0,0,#PrecisioneColori)
ColoreOstiliVicino=FindColor(#MappaColoriWB,0,0,255,#PrecisioneColori)
End Statement
;************************************************
;* fine delle procedure ed inizio del programma *
;******* procedures end and program start *******
;************************************************
WBStartup
ColoriWB=2^WBDepth
WbToScreen #SchermoWB
InitPalette #MappaColoriWB,ColoriWB
For ColoreWB.w=0 To ColoriWB-1
If CheckAGA=True
AGAPalRGB #MappaColoriWB,ColoreWB,AGARed(ColoreWB),AGAGreen(ColoreWB),AGABlue(ColoreWB)
Else
PalRGB #MappaColoriWB,ColoreWB,Red(ColoreWB),Green(ColoreWB),Blue(ColoreWB)
EndIf
Next ColoreWB
InitPalette #MappaColoriPanino,ColoriWB
Screen #SchermoPanino,#SchermoAdAltaRisoluzione+#SchermoInterallacciato,"MacBurgher 1.0 image screen"
ScreensBitMap #SchermoPanino,#AreaGraficaSchermo
BitMap #ImmaginePanino,#LarghezzaMappa*#GrandezzaBlocco,#AltezzaMappa*#GrandezzaBlocco,WBDepth
LoadBitMap #ImmaginePanino,"Hamburgher.IFF",#MappaColoriPanino
Use Palette #MappaColoriPanino
XImmagine.w=(ScreenWidth-#LarghezzaImmaginePanino)/2:YImmagine.w=(ScreenHeight-#AltezzaImmaginePanino)/2
For YPunto.w=0 To #AltezzaImmaginePanino-1
For XPunto.w=0 To #LarghezzaImmaginePanino-1
Use BitMap #ImmaginePanino
Colore.b=Point(XPunto,YPunto)
If CheckAGA=True
ComponenteRosso.w=AGARed(Colore)
ComponenteVerde.w=AGAGreen(Colore)
ComponenteBlu.w=AGABlue(Colore)
Else
ComponenteRosso.w=Red(Colore)
ComponenteVerde.w=Green(Colore)
ComponenteBlu.w=Blue(Colore)
EndIf
ColorePunto.w=FindColor(#MappaColoriWB,ComponenteRosso,ComponenteVerde,ComponenteBlu,#PrecisioneColori)
Plot XPunto,YPunto,ColorePunto
Use BitMap #AreaGraficaSchermo
Plot XImmagine+XPunto,YImmagine+YPunto,Colore
Next XPunto
Next YPunto
CloseScreen #SchermoPanino:Use Screen #SchermoWB:ShowScreen #SchermoWB
OpenFontPrefs
GrandezzaFonte=DefaultFontHeight(1)
CloseFontPrefs
If GrandezzaFonte=0 Then GrandezzaFonte=#GrandezzaFonteTopaz
Livello=1:ViteCuoco.b=3
ApriLaFinestra{}
ImpostaIlMenu{}
TrovaIColori{}
CreaLaMappa{}
CreaIPanini{}
Repeat
If VitaPersa.b=True Then Delay_ 50:VitaPersa=False
DisegnaLaMappa{#Inizio}
XPosCuoco.b=0:YPosCuoco.b=#AltezzaMappa-1
Ostili\TempoPepato=0:Ostili\XPos=#LarghezzaMappa-1:Ostili\YPos=0
Repeat
DisegnaLaMappa{#Gioco}
DisegnaIPanini{XPosCuoco,YPosCuoco}
DisegnaIlCuoco{XPosCuoco,YPosCuoco,ViteCuoco}
DisegnaGliOstili{}
FaiCadereLeFette{}
PaninoCompletato{}
FlushEvents
EventoFinestra.l=WaitEvent
Select EventoFinestra
Case #HaiAttivatoUnMenu
If MenuHit=0 AND ItemHit=2 Then FineDelGioco=True
Case #HaiChiusoLaFinestra
FineDelGioco=True
Case #HaiPremutoUnTasto
TastoPremutoASCII.b=Asc(Inkey$)
Select TastoPremutoASCII
Case #TastoFugaASCII
FineDelGioco=True
Case #TastoCursoreSuASCII
If YPosCuoco>0 AND Mappa(XPosCuoco,YPosCuoco)>#BloccoVuoto Then YPosCuoco-1
Case #TastoCursoreGiuASCII
If YPosCuoco<#AltezzaMappa-1
If Mappa(XPosCuoco,YPosCuoco+1)>#BloccoVuoto
YPosCuoco+1
Else
If Mappa(XPosCuoco,YPosCuoco)=#Piattaforma
YPosCuoco+1
If YPosCuoco<#AltezzaMappa-1 AND Mappa(XPosCuoco,YPosCuoco)=#BloccoVuoto Then CuocoCaduto.b=True
EndIf
EndIf
EndIf
Case #TastoCursoreDestraASCII
If OstileADestra=False AND XPosCuoco<#LarghezzaMappa-1
PosCuoco=YPosCuoco MOD 3
Select PosCuoco
Case 0
XPosCuoco+1:If Mappa(XPosCuoco,YPosCuoco+1)=#BloccoVuoto Then CuocoCaduto=True
Case 1
If Mappa(XPosCuoco+1,YPosCuoco)>#BloccoVuoto Then XPosCuoco+1
Case 2
If YPosCuoco<#AltezzaMappa-1 Then CuocoCaduto=True
XPosCuoco+1
End Select
EndIf
Case #TastoCursoreSinistraASCII
If OstileASinistra=False AND XPosCuoco>0
PosCuoco=YPosCuoco MOD 3
Select PosCuoco
Case 0
XPosCuoco-1:If Mappa(XPosCuoco,YPosCuoco+1)=#BloccoVuoto Then CuocoCaduto=True
Case 1
If Mappa(XPosCuoco-1,YPosCuoco)>#BloccoVuoto Then XPosCuoco-1
Case 2
If YPosCuoco<#AltezzaMappa-1 Then CuocoCaduto=True
XPosCuoco-1
End Select
EndIf
End Select
End Select
If CuocoCaduto=True
While YPosCuoco<#AltezzaMappa-1 AND Mappa(XPosCuoco,YPosCuoco+1)=#BloccoVuoto
YPosCuoco+1
Wend
CuocoCaduto=False:VitaPersa=True
EndIf
AvvicinaGliOstiliAlCuoco{XPosCuoco,YPosCuoco}
Until VitaPersa=True OR FineDelGioco=True OR PaninoCompletato=True
If PaninoCompletato=True
BitMaptoWindow #ImmaginePanino,#Finestra:WaitEvent
Else
DisegnaLaMappa{#Gioco}
DisegnaIPanini{XPosCuoco,YPosCuoco}
DisegnaIlCuoco{XPosCuoco,YPosCuoco,ViteCuoco}
DisegnaGliOstili{}
EndIf
Delay_ 50
CancellaLaMappa{}
ViteCuoco-1:If ViteCuoco=0 Then FineDelGioco=True
Until FineDelGioco=True
Free BitMap #ImmaginePanino:CloseWindow #Finestra
End