home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / games / volume15 / scrabble2 / patch1 / patches01
Text File  |  1993-01-27  |  23KB  |  827 lines

  1. *** cmove.c.orig    Sun Jul 26 11:20:23 1992
  2. --- cmove.c    Mon Oct 26 08:17:37 1992
  3. ***************
  4. *** 231,237 ****
  5. --- 231,241 ----
  6.                           tile++;
  7.                       if( blank > oldbl && tile > 0 ) {
  8.                           oldbl = blank;
  9. + #ifdef DBLSIZE_BOARD
  10. +                         move( BOARD_UY + sy - 1, BOARD_LX + sx * 2 - 2 );
  11. + #else
  12.                           move( BOARD_UY + sy - 1, BOARD_LX + sx - 1 );
  13. + #endif
  14.                           refresh();
  15.                           try_tiles( sx, sy, blank, dir );
  16.                       }
  17. *** misc.c.orig    Tue Sep 22 11:21:51 1992
  18. --- misc.c    Mon Oct 26 08:17:38 1992
  19. ***************
  20. *** 61,68 ****
  21.               }
  22.           }
  23.           if( rlen > tlen ) {
  24.               tlen = rlen;
  25. -             wlen[tlen] = wr;
  26.           }
  27.           strcpy( &words[pt], inp );
  28.           wptr[wr++] = pt;
  29. --- 61,68 ----
  30.               }
  31.           }
  32.           if( rlen > tlen ) {
  33. +             for( i = tlen + 1; i <= rlen; i++ ) wlen[i] = wr;
  34.               tlen = rlen;
  35.           }
  36.           strcpy( &words[pt], inp );
  37.           wptr[wr++] = pt;
  38. ***************
  39. *** 69,76 ****
  40.           pt += rlen + 1;
  41.           strcpy( tinp, inp );
  42.       }
  43.       dict_size = pt;
  44. !     wlen[16] = wr;
  45.       fclose( fp );
  46.   }
  47.   
  48. --- 69,78 ----
  49.           pt += rlen + 1;
  50.           strcpy( tinp, inp );
  51.       }
  52. +     words[pt] = '\0';
  53. +     wptr[wr] = pt;
  54.       dict_size = pt;
  55. !     for( i = tlen + 1; i < 17; i++ ) wlen[i] = wr;
  56.       fclose( fp );
  57.   }
  58.   
  59. ***************
  60. *** 111,119 ****
  61.   print_board() {
  62.       int i, j;
  63.   
  64.       for( i = 1; i < 16; i++ ) {
  65. -         move( BOARD_UY + i - 1, BOARD_LX );
  66.           for( j = 1; j < 16; j++ ) {
  67.               if( board[i][j] >= 'A' ) standout();
  68.               if( ( i == b1y && j == b1x ) || ( i == b2y && j == b2x ) )
  69.                   addch( board[i][j] - 'A' + 'a' );
  70. --- 113,126 ----
  71.   print_board() {
  72.       int i, j;
  73.   
  74. +     clear_rect( BOARD_UY, BOARD_LX, BOARD_LY, BOARD_RX );
  75.       for( i = 1; i < 16; i++ ) {
  76.           for( j = 1; j < 16; j++ ) {
  77. + #ifdef DBLSIZE_BOARD
  78. +             move( BOARD_UY + i - 1, BOARD_LX + j * 2 - 2 );
  79. + #else
  80. +             move( BOARD_UY + i - 1, BOARD_LX + j - 1 );
  81. + #endif
  82.               if( board[i][j] >= 'A' ) standout();
  83.               if( ( i == b1y && j == b1x ) || ( i == b2y && j == b2x ) )
  84.                   addch( board[i][j] - 'A' + 'a' );
  85. ***************
  86. *** 129,143 ****
  87.       int i, j;
  88.   
  89.       clear_rect( TILE_RACKS_Y, TILE_RACKS_X,
  90. !                   TILE_RACKS_Y + 7, TILE_RACKS_X + 24 );
  91.       for( i = 0; i < players; i++ ) {
  92.           move( TILE_RACKS_Y + i * 3, TILE_RACKS_X - 4 );
  93.           if( plr_skills[i] != 0 ) printw( "(%d)", plr_skills[i] );
  94. !         move( TILE_RACKS_Y + i * 3, TILE_RACKS_X );
  95.           if( i == human_player )
  96. !             printw( "Your tiles:" );
  97.           else
  98. !             printw( "%s tiles:", you[i] );
  99.           for( j = 0; j < 7; j++ ) {
  100.               addch( ' ' );
  101.               if( plr_tiles[i][j] > 0 ) {
  102. --- 136,150 ----
  103.       int i, j;
  104.   
  105.       clear_rect( TILE_RACKS_Y, TILE_RACKS_X,
  106. !                   TILE_RACKS_Y + 7, TILE_RACKS_X + 19 );
  107.       for( i = 0; i < players; i++ ) {
  108.           move( TILE_RACKS_Y + i * 3, TILE_RACKS_X - 4 );
  109.           if( plr_skills[i] != 0 ) printw( "(%d)", plr_skills[i] );
  110. !         move( TILE_RACKS_Y + i * 3, TILE_RACKS_X + 1 );
  111.           if( i == human_player )
  112. !             printw( " You:" );
  113.           else
  114. !             printw( "%s:", you[i] );
  115.           for( j = 0; j < 7; j++ ) {
  116.               addch( ' ' );
  117.               if( plr_tiles[i][j] > 0 ) {
  118. ***************
  119. *** 150,156 ****
  120.   #endif
  121.               } else addch( ' ' );
  122.           }
  123. !         move( TILE_RACKS_Y + i * 3 + 1, TILE_RACKS_X + 5 );
  124.           printw( "Score: %3d", plr_scores[i] );
  125.       }
  126.       move( TILE_RACKS_Y + 12, TILE_RACKS_X - 2 );
  127. --- 157,163 ----
  128.   #endif
  129.               } else addch( ' ' );
  130.           }
  131. !         move( TILE_RACKS_Y + i * 3 + 1, TILE_RACKS_X );
  132.           printw( "Score: %3d", plr_scores[i] );
  133.       }
  134.       move( TILE_RACKS_Y + 12, TILE_RACKS_X - 2 );
  135. ***************
  136. *** 157,169 ****
  137.       i = 0;
  138.       if( b1x != 0 ) i++;
  139.       if( b2x != 0 ) i++;
  140. !     printw( "Blank tiles placed so far: %d", i );
  141.       if( b1x != 0 ) {
  142. !         move( TILE_RACKS_Y + 13, TILE_RACKS_X + 3 );
  143.           printw( "Row %2d, Column %2d (%c)", b1y, b1x, board[b1y][b1x] );
  144.       }
  145.       if( b2x != 0 ) {
  146. !         move( TILE_RACKS_Y + 14, TILE_RACKS_X + 3 );
  147.           printw( "Row %2d, Column %2d (%c)", b2y, b2x, board[b2y][b2x] );
  148.       }
  149.       move( TILE_RACKS_Y + human_player * 3, TILE_RACKS_X - 1 );
  150. --- 164,176 ----
  151.       i = 0;
  152.       if( b1x != 0 ) i++;
  153.       if( b2x != 0 ) i++;
  154. !     printw( "Blank tiles placed: %d", i );
  155.       if( b1x != 0 ) {
  156. !         move( TILE_RACKS_Y + 13, TILE_RACKS_X - 1 );
  157.           printw( "Row %2d, Column %2d (%c)", b1y, b1x, board[b1y][b1x] );
  158.       }
  159.       if( b2x != 0 ) {
  160. !         move( TILE_RACKS_Y + 14, TILE_RACKS_X - 1 );
  161.           printw( "Row %2d, Column %2d (%c)", b2y, b2x, board[b2y][b2x] );
  162.       }
  163.       move( TILE_RACKS_Y + human_player * 3, TILE_RACKS_X - 1 );
  164. ***************
  165. *** 187,201 ****
  166.               break;
  167.       }
  168.       tiles_left[i]--;
  169. !     print_tiles_left( tleft - 1 );
  170.       return( i == 26 ? CH_BL : i + 'A' );
  171.   }
  172.   
  173. ! print_tiles_left( t )
  174. !   int t;
  175. ! {
  176.       move( TILES_LEFT_Y, TILES_LEFT_X );
  177. !     printw( "Tiles left to draw: %3d", t );
  178.   }
  179.   
  180.   char get_key() {
  181. --- 194,241 ----
  182.               break;
  183.       }
  184.       tiles_left[i]--;
  185. !     print_tiles_left();
  186.       return( i == 26 ? CH_BL : i + 'A' );
  187.   }
  188.   
  189. ! print_tiles_left() {
  190. !     int i, tleft;
  191. !     tleft = 0;
  192. !     for( i = 0; i < 27; i++ )
  193. !         tleft += tiles_left[i];
  194.       move( TILES_LEFT_Y, TILES_LEFT_X );
  195. !     printw( "Tiles left to draw: %3d", tleft );
  196. ! }
  197. ! print_passed_turns() {
  198. !     if( game_done == 0 ) clear_rect( 1, 50, 1, 79 );
  199. !     else {
  200. !         move( 1, 63 );
  201. !         printw( "Passed turns:  %d", game_done );
  202. !     }
  203. !     refresh();
  204. ! }
  205. ! print_whos_move( plr ) {
  206. !     clear_turn();
  207. !     printw( "*** %s turn to play  ", your[plr] );
  208. ! }
  209. ! print_version() {
  210. !     clear();
  211. !     printw( "*** SCRABBLE 1.30 ***\n\n" );
  212. ! }
  213. ! screen_redraw() {
  214. !     print_version();
  215. !     print_info();
  216. !     print_board();
  217. !     print_tiles_left( tiles_left );
  218. !     print_passed_turns();
  219. !     print_tiles();
  220. !     print_whos_move( human_player );
  221.   }
  222.   
  223.   char get_key() {
  224. *** pmove.c.orig    Wed Aug 19 11:58:07 1992
  225. --- pmove.c    Mon Oct 26 08:17:39 1992
  226. ***************
  227. *** 12,22 ****
  228.       char c;
  229.       int xpos, ypos, done;
  230.   
  231. !     xpos = BOARD_LX;
  232. !     ypos = BOARD_UY;
  233.       for( ;; ) {
  234.           clear_prompt();
  235. !         printw( "  Use the 'hjkl' keys to move the cursor.\n" );
  236.           printw( "  Press <RETURN> on an empty square to start placing tiles on the board.\n" );
  237.           printw( "  Press <SPACE> to rearrange your tiles.\n" );
  238.           printw( "  Press '.' to use your turn to draw new tiles.\n" );
  239. --- 12,22 ----
  240.       char c;
  241.       int xpos, ypos, done;
  242.   
  243. !     xpos = 1;
  244. !     ypos = 1;
  245.       for( ;; ) {
  246.           clear_prompt();
  247. !         printw( "  Use the 'hjkl' keys to move the cursor, and control-L to refresh the screen.\n" );
  248.           printw( "  Press <RETURN> on an empty square to start placing tiles on the board.\n" );
  249.           printw( "  Press <SPACE> to rearrange your tiles.\n" );
  250.           printw( "  Press '.' to use your turn to draw new tiles.\n" );
  251. ***************
  252. *** 23,47 ****
  253.           refresh();
  254.           done = 0;
  255.           do {
  256. !             move( ypos, xpos );
  257.               refresh();
  258.               c = get_key();
  259.               switch( c ) {
  260.                 case 'H':
  261. !                 if( xpos > BOARD_LX ) xpos--;
  262.                   break;
  263.                 case 'L':
  264. !                 if( xpos < BOARD_RX ) xpos++;
  265.                   break;
  266.                 case 'J':
  267. !                 if( ypos < BOARD_LY ) ypos++;
  268.                   break;
  269.                 case 'K':
  270. !                 if( ypos > BOARD_UY ) ypos--;
  271.                   break;
  272.                 case '\n':
  273. !                 if( board[ypos - BOARD_UY + 1][xpos - BOARD_LX + 1] < 'A' )
  274. !                     done = place_tiles( xpos, ypos );
  275.                   break;
  276.                 case ' ':
  277.                   done = rearrange_tiles();
  278. --- 23,50 ----
  279.           refresh();
  280.           done = 0;
  281.           do {
  282. ! #ifdef DBLSIZE_BOARD
  283. !             move( BOARD_UY + ypos - 1, BOARD_LX + xpos * 2 - 2 );
  284. ! #else
  285. !             move( BOARD_UY + ypos - 1, BOARD_LX + xpos - 1 );
  286. ! #endif
  287.               refresh();
  288.               c = get_key();
  289.               switch( c ) {
  290.                 case 'H':
  291. !                 if( xpos > 1 ) xpos--;
  292.                   break;
  293.                 case 'L':
  294. !                 if( xpos < 15 ) xpos++;
  295.                   break;
  296.                 case 'J':
  297. !                 if( ypos < 15 ) ypos++;
  298.                   break;
  299.                 case 'K':
  300. !                 if( ypos > 1 ) ypos--;
  301.                   break;
  302.                 case '\n':
  303. !                 if( board[ypos][xpos] < 'A' ) done = place_tiles( xpos, ypos );
  304.                   break;
  305.                 case ' ':
  306.                   done = rearrange_tiles();
  307. ***************
  308. *** 49,54 ****
  309. --- 52,61 ----
  310.                 case '.':
  311.                   done = draw_new_tiles();
  312.                   break;
  313. +               case ' ':
  314. +                 screen_redraw();
  315. +                 done = -1;
  316. +                 break;
  317.               }
  318.           } while( done == 0 );
  319.           if( done == 1 ) break;
  320. ***************
  321. *** 83,89 ****
  322.       show_instructions();
  323.       placed = 0;
  324.       for( ;; ) {
  325. !         move( ypos, xpos );
  326.           refresh();
  327.           c = get_key();
  328.           if( c == '-' || c == 127 || c == 8 ) {
  329. --- 90,100 ----
  330.       show_instructions();
  331.       placed = 0;
  332.       for( ;; ) {
  333. ! #ifdef DBLSIZE_BOARD
  334. !         move( BOARD_UY + ypos - 1, BOARD_LX + xpos * 2 - 2 );
  335. ! #else
  336. !         move( BOARD_UY + ypos - 1, BOARD_LX + xpos - 1 );
  337. ! #endif
  338.           refresh();
  339.           c = get_key();
  340.           if( c == '-' || c == 127 || c == 8 ) {
  341. ***************
  342. *** 92,99 ****
  343.               do {
  344.                   xpos -= xinc;
  345.                   ypos -= yinc;
  346. !             } while( board[ypos - BOARD_UY + 1][xpos - BOARD_LX + 1] >= 'A' );
  347. !             move( ypos, xpos );
  348.               addch( newlet[placed].oldlet );
  349.               plr_tiles[human_player][newlet[placed].tilepos]
  350.                 = newlet[placed].letter;
  351. --- 103,114 ----
  352.               do {
  353.                   xpos -= xinc;
  354.                   ypos -= yinc;
  355. !             } while( board[ypos][xpos] >= 'A' );
  356. ! #ifdef DBLSIZE_BOARD
  357. !             move( BOARD_UY + ypos - 1, BOARD_LX + xpos * 2 - 2 );
  358. ! #else
  359. !             move( BOARD_UY + ypos - 1, BOARD_LX + xpos - 1 );
  360. ! #endif
  361.               addch( newlet[placed].oldlet );
  362.               plr_tiles[human_player][newlet[placed].tilepos]
  363.                 = newlet[placed].letter;
  364. ***************
  365. *** 103,110 ****
  366.                   do {
  367.                       xpos -= xinc;
  368.                       ypos -= yinc;
  369. !                 } while( board[ypos - BOARD_UY + 1][xpos - BOARD_LX + 1] >= 'A' );
  370. !                 move( ypos, xpos );
  371.                   addch( newlet[placed].oldlet );
  372.                   plr_tiles[human_player][newlet[placed].tilepos]
  373.                     = newlet[placed].letter;
  374. --- 118,129 ----
  375.                   do {
  376.                       xpos -= xinc;
  377.                       ypos -= yinc;
  378. !                 } while( board[ypos][xpos] >= 'A' );
  379. ! #ifdef DBLSIZE_BOARD
  380. !                 move( BOARD_UY + ypos - 1, BOARD_LX + xpos * 2 - 2 );
  381. ! #else
  382. !                 move( BOARD_UY + ypos - 1, BOARD_LX + xpos - 1 );
  383. ! #endif
  384.                   addch( newlet[placed].oldlet );
  385.                   plr_tiles[human_player][newlet[placed].tilepos]
  386.                     = newlet[placed].letter;
  387. ***************
  388. *** 191,197 ****
  389.               } else press_return();
  390.               show_instructions();
  391.           } else {
  392. !             if( xpos > BOARD_RX || ypos > BOARD_LY ) continue;
  393.               tile = -1;
  394.               for( i = 0; i < 7; i++ ) {
  395.                   if( c == plr_tiles[human_player][i] ) tile = i;
  396. --- 210,216 ----
  397.               } else press_return();
  398.               show_instructions();
  399.           } else {
  400. !             if( xpos > 15 || ypos > 15 ) continue;
  401.               tile = -1;
  402.               for( i = 0; i < 7; i++ ) {
  403.                   if( c == plr_tiles[human_player][i] ) tile = i;
  404. ***************
  405. *** 203,212 ****
  406.                   newlet[placed].blankchar = c;
  407.               newlet[placed].letter = plr_tiles[human_player][tile];
  408.               plr_tiles[human_player][tile] = 0;
  409. !             newlet[placed].x = xpos - BOARD_LX + 1;
  410. !             newlet[placed].y = ypos - BOARD_UY + 1;
  411. !             newlet[placed].oldlet =
  412. !               board[ypos - BOARD_UY + 1][xpos - BOARD_LX + 1];
  413.               if( newlet[placed].oldlet == CH_DW ) newlet[placed].oldlet = 'o';
  414.               newlet[placed].tilepos = tile;
  415.               addch( newlet[placed].letter );
  416. --- 222,230 ----
  417.                   newlet[placed].blankchar = c;
  418.               newlet[placed].letter = plr_tiles[human_player][tile];
  419.               plr_tiles[human_player][tile] = 0;
  420. !             newlet[placed].x = xpos;
  421. !             newlet[placed].y = ypos;
  422. !             newlet[placed].oldlet = board[ypos][xpos];
  423.               if( newlet[placed].oldlet == CH_DW ) newlet[placed].oldlet = 'o';
  424.               newlet[placed].tilepos = tile;
  425.               addch( newlet[placed].letter );
  426. ***************
  427. *** 213,220 ****
  428.               do {
  429.                   xpos += xinc;
  430.                   ypos += yinc;
  431. !             } while( board[ypos - BOARD_UY + 1][xpos - BOARD_LX + 1] >= 'A'
  432. !               && xpos <= BOARD_RX && ypos <= BOARD_LY );
  433.               print_tiles();
  434.               placed++;
  435.           }
  436. --- 231,237 ----
  437.               do {
  438.                   xpos += xinc;
  439.                   ypos += yinc;
  440. !             } while( board[ypos][xpos] >= 'A' && xpos <= 15 && ypos <= 15 );
  441.               print_tiles();
  442.               placed++;
  443.           }
  444. *** score.c.orig    Tue Aug  4 11:26:00 1992
  445. --- score.c    Mon Oct 26 08:17:42 1992
  446. ***************
  447. *** 98,103 ****
  448. --- 98,104 ----
  449.   
  450.       f = wlen[strlen( word )];
  451.       l = wlen[strlen( word ) + 1] - 1;
  452. +     if( f > l ) return( 0 );
  453.       found = 0;
  454.       do {
  455.           m = ( f + l ) / 2;
  456. ***************
  457. *** 143,148 ****
  458. --- 144,150 ----
  459.           }
  460.           printw( "%s  ", word );
  461.           score += new_words[i].score;
  462. +         xloc += strlen( word ) + 2;
  463.           if( bin_search( word ) == 0 ) {
  464.               ind[illword++] = i;
  465.           }
  466. ***************
  467. *** 156,163 ****
  468.           }
  469.           for( i = 0; i < illword; i++ ) {
  470.               clear_rect( 21, 0, 22, 79 );
  471.               printw( "  %s is not in the computer's dictionary.\n",
  472. !               &(new_words[i].letters[0]) );
  473.               printw( "  Is it a valid Scrabble word (y/n)? " );
  474.               refresh();
  475.               do {
  476. --- 158,166 ----
  477.           }
  478.           for( i = 0; i < illword; i++ ) {
  479.               clear_rect( 21, 0, 22, 79 );
  480. +             j = ind[i];
  481.               printw( "  %s is not in the computer's dictionary.\n",
  482. !               &(new_words[j].letters[0]) );
  483.               printw( "  Is it a valid Scrabble word (y/n)? " );
  484.               refresh();
  485.               do {
  486. ***************
  487. *** 166,174 ****
  488.               if( c == 'N' ) break;
  489.               clear_rect( 21, 0, 22, 79 );
  490.               printw( "  Inserting %s into the dictionary...",
  491. !               &(new_words[i].letters[0]) );
  492.               refresh();
  493. !             add_dict( &(new_words[i].letters[0]) );
  494.               dict_changed = 1;
  495.           }
  496.           clear_rect( 21, 0, 22, 79 );
  497. --- 169,177 ----
  498.               if( c == 'N' ) break;
  499.               clear_rect( 21, 0, 22, 79 );
  500.               printw( "  Inserting %s into the dictionary...",
  501. !               &(new_words[j].letters[0]) );
  502.               refresh();
  503. !             add_dict( &(new_words[j].letters[0]) );
  504.               dict_changed = 1;
  505.           }
  506.           clear_rect( 21, 0, 22, 79 );
  507. ***************
  508. *** 246,258 ****
  509.       for( p1 = wlen[l];
  510.             p1 < wlen[l + 1] && strcmp( word, &(words[wptr[p1]]) ) > 0;
  511.             p1++ );
  512. !     for( p2 = dict_size - 1; p2 >= wptr[p1]; p2-- ) words[p2 + l + 1] = words[p2];
  513. !     for( p2 = wlen[16]; p2 > p1; p2-- ) wptr[p2] = wptr[p2 - 1] + l + 1;
  514.       for( i = l + 1; i < 17; i++ ) wlen[i]++;
  515.       strcpy( &(words[wptr[p1]]), word );
  516.       dict_size += l + 1;
  517.   /*    printw( "\n  " );
  518. !     for( p2 = p1 - 2; p2 < p1 + 3; p2++ )
  519.           printw( "%s  ", &(words[wptr[p2]]) );
  520.       printw( "%s  %s", &(words[wptr[wlen[8]]]), &(words[wptr[wlen[16] - 1]]) );
  521.       press_return(); */
  522. --- 249,261 ----
  523.       for( p1 = wlen[l];
  524.             p1 < wlen[l + 1] && strcmp( word, &(words[wptr[p1]]) ) > 0;
  525.             p1++ );
  526. !     for( p2 = dict_size; p2 >= wptr[p1]; p2-- ) words[p2 + l + 1] = words[p2];
  527. !     for( p2 = wlen[16] + 1; p2 > p1; p2-- ) wptr[p2] = wptr[p2 - 1] + l + 1;
  528.       for( i = l + 1; i < 17; i++ ) wlen[i]++;
  529.       strcpy( &(words[wptr[p1]]), word );
  530.       dict_size += l + 1;
  531.   /*    printw( "\n  " );
  532. !     for( p2 = ( p1 - 2 >= 0 ? p1 - 2 : 0 ); p2 < p1 + 3 && p2 <= wlen[16]; p2++ )
  533.           printw( "%s  ", &(words[wptr[p2]]) );
  534.       printw( "%s  %s", &(words[wptr[wlen[8]]]), &(words[wptr[wlen[16] - 1]]) );
  535.       press_return(); */
  536. *** scrab.h.orig    Tue Sep 15 13:42:33 1992
  537. --- scrab.h    Mon Oct 26 08:17:45 1992
  538. ***************
  539. *** 19,35 ****
  540.   #define CH_BL            '*'
  541.   #define CH_IT            '_'
  542.   
  543. - #define BOARD_UY        2
  544. - #define BOARD_LY        16
  545. - #define BOARD_LX        34
  546. - #define BOARD_RX        48
  547.   #define INFO_Y            2
  548.   #define INFO_X            0
  549.   #define TILE_RACKS_Y    2
  550. ! #define TILE_RACKS_X    54
  551.   #define TILES_LEFT_Y    0
  552.   #define TILES_LEFT_X    57
  553.   /* #define PRINT_CPU_TILES */
  554.   
  555.   #define DICT_FILE        "scrabbledict"
  556.   
  557. --- 19,45 ----
  558.   #define CH_BL            '*'
  559.   #define CH_IT            '_'
  560.   
  561.   #define INFO_Y            2
  562.   #define INFO_X            0
  563.   #define TILE_RACKS_Y    2
  564. ! #define TILE_RACKS_X    59
  565.   #define TILES_LEFT_Y    0
  566.   #define TILES_LEFT_X    57
  567.   /* #define PRINT_CPU_TILES */
  568. + /* #define DBLSIZE_BOARD */
  569. + #ifdef  DBLSIZE_BOARD
  570. + #define BOARD_UY        2
  571. + #define BOARD_LY        16
  572. + #define BOARD_LX        25
  573. + #define BOARD_RX        53
  574. + #else
  575. + #define BOARD_UY        2
  576. + #define BOARD_LY        16
  577. + #define BOARD_LX        32
  578. + #define BOARD_RX        46
  579. + #endif
  580.   
  581.   #define DICT_FILE        "scrabbledict"
  582.   
  583. *** scrabble.6.orig    Wed Sep 16 12:46:16 1992
  584. --- scrabble.6    Mon Oct 26 08:17:46 1992
  585. ***************
  586. *** 1,5 ****
  587. ! .\" @(#)scrabble.6 1.02 92/09/16 JAC
  588. ! .TH SCRABBLE 6 "16 September 1992"
  589.   .SH NAME
  590.   scrabble \- play the Scrabble(TM) board game
  591.   .SH SYNOPSIS
  592. --- 1,5 ----
  593. ! .\" @(#)scrabble.6 1.03 92/09/16 JAC
  594. ! .TH SCRABBLE 6 "5 October 1992"
  595.   .SH NAME
  596.   scrabble \- play the Scrabble(TM) board game
  597.   .SH SYNOPSIS
  598. ***************
  599. *** 7,13 ****
  600.   .SH DESCRIPTION
  601.   .LP
  602.   .B scrabble
  603. ! is a computer version of the Selchow & Righter board game, Scrabble.
  604.   Only one human player plays; the user may select the number of
  605.   computer opponents, from one to three.
  606.   .SH BASIC SCRABBLE RULES
  607. --- 7,13 ----
  608.   .SH DESCRIPTION
  609.   .LP
  610.   .B scrabble
  611. ! is a computer version of the Milton Bradley board game, Scrabble.
  612.   Only one human player plays; the user may select the number of
  613.   computer opponents, from one to three.
  614.   .SH BASIC SCRABBLE RULES
  615. ***************
  616. *** 241,246 ****
  617. --- 241,250 ----
  618.   l
  619.   Moves the cursor right.  If the cursor is on the right edge
  620.   of the board, this key has no effect.
  621. + .TP
  622. + ^L
  623. + Redraws the screen.  This is provided in case the screen
  624. + should somehow become corrupted.
  625.   .TP
  626.   RETURN
  627.   Starts placing tiles on the board.  If the cursor is over
  628. *** smain.c.orig    Tue Sep 15 13:45:37 1992
  629. --- smain.c    Mon Oct 26 08:17:43 1992
  630. ***************
  631. *** 76,96 ****
  632.       move( INFO_Y + 5, INFO_X + 2 );
  633.       printw( "%c: Blank tile", CH_BL );
  634.       move( INFO_Y + 7, INFO_X );
  635. !     printw( "Tile values & distributions:" );
  636.       move( INFO_Y + 8, INFO_X + 2 );
  637. !     printw( "A-1, 9  H-4, 2  O-1, 8  V-4, 2" );
  638.       move( INFO_Y + 9, INFO_X + 2 );
  639. !     printw( "B-3, 2  I-1, 9  P-3, 2  W-4, 2" );
  640.       move( INFO_Y +10, INFO_X + 2 );
  641. !     printw( "C-3, 2  J-8, 1  Q10, 1  X-8, 1" );
  642.       move( INFO_Y +11, INFO_X + 2 );
  643. !     printw( "D-2, 4  K-5, 1  R-1, 6  Y-4, 2" );
  644. !     move( INFO_Y +12, INFO_X + 2 );
  645. !     printw( "E-1,12  L-1, 4  S-1, 4  Z10, 1" );
  646.       move( INFO_Y +13, INFO_X + 2 );
  647. !     printw( "F-4, 2  M-3, 2  T-1, 6  %c-0, 2", CH_BL );
  648.       move( INFO_Y +14, INFO_X + 2 );
  649. !     printw( "G-2, 3  N-1, 6  U-1, 4" );
  650.       refresh();
  651.   }
  652.   
  653. --- 76,96 ----
  654.       move( INFO_Y + 5, INFO_X + 2 );
  655.       printw( "%c: Blank tile", CH_BL );
  656.       move( INFO_Y + 7, INFO_X );
  657. !     printw( "Tile distribs & values:" );
  658.       move( INFO_Y + 8, INFO_X + 2 );
  659. !     printw( "9A1  2H4  8O1  2V4" );
  660.       move( INFO_Y + 9, INFO_X + 2 );
  661. !     printw( "2B3  9I1  2P3  2W4" );
  662.       move( INFO_Y +10, INFO_X + 2 );
  663. !     printw( "2C3  1J8  1Q10 1X8" );
  664.       move( INFO_Y +11, INFO_X + 2 );
  665. !     printw( "4D2  1K5  6R1  2Y4" );
  666. !     move( INFO_Y +12, INFO_X + 1 );
  667. !     printw( "12E1  4L1  4S1  1Z10" );
  668.       move( INFO_Y +13, INFO_X + 2 );
  669. !     printw( "2F4  2M3  6T1  2%c0", CH_BL );
  670.       move( INFO_Y +14, INFO_X + 2 );
  671. !     printw( "3G2  6N1  4U1" );
  672.       refresh();
  673.   }
  674.   
  675. ***************
  676. *** 144,150 ****
  677.           if( j == 4 ) strcpy( cs, "fourth" );
  678.           printw( "\n  You will play %s.", cs );
  679.           human_player = j - 1;
  680. !         print_tiles_left( 100 );
  681.           press_return();
  682.           clear_prompt();
  683.           refresh();
  684. --- 144,150 ----
  685.           if( j == 4 ) strcpy( cs, "fourth" );
  686.           printw( "\n  You will play %s.", cs );
  687.           human_player = j - 1;
  688. !         print_tiles_left();
  689.           press_return();
  690.           clear_prompt();
  691.           refresh();
  692. ***************
  693. *** 300,313 ****
  694.       int i;
  695.   
  696.       set_up_window();
  697. !     clear();
  698. !     printw( "*** SCRABBLE 1.21 ***\n\n" );
  699.   
  700.       read_words();
  701.       dict_changed = 0;
  702.   
  703. !     clear();
  704. !     printw( "*** SCRABBLE 1.21 ***\n\n" );
  705.   
  706.       init_board();
  707.       seed_random();
  708. --- 300,311 ----
  709.       int i;
  710.   
  711.       set_up_window();
  712. !     print_version();
  713.   
  714.       read_words();
  715.       dict_changed = 0;
  716.   
  717. !     print_version();
  718.   
  719.       init_board();
  720.       seed_random();
  721. ***************
  722. *** 319,326 ****
  723.       abort = 0;
  724.       do {
  725.           for( plr = 0; plr < players; plr++ ) {
  726. !             clear_turn();
  727. !             printw( "*** %s turn to play  ", your[plr] );
  728.               if( plr == human_player ) {
  729.                   player_move();
  730.               } else {
  731. --- 317,323 ----
  732.       abort = 0;
  733.       do {
  734.           for( plr = 0; plr < players; plr++ ) {
  735. !             print_whos_move( plr );
  736.               if( plr == human_player ) {
  737.                   player_move();
  738.               } else {
  739. ***************
  740. *** 327,338 ****
  741.                   computer_move( plr );
  742.               }
  743.               if( abort != 0 ) break;
  744. !             if( game_done == 0 ) clear_rect( 1, 50, 1, 79 );
  745. !             else {
  746. !                 move( 1, 64 );
  747. !                 printw( "Passed turns:  %d", game_done );
  748. !             }
  749. !             refresh();
  750.               if( game_done == players ) break;
  751.               for( i = 0; i < 7; i++ )
  752.                   if( plr_tiles[plr][i] != 0 ) break;
  753. --- 324,330 ----
  754.                   computer_move( plr );
  755.               }
  756.               if( abort != 0 ) break;
  757. !             print_passed_turns();
  758.               if( game_done == players ) break;
  759.               for( i = 0; i < 7; i++ )
  760.                   if( plr_tiles[plr][i] != 0 ) break;
  761. *** /dev/null    Mon Oct 26 08:10:12 1992
  762. --- CHANGES    Mon Oct 26 08:19:02 1992
  763. ***************
  764. *** 0 ****
  765. --- 1,53 ----
  766. + Here is a list of people who suggested changes to scrabble, followed by my
  767. + responses to them
  768. + 1.   alainc%tollys.UUCP%bnrmtl.UUCP@Larry.McRCIM.McGill.EDU (Alain Caron)
  769. +    was trying to get scrabble to work with a french dictionary, and there were
  770. +    bugs in the dictionary insertion routine.  They have now been fixed.
  771. +    These bugs were quite serious.
  772. + 2.   "Bradley D. Keister" <keister@poincare.phys.cmu.edu> noticed some problems
  773. +    once with how scrabble was displayed on his screen.  As well, Nick Sayer
  774. +    <mrapple@quack.sac.ca.us> recommended that a redraw screen key be added.
  775. +    Now, the screen may be redrawn by pressing ctrl-L when it is the human
  776. +    player's turn.  It may only be used when moving around the board with the
  777. +    'hjkl' keys; if you are placing tiles or anything else, you must press ESC
  778. +    before pressing ctrl-L.  As well, it cannot be redrawn when the computer
  779. +    players are playing.  The justification for this is that, the computer play-
  780. +    ers don't actually care about the screen layout when they're playing a move
  781. +    whereas the human player does.  Thus, it seemed acceptable that only during
  782. +    the human player's turn may the screen be redrawn.
  783. + 3.   wixer!cb@cs.utexas.edu (Cyberspace Buddha) recommended the use of the
  784. +    Official Scrabble Players' Dictionary with scrabble.  He tells me a copy
  785. +    may be obtained from 
  786. +     Christopher Hall
  787. +     P.O. Box 26025
  788. +     Austin, Tx 78755-0025
  789. +     FidoNet    : 1:382/29.4
  790. +     CompuServe  : 72150,752
  791. + 4.   Nick Sayer <mrapple@quack.sac.ca.us> recommended that the board width be
  792. +    doubled, partly to make the board look more square, and partly to allow
  793. +    reverse-video to be displayed on "magic-cookie" type terminals.
  794. +    Now, the file scrab.h has a preprocessor directive which may be uncommented:
  795. +    /* #define DBLSIZE_BOARD */
  796. +    If this directive is uncommented, the board width doubles.  Otherwise, it
  797. +    remains as narrow as in V1.21.  I prefer the narrow board, myself.
  798. + 5.   sthomas@serene.clipper.ingr.com (Steve Thomas) points out that, in fact,
  799. +    Selchow and Righter no longer own the rights to scrabble.  Depending on the
  800. +    country, the rights are now owned by Milton Bradley or JW Spear & Sons.
  801. +    As well, Steve had a number of good suggestions for improving the computer
  802. +    players' speed.  He recommended a form of rack management, and he directed
  803. +    me to an article by Appel & Jacobson about how to improve the computer.  I
  804. +    have not implemented his suggestions yet.  Maybe later...
  805.