|
|
1.06a MS-DOS
/* KILLBOTS.C */
#include <stdio.h>
#include <stdlib.h>
#define GOTOXY(x,y) printf("\x1b[%d;%dH",y,x)
main(int argc, char **argv)
{
char str[81],name[31],chainpath[129],done=0,c
,crx,cry,cgd,cbx[5],cby[5],cbd[5],urx,ury,ugd,ubx[5],uby[5],ubd[5];
FILE *stream;
if(argc!=2) {
printf("\r\nUsage: KILLBOTS <path to chain.txt>\r\n");
getch();
return(1); }
strcpy(chainpath,argv[1]);
strupr(chainpath);
if(!strstr(chainpath,"CHAIN.TXT")) {
if(chainpath[strlen(chainpath)-1]!='\\');
strcat(chainpath,"\\");
strcat(chainpath,"CHAIN.TXT"); }
if((stream=fopen(chainpath,"rb"))==NULL) {
printf("\7\r\nError opening %s\r\n",chainpath);
getch();
return(1); }
fgets(str,81,stream); /* user number */
fgets(str,81,stream); /* user name */
str[strlen(str)-2]=0; /* chop off CRLF */
sprintf(name,"%-.30s",str);
fclose(stream);
randomize();
printf("\x1b[2JWelcome to KILLBOTS, %s!\r\n",name);
getch();
printf("\x1b[2J");
putchar('�');
for(c=0;c<78;c++)
putchar('�');
putchar('�');
for(c=0;c<19;c++)
printf("�\x1b[78C�");
putchar('�');
for(c=0;c<78;c++)
putchar('�');
putchar('�');
for(c=0;c<2;c++)
printf("�\x1b[78C�");
putchar('�');
for(c=0;c<78;c++)
putchar('�');
putchar('�');
crx=cry=3;
cgd='R';
for(c=0;c<5;c++)
cbx[c]=cby[c]=cbd[c]=0;
urx=78;
ury=19;
ugd='L';
for(c=0;c<5;c++)
ubx[c]=uby[c]=ubd[c]=0;
while(!done) {
for(c=0;c<5;c++)
if(cbd[c]) {
GOTOXY(cbx[c],cby[c]);
putch(' ');
switch(cbd[c]) {
case 'L':
cbx[c]-=4;
break;
case 'R':
cbx[c]+=4;
break;
case 'U':
cby[c]-=2;
break;
case 'D':
cby[c]+=2;
break; }
if((cbx[c]==urx && cby[c]==ury) ||
(cbd[c]=='R' && cby[c]==ury && (cbx[c]>urx && cbx[c]-4<urx)) ||
(cbd[c]=='L' && cby[c]==ury && (cbx[c]<urx && cbx[c]+4>urx)) ||
(cbd[c]=='U' && cbx[c]==urx && (cby[c]<ury && cby[c]+2>ury)) ||
(cbd[c]=='D' && cbx[c]==urx && (cby[c]>ury && cby[c]-2<ury))) {
GOTOXY(urx,ury);
putchar('#');
GOTOXY(3,23);
printf("You're dead!");
getch();
done=1; }
if(cbx[c]>79 || cbx[c]<2 || cby[c]>19 || cby[c]<2)
cbd[c]=0;
else {
GOTOXY(cbx[c],cby[c]);
putchar('*'); } }
for(c=0;c<5;c++)
if(ubd[c]) {
GOTOXY(ubx[c],uby[c]);
putch(' ');
switch(ubd[c]) {
case 'L':
ubx[c]-=4;
break;
case 'R':
ubx[c]+=4;
break;
case 'U':
uby[c]-=2;
break;
case 'D':
uby[c]+=2;
break; }
if((ubx[c]==crx && uby[c]==cry) ||
(ubd[c]=='R' && uby[c]==cry && (ubx[c]>crx && ubx[c]-4<crx)) ||
(ubd[c]=='L' && uby[c]==cry && (ubx[c]<crx && ubx[c]+4>crx)) ||
(ubd[c]=='U' && ubx[c]==crx && (uby[c]<cry && uby[c]+2>cry)) ||
(ubd[c]=='D' && ubx[c]==crx && (uby[c]>cry && uby[c]-2<cry))) {
GOTOXY(crx,cry);
putchar('#');
GOTOXY(3,23);
printf("Got 'em!");
getch();
done=1; }
if(ubx[c]>79 || ubx[c]<2 || uby[c]>19 || uby[c]<2)
ubd[c]=0;
else {
GOTOXY(ubx[c],uby[c]);
putchar('+'); } }
if(!random(4)) {
GOTOXY(crx,cry);
putchar(' '); /* erase man */
switch(cgd) { /* computer robot gun dirrection */
case 'L':
printf("\b\b");
break;
case 'U':
GOTOXY(crx,cry-1);
break;
case 'D':
GOTOXY(crx,cry+1);
break; }
putchar(' '); /* erase gun */
switch(random(9)) {
case 1:
if(crx>3)
crx--;
break;
case 2:
if(cry>3)
cry--;
break;
case 3:
if(crx<78)
crx++;
break;
case 4:
if(cry<19)
cry++;
break;
case 5:
if(cry>3 && crx>3) {
crx--;
cry--; }
break;
case 6:
if(cry<19 && crx>3) {
crx--;
cry++; }
break;
case 7:
if(cry<19 && crx<78) {
crx++;
cry++; }
break;
case 8:
if(cry>3 && crx<78) {
crx++;
cry--; }
break; }
GOTOXY(crx,cry);
putchar(2);
switch(random(4)) {
case 0:
cgd='R';
break;
case 1:
cgd='L';
break;
case 2:
cgd='U';
break;
case 3:
cgd='D';
break; }
for(c=0;c<5;c++)
if(!cbd[c])
break;
switch(cgd) { /* computer robot gun dirrection */
case 'L':
GOTOXY(crx-1,cry);
putchar(17);
if(c==5)
break;
if(ury+1>=cry && ury-1<=cry && urx<crx) {
cbx[c]=crx-2;
cby[c]=cry;
cbd[c]='L'; }
break;
case 'R':
putchar(16);
if(c==5)
break;
if(ury+1>=cry && ury-1<=cry && urx>crx) {
cbx[c]=crx+2;
cby[c]=cry;
cbd[c]='R'; }
break;
case 'U':
GOTOXY(crx,cry-1);
putchar(30);
if(c==5)
break;
if(urx+1>=crx && urx-1<=crx && ury<cry) {
cbx[c]=crx;
cby[c]=cry-2;
cbd[c]='U'; }
break;
case 'D':
GOTOXY(crx,cry+1);
putchar(31);
if(c==5)
break;
if(urx+1>=crx && urx-1<=crx && ury>cry) {
cbx[c]=crx;
cby[c]=cry+2;
cbd[c]='D'; }
break; } }
/*
for(c=0;c<5;c++)
if(cbd[c]) {
GOTOXY(cbx[c],cby[c]);
putchar('%'); }
*/
if(kbhit()) {
GOTOXY(urx,ury);
putchar(' ');
switch(ugd) { /* computer robot gun dirrection */
case 'L':
printf("\b\b");
break;
case 'U':
GOTOXY(urx,ury-1);
break;
case 'D':
GOTOXY(urx,ury+1);
break; }
putchar(' '); /* erase gun */
switch(toupper(getch())) {
case 'Q':
done=1;
break;
case 'J':
if(urx>3)
urx--;
break;
case 'I':
if(ury>3)
ury--;
break;
case 'K':
if(urx<78)
urx++;
break;
case 'M':
if(ury<19)
ury++;
break;
case 'U':
if(ury>3 && urx>3) {
urx--;
ury--; }
break;
case 'N':
if(ury<19 && urx>3) {
urx--;
ury++; }
break;
case ',':
if(ury<19 && urx<78) {
urx++;
ury++; }
break;
case 'O':
if(ury>3 && urx<78) {
urx++;
ury--; }
break;
case 'C':
ugd='D';
break;
case 'R':
ugd='U';
break;
case 'F':
ugd='R';
break;
case 'D':
ugd='L';
break;
case ' ': /* fire */
for(c=0;c<5;c++)
if(!ubd[c])
break;
if(c==5)
break;
ubd[c]=ugd;
switch(ugd) {
case 'R':
ubx[c]=urx+2;
uby[c]=ury;
break;
case 'L':
ubx[c]=urx-2;
uby[c]=ury;
break;
case 'U':
ubx[c]=urx;
uby[c]=ury-2;
break;
case 'D':
ubx[c]=urx;
uby[c]=ury+2;
break; } }
GOTOXY(urx,ury);
putchar(1);
switch(ugd) { /* user robot gun dirrection */
case 'L':
GOTOXY(urx-1,ury);
putchar(17);
break;
case 'R':
putchar(16);
break;
case 'U':
GOTOXY(urx,ury-1);
putchar(30);
break;
case 'D':
GOTOXY(urx,ury+1);
putchar(31);
break; } }
/*
for(c=0;c<5;c++)
if(ubd[c]) {
GOTOXY(ubx[c],uby[c]);
putchar('@'); }
*/
delay(150); }
delay(2000);
printf("\x1b[2J");
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.