#include #include #include #include "easysound.c" #include "easysound.h" #include "spriteDATA.c" #include "askc" #include "titlec" #include "stripc" #include "mainaskc" #include "infoc" #include "rightc" #include "leftc" #include "letsgoc" #define HEIGHT 200 #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,5,0,1,NULL, /* View modes */ CUSTOMSCREEN, /* Screen type */ NULL, /* Font */ NULL,NULL,NULL /* CustomBitmap */ }; struct NewWindow nw = { 0,0,WIDTH,HEIGHT,0,1,MOUSEBUTTONS+RAWKEY, /* 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 }; int loc[40][12],blue_ball; struct SimpleSprite left_arrow = { left_arrow_data,15,15,200,3 }; struct SimpleSprite right_arrow = { right_arrow_data,15,15,200,3 }; int connect; /* This is a variable of how many circles the user wishes to connect so they win the game */ CPTR boing; UWORD chip dummydata[] = { 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 }; void _main() { int dum; Open_Stuff(); if((GetSprite(&left_arrow,2))!=2) die(" I CAN GET SPRITE #2, SO I AM EXITING."); if((GetSprite(&right_arrow,3))!=3) die(" I CAN GET SPRITE #3, SO I AM EXITING."); MoveSprite(0,&left_arrow,8,184); MoveSprite(0,&right_arrow,286,184); /* These are the arrows */ Init_Screen(); while(1) { ClearRASTPORT(); ClearLOCS(); DrawImage(rp,&mainask,76,81); dum=1; while(dum) { while((connect=idcmpch())==0); if(connect==0x19) { dum=0; CirclesUp(); } else if(connect==0x10) die(""); else if(connect==0x17) { dum=0; DisplayINFO(); } } } die(""); } DisplayINFO() { DrawImage(rp,&info,37,62); while(idcmpch()!=0x45); return(1); } WriteNumber() { char dum2[20]; SetAPen(rp,29); sprintf(dum2,"%d",connect); Move(rp,215,50); Text(rp,dum2,strlen(dum2)); return(1); } CirclesUp() { int xpos,incr,dummy=1,input,player,player2,c=0,v,r; int xpos2; ClearRASTPORT(); ClearLOCS(); DrawImage(rp,&ask_image,52,106); while(dummy) { while((connect=idcmpch())==0); if(connect<=7&&connect>=3) dummy=0; } WriteNumber(); ClearRASTPORT(); DrawImage(rp,&letsgo,105,120); Delay(75); ClearRASTPORT(); while(1) { v=rand()%777; if(v%2==1) /* This is the side which the circle flys in */ { xpos=0; incr=6; } else { xpos=288; incr=-6; } if(++c%2==0) { player=0x64; player2=-1; ball2.PlanePick=4; } else { player=0x65; player2=0x68; ball2.PlanePick=8; } dummy=1; if(rand()%25==0) { blue_ball=1; ball2.PlanePick=16; } else blue_ball=0; while(dummy) { xpos+=incr; xpos2=xpos; if(xpos2%12!=0) xpos2+=incr; DrawImage(rp,&ball2,xpos,186); input=idcmpch(); if(input==player||input==player2) if(blue_ball==1) { if(xpos%12==0) { up2(xpos); dummy=0; } else { xpos+=incr; DrawImage(rp,&ball2,xpos,186); up2(xpos); dummy=0; } } else if(loc[(xpos2-12)/12][9]==0) { if(xpos%12==0) { r=up(xpos2,c%2+1); dummy=0; } else { xpos+=incr; DrawImage(rp,&ball2,xpos2,186); r=up(xpos2,c%2+1); dummy=0; } } if(r==5||input==0x45) return(1); if(xpos<=16&&incr==-6) dummy=0; else if(xpos>=272&&incr==6) dummy=0; WaitTOF(); } ball2.PlanePick=0x00; DrawImage(rp,&ball2,xpos,186); } return(1); } int up(int where,int who) /* This function sends an ordinary ball up */ { int y,w,stop,up,across,max; int gameover; for(w=0;w<12;w++) if(loc[(where-12)/12][w]==0) { stop=w; loc[(where-12)/12][w]=who; w=13; } across=(where-12)/12; up=stop; w=60+(stop*12); where+=7; ball.PlanePick=ball2.PlanePick; for(y=186;y>w;y--) DrawImage(rp,&ball,where,y); StopSound(RIGHT0); if(boing) PlaySound(boing,MAXVOLUME,RIGHT0,NORMALRATE,1); max=how_many(across,up,who); if(max>=connect) { gameover=1; AWinner(who); } else gameover=0; if(gameover) return(5); else return(2); } AWinner(int w) { if(w==1) DrawImage(rp,&left,65,156); else DrawImage(rp,&right,65,156); while(idcmpch()!=0x45); return(1); } int how_many(int across,int up,int person) { /* This function returns the maximum number of circles of the colour just shot up either diagonally,horizontally or vertically. */ int n1,n2,n3,n4; int dummy,c1,c2,max; int a,u; a=across; u=up; dummy=1; c1=0; while(dummy) { if(a==0) dummy=0; else { --a; if(loc[a][u]==person) c1++; else dummy=0; } } a=across; u=up; dummy=1; c2=0; while(dummy) { if(a==39) dummy=0; else { ++a; if(loc[a][u]==person) c2++; else dummy=0; } } n1=c1+1+c2; a=across; u=up; dummy=1; c1=0; while(dummy) { if(u==0) dummy=0; else { --u; if(loc[a][u]==person) c1++; else dummy=0; } } a=across; u=up; dummy=1; c2=0; while(dummy) { if(u==11) dummy=0; else { ++u; if(loc[a][u]==person) c2++; else dummy=0; } } n2=c1+1+c2; a=across; u=up; dummy=1; c1=0; while(dummy) { if(u==0||a==0) dummy=0; else { --u; --a; if(loc[a][u]==person) c1++; else dummy=0; } } a=across; u=up; dummy=1; c2=0; while(dummy) { if(u==39||a==11) dummy=0; else { ++u; ++a; if(loc[a][u]==person) c2++; else dummy=0; } } n3=1+c1+c2; a=across; u=up; dummy=1; c1=0; while(dummy) { if(a==39||u==0) dummy=0; else { a++; --u; if(loc[a][u]==person) c1++; else dummy=0; } } a=across; u=up; dummy=1; c2=0; while(dummy) { if(a==39||u==11) dummy=0; else { --a; ++u; if(loc[a][u]==person) c2++; else dummy=0; } } n4=c1+1+c2; if(n1>n2) max=n1; else max=n2; if(max60;y--) DrawImage(rp,&ball,where,y); StopSound(RIGHT0); if(boing) PlaySound(boing,MAXVOLUME,RIGHT0,NORMALRATE,1); return(TRUE); } ClearRASTPORT() { struct Image i = { 0,0,277,150,0,NULL,0,0,NULL }; DrawImage(rp,&i,18,61); return(8); } Init_Screen() { int sec,micros; ClearRASTPORT(); CurrentTime(&sec,µs); srand(sec*9999+micros); SetRGB4(vp,1,0xD,0xD,0); SetRGB4(vp,2,0xB,0,0); SetRGB4(vp,3,0,0xB,0); SetRGB4(vp,4,15,0,0); SetRGB4(vp,5,4,4,4); SetRGB4(vp,6,8,8,8); SetRGB4(vp,7,0xC,0xC,0xC); SetRGB4(vp,8,0,15,0); SetRGB4(vp,16,0,0,15); SetRGB4(vp,29,13,13,13); SetRGB4(vp,30,13,13,4); DrawImage(rp,&title,0,0); DrawImage(rp,&strip,4,61); DrawImage(rp,&strip,295,61); boing=PrepareSound("boing"); SetPointer(win,dummydata,1,1,0,0); return(TRUE); } ClearLOCS() { int a,b; for(a=0;a<40;a++) for(b=0;b<12;b++) loc[a][b]=0; return(1); } /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /*************************** ************************/ /*************************** 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: return((int)0x68); case RAWKEY: return((int)code); } } return(0); /* Nothing interesting! */ } Open_Stuff() { void *OpenLibrary(); struct Window *OpenWindow(); struct Screen *OpenScreen(); if(!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0))) die("Can't open intuition.library"); if(!(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0))) die("Can't open graphics library"); if((scr=OpenScreen(&ns))==NULL) die(""); nw.Screen=scr; if(!(win=(struct Window *)OpenWindow(&nw))) die(""); 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); } if((left_arrow.num)!=-1) FreeSprite(left_arrow.num); if((right_arrow.num)!=-1) FreeSprite(right_arrow.num); StopSound(RIGHT0); if(boing) RemoveSound(boing); if(win) CloseWindow(win); if(scr) CloseScreen(scr); if(GfxBase) CloseLibrary(GfxBase); if(IntuitionBase) CloseLibrary(IntuitionBase); exit(); return(TRUE); }