home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume3 / miles / part02 / random.c < prev   
C/C++ Source or Header  |  1988-01-25  |  5KB  |  147 lines

  1. /* random.c */
  2. /* machine dependent */
  3.  
  4. /**********************************************************************/
  5. /*                                                                    */
  6. /*           MM   MM  IIIIIII  L        L        EEEEEEE              */
  7. /*           M M M M     I     L        L        E                    */
  8. /*           M  M  M     I     L        L        EEEE                 */
  9. /*           M     M     I     L        L        E                    */
  10. /*           M     M  IIIIIII  LLLLLLL  LLLLLLL  EEEEEEE              */
  11. /*                                                                    */
  12. /*      BBBBBB    OOOOO   RRRRRR   NN    N  EEEEEEE   SSSSSS          */
  13. /*      B     B  O     O  R     R  N N   N  E        S                */
  14. /*      BBBBBB   O     O  RRRRRR   N  N  N  EEEEE     SSSSS           */
  15. /*      B     B  O     O  R    R   N   N N  E              S          */
  16. /*      BBBBBB    OOOOO   R     R  N    NN  EEEEEEE  SSSSSS           */
  17. /*                                                                    */
  18. /*                                                                    */
  19. /* Creation: Edmond Dujardin                                          */
  20. /*           (c) 1962 Parker Brothers, Inc.                           */
  21. /*                                                                    */
  22. /* Written by: Brett K. Carver                                        */
  23. /*             Hewlett-Packard, 1983.                                 */
  24. /*                                                                    */
  25. /* Copyright: (c) Brett K. Carver, Hewlett-Packard, 1986.             */
  26. /*                                                                    */
  27. /**********************************************************************/
  28.  
  29. #include "miles.h"
  30. #include <time.h>
  31.  
  32. #undef MY_RAND
  33. #undef RND_ONE
  34.  
  35. /**********************************************************************/
  36. /*                                                                    */
  37. /*              CONSTANTS AND VARIABLES                               */
  38. /*                                                                    */
  39. /**********************************************************************/
  40.  
  41. /**********************************/
  42. /* external procedure definitions */
  43. /**********************************/
  44.  
  45. extern    long    time();
  46.  
  47. /**********************************/
  48. /* external variable definitions */
  49. /**********************************/
  50.  
  51. extern    struct    tm    *localtime();
  52.  
  53. #ifdef MY_RAND
  54.  
  55. /**********************************************************************/
  56. /*                                                                    */
  57. /*              RANDOM NUMBER GENERATION UTILITIES                    */
  58. /*                                                                    */
  59. /**********************************************************************/
  60.  
  61. #ifdef RND_ONE
  62.  
  63. double rnd_x = 283463.5;
  64.  
  65. /**************************************/
  66. /* pseudo random number generator one */
  67. /**************************************/
  68. rnd()
  69. {
  70. rnd_x = (double)((3612 * (long)rnd_x + 5701) % 566927) + 0.5;
  71. return((long)rnd_x);
  72. }
  73.  
  74. #else
  75.  
  76. int rnd_x;
  77.  
  78. /**************************************/
  79. /* pseudo random number generator two */
  80. /**************************************/
  81. int
  82. rnd()
  83. {
  84. rnd_x = (rnd_x * 11109) + 13849;
  85. return((rnd_x & 0xfff) >> 1);
  86. }
  87.  
  88. #endif
  89.  
  90. #endif
  91.  
  92. /****************************************************/
  93. /* generates a seed for the random number generator */
  94. /****************************************************/
  95. int
  96. get_seed ()
  97. {
  98. int    seed;
  99. struct    tm    *timestruct;
  100. long    clock;
  101. clock = time(0);
  102. timestruct = localtime(&clock);
  103. seed = timestruct->tm_sec  +
  104.        timestruct->tm_min  +
  105.        timestruct->tm_hour +
  106.        timestruct->tm_mday +
  107.        timestruct->tm_mon  +
  108.        timestruct->tm_year +
  109.        timestruct->tm_yday;
  110. return((int) ((seed + clock) % 32767));
  111. }
  112.  
  113. /***********************************************/
  114. /* generates a random number between 0 and 100 */
  115. /***********************************************/
  116. int
  117. random()
  118. {
  119. #ifdef MY_RAND
  120. return(rnd() % 101);
  121. #else
  122. return(rand() % 101);
  123. #endif
  124. }
  125.  
  126. /*******************************************/
  127. /* initializes the random number generator */
  128. /*******************************************/
  129. init_random()
  130. {
  131. int seed;
  132. register int i;
  133. seed = get_seed();
  134. #ifdef MY_RAND
  135. #ifdef RND_ONE
  136.     for (i=0; i<seed; i++)
  137.          rnd();
  138. #else
  139.     rnd_x = seed;
  140. #endif
  141. #else
  142.     srand((unsigned)seed);
  143. #endif
  144. }
  145.  
  146. /*********** end of program **********/
  147.