File:  [Synchronet] / sbbs / killbots / killbots.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 16:37:52 2018 UTC (8 years, 3 months ago) by root
Branches: digitaldynamics, MAIN
CVS tags: v1_06a, HEAD
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");
}


unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.