// SWARM by J.J.Cook. #include "stdio.h" #include "conio.h" #include "bios.h" #include "stdlib.h" #include "dos.h" #include "string.h" #define MAXNUMGALS 120 #define MAXNUMMISS 30 #define MAXNUMBOMBS 20 #define RIGHT 0x01 #define LEFT 0x02 #define CTRL 0x04 #define ALT 0x08 float LOOP=10000; float Count; float gspeed=4,ovespeed=1,firespeed=1; float ispeed=2,cgspeed=8,g1speed=2; float bspeed=2,mspeed=2,sndspeed=1000; float sspeed=8,espeed=8; int Numbombs=0,M2,M1,MISS1,CG1,I1,B1,E1,S1; int Homefactor=1,swoop=50; int gchar[10]={86,192,60,218,65,191,62,217,32,42}; int galx[MAXNUMGALS], misx[MAXNUMMISS], galy[MAXNUMGALS], misy[MAXNUMMISS], galc[MAXNUMGALS], bombx[MAXNUMBOMBS], galdx[MAXNUMGALS], bomby[MAXNUMBOMBS], galdy[MAXNUMGALS], galm[MAXNUMGALS], gall[MAXNUMGALS], galsp[MAXNUMGALS], gald[MAXNUMGALS]; int key,a,shipx,shipy,Numgals,xadder=1,newxadder,shipxadder,hits,Sheet; long Hscore[30],SC,Count2,Score,Highscore; char Highname[11]="\0"; int fa,Hwave[30]; int Colour[30]={15,1,9,3,11,15,1,9,3,11,15,1,9,3,11,15,1,9,3,11,15,1,9,3,11,15,1,9,3,11}; int Colour1[9]={4,12,6,14,10,2,3,11,15}; char Hname[30][11]={ "By_JJ_Cook","....","....","....","....", "....","....","....","....","....", "....","....","....","....","....", "....","....","....","....","....", "....","....","....","....","....", "....","....","....","....","...." }; int Gameover,lives; char Ch,Mov; long int Delay=1000; float freq=0,freqadder=0; int Soundoff=0; int Tone[9]={ 100,200,300,400,500,600,700,800,900 }; int p; // Moves char *Moveptr[30]; FILE *Hallfileptr; char *Pstring[9]={"P","s","y","c","o","s","o","f","t"}; void main(void) { void Initialise(void); void Game(void); void Scores(void); void Hall(void); void ShowHall(void); for(a=0;a<30;a++) { Hscore[a]=30000-(a*1000); } //Hscore[0]=72000; Hwave[0]=25; for(a=0;a<9;a++) { Moveptr[a]=((char*)malloc(41)); } //strncpy(Pstring,"Psycosoft\0",10); strcpy(Moveptr[0],"0000000000000000000000000000000000000000\0"); strcpy(Moveptr[1],"0AAAAAAAA765432110777665544332AAAAAAAAAA\0"); strcpy(Moveptr[2],"0089999999901234567011118221009999999999\0"); strcpy(Moveptr[3],"AAAAAAAAAA000000000000000000000099999999\0"); strcpy(Moveptr[4],"0AAAAAAAA765432110777665544332AAAAAAAAAA\0"); strcpy(Moveptr[5],"0000000999999990110077001100770011107770\0"); strcpy(Moveptr[6],"2222222222222222222222222222222222222210\0"); strcpy(Moveptr[7],"777777777666666666667777777777AAAAAAAAAA\0"); strcpy(Moveptr[8],"44449A444489A9A44449A4444484567012345670\0"); strcpy(Moveptr[9],"9999999999999999999999999999899AAAAAAAAAA\0"); strcpy(Moveptr[10],"0000000000000000000000000000009999999999\0"); strcpy(Moveptr[11],"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AA\0"); strcpy(Moveptr[12],"0123456700000000111111100000009999999999\0"); strcpy(Moveptr[13],"012345677777777777777777777777AAAAAAAAAA\0"); strcpy(Moveptr[14],"0765432111111111111111111111115999999999\0"); strcpy(Moveptr[15],"012345434543454345434543454345670AAAAAAA\0"); strcpy(Moveptr[16],"0122222222222222222222211110000099999999\0"); strcpy(Moveptr[17],"00777777777011111111107777777700AAAAAAAA\0"); strcpy(Moveptr[18],"01233333333345670A99AA99AA99AA99AA99AA90\0"); strcpy(Moveptr[19],"0101010101010101010101010101010101010101\0"); strcpy(Moveptr[20],"0909090909090909090909090909090909090909\0"); strcpy(Moveptr[21],"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A\0"); strcpy(Moveptr[22],"0990990990990990990990990990990990990990\0"); strcpy(Moveptr[23],"4AA4AA4AA4AA4AA4AA4AA4AA4AA4AA4AA4AA4AA4\0"); strcpy(Moveptr[24],"6543322111000777666655554444333333222210\0"); strcpy(Moveptr[25],"1011011100110011000101101011100101010011\0"); strcpy(Moveptr[26],"7654567076545670765456707654567076545670\0"); strcpy(Moveptr[27],"7070707077707070070707707707070707070771\0"); strcpy(Moveptr[28],"7707707007707010101010110101707007011011\0"); strcpy(Moveptr[29],"1101010101101077070770707070110011010101\0"); // Load Hall of fame if((Hallfileptr=fopen("HALL.dat","r"))==NULL) { printf("File could not be opened"); } else { fa=0; while(fscanf(Hallfileptr,"%ld %d %s ",&Hscore[fa],&Hwave[fa],Hname[fa])!=EOF) { fa++; } fclose(Hallfileptr); strcpy(Highname,Hname[0]); Highscore=Hscore[0]; } textmode(C4350); nosound(); while(Ch!='q' && Ch!='Q') { gotoxy(30,24); textcolor(LIGHTGREEN); cprintf("S - W - A - R - M\r"); delay(2000); Hall(); {strncpy(Highname,Hname[0],11);} clrscr(); gotoxy(14,26); textcolor(LIGHTGREEN); cprintf("Press 'Q' to quit or 'H' for Hall or other key for Game\r"); cprintf("\n\n Keys: Left / Right SHIFT to move, CTRL to Fire, S Sound On/Off\r"); Ch=getch(); Initialise(); Score=0; lives=4; Sheet=1; LOOP=15000; swoop=100; Homefactor=1; if(Ch!='q' && Ch!='Q' && Ch!='H' && Ch!='h') {Game();} if(Ch=='h' || Ch=='H') {ShowHall();} } } void Initialise(void) { // New sheet void Ship(void); int i,j=10,jf=0,y=3,c=0; nosound(); LOOP=LOOP-500; if(LOOP<60) {LOOP=60;} // Max game speed if(Sheet==10 || Sheet==15 || Sheet==20 || Sheet==25 || Sheet>30) {lives++;} if(Sheet>=25) {lives++;} Gameover=0; shipy=45; shipx=40; Numgals=MAXNUMGALS; if(Sheet>1) {Score=Score+1000;} swoop=swoop-4; if(swoop<1) {swoop=1;} Homefactor=Homefactor*5; if(Homefactor>10000) {Homefactor=10000;} Numbombs++; if(Numbombs>MAXNUMBOMBS) {Numbombs=MAXNUMBOMBS;} for(i=0;i70-c) { j=16+c; jf=0; y++; y++; c=c+2; if(jf==1) {jf=0; j=j+2;} else {jf=1;} } galx[i]=j; galy[i]=y; galc[i]=0; galdx[i]=0; galdy[i]=0; gall[i]=2; } for(i=0;i=sndspeed) {S1=0;} if(S1==0) { if(freq!=0 && Soundoff==0) {sound(freq);} SC++; if(SC>=Delay) {SC=0; nosound();} freq=freq+freqadder; if(freq<0) {freq=0;} if(freq>8000) { nosound(); freq=0; Delay=0; SC=0;} } } if(sspeed==(Count*8/LOOP)) { Scores(); } if(gspeed==(Count*8/LOOP)) { Showgals(1); M1++; if(M1>=g1speed) {M1=0;} if(M1==0) {Movegals2();} M2++; if(M2>=gspeed) {M2=0;} if(M2==0) {Movegals();} Showgals(0); } if(ispeed==(Count*8/LOOP)) { I1++; if(I1>=ispeed) {I1=0;} if(I1==0) {Input();} } if(cgspeed==(Count*8/LOOP)) { CG1++; if(CG1>=cgspeed) { CG1=0; Changegals(); Showgals(0); } } if(bspeed==(Count*8/LOOP)) { B1++; if(B1>=bspeed) {B1=0;} if(B1==0) {Bombs();} } if(mspeed==(Count*8/LOOP)) { MISS1++; if(MISS1>=mspeed) {MISS1=0;} if(MISS1==0) {Missiles();} } if(espeed==(Count*8/LOOP)) { E1++; if(E1>=espeed) {E1=0;} if(E1==0) {Explosion();} } if((Count++)>LOOP) {Count=0;} } } void Showgals(int m) { int k; for(k=0;k78)&&galm[l]==0) {newxadder=-xadder;} } } xadder=newxadder; } void Ship(void) { gotoxy(shipx,shipy); textcolor(LIGHTCYAN); cprintf(" \r"); if(shipx+shipxadder>0 && shipx+shipxadder<80) {shipx=shipx+shipxadder;} gotoxy(shipx,shipy); cprintf("A\r"); } void Missiles(void) { int m; void Hitcheck(int); for(m=0;m<=MAXNUMMISS-1;m++) { if(misx[m]!=98) { gotoxy(misx[m],misy[m]); textcolor(WHITE); cprintf(" \r"); shipxadder=0; Ship(); Hitcheck(m); misy[m]--; if(misy[m]>1 && misx[m]!=98) { gotoxy(misx[m],misy[m]); cprintf(":\r"); } else {misx[m]=98;} } } } void Hitcheck(int mm) { int n; for(n=0;n20) {Score+=20;} if(galm[n]!=0) {Score+=40;} Score+=10; if(hits==Numgals) {hits=0; Sheet++; Initialise(); Initialise(); Initialise(); break;} freq=200; freqadder=50; Delay=10; SC=0; break; } } } void Input(void) { int mod,o,oi,oc; shipxadder=0; { mod=bioskey(2); if(mod & CTRL) { for(o=0;o7) galc[p]=0; } else { if(rand()%2==1) { galc[p]--; if(galc[p]<0) galc[p]=7; } } } } } void Bombs(void) { void BombHitcheck(int); int q,r; for(q=0;q=1) { v=rand()%swoop; if(v==0) { w=rand()%Numgals; while(gald[w]==1) { w=rand()%Numgals; } //if(galm[w]==0) { galm[w]=(rand()%28)+1; galsp[w]=0; freq=1000+rand()%200*Sheet; Delay=4; freqadder=-1; SC=0; } } } for(u=0;u2 && galx[u]>2 && galx[u]<78) { galm[u]=0; galsp[u]=0; break; } else { Hitcheck2(u); freqadder=1; Delay=10; break; } } case '9': { galc[u]++; if(galc[u]>7) {galc[u]=0;} break;} case 'A': { galc[u]--; if(galc[u]<0) {galc[u]=7;} break;} } galsp[u]++; if(galsp[u]>39) {galsp[u]=0;} } } } void Hitcheck2(int uu) { void HitShip(); if(galx[uu]<1) {galx[uu]=78;} if(galx[uu]>79) {galx[uu]=2;} if(galy[uu]<1) {galy[uu]=48;} if(galy[uu]>48) {galy[uu]=2;} if(galx[uu]==shipx && galy[uu]==shipy) { gald[uu]=1; hits++; if(hits==Numgals) {hits=0; Initialise(); } HitShip(); } if(rand()%Homefactor==1) {galm[uu]=8; galsp[uu]=0;} } void Scores() { int z; if(HighscoreHscore[hb]) { for(hc=29;hc>=hb;hc--) { Hscore[hc]=Hscore[hc-1]; Hwave[hc]=Hwave[hc-1]; strncpy(Hname[hc],Hname[hc-1],11); } Hscore[hb]=Score; Hwave[hb]=Sheet; textcolor(LIGHTCYAN); gotoxy(28,24); cprintf("----------\r"); gotoxy(10,23); cprintf("Enter your name : "); scanf("%10s",&Hname[hb]); clrscr(); break; } } // save to file if((Hallfileptr=fopen("HALL.dat","w"))==NULL) { printf("Unable to open file for output !"); } else { for(ha=0;ha<30;ha++) { fprintf(Hallfileptr,"%ld %d %s ",Hscore[ha],Hwave[ha],Hname[ha]); } fclose(Hallfileptr); } delay(1000); textcolor(WHITE); gotoxy(67,48); cprintf("by "); for(sa=0;sa<9;sa++) { delay(60); textcolor(Colour1[sa]); cprintf("%c",*Pstring[sa]); if(Soundoff==0) sound(Tone[sa]); } nosound(); delay(1000); gotoxy(67,48); printf(" "); gotoxy(79,48); delay(1000); ShowHall(); getch(); clrscr(); } void ShowHall(void) { int sha; textcolor(LIGHTGREEN); gotoxy(7,1); cprintf("Hall of FAME\r\n\n\n"); cprintf("Rank Score Wave Name\n\n\r"); for(sha=0;sha<30;sha++) { textcolor(Colour[sha]); cprintf("%2d : %6ld : %2d : %s\n\r",sha+1,Hscore[sha],Hwave[sha],&Hname[sha]); } } // Registered with the IP Rights Office // Copyright Registration Service // Ref: 261725481