home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / plot / 3dplot02.arc / MAZE.INI < prev    next >
Text File  |  1989-06-25  |  6KB  |  228 lines

  1. ClrScr;
  2. PRINT(sysprint,'                                     3D Maze');
  3. PUTCRLF(sysprint);
  4. PUTCRLF(sysprint);
  5. PUTCRLF(sysprint);
  6. PUTCRLF(sysprint);
  7. num_columns=0;
  8. DO WHILE((num_columns < 2) | (num_columns > 10));
  9.   PRINT(sysprint,'Number of columns (2 to 10)?  ');
  10.   num_columns=GETINT(sysin);
  11. END;
  12. num_rows=0;
  13. DO WHILE((num_rows < 2) | (num_rows > 5));
  14.   PRINT(sysprint,'Number of rows (2 to 5)?  ');
  15.   num_rows=GETINT(sysin);
  16. END;
  17. PRINT(sysprint,'Random number seed?  ');
  18. seed=GETINT(sysin);
  19. seed=ABS(seed);
  20. x_max=2*num_columns;
  21. y_max=2*num_rows;
  22. r_n_index_1=1;
  23. DO WHILE(r_n_index_1 <= 8);
  24.   quotient=seed/29;
  25.   r_n(r_n_index_1)=seed+1-29*quotient;
  26.   seed=quotient;
  27.   r_n_index_1=r_n_index_1+1;
  28. END;
  29. delta_x(1,1)=-1;
  30. delta_y(1,1)=0;
  31. delta_x(2,1)=0;
  32. delta_y(2,1)=1;
  33. delta_x(3,1)=1;
  34. delta_y(3,1)=0;
  35. delta_x(4,1)=0;
  36. delta_y(4,1)=-1;
  37. delta_index_2=0;
  38. delta_index_1a=1;
  39. DO WHILE(delta_index_1a <= 4);
  40.   delta_index_1b=1;
  41.   DO WHILE(delta_index_1b <= 4);
  42.     IF delta_index_1a != delta_index_1b THEN
  43.       DO;
  44.         delta_index_1c=1;
  45.         DO WHILE(delta_index_1c <= 4);
  46.           IF ((delta_index_1a != delta_index_1c)
  47.           &   (delta_index_1b != delta_index_1c)) THEN
  48.             DO;
  49.               delta_index_1d=1;
  50.               DO WHILE(delta_index_1d <= 4);
  51.                 IF ((delta_index_1a != delta_index_1d)
  52.                 &   (delta_index_1b != delta_index_1d)
  53.                 &   (delta_index_1c != delta_index_1d)) THEN
  54.                   DO;
  55.                     delta_index_2=delta_index_2+1;
  56.                     delta_x(delta_index_1a,delta_index_2)
  57.                      =delta_x(1,1);
  58.                     delta_y(delta_index_1a,delta_index_2)
  59.                      =delta_y(1,1);
  60.                     delta_x(delta_index_1b,delta_index_2)
  61.                      =delta_x(2,1);
  62.                     delta_y(delta_index_1b,delta_index_2)
  63.                      =delta_y(2,1);
  64.                     delta_x(delta_index_1c,delta_index_2)
  65.                      =delta_x(3,1);
  66.                     delta_y(delta_index_1c,delta_index_2)
  67.                      =delta_y(3,1);
  68.                     delta_x(delta_index_1d,delta_index_2)
  69.                      =delta_x(4,1);
  70.                     delta_y(delta_index_1d,delta_index_2)
  71.                      =delta_y(4,1);
  72.                   END;
  73.                 delta_index_1d=delta_index_1d+1;
  74.               END;
  75.             END;
  76.           delta_index_1c=delta_index_1c+1;
  77.         END;
  78.       END;
  79.     delta_index_1b=delta_index_1b+1;
  80.   END;
  81.   delta_index_1a=delta_index_1a+1;
  82. END;
  83. x_out=0;
  84. DO WHILE(x_out <= x_max);
  85.   y_out=0;
  86.   DO WHILE(y_out <= y_max);
  87.     page(y_out,x_out)='W';
  88.     y_out=y_out+1;
  89.   END;
  90.   x_out=x_out+1;
  91. END;
  92. sum=0;
  93. digit_num=1;
  94. DO WHILE(digit_num <= 3);
  95.   digit=r_n(1);
  96.   r_n_index_1=1;
  97.   r_n_index_2=2;
  98.   DO WHILE(r_n_index_2 <= 8);
  99.     tem_int_1=r_n(r_n_index_2);
  100.     r_n(r_n_index_1)=tem_int_1;
  101.     digit=digit+tem_int_1;
  102.     IF digit > 29 THEN
  103.       digit=digit-29;
  104.     r_n_index_1=r_n_index_2;
  105.     r_n_index_2=r_n_index_2+1;
  106.   END;
  107.   r_n(8)=digit;
  108.   sum=29*sum+digit;
  109.   digit_num=digit_num+1;
  110. END;
  111. x=2*MOD(sum,num_columns)+1;
  112. sum=0;
  113. digit_num=1;
  114. DO WHILE(digit_num <= 3);
  115.   digit=r_n(1);
  116.   r_n_index_1=1;
  117.   r_n_index_2=2;
  118.   DO WHILE(r_n_index_2 <= 8);
  119.     tem_int_1=r_n(r_n_index_2);
  120.     r_n(r_n_index_1)=tem_int_1;
  121.     digit=digit+tem_int_1;
  122.     IF digit > 29 THEN
  123.       digit=digit-29;
  124.     r_n_index_1=r_n_index_2;
  125.     r_n_index_2=r_n_index_2+1;
  126.   END;
  127.   r_n(8)=digit;
  128.   sum=29*sum+digit;
  129.   digit_num=digit_num+1;
  130. END;
  131. y=2*MOD(sum,num_rows)+1;
  132. page(y,x)=' ';
  133. stack_head=0;
  134. finished=FALSE;
  135. DO WHILE(! finished);
  136.   delta_index_1=1;
  137.   too_big=TRUE;
  138.   DO WHILE(too_big);
  139.     delta_index_2=r_n(1);
  140.     r_n_index_1=1;
  141.     r_n_index_2=2;
  142.     DO WHILE(r_n_index_2 <= 8);
  143.       tem_int_1=r_n(r_n_index_2);
  144.       r_n(r_n_index_1)=tem_int_1;
  145.       delta_index_2=delta_index_2+tem_int_1;
  146.       IF delta_index_2 > 29 THEN
  147.         delta_index_2=delta_index_2-29;
  148.       r_n_index_1=r_n_index_2;
  149.       r_n_index_2=r_n_index_2+1;
  150.     END;
  151.     r_n(8)=delta_index_2;
  152.     IF delta_index_2 <= 24 THEN
  153.       too_big=FALSE;
  154.   END;
  155.   passage_found=FALSE;
  156.   search_complete=FALSE;
  157.   DO WHILE(! search_complete);
  158.     DO WHILE((delta_index_1 <= 4) & (! passage_found));
  159.       x_next=x+2*delta_x(delta_index_1,delta_index_2);
  160.       IF x_next <= 0 THEN
  161.         delta_index_1=delta_index_1+1;
  162.       ELSE
  163.         IF x_next >= x_max THEN
  164.           delta_index_1=delta_index_1+1;
  165.         ELSE
  166.           DO;
  167.             y_next=y+2*delta_y(delta_index_1,delta_index_2);
  168.             IF y_next <= 0 THEN
  169.               delta_index_1=delta_index_1+1;
  170.             ELSE
  171.               IF y_next >= y_max THEN
  172.                 delta_index_1=delta_index_1+1;
  173.               ELSE
  174.                 IF page(y_next,x_next) = 'W' THEN
  175.                   passage_found=TRUE;
  176.                 ELSE
  177.                   delta_index_1=delta_index_1+1;
  178.           END;
  179.     END;
  180.     IF (! passage_found) THEN
  181.       DO;
  182.         delta_index_1=stacked_index_1(stack_head);
  183.         delta_index_2=stacked_index_2(stack_head);
  184.         x=x-2*delta_x(delta_index_1,delta_index_2);
  185.         y=y-2*delta_y(delta_index_1,delta_index_2);
  186.         stack_head=stack_head-1;
  187.         delta_index_1=delta_index_1+1;
  188.       END;
  189.     IF ((passage_found) | (stack_head = 0)) THEN
  190.       search_complete=TRUE;
  191.   END;
  192.   IF passage_found THEN
  193.     DO;
  194.       stack_head=stack_head+1;
  195.       stacked_index_1(stack_head)=delta_index_1;
  196.       stacked_index_2(stack_head)=delta_index_2;
  197.       page(y_next,x_next)=' ';
  198.       IF x = x_next THEN
  199.         DO;
  200.           y_wall_1=(y+y_next)/2;
  201.           page(y_wall_1,x_next)=' ';
  202.         END;
  203.       ELSE
  204.         DO;
  205.           x_wall_1=(x+x_next)/2;
  206.           page(y_next,x_wall_1)=' ';
  207.         END;
  208.       x=x_next;
  209.       y=y_next;
  210.     END;
  211.   IF stack_head = 0 THEN
  212.     finished=TRUE;
  213. END;
  214. page(0,1)=' ';
  215. page(y_max,x_max-1)=' ';
  216. PRINT(SYSPRINT,
  217.  'Plot for 1 <= x <= ',x_max+3,' and 1 <= y <= ',y_max+3,' with');
  218. PUTCRLF(SYSPRINT);
  219. PRINT(SYSPRINT,
  220.  '     at least ',2*x_max+6,' divisions along the x axis and ');
  221. PUTCRLF(SYSPRINT);
  222. PRINT(SYSPRINT,
  223.  '     ',2*y_max+6,' divisions along the y axis.  A tilt and');
  224. PUTCRLF(SYSPRINT);
  225. PRINT(SYSPRINT,
  226.  '     a rotation of 30 degrees are recommended.');
  227. PUTCRLF(SYSPRINT);
  228.