1 /* 2 * Copyright (c) 1982 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 */ 6 7 #ifndef lint 8 static char sccsid[] = "@(#)init.c 5.1 (Berkeley) 11/26/86"; 9 #endif not lint 10 11 # include "mille.h" 12 13 /* 14 * @(#)init.c 1.1 (Berkeley) 4/1/82 15 */ 16 17 init() { 18 19 reg PLAY *pp; 20 reg int i, j; 21 reg CARD card; 22 23 bzero(Numseen, sizeof Numseen); 24 Numgos = 0; 25 26 for (i = 0; i < 2; i++) { 27 pp = &Player[i]; 28 pp->hand[0] = C_INIT; 29 for (j = 0; j < NUM_SAFE; j++) { 30 pp->safety[j] = S_UNKNOWN; 31 pp->coups[j] = FALSE; 32 } 33 for (j = 1; j < HAND_SZ; j++) { 34 pp->hand[j] = *--Topcard; 35 if (i == COMP) { 36 account(card = *Topcard); 37 if (issafety(card)) 38 pp->safety[card - S_CONV] = S_IN_HAND; 39 } 40 } 41 pp->mileage = 0; 42 pp->hand_tot = 0; 43 pp->safescore = 0; 44 pp->coupscore = 0; 45 pp->can_go = FALSE; 46 pp->speed = C_INIT; 47 pp->battle = C_INIT; 48 pp->new_speed = FALSE; 49 pp->new_battle = FALSE; 50 for (j = 0; j < NUM_MILES; j++) 51 pp->nummiles[j] = 0; 52 } 53 if (Order) 54 sort(Player[PLAYER].hand); 55 Discard = C_INIT; 56 Finished = FALSE; 57 End = 700; 58 } 59 60 shuffle() { 61 62 reg int i, r; 63 reg CARD temp; 64 65 for (i = 0; i < DECK_SZ; i++) { 66 r = roll(1, DECK_SZ) - 1; 67 if (r < 0 || r > DECK_SZ - 1) { 68 fprintf(stderr, "shuffle: card no. error: %d\n", r); 69 die(); 70 } 71 temp = Deck[r]; 72 Deck[r] = Deck[i]; 73 Deck[i] = temp; 74 } 75 Topcard = &Deck[DECK_SZ]; 76 } 77 78 newboard() { 79 80 register int i; 81 register PLAY *pp; 82 static int first = TRUE; 83 84 if (first) { 85 werase(Board); 86 werase(Score); 87 mvaddstr(5, 0, "--HAND--"); 88 mvaddch(6, 0, 'P'); 89 mvaddch(7, 0, '1'); 90 mvaddch(8, 0, '2'); 91 mvaddch(9, 0, '3'); 92 mvaddch(10, 0, '4'); 93 mvaddch(11, 0, '5'); 94 mvaddch(12, 0, '6'); 95 mvaddstr(13, 0, "--BATTLE--"); 96 mvaddstr(15, 0, "--SPEED--"); 97 mvaddstr(5, 20, "--DECK--"); 98 mvaddstr(7, 20, "--DISCARD--"); 99 mvaddstr(13, 20, "--BATTLE--"); 100 mvaddstr(15, 20, "--SPEED--"); 101 mvwaddstr(Miles, 0, 0, "--MILEAGE--"); 102 mvwaddstr(Miles, 0, 41, "--MILEAGE--"); 103 Sh_discard = -1; 104 for (pp = Player; pp <= &Player[COMP]; pp++) { 105 for (i = 0; i < HAND_SZ; i++) 106 pp->sh_hand[i] = -1; 107 pp->sh_battle = -1; 108 pp->sh_speed = -1; 109 pp->sh_mileage = -1; 110 } 111 first = FALSE; 112 } 113 else { 114 for (i = 0; i < 5; i++) { 115 move(i, 0); 116 clrtoeol(); 117 } 118 wmove(Miles, 1, 0); 119 wclrtobot(Miles); 120 wmove(Board, MOVE_Y + 1, MOVE_X); 121 wclrtoeol(Board); 122 wmove(Board, MOVE_Y + 2, MOVE_X); 123 wclrtoeol(Board); 124 } 125 Sh_discard = -1; 126 for (pp = Player; pp <= &Player[COMP]; pp++) { 127 for (i = 0; i < NUM_SAFE; i++) 128 pp->sh_safety[i] = FALSE; 129 for (i = 0; i < NUM_MILES; i++) 130 pp->sh_nummiles[i] = 0; 131 pp->sh_safescore = -1; 132 } 133 newscore(); 134 } 135 136 newscore() { 137 138 reg int i, new; 139 register PLAY *pp; 140 static int was_full = -1; 141 static int last_win = -1; 142 143 if (was_full < 0) 144 was_full = (Window != W_FULL); 145 stdscr = Score; 146 move(0, 22); 147 new = FALSE; 148 if (inch() != 'Y') { 149 erase(); 150 mvaddstr(0, 22, "You Comp Value"); 151 mvaddstr(1, 2, "Milestones Played"); 152 mvaddstr(2, 8, "Each Safety"); 153 mvaddstr(3, 5, "All 4 Safeties"); 154 mvaddstr(4, 3, "Each Coup Fourre"); 155 mvaddstr(2, 37, "100"); 156 mvaddstr(3, 37, "300"); 157 mvaddstr(4, 37, "300"); 158 new = TRUE; 159 } 160 else if (((Window == W_FULL || Finished) ^ was_full) || 161 pp->was_finished != Finished) { 162 move(5, 1); 163 clrtobot(); 164 new = TRUE; 165 } 166 else if (Window != last_win) 167 new = TRUE; 168 if (new) { 169 for (i = 0; i < SCORE_Y; i++) 170 mvaddch(i, 0, '|'); 171 move(SCORE_Y - 1, 1); 172 while (addch('_') != ERR) 173 continue; 174 for (pp = Player; pp <= &Player[COMP]; pp++) { 175 pp->sh_hand_tot = -1; 176 pp->sh_total = -1; 177 pp->sh_games = -1; 178 pp->sh_safescore = -1; 179 } 180 } 181 Player[PLAYER].was_finished = !Finished; 182 Player[COMP].was_finished = !Finished; 183 if (Window == W_FULL || Finished) { 184 if (!was_full || new) { 185 mvaddstr(5, 5, "Trip Completed"); 186 mvaddstr(6, 10, "Safe Trip"); 187 mvaddstr(7, 5, "Delayed Action"); 188 mvaddstr(8, 10, "Extension"); 189 mvaddstr(9, 11, "Shut-Out"); 190 mvaddstr(10, 21, "---- ---- -----"); 191 mvaddstr(11, 9, "Hand Total"); 192 mvaddstr(12, 20, "----- -----"); 193 mvaddstr(13, 6, "Overall Total"); 194 mvaddstr(14, 15, "Games"); 195 mvaddstr(5, 37, "400"); 196 mvaddstr(6, 37, "300"); 197 mvaddstr(7, 37, "300"); 198 mvaddstr(8, 37, "200"); 199 mvaddstr(9, 37, "500"); 200 } 201 } 202 else 203 if (was_full || new) { 204 mvaddstr(5, 21, "---- ---- -----"); 205 mvaddstr(6, 9, "Hand Total"); 206 mvaddstr(7, 20, "----- -----"); 207 mvaddstr(8, 6, "Overall Total"); 208 mvaddstr(9, 15, "Games"); 209 mvaddstr(11, 2, "p: pick"); 210 mvaddstr(12, 2, "u: use #"); 211 mvaddstr(13, 2, "d: discard #"); 212 mvaddstr(14, 2, "w: toggle window"); 213 mvaddstr(11, 21, "q: quit"); 214 if (!Order) 215 mvaddstr(12, 21, "o: order hand"); 216 else 217 mvaddstr(12, 21, "o: stop ordering"); 218 mvaddstr(13, 21, "s: save"); 219 mvaddstr(14, 21, "r: reprint"); 220 } 221 stdscr = Board; 222 was_full = (Window == W_FULL || Finished); 223 last_win = Window; 224 } 225