|
|
1.1 root 1: /* KILLBOTS.C */
2:
3: #include <stdio.h>
4: #include <stdlib.h>
5:
6: #define GOTOXY(x,y) printf("\x1b[%d;%dH",y,x)
7:
8: main(int argc, char **argv)
9: {
10: char str[81],name[31],chainpath[129],done=0,c
11: ,crx,cry,cgd,cbx[5],cby[5],cbd[5],urx,ury,ugd,ubx[5],uby[5],ubd[5];
12: FILE *stream;
13:
14: if(argc!=2) {
15: printf("\r\nUsage: KILLBOTS <path to chain.txt>\r\n");
16: getch();
17: return(1); }
18: strcpy(chainpath,argv[1]);
19: strupr(chainpath);
20: if(!strstr(chainpath,"CHAIN.TXT")) {
21: if(chainpath[strlen(chainpath)-1]!='\\');
22: strcat(chainpath,"\\");
23: strcat(chainpath,"CHAIN.TXT"); }
24: if((stream=fopen(chainpath,"rb"))==NULL) {
25: printf("\7\r\nError opening %s\r\n",chainpath);
26: getch();
27: return(1); }
28: fgets(str,81,stream); /* user number */
29: fgets(str,81,stream); /* user name */
30: str[strlen(str)-2]=0; /* chop off CRLF */
31: sprintf(name,"%-.30s",str);
32: fclose(stream);
33: randomize();
34: printf("\x1b[2JWelcome to KILLBOTS, %s!\r\n",name);
35: getch();
36: printf("\x1b[2J");
37: putchar('�');
38: for(c=0;c<78;c++)
39: putchar('�');
40: putchar('�');
41: for(c=0;c<19;c++)
42: printf("�\x1b[78C�");
43: putchar('�');
44: for(c=0;c<78;c++)
45: putchar('�');
46: putchar('�');
47: for(c=0;c<2;c++)
48: printf("�\x1b[78C�");
49: putchar('�');
50: for(c=0;c<78;c++)
51: putchar('�');
52: putchar('�');
53: crx=cry=3;
54: cgd='R';
55: for(c=0;c<5;c++)
56: cbx[c]=cby[c]=cbd[c]=0;
57: urx=78;
58: ury=19;
59: ugd='L';
60: for(c=0;c<5;c++)
61: ubx[c]=uby[c]=ubd[c]=0;
62: while(!done) {
63: for(c=0;c<5;c++)
64: if(cbd[c]) {
65: GOTOXY(cbx[c],cby[c]);
66: putch(' ');
67: switch(cbd[c]) {
68: case 'L':
69: cbx[c]-=4;
70: break;
71: case 'R':
72: cbx[c]+=4;
73: break;
74: case 'U':
75: cby[c]-=2;
76: break;
77: case 'D':
78: cby[c]+=2;
79: break; }
80: if((cbx[c]==urx && cby[c]==ury) ||
81: (cbd[c]=='R' && cby[c]==ury && (cbx[c]>urx && cbx[c]-4<urx)) ||
82: (cbd[c]=='L' && cby[c]==ury && (cbx[c]<urx && cbx[c]+4>urx)) ||
83: (cbd[c]=='U' && cbx[c]==urx && (cby[c]<ury && cby[c]+2>ury)) ||
84: (cbd[c]=='D' && cbx[c]==urx && (cby[c]>ury && cby[c]-2<ury))) {
85: GOTOXY(urx,ury);
86: putchar('#');
87: GOTOXY(3,23);
88: printf("You're dead!");
89: getch();
90: done=1; }
91: if(cbx[c]>79 || cbx[c]<2 || cby[c]>19 || cby[c]<2)
92: cbd[c]=0;
93: else {
94: GOTOXY(cbx[c],cby[c]);
95: putchar('*'); } }
96: for(c=0;c<5;c++)
97: if(ubd[c]) {
98: GOTOXY(ubx[c],uby[c]);
99: putch(' ');
100: switch(ubd[c]) {
101: case 'L':
102: ubx[c]-=4;
103: break;
104: case 'R':
105: ubx[c]+=4;
106: break;
107: case 'U':
108: uby[c]-=2;
109: break;
110: case 'D':
111: uby[c]+=2;
112: break; }
113: if((ubx[c]==crx && uby[c]==cry) ||
114: (ubd[c]=='R' && uby[c]==cry && (ubx[c]>crx && ubx[c]-4<crx)) ||
115: (ubd[c]=='L' && uby[c]==cry && (ubx[c]<crx && ubx[c]+4>crx)) ||
116: (ubd[c]=='U' && ubx[c]==crx && (uby[c]<cry && uby[c]+2>cry)) ||
117: (ubd[c]=='D' && ubx[c]==crx && (uby[c]>cry && uby[c]-2<cry))) {
118: GOTOXY(crx,cry);
119: putchar('#');
120: GOTOXY(3,23);
121: printf("Got 'em!");
122: getch();
123: done=1; }
124: if(ubx[c]>79 || ubx[c]<2 || uby[c]>19 || uby[c]<2)
125: ubd[c]=0;
126: else {
127: GOTOXY(ubx[c],uby[c]);
128: putchar('+'); } }
129: if(!random(4)) {
130: GOTOXY(crx,cry);
131: putchar(' '); /* erase man */
132: switch(cgd) { /* computer robot gun dirrection */
133: case 'L':
134: printf("\b\b");
135: break;
136: case 'U':
137: GOTOXY(crx,cry-1);
138: break;
139: case 'D':
140: GOTOXY(crx,cry+1);
141: break; }
142: putchar(' '); /* erase gun */
143: switch(random(9)) {
144: case 1:
145: if(crx>3)
146: crx--;
147: break;
148: case 2:
149: if(cry>3)
150: cry--;
151: break;
152: case 3:
153: if(crx<78)
154: crx++;
155: break;
156: case 4:
157: if(cry<19)
158: cry++;
159: break;
160: case 5:
161: if(cry>3 && crx>3) {
162: crx--;
163: cry--; }
164: break;
165: case 6:
166: if(cry<19 && crx>3) {
167: crx--;
168: cry++; }
169: break;
170: case 7:
171: if(cry<19 && crx<78) {
172: crx++;
173: cry++; }
174: break;
175: case 8:
176: if(cry>3 && crx<78) {
177: crx++;
178: cry--; }
179: break; }
180: GOTOXY(crx,cry);
181: putchar(2);
182: switch(random(4)) {
183: case 0:
184: cgd='R';
185: break;
186: case 1:
187: cgd='L';
188: break;
189: case 2:
190: cgd='U';
191: break;
192: case 3:
193: cgd='D';
194: break; }
195: for(c=0;c<5;c++)
196: if(!cbd[c])
197: break;
198: switch(cgd) { /* computer robot gun dirrection */
199: case 'L':
200: GOTOXY(crx-1,cry);
201: putchar(17);
202: if(c==5)
203: break;
204: if(ury+1>=cry && ury-1<=cry && urx<crx) {
205: cbx[c]=crx-2;
206: cby[c]=cry;
207: cbd[c]='L'; }
208: break;
209: case 'R':
210: putchar(16);
211: if(c==5)
212: break;
213: if(ury+1>=cry && ury-1<=cry && urx>crx) {
214: cbx[c]=crx+2;
215: cby[c]=cry;
216: cbd[c]='R'; }
217: break;
218: case 'U':
219: GOTOXY(crx,cry-1);
220: putchar(30);
221: if(c==5)
222: break;
223: if(urx+1>=crx && urx-1<=crx && ury<cry) {
224: cbx[c]=crx;
225: cby[c]=cry-2;
226: cbd[c]='U'; }
227: break;
228: case 'D':
229: GOTOXY(crx,cry+1);
230: putchar(31);
231: if(c==5)
232: break;
233: if(urx+1>=crx && urx-1<=crx && ury>cry) {
234: cbx[c]=crx;
235: cby[c]=cry+2;
236: cbd[c]='D'; }
237: break; } }
238: /*
239: for(c=0;c<5;c++)
240: if(cbd[c]) {
241: GOTOXY(cbx[c],cby[c]);
242: putchar('%'); }
243: */
244: if(kbhit()) {
245: GOTOXY(urx,ury);
246: putchar(' ');
247: switch(ugd) { /* computer robot gun dirrection */
248: case 'L':
249: printf("\b\b");
250: break;
251: case 'U':
252: GOTOXY(urx,ury-1);
253: break;
254: case 'D':
255: GOTOXY(urx,ury+1);
256: break; }
257: putchar(' '); /* erase gun */
258: switch(toupper(getch())) {
259: case 'Q':
260: done=1;
261: break;
262: case 'J':
263: if(urx>3)
264: urx--;
265: break;
266: case 'I':
267: if(ury>3)
268: ury--;
269: break;
270: case 'K':
271: if(urx<78)
272: urx++;
273: break;
274: case 'M':
275: if(ury<19)
276: ury++;
277: break;
278: case 'U':
279: if(ury>3 && urx>3) {
280: urx--;
281: ury--; }
282: break;
283: case 'N':
284: if(ury<19 && urx>3) {
285: urx--;
286: ury++; }
287: break;
288: case ',':
289: if(ury<19 && urx<78) {
290: urx++;
291: ury++; }
292: break;
293: case 'O':
294: if(ury>3 && urx<78) {
295: urx++;
296: ury--; }
297: break;
298: case 'C':
299: ugd='D';
300: break;
301: case 'R':
302: ugd='U';
303: break;
304: case 'F':
305: ugd='R';
306: break;
307: case 'D':
308: ugd='L';
309: break;
310: case ' ': /* fire */
311: for(c=0;c<5;c++)
312: if(!ubd[c])
313: break;
314: if(c==5)
315: break;
316: ubd[c]=ugd;
317: switch(ugd) {
318: case 'R':
319: ubx[c]=urx+2;
320: uby[c]=ury;
321: break;
322: case 'L':
323: ubx[c]=urx-2;
324: uby[c]=ury;
325: break;
326: case 'U':
327: ubx[c]=urx;
328: uby[c]=ury-2;
329: break;
330: case 'D':
331: ubx[c]=urx;
332: uby[c]=ury+2;
333: break; } }
334: GOTOXY(urx,ury);
335: putchar(1);
336: switch(ugd) { /* user robot gun dirrection */
337: case 'L':
338: GOTOXY(urx-1,ury);
339: putchar(17);
340: break;
341: case 'R':
342: putchar(16);
343: break;
344: case 'U':
345: GOTOXY(urx,ury-1);
346: putchar(30);
347: break;
348: case 'D':
349: GOTOXY(urx,ury+1);
350: putchar(31);
351: break; } }
352: /*
353: for(c=0;c<5;c++)
354: if(ubd[c]) {
355: GOTOXY(ubx[c],uby[c]);
356: putchar('@'); }
357: */
358: delay(150); }
359: delay(2000);
360: printf("\x1b[2J");
361: }
362:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.