home *** CD-ROM | disk | FTP | other *** search
/ D.I.S.C. 4 / D.I.S.C. 4.adf / basic / frankie.bas
Encoding:
BASIC Source File  |  1988-01-20  |  3.9 KB  |  156 lines

  1.  
  2. REM **
  3. REM ** ARTIFICIAL INTELLIGENCE DEMO PROGRAM
  4. REM **
  5. REM **           by CRAZY in 1990
  6. REM **
  7.  
  8. GOSUB INIT            ' INIT AND LEARN
  9.  
  10. WHILE 1                ' FOR EVER AND EVER
  11.  GOSUB INIT2            ' CREATE RANDOM SEQUENCE
  12.  GOSUB USER            ' LET USER PLAY
  13.  GOSUB COMPUTER            ' LET FRANKIE PLAY
  14.  GOSUB GOODBYE            ' LAST WORDS
  15. WEND
  16.  
  17. END                ' WILL NEVER OCCUR !
  18.  
  19.  
  20. REM ***********************************
  21. REM **      INITIALISE AND LEARN     **
  22. REM ***********************************
  23.  
  24. REM ARRAY N(127) IS FRANKIE'S "MEMORY"
  25. REM SEQ(99) HOLDS THE RANDOM SEQUENCE
  26.  
  27. INIT:
  28.  
  29.  CLS                ' CLEAR SCREEN
  30.  LOCATE 2,21            ' PLACE CURSOR
  31.  PRINT "PLEASE WAIT .... FRANKIE IS LEARNING !!"
  32.  DEFINT A-Z            ' NO NEED FOR FLOATS
  33.  DIM N(127),SEQ(99)        ' DEFINE ARRAYS
  34.  TURNS=0            ' # OF TURNS
  35.  DELTAUSER=0            ' USER'S CHOICE
  36.  DELTAFRANKIE=0            ' FRANKIE'S CHOICE
  37.  RANDOMIZE TIMER        ' NO CHEATING !
  38.  DEF FNRAN=(RND*127) AND &H7F    ' DEFINE RANDOM FUNCTION
  39.  
  40. REM LEARNING STAGE
  41.  
  42.  FOR RANNOW=0 TO 127        ' DO IT FOR ALL NUMBERS
  43.   FOR I=1 TO 50            ' # OF TIMES TO "LEARN"
  44.    RANNEXT=FNRAN        ' GET A RANDOM NUMBER
  45.    IF RANNEXT>RANNOW THEN DELTA=1:PALETTE 0,0,0,0
  46.    IF RANNEXT<RANNOW THEN DELTA=-1:PALETTE 0,0,0,1
  47.    IF RANNEXT=RANNOW THEN DELTA=0:PALETTE 0,1,0,0
  48.    N(RANNOW)=N(RANNOW)+DELTA    ' UPDATE "MEMORY"
  49.   NEXT I            ' DO LEARN LOOP
  50.  
  51. ' LINE (192,100)-(448,100),2    ' CHEAT MODE !
  52. ' PSET (RANNOW*2+192,N(RANNOW)+100)
  53.  
  54.  NEXT RANNOW            ' DO IT FOR ALL NUMBERS
  55.  
  56.  CLS
  57.  
  58. RETURN                ' RTS
  59.  
  60.  
  61. REM ************************************
  62. REM ** INITIALISE EACH TIME SOME VARS **
  63. REM ************************************
  64.  
  65. INIT2:
  66.  
  67.  SCOREUSER=0            ' RESET SCORE EACH TIME
  68.  SCOREFRANKIE=0            ' SAME AS ABOVE
  69.  
  70.  FOR I=0 TO 99            ' SIZE OF SEQUENCE OF NOS
  71.   SEQ(I)=FNRAN            ' GET A NEW RANDOM NUM
  72.  NEXT I                ' DO FOR ALL SEQUENCE
  73.  
  74.  PALETTE 0,0,0,0        ' BACK IN BLACK 
  75.  
  76. RETURN                ' EQUIVALENT OF RTS
  77.  
  78.  
  79. REM ***********************************
  80. REM **        SEE USER PLAY          **
  81. REM ***********************************
  82.  
  83. USER:
  84.  
  85.  WHILE (TURNS<1) OR (TURNS>100) 
  86.   INPUT "HOW MANY TURNS ? (MAX 100) ",TURNS
  87.  WEND                ' CHECK FOR LAME INPUT
  88.  PRINT:PRINT            ' MAKE SOME SPACE
  89.  RANNOW=SEQ(0)            ' GET FIRST NUMBER IN SEQUENCE
  90.  
  91.  FOR I=1 TO TURNS        ' REPEAT FOR ALL TURNS
  92.   PRINT "THIS NUMBER IS";RANNOW
  93.   INPUT "NEXT NUMBER WILL BE [H]IGHER OR [L]OWER ? ",N$
  94.   IF N$="H" OR N$="h" THEN DELTAUSER=1 ELSE DELTAUSER=-1
  95.   RANNEXT=SEQ(I)  ' GET NEXT NUMBER IN RANDOM SEQ
  96.   IF RANNEXT>RANNOW THEN DELTA=1
  97.   IF RANNEXT<RANNOW THEN DELTA=-1
  98.   IF RANNEXT=RANNOW THEN DELTA=0
  99.   PRINT "NEXT NUMBER WAS";RANNEXT
  100.   IF DELTA=DELTAUSER THEN SCOREUSER=SCOREUSER+1:PRINT "Good" ELSE PRINT "Oops"
  101.   RANNOW=RANNEXT        ' GET NEXT NUMBER IN SEQUENCE
  102.   PRINT                ' MAKE SOME SPACE
  103.  NEXT I                ' FOR ALL TURNS
  104.  
  105.  FINALUSER=INT((SCOREUSER/TURNS)*100)
  106.  PRINT "YOUR SCORE IS ";FINALUSER;"%"
  107.  
  108.  RETURN                ' RTS
  109.  
  110.  
  111. REM ***********************************
  112. REM **       SEE FRANKIE PLAY        **
  113. REM ***********************************
  114.  
  115. COMPUTER:
  116.  
  117.  PRINT :PRINT :PRINT "NOW IT'S MY TURN"
  118.  
  119.  PRINT "NUMBER OF TURNS =";TURNS
  120.  RANNOW=SEQ(0)            ' GET FIRST NUMBER
  121.  
  122.  FOR I=1 TO TURNS        ' FOR ALL TURNS
  123.   PRINT "THIS NUMBER IS";RANNOW
  124.   PRINT "NEXT NUMBER WILL BE ";
  125.   IF N(RANNOW)<1 THEN DELTAFRANKIE=-1:PRINT "LOWER" ELSE DELTAFRANKIE=1:PRINT "HIGHER"
  126.   RANNEXT=SEQ(I)        ' CHECK WOT NEXT NUM WOZ
  127.   IF RANNEXT>RANNOW THEN DELTA=1
  128.   IF RANNEXT<RANNOW THEN DELTA=-1
  129.   IF RANNEXT=RANNOW THEN DELTA=0
  130.   PRINT "NEXT NUMBER WAS";RANNEXT
  131.   IF DELTA=DELTAFRANKIE THEN SCOREFRANKIE=SCOREFRANKIE+1:PRINT "Wow" ELSE PRINT "Sorry"
  132.   RANNOW=RANNEXT        ' GET NEXT NUMBER IN SEQ
  133.   PRINT                ' MAKE SOME SPACE
  134.  NEXT I                ' DO ALL TURNS
  135.  
  136.  FINALFRANKIE=INT((SCOREFRANKIE/TURNS)*100)
  137.  PRINT "MY SCORE IS ";FINALFRANKIE;"%"
  138.  
  139.  RETURN
  140.  
  141.  
  142. REM ***********************************
  143. REM **        THAT'S ALL FOLKZ       **
  144. REM ***********************************
  145.  
  146. GOODBYE:
  147.  
  148.  PRINT "YOUR SCORE IS ";FINALUSER;"%"
  149.  
  150.  IF FINALFRANKIE=FINALUSER THEN PRINT "We draw !"
  151.  IF FINALFRANKIE>FINALUSER THEN PRINT "I WIN ... horray"
  152.  IF FINALFRANKIE<FINALUSER THEN PRINT "You win ... oops"
  153.  PRINT :PRINT
  154.  
  155.  RETURN 
  156.