Small Basic
jueves, 12 de marzo de 2020
JUEGO 2
GraphicsWindow
.
Hide
(
)
GraphicsWindow
.
CanResize
=
"false"
GraphicsWindow
.
Width
=
1024
GraphicsWindow
.
Height
=
768
GraphicsWindow
.
Title
=
"SOkoCUTE
GraphicsWindow
.
Left
=
(
Desktop
.
Width
-
1024
)
/
2
GraphicsWindow
.
Top
=
(
Desktop
.
Height
-
768
)
/
2
'-----------------------------------------------------------------------------------------
'preload some gfx
'-----------------------------------------------------------------------------------------
Path
=
"http://smallbasic.com/drop/soko"
background
=
ImageList
.
LoadImage
(
Path
+
"/sokocuteff.png"
)
image
[
"A"
]
=
ImageList
.
LoadImage
(
Path
+
"/sokocute0a.png"
)
image
[
"B"
]
=
ImageList
.
LoadImage
(
Path
+
"/sokocute0b.png"
)
image
[
"7"
]
=
ImageList
.
LoadImage
(
Path
+
"/sokocute07.png"
)
image
[
"6"
]
=
ImageList
.
LoadImage
(
Path
+
"/sokocute06.png"
)
image
[
"5"
]
=
ImageList
.
LoadImage
(
Path
+
"/sokocute05.png"
)
image
[
"4"
]
=
ImageList
.
LoadImage
(
Path
+
"/sokocute04.png"
)
image
[
"3"
]
=
ImageList
.
LoadImage
(
Path
+
"/sokocute03.png"
)
image
[
"2"
]
=
ImageList
.
LoadImage
(
Path
+
"/sokocutegg.png"
)
image
[
"1"
]
=
ImageList
.
LoadImage
(
Path
+
"/sokocutess.png"
)
image
[
"0"
]
=
ImageList
.
LoadImage
(
Path
+
"/sokocute00.png"
)
star
=
ImageList
.
LoadImage
(
Path
+
"/sokocutels.png"
)
heart
=
ImageList
.
LoadImage
(
Path
+
"/sokocutelh.png"
)
'GraphicsWindow.DrawText(100,100, Program.Directory)
GraphicsWindow
.
DrawImage
(
background
,
0
,
0
)
'-----------------------------------------------------------------------------------------
'init the keys
'-----------------------------------------------------------------------------------------
leftKey
=
"Left"
rightKey
=
"Right"
forwardKey
=
"Up"
backKey
=
"Down"
fireKey
=
"Space"
returnKey
=
"Return"
escapeKey
=
"Escape"
pauseKey
=
"P"
resetKey
=
"R"
pluskey
=
"F1"
minusKey
=
"F2"
'important var for moving the crystals
korrx
=
36
'init any other var
animtime
=
1500
status
=
"start"
game
=
"gamearray"
block
=
"blockArray"
true
=
1
false
=
0
stage
=
0
'init level data
InitLevels
(
)
'init stars and hearts
InitStars
(
)
ResetStars
(
)
' animate title at first
titleshape
=
Shapes
.
AddImage
(
Path
+
"/sokocute.png"
)
Shapes
.
Move
(
titleshape
,
140
,
-
350
)
Shapes
.
Animate
(
titleshape
,
140
,
170
,
2500
)
txtstart
=
Shapes
.
AddImage
(
Path
+
"/sokocutetx.png"
)
Shapes
.
Move
(
txtstart
,
305
,
1800
)
Shapes
.
Animate
(
txtstart
,
305
,
420
,
3000
)
'calculate delay (higher number means more precision)
timestart
=
Clock
.
ElapsedMilliseconds
i
=
0
while
(
i
<
500000
)
i
=
i
+
1
Endwhile
timeloop
=
Clock
.
ElapsedMilliseconds
-
timestart
mssec
=
timeloop
/
500000
loopmssec
=
1
/
mssec
KeyUp
(
)
Main
(
)
Sub
Main
GraphicsWindow
.
Show
(
)
GraphicsWindow
.
KeyDown
=
KeyDown
GraphicsWindow
.
KeyUp
=
KeyUp
endtime
=
Clock
.
ElapsedMilliseconds
starttime
=
Clock
.
ElapsedMilliseconds
blinktime
=
Clock
.
ElapsedMilliseconds
gamestarttime
=
Clock
.
ElapsedMilliseconds
gemfall
=
false
freecells
=
1
blink
=
0
fps
=
0
looptime
=
0
play
=
1
pause
=
0
rot
=
0
While
(
play
=
1
)
fps
=
fps
+
1
Input
(
)
if
status
=
"game"
then
'try fixed fps - 60 might be enough
loopdelay
=
(
1000
/
60
)
*
loopmssec
num
=
0
While
(
num
<
loopdelay
)
num
=
num
+
1
endwhile
If
gemfall
=
false
and
gemwater
<>
99
and
Clock
.
ElapsedMilliseconds
-
watertime
>
550
then
Shapes
.
Animate
(
crystalimg
[
gemwater
]
,
Shapes
.
GetLeft
(
crystalimg
[
gemwater
]
)
,
Shapes
.
GetTop
(
crystalimg
[
gemwater
]
)
+
35
,
650
)
gemfall
=
true
EndIf
If
gemfall
=
true
and
gemwater
<>
99
and
Clock
.
ElapsedMilliseconds
-
watertime
>
550
and
Clock
.
ElapsedMilliseconds
-
watertime
<
1400
then
gemzoom
=
gemzoom
-
gemmove
gemmove
=
gemmove
+
0.001
Sound
.
Stop
(
Path
+
"/sokocute02.wav"
)
Sound
.
Play
(
Path
+
"/sokocute02.wav"
)
Shapes
.
Zoom
(
crystalimg
[
gemwater
]
,
gemzoom
,
gemzoom
)
EndIf
If
gemwater
<>
99
and
Clock
.
ElapsedMilliseconds
-
watertime
>
1400
then
Shapes
.
move
(
crystalimg
[
gemwater
]
,
1000
,
1000
)
Shapes
.
move
(
crystalbnk
[
gemwater
]
,
1000
,
1000
)
gemwater
=
99
gemmove
=
0
gemfall
=
false
EndIf
If
(
gemchng
<>
99
)
And
(
Clock
.
ElapsedMilliseconds
-
gemtime
>
400
)
Then
if
ground
[
gemy
]
[
gemx
]
=
1
then
Shapes
.
Move
(
crystalbnk
[
gemchng
]
,
Shapes
.
GetLeft
(
crystalimg
[
gemchng
]
)
,
Shapes
.
GetTop
(
crystalimg
[
gemchng
]
)
)
Shapes
.
Move
(
crystalimg
[
gemchng
]
,
gemchng
*
52
,
-
100
)
freecells
=
0
For
y
=
0
To
15
For
x
=
0
To
19
if
level
[
y
]
[
x
]
=
1
then
freecells
=
freecells
+
1
EndIF
EndFor
EndFor
If
freecells
=
0
then
Sound
.
Stop
(
Path
+
"/sokocute03.wav"
)
Sound
.
Play
(
Path
+
"/sokocute03.wav"
)
EndIf
else
Shapes
.
Move
(
crystalimg
[
gemchng
]
,
Shapes
.
GetLeft
(
crystalbnk
[
gemchng
]
)
,
Shapes
.
GetTop
(
crystalbnk
[
gemchng
]
)
)
Shapes
.
Move
(
crystalbnk
[
gemchng
]
,
gemchng
*
52
,
-
100
)
endif
gemchng
=
99
EndIf
'move the player
If
newmove
<
25
Then
newmove
=
newmove
+
1
xplayer
=
xplayer
+
movex
yplayer
=
yplayer
+
movey
Shapes
.
Move
(
player1
,
xplayer
,
yplayer
)
Shapes
.
Move
(
player2
,
xplayer
,
yplayer
)
EndIf
'blinking crystals when level is done
If
freecells
=
0
And
Clock
.
ElapsedMilliseconds
-
blinktime
>
350
then
For
i
=
0
to
(
cryst
-
1
)
x1
=
Shapes
.
GetLeft
(
crystalimg
[
i
]
)
y1
=
Shapes
.
GetTop
(
crystalimg
[
i
]
)
x2
=
Shapes
.
GetLeft
(
crystalbnk
[
i
]
)
y2
=
Shapes
.
GetTop
(
crystalbnk
[
i
]
)
Shapes
.
Move
(
crystalimg
[
i
]
,
x2
,
y2
)
Shapes
.
Move
(
crystalbnk
[
i
]
,
x1
,
y1
)
EndFor
blink
=
blink
+
1
blinktime
=
Clock
.
ElapsedMilliseconds
EndIf
' end level if crystals changed color 10 times
If
blink
=
10
then
LevelExplosion
(
)
stage
=
stage
+
1
if
stage
<>
10
then
status
=
"reset"
resettime
=
Clock
.
ElapsedMilliseconds
GraphicsWindow
.
BrushColor
=
"#3975e5"
GraphicsWindow
.
FillRectangle
(
70
,
690
,
170
,
80
)
GraphicsWindow
.
FillRectangle
(
800
,
690
,
224
,
85
)
endif
'load title sceen when finished level 10
If
stage
=
10
then
LevelExplosion
(
)
stage
=
0
Shapes
.
Animate
(
titleshape
,
140
,
170
,
2500
)
Shapes
.
Animate
(
txtstart
,
305
,
420
,
3000
)
GraphicsWindow
.
BrushColor
=
"#3975e5"
GraphicsWindow
.
FillRectangle
(
70
,
690
,
170
,
80
)
GraphicsWindow
.
FillRectangle
(
800
,
690
,
224
,
85
)
status
=
"start"
ResetStars
(
)
resettime
=
Clock
.
ElapsedMilliseconds
endif
EndIf
' show time and fps
If
Clock
.
ElapsedMilliseconds
-
endtime
>
1000
And
status
=
"game"
Then
gametime
=
Clock
.
ElapsedMilliseconds
-
starttime
GraphicsWindow
.
BrushColor
=
"#3975e5"
GraphicsWindow
.
FontName
=
"COMIC SANS MS"
GraphicsWindow
.
FontSize
=
25
GraphicsWindow
.
FillRectangle
(
800
,
690
,
224
,
85
)
GraphicsWindow
.
BrushColor
=
"white"
tsecgesamt
=
Math
.
Round
(
gametime
/
1000
)
tsec
=
Math
.
Remainder
(
tsecgesamt
,
60
)
tmingesamt
=
Math
.
Floor
(
tsecgesamt
/
60
)
tmin
=
Math
.
Remainder
(
tmingesamt
,
60
)
thour
=
Math
.
Floor
(
tmingesamt
/
60
)
If
tsec
<
10
then
strSec
=
Text
.
Append
(
":0"
,
tsec
)
Else
strSec
=
Text
.
Append
(
":"
,
tsec
)
EndIf
If
tmin
<
10
then
strMin
=
Text
.
Append
(
"0"
,
tmin
)
Else
strMin
=
Text
.
Append
(
""
,
tmin
)
EndIf
GraphicsWindow
.
DrawText
(
800
,
690
,
" time "
+
thour
+
":"
+
Text
.
Append
(
strMin
,
strSec
)
)
GraphicsWindow
.
DrawText
(
800
,
725
,
" fps "
+
fps
)
GraphicsWindow
.
FontSize
=
10
endtime
=
Clock
.
ElapsedMilliseconds
fps
=
0
EndIf
EndIf
'of Status = game
'reset level after a short delay
If
status
=
"reset"
And
(
Clock
.
ElapsedMilliseconds
-
resettime
>
2500
)
Then
GraphicsWindow
.
BrushColor
=
"#3975e5"
GraphicsWindow
.
FillRectangle
(
70
,
690
,
170
,
80
)
GraphicsWindow
.
FillRectangle
(
800
,
690
,
224
,
80
)
freecells
=
1
blink
=
0
LevelRelease
(
)
LevelLoad
(
)
wait1
=
Clock
.
ElapsedMilliseconds
While
Clock
.
ElapsedMilliseconds
-
wait1
<
3000
EndWhile
starttime
=
Clock
.
ElapsedMilliseconds
status
=
"game"
GraphicsWindow
.
BrushColor
=
"#3975e5"
GraphicsWindow
.
FontName
=
"COMIC SANS MS"
GraphicsWindow
.
FontSize
=
25
GraphicsWindow
.
FillRectangle
(
70
,
690
,
170
,
80
)
GraphicsWindow
.
BrushColor
=
"white"
GraphicsWindow
.
DrawText
(
70
,
690
,
"moves "
+
moves
)
GraphicsWindow
.
DrawText
(
70
,
725
,
" level "
+
(
stage
+
1
)
)
EndIf
If
status
=
"start"
then
MoveStars
(
)
endif
EndWhile
EndSub
Sub
KeyDown
bleftKey
=
false
brightKey
=
false
bforwardKey
=
false
bbackKey
=
false
bescapeKey
=
false
If
GraphicsWindow
.
LastKey
=
leftKey
then
bleftKey
=
true
elseif
GraphicsWindow
.
LastKey
=
rightKey
then
brightKey
=
true
elseif
GraphicsWindow
.
LastKey
=
forwardKey
then
bforwardKey
=
true
elseif
GraphicsWindow
.
LastKey
=
backKey
then
bbackKey
=
true
elseif
GraphicsWindow
.
LastKey
=
returnKey
then
breturnKey
=
true
elseif
GraphicsWindow
.
LastKey
=
escapeKey
then
bescapeKey
=
true
endif
endSub
Sub
KeyUp
' reset every key first
bleftKey
=
false
brightKey
=
false
bforwardKey
=
false
bbackKey
=
false
breturnKey
=
false
If
GraphicsWindow
.
LastKey
=
pauseKey
then
LevelExplosion
(
)
EndIf
If
GraphicsWindow
.
LastKey
=
escapeKey
and
status
=
"start"
then
Program
.
End
(
)
EndIf
If
GraphicsWindow
.
LastKey
=
escapeKey
And
status
=
"game"
then
LevelExplosion
(
)
stage
=
0
Shapes
.
Animate
(
titleshape
,
140
,
170
,
2500
)
Shapes
.
Animate
(
txtstart
,
305
,
420
,
3000
)
GraphicsWindow
.
BrushColor
=
"#3975e5"
GraphicsWindow
.
FillRectangle
(
70
,
690
,
170
,
80
)
GraphicsWindow
.
FillRectangle
(
800
,
690
,
224
,
85
)
status
=
"start"
ResetStars
(
)
resettime
=
Clock
.
ElapsedMilliseconds
EndIf
If
GraphicsWindow
.
LastKey
=
resetKey
then
LevelExplosion
(
)
status
=
"reset"
resettime
=
Clock
.
ElapsedMilliseconds
EndIf
If
GraphicsWindow
.
LastKey
=
pluskey
then
LevelExplosion
(
)
'stage = stage + 1 'uncomment this line to cheat with F1
status
=
"reset"
resettime
=
Clock
.
ElapsedMilliseconds
EndIf
If
GraphicsWindow
.
LastKey
=
minuskey
then
'KeyUp()
LevelExplosion
(
)
'stage = stage - 1 'uncomment this line to cheat with F2
status
=
"reset"
resettime
=
Clock
.
ElapsedMilliseconds
EndIf
'reload title after
If
GraphicsWindow
.
LastKey
=
returnKey
and
status
=
"start"
then
Shapes
.
Animate
(
titleshape
,
140
,
-
350
,
2000
)
Shapes
.
Animate
(
txtstart
,
305
,
1220
,
1600
)
status
=
"reset"
resettime
=
Clock
.
ElapsedMilliseconds
EndIf
EndSub
Sub
Input
If
newmove
>=
25
and
blink
=
0
then
'move right
If
(
brightKey
=
true
)
and
(
level
[
posy
]
[
posx
+
1
]
<=
2
)
Then
'move crystal
if
level
[
posy
]
[
posx
+
1
]
=
2
and
ground
[
posy
]
[
posx
+
1
]
<=
1
And
(
level
[
posy
]
[
posx
+
2
]
<=
1
or
ground
[
posy
]
[
posx
+
2
]
=
3
)
Then
chestarray
[
posy
]
[
posx
+
2
]
=
chestarray
[
posy
]
[
posx
+
1
]
chestarray
[
posy
]
[
posx
+
1
]
=
99
level
[
posy
]
[
posx
+
1
]
=
ground
[
posy
]
[
posx
+
1
]
level
[
posy
]
[
posx
+
2
]
=
2
Sound
.
Stop
(
Path
+
"/sokocute01.wav"
)
Sound
.
Play
(
Path
+
"/sokocute01.wav"
)
'move crystal into water
If
ground
[
posy
]
[
posx
+
2
]
=
3
then
watertime
=
Clock
.
ElapsedMilliseconds
gemwater
=
chestarray
[
posy
]
[
posx
+
2
]
gemzoom
=
1
EndIf
If
(
ground
[
posy
]
[
posx
+
2
]
=
1
and
ground
[
posy
]
[
posx
+
1
]
<=
0
)
Or
(
ground
[
posy
]
[
posx
+
2
]
<=
0
and
ground
[
posy
]
[
posx
+
1
]
=
1
)
then
gemtime
=
Clock
.
ElapsedMilliseconds
gemchng
=
chestarray
[
posy
]
[
posx
+
2
]
gemy
=
posy
gemx
=
posx
+
2
EndIf
'animate crystal
if
ground
[
posy
]
[
posx
+
1
]
=
1
then
Shapes
.
Animate
(
crystalbnk
[
chestarray
[
posy
]
[
posx
+
2
]
]
,
(
posx
+
2
)
*
50
+
korrx
,
(
posy
)
*
40
-
0
,
400
)
elseif
ground
[
posy
]
[
posx
+
2
]
=
3
then
Shapes
.
Animate
(
crystalimg
[
chestarray
[
posy
]
[
posx
+
2
]
]
,
(
posx
+
2
)
*
50
+
korrx
,
(
posy
)
*
40
-
0
,
400
)
else
Shapes
.
Animate
(
crystalimg
[
chestarray
[
posy
]
[
posx
+
2
]
]
,
(
posx
+
2
)
*
50
+
korrx
,
(
posy
)
*
40
-
0
,
400
)
endif
EndIf
'move player right
If
level
[
posy
]
[
posx
+
1
]
<=
1
then
moves
=
moves
+
1
newmove
=
0
movex
=
2
movey
=
0
posx
=
posx
+
1
gametime
=
Clock
.
ElapsedMilliseconds
GraphicsWindow
.
BrushColor
=
"#3975e5"
GraphicsWindow
.
FontName
=
"COMIC SANS MS"
GraphicsWindow
.
FontSize
=
25
GraphicsWindow
.
FillRectangle
(
70
,
690
,
170
,
40
)
GraphicsWindow
.
BrushColor
=
"white"
GraphicsWindow
.
DrawText
(
70
,
690
,
"moves "
+
moves
)
Endif
'move left
ElseIf
(
bleftKey
=
true
)
and
(
level
[
posy
]
[
posx
-
1
]
<=
2
)
Then
'move crystal
if
level
[
posy
]
[
posx
-
1
]
=
2
And
ground
[
posy
]
[
posx
-
1
]
<=
1
and
(
level
[
posy
]
[
posx
-
2
]
<=
1
or
ground
[
posy
]
[
posx
-
2
]
=
3
)
Then
chestarray
[
posy
]
[
posx
-
2
]
=
chestarray
[
posy
]
[
posx
-
1
]
chestarray
[
posy
]
[
posx
-
1
]
=
99
level
[
posy
]
[
posx
-
1
]
=
ground
[
posy
]
[
posx
-
1
]
level
[
posy
]
[
posx
-
2
]
=
2
Sound
.
Stop
(
Path
+
"/sokocute01.wav"
)
Sound
.
Play
(
Path
+
"/sokocute01.wav"
)
'move crystal into water
If
ground
[
posy
]
[
posx
-
2
]
=
3
then
watertime
=
Clock
.
ElapsedMilliseconds
gemwater
=
chestarray
[
posy
]
[
posx
-
2
]
gemzoom
=
1
EndIf
If
(
ground
[
posy
]
[
posx
-
2
]
=
1
and
ground
[
posy
]
[
posx
-
1
]
<=
0
)
Or
(
ground
[
posy
]
[
posx
-
2
]
<=
0
and
ground
[
posy
]
[
posx
-
1
]
=
1
)
then
gemtime
=
Clock
.
ElapsedMilliseconds
gemchng
=
chestarray
[
posy
]
[
posx
-
2
]
gemy
=
posy
gemx
=
posx
-
2
EndIf
'animate crystal
If
ground
[
posy
]
[
posx
-
1
]
=
1
then
Shapes
.
Animate
(
crystalbnk
[
chestarray
[
posy
]
[
posx
-
2
]
]
,
(
posx
-
2
)
*
50
+
korrx
,
(
posy
)
*
40
-
0
,
400
)
elseif
ground
[
posy
]
[
posx
-
2
]
=
3
then
Shapes
.
Animate
(
crystalimg
[
chestarray
[
posy
]
[
posx
-
2
]
]
,
(
posx
-
2
)
*
50
+
korrx
,
(
posy
)
*
40
+
0
,
400
)
else
Shapes
.
Animate
(
crystalimg
[
chestarray
[
posy
]
[
posx
-
2
]
]
,
(
posx
-
2
)
*
50
+
korrx
,
(
posy
)
*
40
-
0
,
400
)
endif
EndIf
'move player left
If
level
[
posy
]
[
posx
-
1
]
<=
1
then
moves
=
moves
+
1
newmove
=
0
movex
=
-
2
movey
=
0
posx
=
posx
-
1
gametime
=
Clock
.
ElapsedMilliseconds
GraphicsWindow
.
BrushColor
=
"#3975e5"
GraphicsWindow
.
FontName
=
"COMIC SANS MS"
GraphicsWindow
.
FontSize
=
25
GraphicsWindow
.
FillRectangle
(
70
,
690
,
170
,
40
)
GraphicsWindow
.
BrushColor
=
"white"
GraphicsWindow
.
DrawText
(
70
,
690
,
"moves "
+
moves
)
Endif
'move down
ElseIf
(
bbackKey
=
true
)
and
(
level
[
posy
+
1
]
[
posx
]
<=
2
)
Then
'move crystal
if
level
[
posy
+
1
]
[
posx
]
=
2
And
ground
[
posy
+
1
]
[
posx
]
<=
1
and
(
level
[
posy
+
2
]
[
posx
]
<=
1
or
ground
[
posy
+
2
]
[
posx
]
=
3
)
Then
chestarray
[
posy
+
2
]
[
posx
]
=
chestarray
[
posy
+
1
]
[
posx
]
chestarray
[
posy
+
1
]
[
posx
]
=
99
level
[
posy
+
1
]
[
posx
]
=
ground
[
posy
+
1
]
[
posx
]
level
[
posy
+
2
]
[
posx
]
=
2
Sound
.
Stop
(
Path
+
"/sokocute01.wav"
)
Sound
.
Play
(
Path
+
"/sokocute01.wav"
)
'move crystal into water
If
ground
[
posy
+
2
]
[
posx
]
=
3
then
watertime
=
Clock
.
ElapsedMilliseconds
gemwater
=
chestarray
[
posy
+
2
]
[
posx
]
gemzoom
=
1
EndIf
If
(
ground
[
posy
+
2
]
[
posx
]
=
1
and
ground
[
posy
+
1
]
[
posx
]
<=
0
)
Or
(
ground
[
posy
+
2
]
[
posx
]
<=
0
and
ground
[
posy
+
1
]
[
posx
]
=
1
)
then
gemtime
=
Clock
.
ElapsedMilliseconds
gemchng
=
chestarray
[
posy
+
2
]
[
posx
]
gemy
=
posy
+
2
gemx
=
posx
EndIf
'animate crystal
if
ground
[
posy
+
1
]
[
posx
]
=
1
then
Shapes
.
Animate
(
crystalbnk
[
chestarray
[
posy
+
2
]
[
posx
]
]
,
(
posx
)
*
50
+
korrx
,
(
posy
+
2
)
*
40
-
0
,
400
)
elseif
ground
[
posy
+
2
]
[
posx
]
=
3
then
Shapes
.
Animate
(
crystalimg
[
chestarray
[
posy
+
2
]
[
posx
]
]
,
(
posx
)
*
50
+
korrx
,
(
posy
+
2
)
*
40
+
0
,
400
)
else
Shapes
.
Animate
(
crystalimg
[
chestarray
[
posy
+
2
]
[
posx
]
]
,
(
posx
)
*
50
+
korrx
,
(
posy
+
2
)
*
40
-
0
,
400
)
endif
EndIf
'move player down
If
level
[
posy
+
1
]
[
posx
]
<=
1
then
moves
=
moves
+
1
newmove
=
0
movex
=
0
movey
=
1.6
posy
=
posy
+
1
gametime
=
Clock
.
ElapsedMilliseconds
GraphicsWindow
.
BrushColor
=
"#3975e5"
GraphicsWindow
.
FontName
=
"COMIC SANS MS"
GraphicsWindow
.
FontSize
=
25
GraphicsWindow
.
FillRectangle
(
70
,
690
,
170
,
40
)
GraphicsWindow
.
BrushColor
=
"white"
GraphicsWindow
.
DrawText
(
70
,
690
,
"moves "
+
moves
)
Endif
'move up
ElseIf
(
bforwardKey
=
true
)
and
(
level
[
posy
-
1
]
[
posx
]
<=
2
)
Then
'move crystal
if
level
[
posy
-
1
]
[
posx
]
=
2
And
ground
[
posy
-
1
]
[
posx
]
<=
1
And
(
level
[
posy
-
2
]
[
posx
]
<=
1
or
ground
[
posy
-
2
]
[
posx
]
=
3
)
Then
chestarray
[
posy
-
2
]
[
posx
]
=
chestarray
[
posy
-
1
]
[
posx
]
chestarray
[
posy
-
1
]
[
posx
]
=
99
level
[
posy
-
1
]
[
posx
]
=
ground
[
posy
-
1
]
[
posx
]
level
[
posy
-
2
]
[
posx
]
=
2
Sound
.
Stop
(
Path
+
"/sokocute01.wav"
)
Sound
.
Play
(
Path
+
"/sokocute01.wav"
)
'move crystal into water
If
ground
[
posy
-
2
]
[
posx
]
=
3
then
watertime
=
Clock
.
ElapsedMilliseconds
gemwater
=
chestarray
[
posy
-
2
]
[
posx
]
gemzoom
=
1
EndIf
If
(
ground
[
posy
-
2
]
[
posx
]
=
1
and
ground
[
posy
-
1
]
[
posx
]
<=
0
)
Or
(
ground
[
posy
-
2
]
[
posx
]
<=
0
and
ground
[
posy
-
1
]
[
posx
]
=
1
)
then
gemtime
=
Clock
.
ElapsedMilliseconds
gemchng
=
chestarray
[
posy
-
2
]
[
posx
]
gemy
=
posy
-
2
gemx
=
posx
EndIf
'animate crystal
if
ground
[
posy
-
1
]
[
posx
]
=
1
then
Shapes
.
Animate
(
crystalbnk
[
chestarray
[
posy
-
2
]
[
posx
]
]
,
(
posx
)
*
50
+
korrx
,
(
posy
-
2
)
*
40
-
0
,
400
)
elseif
ground
[
posy
-
2
]
[
posx
]
=
3
then
Shapes
.
Animate
(
crystalimg
[
chestarray
[
posy
-
2
]
[
posx
]
]
,
(
posx
)
*
50
+
korrx
,
(
posy
-
2
)
*
40
+
0
,
400
)
else
Shapes
.
Animate
(
crystalimg
[
chestarray
[
posy
-
2
]
[
posx
]
]
,
(
posx
)
*
50
+
korrx
,
(
posy
-
2
)
*
40
-
0
,
400
)
endif
EndIf
'move player up
if
level
[
posy
-
1
]
[
posx
]
<=
1
then
moves
=
moves
+
1
newmove
=
0
movex
=
0
movey
=
-
1.6
posy
=
posy
-
1
gametime
=
Clock
.
ElapsedMilliseconds
GraphicsWindow
.
BrushColor
=
"#3975e5"
GraphicsWindow
.
FontName
=
"COMIC SANS MS"
GraphicsWindow
.
FontSize
=
25
GraphicsWindow
.
FillRectangle
(
70
,
690
,
170
,
40
)
GraphicsWindow
.
BrushColor
=
"white"
GraphicsWindow
.
DrawText
(
70
,
690
,
"moves "
+
moves
)
EndIf
EndIf
EndIf
EndSub
Sub
Sort
For
y
=
0
To
15
For
x
=
0
To
15
If
level
[
y
]
[
x
]
=
3
Then
Shapes
.
Remove
(
levelshapes
[
y
]
[
x
]
)
levelshapes
[
y
]
[
x
]
=
Shapes
.
AddImage
(
image
[
"3"
]
)
Shapes
.
Move
(
levelshapes
[
y
]
[
x
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
-
0
)
endif
'GraphicsWindow.DrawText(11*i+520,11*p+30,level[p][i])
EndFor
EndFor
EndSub
Sub
LevelExplosion
Shapes
.
Animate
(
player1
,
Shapes
.
GetLeft
(
player1
)
,
1500
,
4000
)
Shapes
.
Animate
(
player2
,
Shapes
.
GetLeft
(
player2
)
,
1500
,
4000
)
For
i
=
0
To
shade
angle
=
Math
.
GetRandomNumber
(
360
)
xv
=
Math
.
Cos
(
angle
*
0.0174
)
*
1200
yv
=
Math
.
Sin
(
angle
*
0.0174
)
*
600
Shapes
.
Animate
(
Shadow
[
i
]
,
xv
+
512
,
yv
+
350
,
1500
)
EndFor
For
i
=
0
To
cryst
angle
=
Math
.
GetRandomNumber
(
360
)
xv
=
Math
.
Cos
(
angle
*
0.0174
)
*
1200
yv
=
Math
.
Sin
(
angle
*
0.0174
)
*
600
If
Shapes
.
GetTop
(
crystalimg
[
i
]
)
>
0
then
Shapes
.
Animate
(
crystalimg
[
i
]
,
xv
+
512
,
yv
+
350
,
1500
)
EndIf
If
Shapes
.
GetTop
(
crystalbnk
[
i
]
)
>
0
then
Shapes
.
Animate
(
crystalbnk
[
i
]
,
xv
+
512
,
yv
+
350
,
1500
)
EndIf
EndFor
For
y
=
0
To
15
For
x
=
0
To
19
angle
=
Math
.
GetRandomNumber
(
360
)
xv
=
Math
.
Cos
(
angle
*
0.0174
)
*
1200
yv
=
Math
.
Sin
(
angle
*
0.0174
)
*
600
Shapes
.
Animate
(
levelshapes
[
y
]
[
x
]
,
xv
+
512
,
yv
+
350
,
1500
)
EndFor
EndFor
EndSub
Sub
LevelRelease
For
y
=
0
To
15
For
x
=
0
To
19
Shapes
.
Remove
(
levelshapes
[
y
]
[
x
]
)
EndFor
EndFor
For
i
=
0
To
shade
Shapes
.
Remove
(
Shadow
[
i
]
)
EndFor
For
i
=
0
To
cryst
Shapes
.
Remove
(
crystalimg
[
i
]
)
Shapes
.
Remove
(
crystalbnk
[
i
]
)
EndFor
For
i
=
0
To
20
Shapes
.
Remove
(
star
)
endFor
EndSub
Sub
LevelLoad
cryst
=
0
posx
=
4
posy
=
4
moves
=
0
For
i
=
0
To
15
For
p
=
1
To
Text
.
GetLength
(
block
[
stage
]
[
i
]
)
blockcode
=
Text
.
GetSubText
(
block
[
stage
]
[
i
]
,
p
,
1
)
If
blockcode
=
"X"
then
posy
=
i
posx
=
p
-
1
blockcode
=
0
EndIf
if
blockcode
=
2
then
ground
[
i
]
[
p
-
1
]
=
0
elseif
blockcode
=
"C"
then
'crystal on gras
ground
[
i
]
[
p
-
1
]
=
"A"
elseif
blockcode
=
"D"
then
'crystal on wood
ground
[
i
]
[
p
-
1
]
=
"B"
else
ground
[
i
]
[
p
-
1
]
=
blockcode
endif
EndFor
EndFor
'load the water first
For
i
=
0
To
15
For
p
=
1
To
Text
.
GetLength
(
block
[
stage
]
[
i
]
)
blockcode
=
Text
.
GetSubText
(
block
[
stage
]
[
i
]
,
p
,
1
)
If
blockcode
=
3
Then
levelshapes
[
i
]
[
p
-
1
]
=
Shapes
.
AddImage
(
image
[
blockcode
]
)
angle
=
Math
.
GetRandomNumber
(
360
)
xv
=
Math
.
Cos
(
angle
*
0.0174
)
*
1000
yv
=
Math
.
Sin
(
angle
*
0.0174
)
*
550
Shapes
.
Move
(
levelshapes
[
i
]
[
p
-
1
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
levelshapes
[
i
]
[
p
-
1
]
,
(
p
-
1
)
*
50
+
korrx
,
(
i
)
*
40
-
0
,
animtime
)
Endif
EndFor
EndFor
'shadows for the water
LoadShadowWater
(
)
For
i
=
0
To
15
For
p
=
1
To
Text
.
GetLength
(
block
[
stage
]
[
i
]
)
blockcode
=
Text
.
GetSubText
(
block
[
stage
]
[
i
]
,
p
,
1
)
If
blockcode
=
"X"
then
posy
=
i
posx
=
p
-
1
blockcode
=
0
elseIf
blockcode
=
"Y"
then
posy
=
i
posx
=
p
-
1
blockcode
=
"A"
elseIf
blockcode
=
"Z"
then
posy
=
i
posx
=
p
-
1
blockcode
=
"B"
EndIf
if
blockcode
=
2
then
ground
[
i
]
[
p
-
1
]
=
0
elseif
blockcode
=
"C"
then
ground
[
i
]
[
p
-
1
]
=
"A"
elseif
blockcode
=
"D"
then
ground
[
i
]
[
p
-
1
]
=
"B"
else
ground
[
i
]
[
p
-
1
]
=
blockcode
endif
if
blockcode
=
"C"
then
level
[
i
]
[
p
-
1
]
=
2
elseif
blockcode
=
"D"
then
level
[
i
]
[
p
-
1
]
=
2
else
level
[
i
]
[
p
-
1
]
=
blockcode
endif
If
blockcode
=
"C"
Then
'crystal on gras
levelshapes
[
i
]
[
p
-
1
]
=
Shapes
.
AddImage
(
image
[
"A"
]
)
angle
=
Math
.
GetRandomNumber
(
360
)
xv
=
Math
.
Cos
(
angle
*
0.0174
)
*
1200
yv
=
Math
.
Sin
(
angle
*
0.0174
)
*
600
Shapes
.
Move
(
levelshapes
[
i
]
[
p
-
1
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
levelshapes
[
i
]
[
p
-
1
]
,
(
p
-
1
)
*
50
+
korrx
,
(
i
)
*
40
-
0
,
animtime
)
elseIf
blockcode
=
"D"
Then
'crystal on wood
levelshapes
[
i
]
[
p
-
1
]
=
Shapes
.
AddImage
(
image
[
"B"
]
)
angle
=
Math
.
GetRandomNumber
(
360
)
xv
=
Math
.
Cos
(
angle
*
0.0174
)
*
1200
yv
=
Math
.
Sin
(
angle
*
0.0174
)
*
600
Shapes
.
Move
(
levelshapes
[
i
]
[
p
-
1
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
levelshapes
[
i
]
[
p
-
1
]
,
(
p
-
1
)
*
50
+
korrx
,
(
i
)
*
40
-
0
,
animtime
)
elseIf
blockcode
<
2
Then
levelshapes
[
i
]
[
p
-
1
]
=
Shapes
.
AddImage
(
image
[
blockcode
]
)
angle
=
Math
.
GetRandomNumber
(
360
)
xv
=
Math
.
Cos
(
angle
*
0.0174
)
*
1200
yv
=
Math
.
Sin
(
angle
*
0.0174
)
*
600
Shapes
.
Move
(
levelshapes
[
i
]
[
p
-
1
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
Animate
(
levelshapes
[
i
]
[
p
-
1
]
,
(
p
-
1
)
*
50
+
korrx
,
(
i
)
*
40
-
0
,
animtime
)
ElseIf
blockcode
=
2
Then
levelshapes
[
i
]
[
p
-
1
]
=
Shapes
.
AddImage
(
image
[
"0"
]
)
angle
=
Math
.
GetRandomNumber
(
360
)
xv
=
Math
.
Cos
(
angle
*
0.0174
)
*
1200
yv
=
Math
.
Sin
(
angle
*
0.0174
)
*
600
Shapes
.
Move
(
levelshapes
[
i
]
[
p
-
1
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
levelshapes
[
i
]
[
p
-
1
]
,
(
p
-
1
)
*
50
+
korrx
,
(
i
)
*
40
-
0
,
animtime
)
endif
EndFor
EndFor
'tried to fix strange shapes.animate behaviors if there are too many shapes flying around - no real success...
loopdelay
=
(
1600
)
*
loopmssec
num
=
0
While
(
num
<
loopdelay
)
num
=
num
+
1
endwhile
'load blocks
f
=
0
For
i
=
0
To
15
For
p
=
1
To
Text
.
GetLength
(
block
[
stage
]
[
i
]
)
blockcode
=
Text
.
GetSubText
(
block
[
stage
]
[
i
]
,
p
,
1
)
If
blockcode
=
2
or
blockcode
=
"C"
or
blockcode
=
"D"
Then
crystalimg
[
cryst
]
=
Shapes
.
AddImage
(
image
[
2
]
)
crystalbnk
[
cryst
]
=
Shapes
.
AddImage
(
Path
+
"/sokocuteg2.png"
)
chestarray
[
i
]
[
p
-
1
]
=
cryst
angle
=
Math
.
GetRandomNumber
(
360
)
xv
=
Math
.
Cos
(
angle
*
0.0174
)
*
1200
yv
=
Math
.
Sin
(
angle
*
0.0174
)
*
600
Shapes
.
Move
(
crystalimg
[
cryst
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
crystalimg
[
cryst
]
,
(
p
-
1
)
*
50
+
korrx
,
(
i
)
*
40
-
0
,
animtime
*
1.5
)
'Shapes.Move(crystalimg[cryst] , (p-1) * 50 + korrx, (i) * 40 - 0)
Shapes
.
Move
(
crystalbnk
[
cryst
]
,
cryst
*
52
,
-
100
)
cryst
=
cryst
+
1
Endif
EndFor
EndFor
player1
=
Shapes
.
AddImage
(
Path
+
"/sokocutep2.png"
)
'load lower player shape first. it has to be behind the walls
Shapes
.
Move
(
player1
,
(
posx
)
*
50
+
korrx
,
(
posy
)
*
40
-
0
)
LoadShadow
(
)
'------------------------------------------------------------
'load the walls
For
i
=
0
To
15
For
p
=
1
To
Text
.
GetLength
(
block
[
stage
]
[
i
]
)
blockcode
=
Text
.
GetSubText
(
block
[
stage
]
[
i
]
,
p
,
1
)
If
blockcode
>=
4
Then
levelshapes
[
i
]
[
p
-
1
]
=
Shapes
.
AddImage
(
image
[
blockcode
]
)
angle
=
Math
.
GetRandomNumber
(
360
)
xv
=
Math
.
Cos
(
angle
*
0.0174
)
*
1000
yv
=
Math
.
Sin
(
angle
*
0.0174
)
*
550
Shapes
.
Move
(
levelshapes
[
i
]
[
p
-
1
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
levelshapes
[
i
]
[
p
-
1
]
,
(
p
-
1
)
*
50
+
korrx
,
(
i
)
*
40
-
0
,
animtime
)
Endif
EndFor
EndFor
'load players face at last. It has always to be in front of the walls
player2
=
Shapes
.
AddImage
(
Path
+
"/sokocutep1.png"
)
Shapes
.
Move
(
player2
,
(
posx
)
*
50
+
korrx
,
(
posy
)
*
40
-
0
)
xplayer
=
Shapes
.
GetLeft
(
player1
)
yplayer
=
Shapes
.
GetTop
(
player1
)
EndSub
sub
LoadShadow
For
y
=
0
To
15
For
x
=
0
To
19
If
level
[
y
]
[
x
]
<=
2
and
level
[
y
]
[
x
]
<>
" "
Then
angle
=
Math
.
GetRandomNumber
(
360
)
xv
=
Math
.
Cos
(
angle
*
0.0174
)
*
1200
yv
=
Math
.
Sin
(
angle
*
0.0174
)
*
600
If
level
[
y
]
[
x
-
1
]
>=
6
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SW.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
-
0
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
If
level
[
y
]
[
x
+
1
]
>=
6
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SE.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
-
0
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
If
level
[
y
-
1
]
[
x
]
>=
6
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SN.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
-
0
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
If
level
[
y
]
[
x
-
1
]
<=
2
and
level
[
y
-
1
]
[
x
]
<=
2
and
level
[
y
-
1
]
[
x
-
1
]
>=
6
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SNW.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
-
0
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
If
level
[
y
]
[
x
+
1
]
<=
2
and
level
[
y
-
1
]
[
x
]
<=
2
and
level
[
y
-
1
]
[
x
+
1
]
>=
6
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SNE.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
-
0
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
If
level
[
y
]
[
x
-
1
]
<=
2
and
level
[
y
+
1
]
[
x
]
<=
2
and
level
[
y
+
1
]
[
x
-
1
]
>=
6
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SSW.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
-
0
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
If
level
[
y
]
[
x
+
1
]
<=
2
and
level
[
y
+
1
]
[
x
]
<=
2
and
level
[
y
+
1
]
[
x
+
1
]
>=
6
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SSE.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
-
0
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
endif
EndFor
EndFor
EndSub
sub
LoadShadowWater
shade
=
0
ky
=
22
For
y
=
0
To
15
For
x
=
0
To
19
If
ground
[
y
]
[
x
]
=
3
Then
angle
=
Math
.
GetRandomNumber
(
360
)
xv
=
Math
.
Cos
(
angle
*
0.0174
)
*
1200
yv
=
Math
.
Sin
(
angle
*
0.0174
)
*
600
If
ground
[
y
]
[
x
-
1
]
<>
3
and
ground
[
y
]
[
x
-
1
]
>=
0
and
ground
[
y
]
[
x
-
1
]
<>
" "
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SW.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
+
ky
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
If
ground
[
y
]
[
x
+
1
]
<>
3
and
ground
[
y
+
1
]
[
x
]
>=
0
and
ground
[
y
]
[
x
+
1
]
<>
" "
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SE.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
+
ky
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
If
ground
[
y
-
1
]
[
x
]
<>
3
and
ground
[
y
-
1
]
[
x
]
>=
0
and
ground
[
y
-
1
]
[
x
]
<>
" "
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SN.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
+
ky
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
If
ground
[
y
]
[
x
-
1
]
=
3
and
ground
[
y
-
1
]
[
x
]
=
3
and
ground
[
y
-
1
]
[
x
-
1
]
<>
3
and
ground
[
y
-
1
]
[
x
-
1
]
>=
0
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SNW.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
+
ky
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
If
ground
[
y
]
[
x
+
1
]
=
3
and
ground
[
y
-
1
]
[
x
]
=
3
and
ground
[
y
-
1
]
[
x
+
1
]
<>
3
and
ground
[
y
-
1
]
[
x
+
1
]
>=
0
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SNE.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
+
ky
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
If
ground
[
y
]
[
x
-
1
]
=
3
and
ground
[
y
+
1
]
[
x
]
=
3
and
ground
[
y
+
1
]
[
x
-
1
]
<>
3
and
ground
[
y
+
1
]
[
x
-
1
]
>=
0
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SSW.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
+
ky
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
If
ground
[
y
]
[
x
+
1
]
=
3
and
ground
[
y
+
1
]
[
x
]
=
3
and
ground
[
y
+
1
]
[
x
+
1
]
<>
3
and
ground
[
y
+
1
]
[
x
+
1
]
>=
0
then
Shadow
[
shade
]
=
Shapes
.
AddImage
(
Path
+
"/SSE.png"
)
Shapes
.
Move
(
Shadow
[
shade
]
,
xv
+
512
,
yv
+
350
)
Shapes
.
animate
(
Shadow
[
shade
]
,
(
x
)
*
50
+
korrx
,
(
y
)
*
40
+
ky
,
animtime
*
1.2
)
shade
=
shade
+
1
EndIf
endif
EndFor
EndFor
EndSub
Sub
InitStars
For
i
=
0
To
12
star
[
i
]
=
Shapes
.
AddImage
(
Path
+
"/sokocutels.png"
)
heart
[
i
]
=
Shapes
.
AddImage
(
Path
+
"/sokocutelh.png"
)
endFor
EndSub
Sub
ResetStars
For
i
=
0
To
12
angle
=
Math
.
GetRandomNumber
(
360
)
starxv
[
i
]
=
Math
.
Cos
(
angle
*
0.0174
)
*
0.50
staryv
[
i
]
=
Math
.
Sin
(
angle
*
0.0174
)
*
0.50
starx
[
i
]
=
1000
stary
[
i
]
=
1000
startime
[
i
]
=
Math
.
GetRandomNumber
(
100
)
Shapes
.
Move
(
star
[
i
]
,
starx
[
i
]
,
stary
[
i
]
)
endFor
For
i
=
0
To
12
angle
=
Math
.
GetRandomNumber
(
360
)
heartxv
[
i
]
=
Math
.
Cos
(
angle
*
0.0174
)
*
0.50
heartyv
[
i
]
=
Math
.
Sin
(
angle
*
0.0174
)
*
0.50
heartx
[
i
]
=
1000
hearty
[
i
]
=
1000
hearttime
[
i
]
=
Math
.
GetRandomNumber
(
100
)
Shapes
.
Move
(
heart
[
i
]
,
heartx
[
i
]
,
hearty
[
i
]
)
endFor
EndSub
' move stars and hearts
Sub
MoveStars
For
i
=
0
to
12
If
startime
[
i
]
>
100
then
angle
=
Math
.
GetRandomNumber
(
360
)
starxv
[
i
]
=
Math
.
Cos
(
angle
*
0.0174
)
staryv
[
i
]
=
Math
.
Sin
(
angle
*
0.0174
)
starx
[
i
]
=
500
+
20
stary
[
i
]
=
150
Shapes
.
Move
(
star
[
i
]
,
starx
[
i
]
,
stary
[
i
]
)
startime
[
i
]
=
0
EndIf
startime
[
i
]
=
startime
[
i
]
+
0.20
staryv
[
i
]
=
staryv
[
i
]
+
0.005
starx
[
i
]
=
starx
[
i
]
+
starxv
[
i
]
stary
[
i
]
=
stary
[
i
]
+
staryv
[
i
]
Shapes
.
Rotate
(
star
[
i
]
,
startime
[
i
]
*
15
)
Shapes
.
Zoom
(
star
[
i
]
,
math
.
sin
(
startime
[
i
]
/
32
)
,
math
.
sin
(
startime
[
i
]
/
32
)
)
Shapes
.
Move
(
star
[
i
]
,
starx
[
i
]
,
stary
[
i
]
)
EndFor
For
i
=
0
to
12
If
hearttime
[
i
]
>
100
then
angle
=
Math
.
GetRandomNumber
(
360
)
heartxv
[
i
]
=
Math
.
Cos
(
angle
*
0.0174
)
heartyv
[
i
]
=
Math
.
Sin
(
angle
*
0.0174
)
heartx
[
i
]
=
500
+
20
hearty
[
i
]
=
150
Shapes
.
Move
(
heart
[
i
]
,
heartx
[
i
]
,
hearty
[
i
]
)
hearttime
[
i
]
=
0
EndIf
hearttime
[
i
]
=
hearttime
[
i
]
+
0.20
heartyv
[
i
]
=
heartyv
[
i
]
+
0.005
heartx
[
i
]
=
heartx
[
i
]
+
heartxv
[
i
]
hearty
[
i
]
=
hearty
[
i
]
+
heartyv
[
i
]
Shapes
.
Rotate
(
heart
[
i
]
,
hearttime
[
i
]
*
-
10
)
Shapes
.
Zoom
(
heart
[
i
]
,
math
.
sin
(
hearttime
[
i
]
/
32
)
,
math
.
sin
(
hearttime
[
i
]
/
32
)
)
Shapes
.
Move
(
heart
[
i
]
,
heartx
[
i
]
,
hearty
[
i
]
)
EndFor
EndSub
Sub
InitLevels
block
[
0
]
[
0
]
=
" "
block
[
0
]
[
1
]
=
" "
block
[
0
]
[
2
]
=
" "
block
[
0
]
[
3
]
=
" 66666 "
block
[
0
]
[
4
]
=
" 60006 "
block
[
0
]
[
5
]
=
" 62006 "
block
[
0
]
[
6
]
=
" 66600266 "
block
[
0
]
[
7
]
=
" 60020206 "
block
[
0
]
[
8
]
=
" 6660606606AA555555 "
block
[
0
]
[
9
]
=
" 600060660666700115 "
block
[
0
]
[
10
]
=
" 60200200000X000115 "
block
[
0
]
[
11
]
=
" 666660666066700115 "
block
[
0
]
[
12
]
=
" 60000066555555 "
block
[
0
]
[
13
]
=
" 6666666 "
block
[
0
]
[
14
]
=
" "
block
[
0
]
[
15
]
=
" "
block
[
1
]
[
0
]
=
" "
block
[
1
]
[
1
]
=
" "
block
[
1
]
[
2
]
=
" "
block
[
1
]
[
3
]
=
" 6666666 "
block
[
1
]
[
4
]
=
" 76666600000667 "
block
[
1
]
[
5
]
=
" 61111602002006 "
block
[
1
]
[
6
]
=
" 61100626666006 "
block
[
1
]
[
7
]
=
" 6110000X066006 "
block
[
1
]
[
8
]
=
" 61100606002076 "
block
[
1
]
[
9
]
=
" 76666606620206 "
block
[
1
]
[
10
]
=
" 602002020206 "
block
[
1
]
[
11
]
=
" 600007000006 "
block
[
1
]
[
12
]
=
" 766666666667 "
block
[
1
]
[
13
]
=
" "
block
[
1
]
[
14
]
=
" "
block
[
1
]
[
15
]
=
" "
block
[
2
]
[
0
]
=
" "
block
[
2
]
[
1
]
=
" "
block
[
2
]
[
2
]
=
" "
block
[
2
]
[
3
]
=
" 76666667 "
block
[
2
]
[
4
]
=
" 600000X6 "
block
[
2
]
[
5
]
=
" 60262066 "
block
[
2
]
[
6
]
=
" 6020026 "
block
[
2
]
[
7
]
=
" 6720206 "
block
[
2
]
[
8
]
=
" 7666666 602060667 "
block
[
2
]
[
9
]
=
" 61111066602002006 "
block
[
2
]
[
10
]
=
" 61110000020020006 "
block
[
2
]
[
11
]
=
" 61111066666666667 "
block
[
2
]
[
12
]
=
" 7666666 "
block
[
2
]
[
13
]
=
" "
block
[
2
]
[
14
]
=
" "
block
[
2
]
[
15
]
=
" "
block
[
3
]
[
0
]
=
" "
block
[
3
]
[
1
]
=
" "
block
[
3
]
[
2
]
=
"6666663 "
block
[
3
]
[
3
]
=
"611166366666 66666 "
block
[
3
]
[
4
]
=
"611116360006 60006 "
block
[
3
]
[
5
]
=
"6111163607066660706 "
block
[
3
]
[
6
]
=
"600X063600200000006 "
block
[
3
]
[
7
]
=
"6606663700602260666 "
block
[
3
]
[
8
]
=
"5AAAA73A220060006 "
block
[
3
]
[
9
]
=
"5ACAABBB002666206 "
block
[
3
]
[
10
]
=
"5AA5AA3A700060006 "
block
[
3
]
[
11
]
=
"5555553A666060726 "
block
[
3
]
[
12
]
=
"AAAAAA3AAA6022006 "
block
[
3
]
[
13
]
=
"33333333336000006 "
block
[
3
]
[
14
]
=
" 6666666 "
block
[
3
]
[
15
]
=
" "
block
[
4
]
[
0
]
=
" "
block
[
4
]
[
1
]
=
" "
block
[
4
]
[
2
]
=
" 66666 "
block
[
4
]
[
3
]
=
" 666666600067 "
block
[
4
]
[
4
]
=
" 66070X6602206 "
block
[
4
]
[
5
]
=
" 6000020000006 "
block
[
4
]
[
6
]
=
" 6002006660006 "
block
[
4
]
[
7
]
=
" 6660666662666 "
block
[
4
]
[
8
]
=
" 602006660116 "
block
[
4
]
[
9
]
=
" 602020201116 "
block
[
4
]
[
10
]
=
" 600006661116 "
block
[
4
]
[
11
]
=
" 602206 61116 "
block
[
4
]
[
12
]
=
" 600666 76667 "
block
[
4
]
[
13
]
=
" 7667 "
block
[
4
]
[
14
]
=
" "
block
[
4
]
[
15
]
=
" "
block
[
5
]
[
0
]
=
" "
block
[
5
]
[
1
]
=
" 4444444 "
block
[
5
]
[
2
]
=
" 4AA1114 "
block
[
5
]
[
3
]
=
" 66667AA1114 "
block
[
5
]
[
4
]
=
" 60000AA1A14 "
block
[
5
]
[
5
]
=
" 60067AA1114 "
block
[
5
]
[
6
]
=
" 66066AA1114 "
block
[
5
]
[
7
]
=
" 666066444444 "
block
[
5
]
[
8
]
=
" 60222066AAAA "
block
[
5
]
[
9
]
=
" 6666600202066666 "
block
[
5
]
[
10
]
=
" 66000720200070006 "
block
[
5
]
[
11
]
=
" 6X020020000200206 "
block
[
5
]
[
12
]
=
" 66666602202066666 "
block
[
5
]
[
13
]
=
" 60000006 "
block
[
5
]
[
14
]
=
" 66666666 "
block
[
5
]
[
15
]
=
" "
block
[
6
]
[
0
]
=
" "
block
[
6
]
[
1
]
=
" 7777777777 "
block
[
6
]
[
2
]
=
" 7110070007 "
block
[
6
]
[
3
]
=
" 7110000007 "
block
[
6
]
[
4
]
=
" 711007007777 "
block
[
6
]
[
5
]
=
" 77777770070077 "
block
[
6
]
[
6
]
=
" 70000000000007 "
block
[
6
]
[
7
]
=
" 70070077007007 "
block
[
6
]
[
8
]
=
" 7777077007777077 "
block
[
6
]
[
9
]
=
" 7002007777707007 "
block
[
6
]
[
10
]
=
" 7070200200702007 "
block
[
6
]
[
11
]
=
" 70X2002000700077 "
block
[
6
]
[
12
]
=
" 777707707777777 "
block
[
6
]
[
13
]
=
" 700007 "
block
[
6
]
[
14
]
=
" 777777 "
block
[
6
]
[
15
]
=
" "
block
[
7
]
[
0
]
=
" "
block
[
7
]
[
1
]
=
" "
block
[
7
]
[
2
]
=
" "
block
[
7
]
[
3
]
=
" 4444 "
block
[
7
]
[
4
]
=
" 4444444AY4 "
block
[
7
]
[
5
]
=
" 4AAAAACAA4 "
block
[
7
]
[
6
]
=
" 4AAAC77AC4 "
block
[
7
]
[
7
]
=
" 44C71117A4 "
block
[
7
]
[
8
]
=
" 4AC111AA4 "
block
[
7
]
[
9
]
=
" 4A71A17A44 "
block
[
7
]
[
10
]
=
" 4AAA7A7CA4 "
block
[
7
]
[
11
]
=
" 4CAACAAAA4 "
block
[
7
]
[
12
]
=
" 4AA4444444 "
block
[
7
]
[
13
]
=
" 4444 "
block
[
7
]
[
14
]
=
" "
block
[
7
]
[
15
]
=
" "
block
[
8
]
[
0
]
=
" "
block
[
8
]
[
1
]
=
" "
block
[
8
]
[
2
]
=
" 4444 "
block
[
8
]
[
3
]
=
" 444444444AA77 "
block
[
8
]
[
4
]
=
" 74AACAAAAAACA75557 "
block
[
8
]
[
5
]
=
" 4ABB77B77BBA771115 "
block
[
8
]
[
6
]
=
" 4A7DDBDBDD7C771115 "
block
[
8
]
[
7
]
=
" 4A7BBBBZBB7AAA1115 "
block
[
8
]
[
8
]
=
" 4ABD7B777DDAAA1115 "
block
[
8
]
[
9
]
=
" 4ACAACCAACA7711115 "
block
[
8
]
[
10
]
=
" 744CAAAAAAA7755557 "
block
[
8
]
[
11
]
=
" 4AA4444444 "
block
[
8
]
[
12
]
=
" 4444 "
block
[
8
]
[
13
]
=
" "
block
[
8
]
[
14
]
=
" "
block
[
8
]
[
15
]
=
" "
block
[
9
]
[
0
]
=
" AAAAA A A AAAA "
block
[
9
]
[
1
]
=
" A A A A "
block
[
9
]
[
2
]
=
" A AAAAA AAA "
block
[
9
]
[
3
]
=
" A A A A "
block
[
9
]
[
4
]
=
" A A A AAAA "
block
[
9
]
[
5
]
=
" "
block
[
9
]
[
6
]
=
" AAAA A A AAA "
block
[
9
]
[
7
]
=
" A AA A A A "
block
[
9
]
[
8
]
=
" AAA A A A A A "
block
[
9
]
[
9
]
=
" A A AA A A "
block
[
9
]
[
10
]
=
" AAAA A A AAA "
block
[
9
]
[
11
]
=
" "
block
[
9
]
[
12
]
=
" "
block
[
9
]
[
13
]
=
" 4444444444444444 "
block
[
9
]
[
14
]
=
" 40X0020000000104 "
block
[
9
]
[
15
]
=
" 4444444444444444 "
EndSub
No hay comentarios:
Publicar un comentario
Entrada más reciente
Entrada antigua
Inicio
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario