Commit | Line | Data |
---|---|---|
4e84ca61 KM |
1 | #ifndef lint |
2 | static char sccsid[] = "@(#)win.c 4.1 (Berkeley) %G%"; | |
3 | #endif not lint | |
4 | ||
5 | # include "trek.h" | |
6 | # include "getpar.h" | |
7 | ||
8 | /* | |
9 | ** Signal game won | |
10 | ** | |
11 | ** This routine prints out the win message, arranges to print out | |
12 | ** your score, tells you if you have a promotion coming to you, | |
13 | ** cleans up the current input line, and arranges to have you | |
14 | ** asked whether or not you want another game (via the reset() | |
15 | ** call). | |
16 | ** | |
17 | ** Pretty straightforward, although the promotion algorithm is | |
18 | ** pretty off the wall. | |
19 | */ | |
20 | ||
21 | win() | |
22 | { | |
23 | long s; | |
24 | extern long score(); | |
25 | extern struct cvntab Skitab[]; | |
26 | register struct cvntab *p; | |
27 | ||
28 | sleep(1); | |
29 | printf("\nCongratulations, you have saved the Federation\n"); | |
30 | Move.endgame = 1; | |
31 | ||
32 | /* print and return the score */ | |
33 | s = score(); | |
34 | ||
35 | /* decide if she gets a promotion */ | |
36 | if (Game.helps == 0 && Game.killb == 0 && Game.killinhab == 0 && 5 * Game.kills + Game.deaths < 100 && | |
37 | s >= 1000 && Ship.ship == ENTERPRISE) | |
38 | { | |
39 | printf("In fact, you are promoted one step in rank,\n"); | |
40 | if (Game.skill >= 6) | |
41 | printf("to the exalted rank of Commodore Emeritus\n"); | |
42 | else | |
43 | { | |
44 | p = &Skitab[Game.skill - 1]; | |
45 | printf("from %s%s ", p->abrev, p->full); | |
46 | p++; | |
47 | printf("to %s%s\n", p->abrev, p->full); | |
48 | } | |
49 | } | |
50 | ||
51 | /* clean out input, and request new game */ | |
52 | skiptonl(0); | |
53 | reset(); | |
54 | } |