#include #include #include "includesound.h" #include "imagec" #include "infoc" #include "titlec" #include "questionc" #include "gameoverc" #include "sound" #define HEIGHT 203 #define WIDTH 320 #define DEPTH 5 struct Window *win; struct Screen *scr; struct IntuitionBase *IntuitionBase; struct GfxBase *GfxBase; struct ViewPort *vp; struct RastPort *rp; struct IntuiMessage *message; USHORT class; USHORT code; struct NewScreen ns = { 0,0,WIDTH,HEIGHT,DEPTH,0,1,NULL, /* View modes */ CUSTOMSCREEN, /* Screen type */ NULL, /* Font */ NULL,NULL,NULL /* CustomBitmap */ }; struct NewWindow nw = { 0,0,WIDTH,HEIGHT,0,1,MOUSEBUTTONS+VANILLAKEY, /* IDCMP flags */ ACTIVATE|BORDERLESS|RMBTRAP, /* Flags */ NULL,NULL,NULL, /* Gadget,Checkmark,Name */ NULL,NULL, /* Screen,BitMap */ WIDTH,HEIGHT,100,100, /* Max Width,Height, Min Width,Height */ CUSTOMSCREEN }; char names[12][80]; int scores[12]; int save_to_disk=1; char dis[15]; int loc[50][50]; int number,dummy,xi,xpos,score=0; int rawkey=1; UWORD pointer_data[] = { 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 }; main() { int input; FILE *testing123; Open_Stuff(); SetPointer(win,&pointer_data,1,1,0,0); SetRGB4(vp,1,10,3,8); SetRGB4(vp,2,15,0,0); SetRGB4(vp,3,0,15,0); SetRGB4(vp,4,0,0,15); SetRGB4(vp,5,7,7,7); SetRGB4(vp,6,15,0,15); SetRGB4(vp,7,0,15,15); SetRGB4(vp,8,15,15,0); SetRGB4(vp,9,0,15,7); SetRGB4(vp,10,15,9,9); SetRGB4(vp,11,15,15,15); SetRGB4(vp,20,15,15,0); SetRGB4(vp,22,15,0,0); SetRGB4(vp,25,9,9,9); SetRGB4(vp,29,15,15,0); Move(rp,120,100); Text(rp,"Loading...",10); Save_to_disk(); SetAPen(rp,1); DrawImage(rp,&title,0,0); InitRandom(); InitLoc(); InitScreen(); ClearSelected(); InitHighScores(); while(1) { DrawImage(rp,&image,52,67); while((input=idcmpch())==0); if(input==1) NumbersUp(); else if(input==81) die(""); else if(input==2) ViewHighScores(); else if(input==73) ViewInstructions(); } } Save_to_disk() { int i; DrawImage(rp,&saved,71,40); while(1) { while((i=idcmpch())==0); if(i==1) { save_to_disk=1; ClearAll(); return(); } else if(i==2) { save_to_disk=0; ClearAll(); return(); } } } ViewInstructions() { DrawImage(rp,&info,50,65); /* This simply draws the info to the window */ while(idcmpch()!=1); return(); } ViewHighScores() { int m,color=1; char numy[100]; ClearSelected(); SetAPen(rp,20); for(m=0;m<10;m++) { Move(rp,100,90+m*10); Text(rp,names[m],strlen(names[m])); Move(rp,193,90+m*10); sprintf(numy,"%d",scores[m]); Text(rp,numy,strlen(numy)); SetAPen(rp,color++); } SetAPen(rp,22); Move(rp,113,75); Text(rp,"HIGH SCORES",11); Move(rp,75,200); Text(rp,"Press LMB to continue",21); while(idcmpch()!=1); ClearSelected(); } ClearSelected() { struct Image i ={ 0,0,288,137,1,NULL,0,0,NULL }; DrawImage(rp,&i,16,65); } ClearAll() { struct Image i={ 0,0,320,203,1,NULL,0,0,NULL }; DrawImage(rp,&i,0,0); } NumbersUp() { int dummy2,gameover=1,nopress=1; int input; score=0; SetAPen(rp,1); DisplayScore(); InitRandom(); InitLoc(); InitScreen(); ClearSelected(); while(gameover) { if(!nopress) { score-=100; if(score<0) score=0; DisplayScore(); } number=rand()%2; if(number==1) { number=rand()%9+1; sprintf(dis," %c",number+48); xi=4; xpos=0; } else { number=rand()%9+1; sprintf(dis,"%c ",number+48); xpos=304; xi=-4; } SetAPen(rp,number+1); dummy=1; while(dummy) { xpos+=xi; Move(rp,xpos,200); Text(rp,dis,2); dummy2=xpos; if(xi==4) { if(xpos%8!=0) dummy2=xpos+12; else dummy2=xpos+8; } else if(xpos%8!=0) dummy2=xpos-4; nopress=1; input=idcmpch(); if(input==1||input==-2) { if(loc[(dummy2-16)/8+1][14]==0) { dummy=0; if(up()==9) gameover=0; } WaitTOF(); } else { WaitTOF(); if(xi==4&&xpos==288) { dummy=0; Move(rp,xpos,200); Text(rp," ",2); nopress=0; } else if(xi==-4&&xpos==16) { dummy=0; Move(rp,xpos,200); Text(rp," ",2); nopress=0; } } } } if((CheckHighScores())==0) displayend(); } displayend() { SetAPen(rp,2); DrawImage(rp,&gameover,93,158); Move(rp,75,180); Text(rp,"Press LMB to continue",21); while(idcmpch()!=1); return(); } CheckHighScores() { int m,place,dy,input,w=0; char temp[100],blanks[100]; if(score<=scores[9]) return(0); /* The user hasn't got a high score! */ memset((void *)temp,0,sizeof(temp)); for(m=0;m<10;m++) if(score>scores[m]) { place=m; m=10; } dy=1; DrawImage(rp,&gameover,93,158); SetAPen(rp,20); Move(rp,75,180); Text(rp,"You got a high score",20); Move(rp,67,190); Text(rp,"Please enter your name",22); Move(rp,90,200); Text(rp,"NAME:",5); while(dy) { while((input=idcmpch())==0); if(input==13) dy=0; else if(input<=97&&input>=65&&w<=10) { temp[w++]=input; Move(rp,140,200); Text(rp,temp,strlen(temp)); } else if(input==8&&w>0) { temp[--w]='\0'; Move(rp,140,200); sprintf(blanks,"%s ",temp); Text(rp,blanks,24); } } if(place==9) { scores[place]=score; strcpy(names[place],temp); } else { for(m=8;m>=place;m--) { scores[m+1]=scores[m]; strcpy(names[m+1],names[m]); } scores[place]=score; strcpy(names[place],temp); } ClearSelected(); if(save_to_disk) CreateNew(); ViewHighScores(); /* Show the user the high scores when he/she gets one */ return(1); } InitHighScores() { FILE *high; if((high=fopen("highs","r"))==NULL) { CreateBrandNew(); } else { fclose(high); LoadHighScores(); } } LoadHighScores() { char temp[10],c; FILE *high; int m,o; high=fopen("highs","r"); rewind(high); for(m=0;m<10;m++) { o=0; while((c=getc(high))!=12) names[m][o++]=c; memset((void *)temp,0,sizeof(temp)); o=0; while((c=getc(high))!=12) temp[o++]=c+34; scores[m]=atoi(temp); } fclose(high); return(); } CreateBrandNew() /* If there is no high score file I create one */ { /* Delete the file "highs" and see what happens */ FILE *high; char temp[1000],dum[100]; int m; memset((void *)temp,0,sizeof(temp)); for(m=0;m<10;m++) { sprintf(dum,"Jason%c%c%c%c%c%c%c",12,14,14,15,14,14,12); strcpy(names[m],"Jas"); scores[m]=100; strcat(temp,dum); } if(save_to_disk) if((high=fopen("highs","w"))==NULL) die(" I NEED YOUR DISK TO BE WRITE ENABLED SO I CAN CREATE A HIGHSCORES TABLE!!!"); else { fwrite(temp,1,strlen(temp),high); fclose(high); } } CreateNew() { int n,n1,n2,m,length,when=0; char tem[1000],tem2[10]; FILE *file; memset((void *)tem,0,sizeof(tem)); memset((void *)tem2,0,sizeof(tem2)); if((file=fopen("highs","w"))==NULL) when=TRUE; for(m=0;m<10;m++) { strcat(tem,names[m]); tem[strlen(tem)]=12; n=scores[m]; length=0; for(n1=4;n1>=0;n1--) { n2=n%10; n=(n-n2)/10; tem2[length++]=n2+14; } length=strlen(tem); for(n1=4;n1>=0;n1--) tem[length++]=tem2[n1]; tem[strlen(tem)]=12; } if(when==TRUE) return(); fwrite(tem,1,strlen(tem),file); fclose(file); return(); } InitRandom() { ULONG sec,micros; CurrentTime(&sec,µs); srand(sec*99+micros); return(); } up() { register int y,where,ttt,stop; int num1,num2,num3,num; char buf2[80]; if(xpos%8!=0) { xpos+=xi; Move(rp,xpos,200); Text(rp,dis,2); } if(xi==4) xpos+=8; sprintf(dis,"%c",number+48); where=(xpos-16)/8; where++; for(ttt=0;ttt<50;ttt++) if(loc[where][ttt+1]==0) { loc[where][ttt+1]=number; stop=ttt; ttt=50; } num=loc[where][stop+1]; num1=loc[where][stop]; num2=loc[where+1][stop+1]; num3=loc[where-1][stop+1]; ttt=stop*9+73; Move(rp,xpos,200); Text(rp," ",1); for(y=200;y>=ttt;y--) { Move(rp,xpos,y); Text(rp,dis,1); } if(num1==num||num2==num||num3==num) { StopSound(LEFT0); PlaySound(&boing,MAXVOLUME,LEFT0,NORMALRATE,1,0,0); return(9); } else { StopSound(LEFT0); PlaySound(&boing,MAXVOLUME,LEFT0,NORMALRATE,1,0,0); score+=((num1+num2+num3)*num); DisplayScore(); return(8); } } DisplayScore() { char bufferIII[30]; SetAPen(rp,29); sprintf(bufferIII,"%5d",score); Move(rp,166,51); Text(rp,bufferIII,strlen(bufferIII)); return(); } InitScreen() { register int y; SetAPen(rp,1); for(y=191;y>=65;y-=9) { Move(rp,8,y); Text(rp,"*",1); Move(rp,304,y); Text(rp,"*",1); } for(y=8;y<304;y+=8) { Move(rp,y,65); Text(rp,"*",1); } DisplayScore(); return(); } InitLoc() { register int a,b; for(a=0;a<50;a++) for(b=0;b<50;b++) loc[a][b]=0; return(); } /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /*************************** ************************/ /*************************** Functions.... ************************/ /*************************** ************************/ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ int idcmpch() { if(win->UserPort->mp_SigBit) if(message=(struct IntuiMessage *)GetMsg(win->UserPort)) { class=message->Class; code=message->Code; ReplyMsg((struct IntuiMessage *)message); switch(class) { case MOUSEBUTTONS: switch(code) { case SELECTDOWN: return(1); case MENUDOWN: return(2); } case VANILLAKEY: if(code<=122&&code>=97) { code-=32; return(code); } if(code==32) return(-2); else return(code); } } return(0); /* Nothing interesting! */ } Open_Stuff() { void *OpenLibrary(); struct Window *OpenWindow(); struct Screen *OpenScreen(); if(!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0))) die(" ERROR IN STARTING UP"); if(!(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0))) die(" ERROR IN STARTING UP"); if((scr=OpenScreen(&ns))==NULL) die(" ERROR IN STARTING UP"); nw.Screen=scr; if(!(win=(struct Window *)OpenWindow(&nw))) die(" ERROR IN STARTING UP"); rp=win->RPort; vp=&scr->ViewPort; SetRGB4(vp,0,0,0,0); return(TRUE); } die(s) char *s[]; { char Alert[300]; register int loop; if(strlen(s)!=0) /* Display alert if s isn't NULL */ { memset((void *)Alert,0,sizeof(Alert)); strcat(Alert,s); strcat(Alert," Press either mouse button to continue."); loop=strlen(s); Alert[0]=0; Alert[1]=32; Alert[2]=16; Alert[loop+2]='\0'; Alert[loop+3]=TRUE; Alert[loop+4]=0; Alert[loop+5]=32; Alert[loop+6]=32; Alert[loop+45]='\0'; Alert[loop+46]=FALSE; DisplayAlert(RECOVERY_ALERT,Alert,48); } StopSound(LEFT0); if(win) CloseWindow(win); if(scr) CloseScreen(scr); if(GfxBase) CloseLibrary(GfxBase); if(IntuitionBase) CloseLibrary(IntuitionBase); exit(); return(TRUE); }