home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / games / volume15 / xstratego / part02 / callback.c < prev    next >
C/C++ Source or Header  |  1993-01-27  |  3KB  |  131 lines

  1. /*
  2.  * Callback.c
  3.  */
  4.  
  5. #include "stratego.h"
  6.  
  7. /*
  8.  * BoardPosition Callback Routine.
  9.  */
  10. XtCallbackProc ActivateBoardPosition (widget, board_pos)
  11. Widget widget;
  12. BOARD_POS *board_pos;
  13. {
  14.     if (players[0].confirm)
  15.         ConfirmMove ();
  16.  
  17.     if (players[0].status == PL_SETUP)
  18.         setup_tile (board_pos);
  19.     else if (players[0].status == PL_ENDGAME)
  20.         message ("The game has ended!");
  21.     else if (players[0].status >= PL_PLAYING)
  22.         play_tile (board_pos);
  23.     else
  24.         message ("It is not your turn %s.", players[0].name);
  25. }
  26.  
  27. void AssignBoardPosition (board_pos, tile, owner)
  28. BOARD_POS *board_pos;
  29. TILE *tile;
  30. int owner;
  31. {
  32.     Pixmap pixmap;
  33.     Arg args[1];
  34.  
  35.     if (owner == O_ENEMY && tile->value >= FLAG && tile->value <= BOMB)
  36.         pixmap = tiles[ENEMY].pixmap;
  37.     else
  38.         pixmap = tile->pixmap;
  39.  
  40.     board_pos->owner = owner;
  41.     board_pos->value = tile->value;
  42.  
  43.     XtSetArg (args[0], XtNbitmap, pixmap);
  44.     XtSetValues (board_pos->widget, args, 1);
  45. }
  46.  
  47. void MarkBoardPosition (board_pos, reveal)
  48. BOARD_POS *board_pos;
  49. Boolean reveal;
  50. {
  51.     Pixmap pixmap;
  52.     Arg args[1];
  53.  
  54.     if (reveal == True)
  55.         pixmap = tiles[board_pos->value].stippled_pixmap;
  56.     else if (board_pos->owner == O_ENEMY) 
  57.         pixmap = tiles[ENEMY].pixmap;
  58.     else
  59.         pixmap = tiles[board_pos->value].pixmap;
  60.  
  61.     XtSetArg (args[0], XtNbitmap, pixmap);
  62.     XtSetValues (board_pos->widget, args, 1);
  63. }
  64.  
  65. void UpdateTileCount (tile, delta)
  66. TILE *tile;
  67. int delta;
  68. {
  69.     Arg args[2];
  70.     char num_buf[5];
  71.  
  72.     tile->count += delta;
  73.  
  74.     if (tile->count == 0) {
  75.         strcpy (num_buf, " - ");
  76.         XtSetArg (args[0], XtNhighlightThickness, 0);
  77.         XtSetArg (args[1], XtNbitmap, tile->stippled_pixmap);
  78.         XtSetValues (tile->bitmap_widget, args, 2);
  79.     }
  80.     else {
  81.         sprintf (num_buf, " %d ", tile->count);
  82.         if (tile->count == delta) {
  83.             if (players[0].status == PL_SETUP)
  84.                 XtSetArg (args[0], XtNhighlightThickness, 1);
  85.             else
  86.                 XtSetArg (args[0], XtNhighlightThickness, 0);
  87.             XtSetArg (args[1], XtNbitmap, tile->pixmap);
  88.             XtSetValues (tile->bitmap_widget, args, 2);
  89.         }
  90.     }
  91.  
  92.     XtSetArg (args[0], XtNlabel, num_buf);
  93.     XtSetValues (tile->count_widget, args, 1);
  94. }
  95.  
  96. XtActionHookProc ButtonPressHook (widget, data, action_name, event, params, cnt)
  97. Widget widget;
  98. XtPointer data;
  99. String action_name;
  100. XEvent *event;
  101. String *params;
  102. Cardinal *cnt;
  103. {
  104.     if (event->type == ButtonPress) {
  105.         message ("");
  106.         if (players[0].confirm)
  107.             ConfirmMove ();
  108.     }
  109. }
  110.  
  111. #include <varargs.h>
  112.  
  113. /*VARARGS0*/
  114. void message (va_alist)
  115. va_dcl
  116. {
  117.     static char msg_buf[BUFSIZ];
  118.     va_list arglist;
  119.     char *fmt;
  120.     Arg args[1];
  121.  
  122.     va_start (arglist);
  123.     fmt = va_arg (arglist, char *);
  124.  
  125.     vsprintf (msg_buf, fmt, arglist);
  126.     va_end (arglist);
  127.  
  128.     XtSetArg (args[0], XtNlabel, msg_buf);
  129.     XtSetValues (Message, args, 1);
  130. }
  131.