CMM2 demo programs


Author Message
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 9773
Posted: 09:52pm 06 Jul 2020      

Lunar converted. Use 5.05.04b3d just posted to correct minor colour issue

'Lunar Lander for Colour Maximite v4.0
'
option legacy on
Option Base 1
Clear
'Array declaration
Dim Tevel(MM.HRes)
Dim BoosterSpr(2)
Dim ExplodeSpr(5)
Dim PlatformLSpr(5)
Dim PlatformRSpr(5)
Dim FootPix(2)
'Set 240 x 216 8 colours resolution
mode 5
'We get the Sprites from file
'Drive "b:"
Sprite Load "Lunar.spr"
'Sprite declaration
LanderSpr = 1
BoosterSpr(1) = 2 : BoosterSpr(2) = 3
For a = 1 To 5
ExplodeSpr(a) = a + 3
PlatformLSpr(a) = a + 8
PlatformRSpr(a) = a + 13
Next a
FootPix(1) = 0 : FootPix(2) = 0
'1st animated Sprite per type
PlatFormSprNum = 1
NextPlatSprnum=2
ExplodeSprNum = 1
BoosterSprNum = 1
'Set the Joystick pin's
'PIN 11 = UP (Booster)
SetPin 11,din,pullup
'PIN 13 = LEFT
SetPin 13,din,pullup
'PIN 12 = RIGHT
SetPin 12,din,pullup
'Set some variables
Booster = 0
LemSpeed = 0.1
SpeedX = 0.0
Fuel = 25.0
Gravity = 1.63
GoRight = 0 : GoUp = 0 : GoLeft = 0
Score = 0
PixLeft = 0
PixRight = 0
GMx = MM.HRes - 1
GMy = MM.VRes - 1
Print @(70,100) "Press a key to Start"
Do While (Inkey$ = "") And (Pin(11) = 1) And (Pin(13) = 1) And (Pin(12) = 1)
Loop
Cls
'Randomize Timer
'Landing platform position
Platformx = Int(Rnd * (GMx -60)) + 20
Platformy = Int(Rnd * 80) + (GMy - 80)
'Here we draw the terrain and the Landing platform
Sprite show PlatformLSpr(PlatFormSprNum) , Platformx , Platformy,1
Sprite show PlatformRSpr(PlatFormSprNum) , Platformx + 16, Platformy,1
'Terrain at Left from the platform
py = Platformy + (Rnd * 7) - 3
For a = Platformx - 1 To 0 Step - 1
py = py + (Rnd * 7) - 3
Line (a,GMy) - (a,py),3
Tevel(a) = py
Next a
'Terrain at Right from the platform
py = Platformy + (Rnd * 7) - 3
For a = Platformx + 33 To GMx
py = py + (Rnd * 7) - 3
Line (a,GMy) - (a,py),3
Tevel(a) = py
Next a
'Terrain under the platform
For a = Platformx To Platformx + 32
Line (a,GMy) - (a,Platformy + 6),3
Next a
'LEM position at start
LemX = Rnd * (GMx - 60) + 20
LemY = Rnd * 50 + 25
'Show the LEM
Sprite show LanderSpr , LemX , LemY,1
BoosterWas1 = 0
'Initialise the platform sprite counter
PlatformCount = 0
'Next load's will be from drive "a:"
Mod_is_playing = 0
Timer = 0
'Main program loop
Do While 1
'Read the buttons
keypressed = keydown(1)
If (Pin(11) = 0) Or keypressed = 128) Then GoUP = 1
If (Pin(12) = 0) Or keypressed = 131) Then GoRight = 1
If (Pin(13) = 0) Or keypressed = 130) Then GoLeft = 1
'
'Test if we are over the platform
If LemY > (Platformy - 17) Then
  'Test if we have landed or Collided
 If (LemX >= Platformx) And (Lemx < (Platformx + 16)) Then
  'Landing test
  If LemSpeed <= 2.0 Then
   If Mod_is_playing = 1 Then
    Play Stop
   EndIf
   play modfile "landed.mod"
   Print @(75,50) "Successfully Landed"
   Pause 2000
   Run
  Else
   If BoosterWas1 = 1 Then
    Sprite hide BoosterSpr(BoosterSprNum)
   EndIf
   If Mod_is_playing = 1 Then
    Play Stop
   EndIf
   Play modfile  "explode.mod"
   Sprite hide LanderSpr
   For a = 1 To 5
    Sprite show ExplodeSpr(a) , LemX , LemY,1
    Pause 100
    Sprite hide ExplodeSpr(a)
   Next a
   Print @(80,50) "You Crashed !!!"
   Pause 2000
    Run
  EndIf
 EndIf
EndIf
'We check collision with the Terrain
FootPix(1) = Pixel(LemX,LemY + 16)
FootPix(2) = Pixel(LemX + 15,LemY + 16)
If (FootPix(1) <> 0) Or (FootPix(2) <> 0) Then
 If BoosterWas1 = 1 Then
  Sprite hide BoosterSpr(BoosterSprNum)
 EndIf
 Sprite hide LanderSpr
 If Mod_is_playing = 1 Then
  Play Stop
 EndIf
 Play modfile "explode.mod"
 For a = 1 To 5
  Sprite show ExplodeSpr(a) , LemX , LemY,1
  Pause 100
  Sprite hide ExplodeSpr(a)
 Next a
 Print @(80,50) "You Crashed !!!"
 Pause 2000
 Run
