home *** CD-ROM | disk | FTP | other *** search
/ The Best of the Best / _.img / 01135 / rand1.c < prev    next >
C/C++ Source or Header  |  1992-12-14  |  3KB  |  67 lines

  1. /***************************************************************************/
  2. /* RAND1.C                                                                 */
  3. /* Externer Zufallsgenerator für PC-Backgammon Pro                         */
  4. /* Programmiersprache: Turbo-C, Autor: Michael Schellong                   */
  5. /*                                                                         */
  6. /* Dieses Beispiel-Programm soll Ihnen demonstrieren, wie Sie in C eigene  */
  7. /* Zufallsgeneratoren für PC-Backgammon Pro V2.0 schreiben können.         */
  8. /* Der externe Zufallsgenerator wird von PC-Backgammon Pro zur Ermittlung  */
  9. /* der Würfelaugen aufgerufen. Als Parameter wird dem Generator ein Zeiger */
  10. /* auf einen 32 Byte langen Speicherbereich übergeben, den er für seine ei-*/
  11. /* genen Zwecke frei verwenden kann. Beispielsweise können hier Variablen- */
  12. /* Inhalte gespeichert werden, die beim nächsten Aufruf wieder benötigt    */
  13. /* werden. Beim ersten Aufruf des Generators haben sämtliche Bytes des     */
  14. /* Speicherbereichs einen Wert von 0xFF.                                   */
  15. /* Als Programmbeendigungs-Code muss die ermittelte Zufallszahl (im Bereich*/
  16. /* von 1 bis 6) zurückgeliefert werden.                                    */
  17. /***************************************************************************/
  18.  
  19. #include "time.h"
  20. #include "stdio.h"
  21. #include "stdlib.h"
  22.  
  23. unsigned long w;
  24.  
  25. /****************************************************/
  26. /* Ermittelt eine Zufallszahl im Bereich 0..Range-1 */
  27. /****************************************************/
  28. unsigned MyRand(unsigned Range)
  29. {
  30.     w=w*0x15a4e35L+1;
  31.     return (unsigned) (((w&0xFFFFu)*Range)/0x10000LU);
  32. }
  33.  
  34. /******************************************/
  35. /* Initialisierung des Zufallsgenerators  */
  36. /******************************************/
  37. void InitMyRand(void)
  38. {
  39.     w=(unsigned) time(NULL);
  40. }
  41.  
  42.  
  43. void main(int argc, char *argv[])
  44. {
  45.     int Val;
  46.     void far *BufPtr;
  47.  
  48.     if (argc<2)                      /* Anzahl der Aufrufparameter abfragen */
  49.         exit(0);
  50.  
  51.                                         /* Den als Aufrufparameter übergebenen
  52.                                         Zeiger einlesen */
  53.     sscanf(argv[1],"%x:%x",(unsigned *) &BufPtr+1, &BufPtr);
  54.  
  55.     if (*(unsigned long far*) BufPtr==0xFFFFFFFFL)
  56.         InitMyRand();               /* Beim ersten Aufruf Zufallsgenerator
  57.                                        initialisieren */
  58.     else
  59.         w=*(unsigned long far*) BufPtr; /* zwischengespeicherte Variable holen */
  60.  
  61.     Val=MyRand(6)+1;                /* Zufallszahl zwischen 1 und 6 ermitteln*/
  62.  
  63.     *(unsigned long far*) BufPtr=w; /* Variable w für nächsten Aufruf sichern */
  64.  
  65.     exit (Val);                     /* Programm wieder beenden */
  66. }
  67.