|
|
1.1 root 1: # include "trek.h"
2:
3: # define LOGFILE "/usr/src/games/trek/log"
4:
5: /**
6: ** write out log
7: **/
8:
9: extern long score();
10: extern float atof();
11: CVNTAB Lentab[]
12: {
13: "s", "hort",
14: "m", "edium",
15: "i", "ntermediate",
16: "l", "ong",
17: 0
18: };
19:
20: CVNTAB Skitab[]
21: {
22: "n", "ovice",
23: "f", "air",
24: "g", "ood",
25: "e", "xpert",
26: "c", "ommodore",
27: "i", "mpossible",
28: 0
29: };
30:
31:
32: char *reason[] {
33: "win......",
34: "cheating.",
35: "destruct.",
36: "burned...",
37: "too fast.",
38: "no help..",
39: "suffocate",
40: "supernova",
41: "nova.....",
42: "barrier..",
43: "destroyed",
44: "energy...",
45: "time.....",
46: "captured.",
47: "no crew..",
48: };
49:
50: char b[200];
51: char *a[20];
52: float days;
53:
54: main()
55: {
56: int winlose;
57: int k1, k2;
58: long s;
59:
60: while(getlin()) {
61: Game.skill=index(*a[4],"nfgeci");
62: Game.length=index(*a[5],"smil");
63: days=atof(a[6]);
64: Status.ship=last(a[6]);
65: sscanf(a[7],"%d/%d",&k1,&k2);
66: Game.gkillk = k1;
67: Status.kling = k2-k1;
68: Game.helps=atoi(a[8]);
69: Game.killb=atoi(a[9]);
70: Game.kills=atoi(a[10]);
71: Game.killinhab=atoi(a[11]);
72: Game.deaths=atoi(a[12]);
73: winlose=lookup(a[3]);
74: Move.endgame=0; Game.killed=0;
75: if(winlose==0)
76: Move.endgame++;
77: else if(winlose<12)
78: Game.killed++;
79:
80: s=score();
81: printf("%s\t%s\t%D\t%s\t%s\t%s\t%.2f%c\t%d/%d\t%d\t%d\t%d\t%d\t%d\n",
82: a[0],
83: a[1],
84: s,
85: a[3],
86: (Skitab[Game.skill-1].abrev),
87: (Lentab[Game.length-1].abrev),
88: days,
89: Status.ship,
90: Game.gkillk, Game.gkillk+Status.kling,
91: Game.helps,
92: Game.killb,
93: Game.kills,
94: Game.killinhab,
95: Game.deaths
96: );
97: }
98: }
99:
100: long score()
101: {
102: register int u;
103: long s, t; /* should really be long */
104: double r;
105:
106: Initial.kling=Game.skill*Game.length*5;
107: u = Initial.kling*1.05+5;
108: if(u>Game.gkillk) u=Game.gkillk;
109: Param.klingpwr=100+150*Game.skill+(Game.skill>=6?150:0);
110: s = t = Param.klingpwr / 4 * u;;
111: r = days;
112: if (r < 1.0)
113: r = 1.0;
114: r = u / r;
115: s =+ (t = 400 * r);
116: r = Status.kling;
117: r =/ u + 1;
118: s =+ (t = -1000 * r);
119: if (Move.endgame > 0)
120: {
121: s =+ (t = 100 * (u = Game.skill));
122: }
123: if (Game.killed)
124: {
125: s =- 200;
126: }
127: s =+ (t = -100 * (u = Game.killb));
128: s =+ (t = -100 * (u = Game.helps));
129: s =+ (t = -20 * (u = Game.kills));
130: s =+ (t = -150 * (u = Game.killinhab));
131: if (Status.ship != ENTERPRISE)
132: {
133: s =- 200;
134: }
135: s =+ (t = 3 * (u = Game.captives));
136: s =+ (t = -(u = Game.deaths));
137: return (s);
138: }
139:
140: getlin()
141: {
142: register char *bp=b, **ap=a, *ip=b;
143: char c;
144:
145: while(read(0,&c,1)==1) {
146: if(c=='\t' || c=='\n') {
147: *ap++=ip;
148: *bp++ = 0;
149: ip=bp;
150: if(c=='\n') break;
151: } else *bp++ = c;
152: }
153: return(c=='\n' ? 1 : 0);
154: }
155:
156: index(c,s)
157: char c;
158: char *s;
159: {
160: register char *p=s;
161:
162: while(*p && c != *p)
163: p++;
164: return(p-s+1);
165: }
166:
167: last(s)
168: char *s;
169: {
170: register char c;
171:
172: while(*s) {
173: c = *s; s++;
174: }
175: return(c);
176: }
177:
178: lookup(s)
179: {
180: int r=0;
181:
182: while(cf(s,reason[r]))
183: r++;
184: return(r);
185: }
186:
187: cf(s1,s2)
188: char *s1, *s2;
189: {
190: while(*s1 == *s2 && *s2) {
191: s1++; s2++;
192: }
193: return(*s1 - *s2);
194: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.