EndIf
If Timer >= 100 Then
 'Timer routine every 100mS
 PlatformCount = PlatformCount + 1
 Recompute
 Redraw
 Timer = 0
EndIf
Loop

Sub Recompute
'This part is executed every 100mS
LEMSpeed = LEMSpeed + (Gravity * 0.1)
If (GoUP = 1) And (Fuel > 0) Then
 LemSpeed = LemSpeed - (Gravity * 0.2)
 Fuel = Fuel - 0.3
 GoUp = 0
 Booster = 1
Else
 Booster = 0
EndIf
If (GoRight = 1) And (Fuel > 0) Then
 Vx = Vx + 0.1
 Fuel = Fuel - 0.1
 GoRight = 0
EndIf
If (GoLeft = 1) And (Fuel > 0) Then
 Vx = Vx - 0.1
 Fuel = Fuel - 0.1
 GoLeft = 0
EndIf
'Record the LEM position
OldLemX = Int(LemX) : OldLemY = Int(LemY)
LemY = Int(LemY + LemSpeed)
LemX = Int(LemX + Vx)
'Clip the LEM in the screen
If LemX > (GMx - 17) Then LemX = GMx - 17
If LemX < 5 Then LemX = 5
If LemY > (GMy - 17) Then LemY = GMy - 17
If LemY < 50 Then LemY = 50
End Sub

Sub Redraw
'This part is executed every 100mS
Print @(0,0) "Speed " @(35,0) Str$(Int(LemSpeed)) + " "
Print @(100,0) "Fuel "@(135,0) Str$(Int(Fuel)) + " "
'Check if we have to erase the booster
If BoosterWas1 = 1 Then
 Sprite hide BoosterSpr(BoosterSprNum)
 BoosterWas1 = 0
Else
 If Mod_is_playing = 1 Then
  Play Stop
  Mod_is_playing = 0
 EndIf
EndIf
'We redraw the LEM
Sprite show LanderSpr , LemX , LemY,1
' Draw the Booster if needed
If Booster = 1 Then
 If Mod_is_playing = 0 Then
  Play modfile "turbine.mod"
  Mod_is_playing = 1
 EndIf
 BoosterSprNum = BoosterSprNum + 1
 If BoosterSprNum > 2 Then BoosterSprNum = 1
 Sprite show BoosterSpr(BoosterSprNum) , LemX + 5 , LemY + 12,1
 Booster = 0
 BoosterWas1 = 1
EndIf
'Cycle the platform Sprites evey 300mS
If PlatformCount = 3 Then
 Sprite swap PlatformRSpr(PlatFormSprNum),PlatformRSpr(NextPlatSprnum)
 Sprite swap PlatformLSpr(PlatFormSprNum),PlatformLSpr(NextPlatSprnum)
 PlatFormSprNum = PlatFormSprNum + 1
 If PlatFormSprNum > 5 Then PlatFormSprNum = 1
 NextPlatSprnum = NextPlatSprnum + 1
 if NextPlatSprnum > 5 then NextPlatSprnum = 1
 PlatformCount = 0
EndIf
End Sub


Sprite file

16,18

   22222222
  2111111112
 216666666612
21666111166612
2266613333166622
2116613333166112
2666613333166662
2116662222666112
2666111111116662
1111 111111 1111
222  1111  222
 22        22
 2          2
 2          2
222        222
664646
466464
6464
 66












466464
644646
4646
 46















      6

   64    6 4
      4466
    664646
  6 6644646
  4 646666
   6  6646 6
          4
    4  6




      4   6
    6 4     6
 6    6     4
        4
   64    6 466
 4    6666  6
    6666666
  6446446466
  4666646646 6
     6646666 6
      6646
 6 46 466  4
        4  6
  6 4       6


     64   6
  6 6      466
 6 44     4 4
    4 444 6
   66    664
 4   66666 6
    6  6666
  644 4  466
  466664 646 6
6    66 6666 6
  4   66464
 66   466  4
 4      4
  6 46     6


   4      6
 46 6      446
 6 6
      464
   6     64
 4         6
    6   6 6
   64 6   66
  4       4  4
6 6  6     6
  4    6 64
  6   46   46
        4
    46     6


          4
4  46

          6
   6       4

          4
 4 6        6
             4
           6
          4
 4
     6  4 6
   4

3222222222222222
2222222222222222
1277744447777444
1277744447777444
1222222222222222
1111111111111111
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3222222222222222
2222222222222222
1277774444777744
1277774444777744
1222222222222222
1111111111111111
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3222222222222222
2222222222222222
1247777444477774
1247777444477774
1222222222222222
1111111111111111
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3222222222222222
2222222222222222
1244777744447777
1244777744447777
1222222222222222
1111111111111111
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3222222222222222
2222222222222222
1244477774444777
1244477774444777
1222222222222222
1111111111111111
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
2222222222222223
2222222222222222
4777744447777421
4777744447777421
2222222222222221
1111111111111111
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
2222222222222223
2222222222222222
4477774444777721
4477774444777721
2222222222222221
1111111111111111
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
2222222222222223
2222222222222222
4447777444477721
4447777444477721
2222222222222221
1111111111111111
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
2222222222222223
2222222222222222
4444777744447721
4444777744447721
2222222222222221
1111111111111111
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
2222222222222223
2222222222222222
7444477774444721
7444477774444721
2222222222222221
1111111111111111
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333

Edited 2020-07-07 07:55 by matherp