home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume19 / xtmines / part02 / xtmines.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-04-28  |  3.2 KB  |  135 lines

  1. /* xtmines: game where you try to cross a minefield */
  2. /* Written by Timothy Tsai  April 13, 1992 */
  3.  
  4. #include "xtmines.h"
  5.  
  6. int    bw = def_bw;    /* border width for all windows */
  7. int    x  = def_x;    /* frame x */
  8. int    y  = def_y;    /*       y */
  9. int    w  = def_w;    /*       width */
  10. int    h  = def_h;    /*       height */
  11. int    fh = def_fh;    /* field height */
  12.  
  13. int    num_bombs_left;
  14. int    num_time_left;            /* num of seconds */
  15. int    num_time_left_at_start;        /* num of seconds */
  16. int    num_score        = 0;
  17. int    num_grenades_left    = NUM_GRENADES_AT_START;
  18. int    num_tombstones        = 0;
  19. int    num_lives        = STARTING_NUM_LIVES;
  20. int    automark        = TRUE;
  21. int    sanity            = FALSE;
  22. int    extended_automark    = FALSE;
  23. showtype    show        = DEF_SHOW;
  24. int    used_showfig;
  25. int    used_sanity;
  26. int    used_eautomark;
  27.  
  28. int    finished;    /* reach goal yet? */
  29. int    dead = FALSE;
  30.  
  31. int    num_bonus;
  32. int    pause_time;
  33. long    time_at_start_of_level;    /* time at start of each level */
  34.  
  35. Display        *disp;
  36. Window        root,frame,field,wind[NUMWINDS];
  37. int        screen,depth;
  38. Visual        *visual;
  39. unsigned long    white,black;
  40. Font        fonts,fontm,fontt;
  41. XFontStruct    *fontsstruct,*fontmstruct,*fonttstruct;
  42. int        fontsw,fontsh,fontsa,
  43.         fontshoww,fontshowh,fontshowa,
  44.         fontmw,fontmh,fontma,
  45.         fonttw,fontth,fontta;
  46.  
  47. XColor        color[NUMCOLORS];
  48. GC        gcs,gcm,gct;
  49. Colormap    cmap;
  50.  
  51. ranktype    level;
  52. ranktype    start_level=DEF_LEVEL;
  53.  
  54. extern int show_hiscores();
  55. extern void show_and_add_scores();
  56.  
  57.  
  58. main(argc,argv)
  59. int argc;
  60. char **argv;
  61. {
  62.     XEvent        event;
  63.  
  64.  
  65.     printf("xtmines -- by Timothy K. Tsai (ttsai@uiuc.edu)\n");
  66.     printf("   Version %d.%d (patchlevel %d) -- last modification on %s\n",
  67.         MAJOR_VERSION_NUM,MINOR_VERSION_NUM,PATCHLEVEL,LAST_MOD_DATE);
  68.  
  69.     if (argc==2) {
  70.        if (!strcmp(argv[1],"-s")) {
  71.         show_hiscores(NOX);
  72.         exit(0);
  73.        }
  74.        else if ((argv[1][0]=='-') && (argv[1][1]=='l'))
  75.         switch (argv[1][2]-'0') {
  76.             case 0    : start_level = grunt; break;
  77.             case 1    : start_level = corporal; break;
  78.             case 2    : start_level = lieutenant; break;
  79.             case 3    : start_level = captain; break;
  80.             case 4    : start_level = mmajor; break;
  81.             case 5    : start_level = general; break;
  82.             case 6    : start_level = president; break;
  83.             case 7    : start_level = king; break;
  84.             case 8    : start_level = emperor; break;
  85.             case 9    : start_level = angel; break;
  86.             default    : fprintf(stderr,
  87.                      "Error: Rank should be in range (0-9)\n");
  88.                   exit(ILLEGAL_ARGUMENT);
  89.         }
  90.        else {
  91.         fprintf(stderr,"   xtmines\n");
  92.         fprintf(stderr,"      -s    show high scores list\n");
  93.         fprintf(stderr,"      -lr   start at level r\n");
  94.         exit(ILLEGAL_ARGUMENT);
  95.        }
  96.     }
  97.     else if (argc != 1) {
  98.         fprintf(stderr,"   xtmines\n");
  99.         fprintf(stderr,"      -s    show high scores list\n");
  100.         fprintf(stderr,"      -lr   start at level r\n");
  101.         exit(ILLEGAL_ARGUMENT);
  102.     }
  103.  
  104.     open_display();
  105.     load_fonts();
  106.     create_map_frame();
  107.     create_GC_colormap();
  108.     set_event_masks();
  109.  
  110.     for (level=start_level;(level<=HIGHEST_PLAYABLE_RANK) && 
  111.     (num_lives>0);level++) {
  112.         init_values();
  113.  
  114.         set_field();
  115.         show_bomb_status(manvx,manvy);
  116.         refresh();
  117.  
  118.         time_at_start_of_level = time(0);
  119.  
  120.         finished = FALSE;
  121.  
  122.         while (!finished) {
  123.             if (XPending(disp) > 0) {
  124.                 XNextEvent(disp,&event);
  125.                 handle_event(&event);
  126.             }
  127.             else usleep(XPENDING_UDELAY);
  128.             if ((!dead) && (!finished))
  129.                 dead = update_time();
  130.         }
  131.     }
  132.  
  133.     show_and_add_scores();
  134. }
  135.