home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 058.lha / enigma (.txt) < prev    next >
Encoding:
AmigaBASIC Source Code  |  1986-11-20  |  9.3 KB  |  516 lines

  1. REM ENIGMA
  2.  GOSUB INITIALIZE
  3. PLAYGAME:
  4.  GOSUB GAME
  5. PLAYAGAIN:
  6.  LOCATE 20,21: PRINT "Play Again ? ";
  7.  ROW=20: X0=337: GOSUB DECIDE
  8.  IF BUTTON=1 THEN PLAYGAME
  9.  GOSUB GOODBYE
  10. END
  11.  
  12. INITIALIZE:
  13.  GOSUB SETSCREEN
  14.  GOSUB KEYVALUES
  15.  GOSUB SETMENUS
  16.  GOSUB SETCOLORS
  17.  GOSUB HEADING
  18. RETURN
  19.  
  20. SETSCREEN:
  21.  SCREEN 1,640,200,3,2
  22.  WINDOW 2,"Enigma",,0,1
  23. RETURN
  24.  
  25. KEYVALUES:
  26.  DEFINT A-Z
  27.  RANDOMIZE TIMER
  28.  DIM ALBT(26)
  29.  BK$=CHR$(32)
  30.  LT$(1)="Y": LT$(2)="N"
  31.  REM NUMBER OF PHRASES
  32.   DATA 75
  33.   READ NP
  34.  REM MAXIMUM MOVES
  35.   DATA 25,20,15
  36.   FOR I=1 TO 3
  37.    READ MOVES(I)
  38.   NEXT
  39. RETURN
  40.  
  41. SETMENUS:
  42.  DATA 2, Rules, Yes, No
  43.  DATA 3, Game, Easy, Medium, Hard
  44.  DATA 2, Secret, Amiga Selects, Player Selects
  45.  DATA 3, Stop, Go to BASIC
  46.  DATA Go to Games Menu, Goto System
  47.  FOR I=1 TO 4
  48.   READ NUMBER
  49.   FOR J=0 TO NUMBER
  50.    READ TITLE$
  51.   IF J<>0 THEN TITLE$=SPACE$(3)+TITLE$
  52.   STATUS=1
  53.    IF I<>4 AND J=1 THEN STATUS=2
  54.   MENU I,J,STSTUS,TITLE$
  55.  NEXT J,I
  56.  RULES=1: GAME=1: SELECTOR=1
  57.  MENU ON
  58.  ON MENU GOSUB OPTIONS
  59. RETURN
  60.  
  61. SETCOLORS:
  62.  REM GREEN AND RED
  63.   PALETTE 5,0.14,0.43,0
  64.   PALETTE 6,0.93,0.2,0
  65. RETURN
  66.  
  67. HEADING:
  68.  LINE(233,78)-(393,108),2,BF
  69.  COLOR 6,2
  70.  LOCATE 11: PRINT PTAB(284)"Enigma"
  71.  COLOR 1,0
  72.  LOCATE 17,24:PRINT "Please use menus,"
  73.  LOCATE 19,23:PRINT "Click mouse to play"
  74.  GOSUB CLICKIT
  75. RETURN
  76.  
  77. OPTIONS:
  78.  ID=MENU(0): ITEM=MENU(1)
  79.  ON ID GOSUB MENU1,MENU2,MENU3,GOODBYE
  80.  ITEM=0
  81. RETURN
  82.  
  83. MENU1:
  84.  MENU 1,RULES,1: MENU 1,ITEM,2
  85.  RULE=ITEM
  86. RETURN
  87.  
  88. MENU2:
  89.  MENU 2,GAME,1: MENU 2,ITEM,2
  90.  GAME=ITEM
  91. RETURN
  92.  
  93. MENU3:
  94.  MENU 3,SELECTOR,1: MENU 3,ITEM,2
  95.  SELECTOR=ITEM
  96. RETURN
  97.  
  98. GOODBYE:
  99.  WINDOW CLOSE 2: WINDOW 1: MENU RESET
  100.  SCREEN CLOSE 1
  101.  IF ITEM=2 THEN RUN "GAMES"
  102.  IF ITEM=3 THEN SYSTEM
  103.  COLOR 1,0: CLS
  104.  PRINT "Bye-Bye"
  105.  STOP
  106. RETURN
  107.  
  108. CLICKIT:
  109.  S$=""
  110.  WHILE MOUSE(0)=0 AND S$=""
  111.   S$=INKEY$
  112.  WEND
  113.  X=MOUSE(1)
  114.  Y=MOUSE(2)
  115.  WHILE MOUSE(0) <> 0: WEND: REM RESET
  116. RETURN
  117.  
  118. GAME:
  119.  IF RULES=1 THEN GOSUB RULES
  120.  ON SELECTOR GOSUB AMIGA, HUMAN
  121.  GOSUB LABEL
  122.  GOSUB PUNCTUATION
  123.  GOSUB SCRAMBLE
  124.  GOSUB PLAY
  125.  COLOR 1,0
  126.  IF GAME$="WIN" THEN
  127.    LOCATE 17,23: PRINT "Congratulations !"
  128.    SOUND 900,2
  129.   ELSE
  130.    GOSUB DEFEAT
  131.  END IF
  132. RETURN
  133.  
  134. RULES:
  135.  CLS
  136.  PRINT
  137.  PRINT "   Department G2 has intercepted a ";
  138.  COLOR 6,2: PRINT "SECRET";: COLOR 1,0
  139.  PRINT " enemy transmission."
  140.  PRINT
  141.  PRINT "   Your goal is to decode it by:"
  142.  PRINT
  143.  PRINT "   -- Clicking the mouse on a letter in";
  144.  PRINT " the garbled message."
  145.  PRINT
  146.  PRINT "   -- Entering what you think is the";
  147.  PRINT " correct character."
  148.  LOCATE 20,26:PRINT "Click Mouse";
  149.  GOSUB CLICKIT
  150. RETURN
  151.  
  152. AMIGA:
  153.  RESTORE PHRASES
  154.  Z=INT(RND*NP)+1
  155.  FOR I=1 TO Z
  156.   READ SECRET$
  157.  NEXT
  158. RETURN
  159.  
  160. HUMAN:
  161.  CLS
  162.  SOUND 440,2
  163.  LOCATE 2,3: PRINT "Please enter your secret.";
  164.  PRINT "  Use the Back Space key to"
  165.  PRINT " correct a mistake."
  166.  ROW=6: L=45: GOSUB ENTER.PHRASE
  167.  SECRET$=PHRASE$
  168. RETURN
  169.  
  170. ENTER.PHRASE:
  171.  Y0=ROW*9-15
  172.  LINE (16,Y0)-((L+3)*10,Y0+18),2,BF
  173.  S$="": C=3: COLOR 6,2
  174.  GOSUB KEY
  175. RETURN
  176.  
  177. KEY:
  178.  LOCATE ROW,C: PRINT CHR$(124);
  179.  L$=INKEY$: IF L$="" THEN KEY
  180.  A=ASC(L$)
  181.  IF C=3 AND (A=8 OR A=13) THEN
  182.   SOUND 900,2: GOTO KEY
  183.  END IF
  184.  IF A=8 THEN
  185.   S$=LEFT$(S$,LEN(S$)-1)
  186.   PRINT CHR$(8);
  187.   C=C-1
  188.   GOTO KEY
  189.  END IF
  190.  IF C=L+3 AND A<>13 THEN SOUND 900,2: GOTO KEY
  191.  IF A <> 13 THEN
  192.   PRINT CHR$(8);UCASE$(L$)
  193.   S$=S$+UCASE$(L$)
  194.   C=C+1
  195.   GOTO KEY
  196.  END IF
  197.  PHRASE$=S$
  198. RETURN
  199.  
  200. LABEL:
  201.  COLOR 1,0
  202.  CLS
  203.  LINE(15,5)-(160,29),1,BF
  204.  COLOR 6,1
  205.  LOCATE 2,3: PRINT "Guesses"
  206.  LOCATE 3,3: PRINT "Remaining:"
  207. RETURN
  208.  
  209. PUNCTUATION:
  210.  GUESS$=""
  211.  L=LEN(SECRET$)
  212.  FOR I=1 TO L
  213.   L$=MID$(SECRET$,I,1): A=ASC(L$)
  214.   IF A > 64 AND A < 91 THEN L$=BK$
  215.   GUESS$=GUESS$+L$
  216.  NEXT
  217. RETURN
  218.  
  219. SCRAMBLE:
  220.  COLOR 1,0
  221.  FOR I=1 TO 26: ALBT(I)=0: NEXT
  222.  LOCATE 10,27: PRINT "Scrambling ..."
  223.  SCRAMBLE$=GUESS$
  224.  FOR I=1 TO L
  225.   LT$=MID$(SECRET$,I,1)
  226.   S$=MID$(SCRAMBLE$,I,1)
  227.   IF LT$ <> BK$ AND S$=BK$ THEN
  228.    GOSUB RANDOM.LETTER
  229.    GOSUB SUBSTITUTE
  230.   END IF
  231.  NEXT I
  232. RETURN
  233.  
  234. RANDOM.LETTER:
  235.  SOUND 200,1
  236.  SEARCH$="ON"
  237.  WHILE SEARCH$="ON"
  238.   V=INT(26*RND)+1
  239.   IF ALBT(V) <> 1 THEN SEARCH$="OFF"
  240.  WEND
  241.  RL$=CHR$(64+V): ALBT(V)=1
  242. RETURN
  243.  
  244. SUBSTITUTE:
  245.  FOR J=I TO L
  246.   IF MID$(SECRET$,J,1)=LT$ THEN
  247.    MID$(SCRAMBLE$,J,1)=RL$
  248.   END IF
  249.  NEXT J
  250. RETURN
  251.  
  252. PLAY:
  253.  GOSUB DRAWBARS
  254.  GOSUB INITIAL.VALUES
  255.  WHILE GAME$="ON" AND N < MAX.MOVES
  256.   GOSUB ENTER.LETTER
  257.   GOSUB CHECK.FOR.MATCH
  258.   IF GUESS$=SECRET$ THEN GAME$="WIN"
  259.   IF GAME$="ON" AND AN$="Right" THEN
  260.    GOSUB ASK.TO.DECODE
  261.   END IF
  262.  WEND
  263. RETURN
  264.  
  265. INITIAL.VALUES:
  266.  N=0: REM NUMBER OF WRONG GUESSES
  267.  MAX.MOVES=MOVES(GAME)
  268.  COLOR 6,1
  269.  LOCATE 3,13: PRINT MAX.MOVES
  270.  GAME$="ON"
  271.  REM HIGHLIGHT FIRST LETTER
  272.   COL=3: COL.HOLD=3: P=1
  273.   COLOR 1,3
  274.   LOCATE 8,3: PRINT MID$(SCRAMBLE$,1,1)
  275. RETURN
  276.  
  277. DRAWBARS:
  278.  COLOR 1,0
  279.  LOCATE 10,27: PRINT SPACE$(14)
  280.  LOCATE 6,3: PRINT "Secret Code:"
  281.  LINE(16,57)-(22+L*10,75),3,BF
  282.  COLOR 2,3
  283.  LOCATE 8,3: PRINT SCRAMBLE$
  284.  LINE(16,93)-(22+L*10,111),1,BF
  285.  COLOR 0,1
  286.  LOCATE 12,3: PRINT GUESS$
  287. RETURN
  288.  
  289. ENTER.LETTER:
  290.  COLOR 1,0
  291.  LOCATE 6,16: PRINT "(Click on letter;";
  292.  PRINT " enter guess)"
  293.  ACTION$="OK"
  294.  WHILE ACTION$ <> "LETTER"
  295.   GOSUB CLICKIT
  296.   IF S$="" THEN GOSUB LOCATION :ELSE GOSUB LETTER
  297.   IF ACTION$="BAD" THEN SOUND 900,2
  298.  WEND
  299.  COLOR 1,0
  300.  LOCATE 10,COL: PRINT C$
  301. RETURN
  302.  
  303. LOCATION:
  304.  ACTION$="OK"
  305.  C1=INT(X/10)+1
  306.  IF Y<57 OR Y>75 OR C1<3 OR C1 > L+2 THEN
  307.   ACTION$="BAD"
  308.  ELSE
  309.   COL=C1: P=COL-2
  310.   COLOR 2,3
  311.   LOCATE 8,COL.HOLD
  312.   PRINT MID$(SCRAMBLE$,COL.HOLD-2,1)
  313.   COLOR 1,3
  314.   LTR$=MID$(SCRAMBLE$,P,1)
  315.   IF LTR$=BK$ THEN LTR$=CHR$(124)
  316.   LOCATE 8,COL: PRINT LTR$
  317.   COL.HOLD=COL
  318.  END IF
  319. RETURN
  320.  
  321. LETTER:
  322.  ACTION$="LETTER"
  323.  S$=UCASE$(S$): A=ASC(S$): C$=CHR$(A)
  324.  L1$=MID$(GUESS$,P,1)
  325.  L2$=MID$(SECRET$,P,1)
  326.  IF A<65 OR A>90 OR L1$<>BK$ OR L2$=BK$ THEN
  327.   ACTION$="BAD"
  328.  END IF
  329. RETURN
  330.  
  331. CHECK.FOR.MATCH:
  332.  IF L2$=C$ THEN AN$="Right" :ELSE AN$="Wrong"
  333.  LOCATE 6,16: PRINT SPACE$(30)
  334.  LOCATE 6,16: PRINT AN$;" Letter."
  335.  GOSUB GURGLE
  336.  IF AN$="Right" THEN GOSUB HIT :ELSE GOSUB MISS
  337. RETURN
  338.  
  339. HIT:
  340.  FOR J=1 TO L
  341.   S$=MID$(SECRET$,J,1)
  342.   IF S$=C$ THEN MID$(GUESS$,J,1)=C$
  343.  NEXT
  344.  COLOR 0,1
  345.  LOCATE 12,3: PRINT GUESS$
  346. RETURN
  347.  
  348. MISS:
  349.  COLOR 6,1
  350.  N=N+1
  351.  LOCATE 3,13: PRINT MAX.MOVES-N
  352.  FOR PAUSE=1 TO 7500: NEXT
  353. RETURN
  354.  
  355. GURGLE:
  356.  FREQ=300
  357.  FOR G=1 TO 7
  358.   FREQ=500-FREQ
  359.   SOUND FREQ,1,50
  360.  NEXT G
  361. RETURN
  362.  
  363. ASK.TO.DECODE:
  364.  COLOR 1,0
  365.  LOCATE 16,20: PRINT "Decode ?"
  366.  ROW=16: X0=275: GOSUB DECIDE
  367.  LOCATE 16,20: PRINT SPACE$(8)
  368.  LINE(X0,Y0)-(X0+96,Y0+14),0,BF
  369.  IF BUTTON=1 THEN GOSUB GET.ANSWER
  370. RETURN
  371.  
  372. DECIDE:
  373.  BUTTON=0
  374.  GOSUB DRAWBUTTON
  375.  GOSUB PUSHBUTTON
  376.  COLOR 1,0
  377. RETURN
  378.  
  379. DRAWBUTTON:
  380.  Y0=9*ROW-13
  381.  XB(1)=X0+27: XB(2)=X0+69: YB=Y0+7
  382.  LINE (X0,Y0)-(X0+96,Y0+14),1,BF
  383.  FOR I=1 TO 2
  384.   CIRCLE (XB(I),YB),12,I+4
  385.   PAINT (XB(I),YB),I+4
  386.   COLOR 1,I+4
  387.   LOCATE ROW: PRINT PTAB(XB(I)-4);LT$(I);
  388.  NEXT I
  389. RETURN
  390.  
  391. PUSHBUTTON:
  392.  SOUND 440,2
  393.  GOSUB CLICKIT
  394.  S$=UCASE$(S$)
  395.  IF S$="Y" THEN BUTTON=1
  396.  IF S$="N" THEN BUTTON=2
  397.  FOR I=1 TO 2
  398.   XD=ABS(X-XB(I)): YD=ABS(Y-YB)
  399.   IF XD<13 AND YD<7 THEN BUTTON=I: I=2
  400.  NEXT
  401.  IF BUTTON=0 THEN PUSHBUTTON
  402. RETURN
  403.  
  404. GET.ANSWER:
  405.  ROW=15
  406.  GOSUB ENTER.PHRASE
  407.  IF PHRASE$=SECRET$ THEN 
  408.   GAME$="WIN"
  409.  ELSE
  410.   COLOR 1,0
  411.   LOCATE 18,23: PRINT "Wrong translation."
  412.   SOUND 150,9: SOUND 130,9
  413.   LOCATE 20,26: PRINT "Click Mouse";
  414.   GOSUB CLICKIT
  415.   LOCATE 18,23: PRINT SPACE$(18)
  416.   LOCATE 20,26: PRINT SPACE$(11);
  417.   LINE(16,Y0)-((L+3)*10,Y0+18),0,BF
  418.  END IF
  419. RETURN
  420.  
  421. DEFEAT:
  422.  COLOR 1,0
  423.  LOCATE 16,16: PRINT "View Secret ?"
  424.  ROW=16: X0=285: GOSUB DECIDE
  425.  LOCATE 16,16: PRINT SPACE$(13)
  426.  LINE(X0,Y0)-(X0+96,Y0+14),0,BF
  427.  IF BUTTON=1 THEN LOCATE 10,3: PRINT SECRET$
  428. RETURN
  429.  
  430. PHRASES:
  431.  DATA GOD SAVE THE QUEEN
  432.  DATA "THE FEW, THE PROUD, THE MARINES !"
  433.  DATA A FEW GOOD MEN
  434.  DATA "I CAME, I SAW, I CONQUERED"
  435.  DATA I SHALL NOT DEAL IN MALICE
  436.  DATA LOVE THY NEIGHBOR
  437.  DATA TAKE IT EASY
  438.  DATA EVERY WHICH WAY BUT LOOSE
  439.  DATA THE RUSSIANS ARE COMING
  440.  DATA JACK AND JILL WENT UP A HILL
  441.  DATA THE COW JUMPED OVER THE MOON
  442.  DATA HEY DIDDLE DIDDLE
  443.  DATA THE OLD GRAY MARE
  444.  DATA "TINKER, TAILOR, SOLDIER, SPY"
  445.  DATA THE GRAPES OF WRATH
  446.  DATA GONE WITH THE WIND
  447.  DATA THE GULAG ARCHIPELAGO
  448.  DATA TIE ME KANGAROO DOWN MATE
  449.  DATA MY LITTLE CHICKADEE
  450.  DATA THE LAST OF THE MOHICANS
  451.  DATA NICE GUYS FINISH LAST
  452.  DATA THE WHOLE NINE YARDS
  453.  DATA I LOVE NEW YORK
  454.  DATA DON QUIXOTE AND SANCHO PANZA
  455.  DATA HONEST ABE LINCOLN
  456.  DATA "EAST SIDE, WEST SIDE"
  457.  DATA SUGAR AND SPICE AND EVERYTHING NICE
  458.  DATA OF MICE AND MEN
  459.  DATA ALICE IN WONDERLAND
  460.  DATA THERE'S SOMETHING ROTTEN IN DENMARK
  461.  DATA WHAT A REVOLTING PREDICAMENT
  462.  DATA A ROLLONG STONE GATHERS NO MOSS
  463.  DATA BEAM ME ABOARD SCOTTY
  464.  DATA IT'S A LONG WAY TO TIPPERARY
  465.  DATA THE ANSWER IS BLOWING IN THE WIND
  466.  DATA GIVE ME LIBERTY OR GIVE ME DEATH
  467.  DATA DIVIDE AND CONQUER
  468.  DATA IT'S THE REAL THING
  469.  DATA I THINK THEREFORE I AM
  470.  DATA A STITCH IN TIME SAVES NINE
  471.  DATA THERE'S NO FREE LUNCH
  472.  DATA TWAS THE NIGHT BEFORE CHRISTMAS
  473.  DATA "RED SKY AT NIGHT, SAILOR'S DELIGHT"
  474.  DATA IN THE LONG RUN, WE'RE ALL DEAD
  475.  DATA "HAIL TO THE REDSKINS, HAIL VICTORY"
  476.  DATA "TO ERR IN HUMAN, TO FORGIVE DIVINE"
  477.  DATA THE MOUSE RAN UP THE CLOCK
  478.  DATA A CAT HAS NINE LIVES
  479.  DATA THE JOLLY GREEN GIANT
  480.  DATA THE AMAZING AMIGA
  481.  DATA "ELEMENTARY, MY DEAR WATSON"
  482.  DATA MARY HAD A LITTLE LAMB
  483.  DATA HE WHO HESITATES IS LOST
  484.  DATA "COLUMBIA, THE GEM OF THE OCEAN"
  485.  DATA THIS LAND IS MADE FOR YOU AND ME
  486.  DATA "MOBY DICK, THE GREAT WHITE WHALE"
  487.  DATA THE HOUND OF THE BASKERVILLES
  488.  DATA THE BRONX BOMBER
  489.  DATA I AM THE GREATEST
  490.  DATA SLOW AS MOLASSES
  491.  DATA THE LAND OF THE RISING SUN
  492.  DATA "ALMOST HEAVEN, WEST VIRGINIA"
  493.  DATA FROM THE HALLS OF MONTEZUMA
  494.  DATA TOO MANY COOKS SPOIL THE BROTH
  495.  DATA "HARK THE RAVEN, NEVERMORE !"
  496.  DATA TOM SAWYER AND HUCKLEBERRY FINN
  497.  DATA WHERE'S THE BEEF?
  498.  DATA "TWINKLE, TWINKLE, LITTLE STAR"
  499.  DATA IT'S A GRAND SLAM HOME RUN
  500.  DATA E PLURIBUS UNUM
  501.  DATA NO TAXATION WITHOUT REPRESENTATION
  502.  DATA ONCE UPON A MIDNIGHT DREARY
  503.  DATA E EQUALS MC SQUARED
  504.  DATA THE HUNCHBACK OF NOTRE DAME
  505.  DATA AND THEY LIVED HAPPILY EVER AFTER
  506.  
  507.  
  508.  
  509.  
  510.  
  511.   
  512.  
  513.  
  514.   
  515.  
  516.