home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 351-375 / apd372 / jason_banks / clock.amos / clock.amosSourceCode < prev    next >
AMOS Source Code  |  1991-06-13  |  6KB  |  160 lines

  1. '
  2. ' RUBIK's CLOCK
  3. '
  4. ' Amiga Conversion - Jason D Banks 
  5. '
  6. ' unfold the docs procedure for some instructions. 
  7. '
  8. Dim CFACE(18),SWITCH(4),CHANGES(18) : SIDE=0 : Randomize 1
  9. Global CFACE(),SWITCH(),SIDE,CHANGES(),SD,MZ,DNE
  10. INITSCREEN : INITALL : _DRAWSCREEN : _UPDATE : _UPDATESWITCH
  11. DNE=False : Locate 0,1 : Centre "Complete the clock...."
  12. X=Timer
  13. While Not DNE
  14.    Limit Mouse 
  15.    While Mouse Key<>0 : Wend 
  16.    While Mouse Key=0 : Wend 
  17.    If Mouse Zone=13 Then SIDE=SIDE xor 1 : _UPDATE : _UPDATESWITCH
  18.    If(Mouse Zone>0) and(Mouse Zone<5) Then SWITCH(Mouse Zone)=SWITCH(Mouse Zone) xor 1 : _UPDATESWITCH
  19.    If(Mouse Zone=5) or(Mouse Zone=7) or(Mouse Zone=8) or(Mouse Zone=10) Then MZ=1 Else MZ=-1
  20.    If(Mouse Zone=5) or(Mouse Zone=12) Then SWITCH=1
  21.    If(Mouse Zone=6) or(Mouse Zone=7) Then SWITCH=2
  22.    If(Mouse Zone=8) or(Mouse Zone=9) Then SWITCH=4
  23.    If(Mouse Zone=10) or(Mouse Zone=11) Then SWITCH=3
  24.    If(Mouse Zone>4) and(Mouse Zone<13) Then On(SWITCH(SWITCH) xor SIDE)+1 Proc UPPER,LOWER
  25. Wend 
  26. Cls 0 : Bob Off : Locate 0,4 : Centre "Well Done!!!!!....."
  27. Locate 0,7 : Centre "You completed it!!!!!"
  28. Locate 0,10 : Centre "time taken ="+Str$(Int((Timer-X)/50))+" seconds!"
  29. Procedure LOWER
  30.    BLANKCHANGES
  31.    If SIDE=1 Then SD=0 Else SD=1
  32.    If 1=(SWITCH(1) xor SIDE)
  33.       CHANGES(1+SIDE)=MZ
  34.       CHANGES(1+SD)=-MZ
  35.       CHANGES(3+SD)=-MZ
  36.       CHANGES(7+SD)=-MZ
  37.       CHANGES(9+SD)=-MZ
  38.    End If 
  39.    If 1=(SWITCH(2) xor SIDE)
  40.       CHANGES(3+SD)=-MZ
  41.       CHANGES(5+SIDE)=MZ : CHANGES(5+SD)=-MZ
  42.       CHANGES(9+SD)=-MZ
  43.       CHANGES(11+SD)=-MZ
  44.    End If 
  45.    If 1=(SWITCH(3) xor SIDE)
  46.       CHANGES(7+SD)=-MZ
  47.       CHANGES(9+SD)=-MZ
  48.       CHANGES(13+SIDE)=MZ : CHANGES(13+SD)=-MZ
  49.       CHANGES(15+SD)=-MZ
  50.    End If 
  51.    If 1=(SWITCH(4) xor SIDE)
  52.       CHANGES(9+SD)=-MZ
  53.       CHANGES(11+SD)=-MZ
  54.       CHANGES(15+SD)=-MZ
  55.       CHANGES(17+SD)=-MZ : CHANGES(17+SIDE)=MZ
  56.    End If 
  57.    For R=1 To 18 : Add CFACE(R),CHANGES(R),1 To 12 : Next R
  58.    _UPDATE
  59. End Proc
  60. Procedure BLANKCHANGES
  61.    For R=1 To 18 : CHANGES(R)=0 : Next R
  62. End Proc
  63. Procedure UPPER
  64.    BLANKCHANGES
  65.    If SIDE=1 Then SD=0 Else SD=1
  66.    If 0=(SWITCH(1) xor SIDE)
  67.       CHANGES(1+SIDE)=MZ : CHANGES(1+SD)=-MZ
  68.       CHANGES(3+SIDE)=MZ
  69.       CHANGES(7+SIDE)=MZ
  70.       CHANGES(9+SIDE)=MZ
  71.    End If 
  72.    If 0=(SWITCH(2) xor SIDE)
  73.       CHANGES(3+SIDE)=MZ
  74.       CHANGES(5+SIDE)=MZ : CHANGES(5+SD)=-MZ
  75.       CHANGES(9+SIDE)=MZ
  76.       CHANGES(11+SIDE)=MZ
  77.    End If 
  78.    If 0=(SWITCH(3) xor SIDE)
  79.       CHANGES(7+SIDE)=MZ
  80.       CHANGES(9+SIDE)=MZ
  81.       CHANGES(13+SIDE)=MZ : CHANGES(13+SD)=-MZ
  82.       CHANGES(15+SIDE)=MZ
  83.    End If 
  84.    If 0=(SWITCH(4) xor SIDE)
  85.       CHANGES(9+SIDE)=MZ
  86.       CHANGES(11+SIDE)=MZ
  87.       CHANGES(15+SIDE)=MZ
  88.       CHANGES(17+SIDE)=MZ : CHANGES(17+SD)=-MZ
  89.    End If 
  90.    For R=1 To 18 : Add CFACE(R),CHANGES(R),1 To 12 : Next R
  91.    _UPDATE
  92. End Proc
  93. Procedure INITSCREEN
  94.    While Screen>-1 : Screen Close Screen : Wend 
  95.    Screen Open 0,320,256,16,Lowres : Curs Off : Flash Off : Pen 0 : Paper 1 : Cls : Get Sprite Palette 
  96.    Reserve Zone 13
  97.    Set Zone 1,100,80 To 116,96 : Set Zone 2,160,80 To 176,96
  98.    Set Zone 3,100,140 To 116,156 : Set Zone 4,160,140 To 176,156
  99.    '
  100.    Set Zone 5,50,30 To 66,46 : Set Zone 12,30,50 To 46,66
  101.    '
  102.    Set Zone 11,30,190 To 46,206 : Set Zone 10,50,210 To 66,226
  103.    '
  104.    Set Zone 6,204,30 To 220,46 : Set Zone 7,224,50 To 240,66
  105.    '
  106.    Set Zone 8,224,190 To 240,206 : Set Zone 9,204,210 To 220,226
  107.    '
  108.    Set Zone 13,260,220 To 300,250
  109. End Proc
  110. Procedure INITALL
  111.    For R=1 To 18 : CFACE(R)=Rnd(11)+1 : Next R
  112.    FLIP[CFACE(1)] : CFACE(2)=Param
  113.    FLIP[CFACE(5)] : CFACE(6)=Param
  114.    FLIP[CFACE(13)] : CFACE(14)=Param
  115.    FLIP[CFACE(17)] : CFACE(18)=Param
  116.    For R=1 To 4 : SWITCH(R)=Rnd(1) : Next R
  117. End Proc
  118. Procedure FLIP[FACEIN]
  119.    If(FACEIN=1) or(FACEIN=7)
  120.       FACEOUT=FACEIN
  121.    Else 
  122.       FACEOUT=14-FACEIN
  123.    End If 
  124. End Proc[FACEOUT]
  125. Procedure _DRAWSCREEN
  126.    Cls 
  127.    Paste Bob 30,50,15 : Paste Bob 50,30,15 : Paste Bob 30,190,15 : Paste Bob 50,210,15
  128.    Paste Bob 224,50,15 : Paste Bob 204,30,15 : Paste Bob 224,190,15 : Paste Bob 204,210,15
  129.    Box 260,220 To 300,250
  130. End Proc
  131. Procedure _UPDATE
  132.    Paste Bob 60,50,CFACE(1+SIDE) : Paste Bob 120,50,CFACE(3+SIDE) : Paste Bob 180,50,CFACE(5+SIDE)
  133.    Paste Bob 60,110,CFACE(7+SIDE) : Paste Bob 120,110,CFACE(9+SIDE) : Paste Bob 180,110,CFACE(11+SIDE)
  134.    Paste Bob 60,170,CFACE(13+SIDE) : Paste Bob 120,170,CFACE(15+SIDE) : Paste Bob 180,170,CFACE(17+SIDE)
  135.    COUNT=0 : For R=1 To 18 : COUNT=COUNT+CFACE(R) : Next R : If COUNT=18 Then DNE=True
  136. End Proc
  137. Procedure _UPDATESWITCH
  138.    XXX=3 : Rem 3 sprite conversion modifier - it stops the switches looking strange when you toggle them
  139.    Bob 1,100,80+XXX*(SWITCH(1) xor SIDE),13+(SWITCH(1) xor SIDE) : Bob 3,160,80+XXX*(SWITCH(2) xor SIDE),13+(SWITCH(2) xor SIDE)
  140.    Bob 2,100,140+XXX*(SWITCH(3) xor SIDE),13+(SWITCH(3) xor SIDE) : Bob 4,160,140+XXX*(SWITCH(4) xor SIDE),13+(SWITCH(4) xor SIDE)
  141. End Proc
  142. Procedure _DOCS
  143.    ' Welcome to the Rubik's Clock Simulator program 
  144.    ' This was set up to imitate a rubiks clock, and allow the player
  145.    ' to attempt to solve it. I know that the original device (of torture) 
  146.    ' is the only ever rubiks puzzle that I've managed to solve - but what 
  147.    ' the hell, there are people with nobel prizes out there who probally
  148.    ' are still struggling with the cube!
  149.    '
  150.    ' Ok, so this is the idea of the game. You are trying to get both sides
  151.    ' of the puzzle to have all of the clock faces pointing to twelve o'clock
  152.    ' easy huh? well, we'll see about that later! To do this, you can manipulate 
  153.    ' the faces by spinning the four corner pieces. The effect this has varies 
  154.    ' on the position of the 4 buttons of the puzzle. I won't spoil the puzzle 
  155.    ' by explaining everything though - it took me a week to work out what I 
  156.    ' was supposed to actually do with the cube, let alone solve it!.... 
  157.    ' (I can't!)  One more thing thought, the clock has two sides to it - to get 
  158.    ' at the other side, click on the box in the bottom right corner - the problem 
  159.    ' is that what you do on one side, effects what you do on the other! 
  160. End Proc