home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / TOP / USR / SRC / yahtzee.t.Z / yahtzee.t / play_info.c < prev    next >
Text File  |  1988-07-28  |  4KB  |  167 lines

  1. /* play_info.c
  2.  *    get game configuration information from the user.
  3.  */
  4. #include "defs.h"
  5. #include <curses.h>
  6. #include <stdio.h>
  7. /* #include <fcntl.h> */
  8. #include <signal.h>
  9.  
  10. #define A_Bad_Number -1
  11.  
  12. /* size of configuration window */
  13. #define Config_Length 17
  14. #define Config_Width 29
  15.  
  16. extern WINDOW *Config_Win;
  17. extern int BadStandout;
  18.  
  19. static char brand[3][10] = {"Human   ", "Computer"};
  20.  
  21. int player_info(machine, Back_Window)
  22.  
  23. int machine[max_players];
  24. WINDOW *Back_Window;
  25.  
  26.     {
  27.     int i, cur_player = 0, player_count = 0, tmp_y, tmp_x;
  28.     char ch;
  29.     WINDOW *Config_Win;
  30.  
  31.     getyx(Back_Window, tmp_y, tmp_x);
  32.     wmove(Back_Window, 0, 0);
  33.     wrefresh(Back_Window);
  34.  
  35. /* create configuration window */
  36.     Config_Win = newwin(Config_Length, Config_Width, 0, 0);
  37.     werase(Config_Win);
  38.     BoxUp(Config_Win, Config_Length, Config_Width);
  39.     touchwin(Config_Win);
  40.  
  41. /* set all players to machine by default */
  42.     for (i = 0; i < max_players; ++i)
  43.         machine[i] = TRUE;
  44.     if (! BadStandout)
  45.         wstandout(Config_Win);
  46.     mvwaddstr(Config_Win, 1, 5, "-- y a h t z e e --");
  47.     if (! BadStandout)
  48.         wstandend(Config_Win);
  49.     mvwaddstr(Config_Win, Config_Length - 2, 1,
  50.         "For on-line help press '?'");
  51.     while (player_count < 1 || player_count > max_players)
  52.         {
  53.         mvwaddstr(Config_Win, 3, 2, "number of players: ");
  54. #ifndef SYS5_3
  55.         wrefresh(Config_Win);
  56. #endif
  57.  
  58. /* get the number of players */
  59.         ch = wgetch(Config_Win);
  60.         if (ch >= '1' && ch <= Max_Players_Ch)
  61.             {
  62.             player_count = ch - '0';
  63.             waddch(Config_Win, ch);
  64.             }
  65.         else
  66.             {
  67.             player_count = A_Bad_Number;
  68.             switch (ch)
  69.                 {
  70.                 case 'b' : rools(Config_Win);
  71.                        break;
  72.                 case '?' : help_out(6, Config_Win);
  73.                        break;
  74.                 case 's' : dis_score(Config_Win);
  75.                        break;
  76.                 case Form_Feed : redraw(Config_Win);
  77.                        break;
  78.                 case 'q' : yahtzee_exit(0);
  79.                        break;
  80.                 case '!' : shell(Config_Win);
  81.                        break;
  82.                 case 'v' : version(Config_Win);
  83.                        break;
  84. #if defined(SYS5) || defined(SYS5_3)
  85.                 case '$' : shwin(Config_Win);
  86.                        break;
  87. #endif
  88.  
  89. /* default case is bad input so tell the user the limits */
  90.                 default : mvwprintw(Config_Win, Config_Length -
  91.                         3, 3, "1 < player count < %d",
  92.                         max_players);
  93.                        wrefresh(Config_Win);
  94.                        sleep(2);
  95.                        wmove(Config_Win, Config_Length - 3,
  96.                         3);
  97.                        waddstr(Config_Win, 
  98.                         "                     ");
  99.                        wrefresh(Config_Win);
  100.                 }
  101.             }
  102.         }
  103.  
  104. /* determine which players will be human and which will be simulated */
  105.     for (i = 0; i < player_count; ++i)
  106.         mvwprintw(Config_Win, i + 5, 3, "%d %s", i, brand[machine[i]]);
  107.     do
  108.         {
  109.         wmove(Config_Win, cur_player + 5, 2);
  110. #ifndef SYS5_3
  111.         wrefresh(Config_Win);
  112. #endif
  113.         ch = wgetch(Config_Win);
  114.         switch(ch)
  115.             {
  116.  
  117. /* toggle between machine and human */
  118.             case ' ' : machine[cur_player] = ! machine[cur_player];
  119.                    mvwprintw(Config_Win, cur_player + 5, 3,
  120.                     "%d %s", cur_player,
  121.                     brand[machine[cur_player]]);
  122.                    break;
  123.  
  124. /* move cursor up */
  125.             case 'k' : --cur_player;
  126.                    cur_player = wrap(cur_player, 0,
  127.                     player_count - 1);
  128.                    break;
  129.  
  130. /* move cursor down */
  131.             case 'j' : ++cur_player;
  132.                    cur_player = wrap(cur_player, 0,
  133.                     player_count - 1);
  134.                    break;
  135.             case '?' : help_out(0, Config_Win);
  136.                    break;
  137.             case 'q' : dis_score((WINDOW *) 0);
  138.                    yahtzee_exit(0);
  139.                    break;
  140.             case 's' : dis_score(Config_Win);
  141.                    break;
  142.             case Form_Feed : redraw(Config_Win);
  143.                    break;
  144.             case 'b' : rools(Config_Win);
  145.                    break;
  146.             case '!' : shell(Config_Win);
  147.                    break;
  148.             case 'v' : version(Config_Win);
  149.                    break;
  150. #if defined(SYS5) || defined(SYS5_3)
  151.             case '$' : shwin(Config_Win);
  152.                    break;
  153.             case '\n' : break;
  154.             default : flash();
  155.                   break;
  156. #endif
  157.             }
  158.         } while (ch != '\n');
  159.     delwin(Config_Win);
  160.  
  161. /* restore previous window */
  162.     touchwin(Back_Window);
  163.     wmove(Back_Window, tmp_y, tmp_x);
  164.     wrefresh(Back_Window);
  165.     return(player_count);
  166.     }
  167.