home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d1xx
/
d186
/
cards'o'rama.lha
/
Cards'O'Rama
/
Sources
/
sources.zoo
/
menupick.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-02-25
|
7KB
|
282 lines
/* menupick.c */
int calling; /* Since I'll use the same gadgets in various requesters */
/* I'll need this one to know which function has brought */
/* up the requester... */
int reqstatus = FALSE;
menupick(im)
struct IntuiMessage *im;
{
extern struct Window *w;
extern int enemy;
extern struct Requester thankreq;
extern struct Requester aboutreq;
extern struct Requester exitreq;
int result;
USHORT code, menunumber, itemnumber;
struct MenuItem *menuitem;
code = im -> Code;
while(code != MENUNULL)
{
menunumber = MENUNUM(code);
switch(menunumber)
{
case PROGRAM:
while ((w -> ReqCount) != 0) /* Until a requester is active */
{
result = waitformess(); /* Wait... */
Delay(30);
}
itemnumber = ITEMNUM(code);
if (itemnumber == 0) /* Thanks choosen */
{
Request(&thankreq, w);
result = PICKED_THANKS;
}
if (itemnumber == 1) /* About choosen */
{
Request(&aboutreq, w);
result = PICKED_ABOUT;
}
if (itemnumber == 2) /* Exit choosen */
{
calling = 3;
Request(&exitreq, w);
result = PICKED_EXIT;
}
break;
case GAME:
itemnumber = ITEMNUM(code);
if (itemnumber == 0) /* Start choosen */
result = startgame();
if (itemnumber == 1) /* Peek choosen */
result = peekgame();
if (itemnumber == 2) /* Quit choosen */
result = quitgame();
break;
case LEVEL:
itemnumber = ITEMNUM(code);
if (itemnumber == 0) /* Easy choosen */
result = easylevel();
if (itemnumber == 1) /* Normal choosen */
result = normallevel();
if (itemnumber == 2) /* Hard choosen */
result = hardlevel();
break;
case OPPONENT:
itemnumber = ITEMNUM(code);
if (itemnumber == 0) /* Amiga choosen */
{
enemy = TRUE;
result = PICKED_AMIGA;
}
if (itemnumber == 1) /* Human choosen */
{
enemy = FALSE;
result = PICKED_HUMAN;
}
break;
default:
result = DUMMY_VALUE;
break;
}
menuitem = (struct MenuItem *)ItemAddress(&mygamemenu[0], code);
code = menuitem -> NextSelect;
}
return(result);
}
startgame()
{
extern struct RastPort *rp;
extern UWORD mycardsposition[];
extern int turn1, turn2;
extern int score1, score2;
extern int peek1, peek2;
extern struct Window *w;
extern int showtime;
int i, k;
ULONG seconds, micros;
int result;
while ((w -> ReqCount) != 0) /* Until a requester is active */
{
result = waitformess(); /* Wait... */
Delay(30);
}
SetRast(rp, 6); /* Clear screen */
for (i = 1, k = 1; i <= 16; i++) /* Reset the deck */
{
mycardsposition[k++] = i;
mycardsposition[k++] = i;
}
turn1 = 0; /* Reset players' variables */
turn2 = 0;
score1 = 0;
score2 = 0;
peek1 = 0;
peek2 = 0;
OffMenu(w, 0x3f00); /* Disable menu 0 (all) */
OffMenu(w, 0x3f01); /* Disable menu 1 (all) */
OffMenu(w, 0x3f02); /* Disable menu 2 (all) */
OffMenu(w, 0x3f03); /* Disable menu 3 (all) */
displaydata(); /* Display players' situation */
CurrentTime(&seconds, µs); /* Get current time */
srand(micros); /* Use micros as a new seed */
shufflecards(); /* Shuffle the card deck */
displaycards(TRUE); /* Show them to the players */
writestring(rp, START_STRING, COLOR3); /* Tell'em to watch'em... */
Delay(50 * showtime); /* Until they can! */
writestring(rp, START_STRING, FALSE); /* Delete message */
displaycards(FALSE); /* Now cover the cards */
OnMenu(w, 0x3f00); /* Re-enable menu 0 (all) */
OnMenu(w, 0x3f01); /* Re-enable menu 1 */
OffMenu(w, 0x0001); /* Except item 0! */
OnMenu(w, 0x0021); /* But enable item 1 */
OnMenu(w, 0x0041); /* And enable item 2 */
return(PICKED_START); /* Let the program now that we're in... */
}
peekgame()
{
extern int movingplayer;
extern int score1, score2;
extern int peek1, peek2;
extern struct RastPort *rp;
extern int peektime;
extern struct Requester peekreq;
extern struct Window *w;
int result;
while ((w -> ReqCount) != 0) /* Until a requester is active */
{
result = waitformess(); /* Wait... */
Delay(30);
}
if ((movingplayer == 1 && score1 == 0) ||
(movingplayer == 2 && score2 == 0))
{
writestring(rp, PICK_FIRST_STRING, FALSE); /* Delete old message */
writestring(rp, NO_PEEK_STRING, COLOR3); /* Can't peek yet! */
Delay(50 * peektime / 2);
writestring(rp, NO_PEEK_STRING, FALSE);
if (movingplayer == 1)
writestring(rp, PICK_FIRST_STRING, COLOR1);
else
writestring(rp, PICK_FIRST_STRING, COLOR2);
return(DUMMY_VALUE);
}
if ((movingplayer == 1 && peek1 == 3) ||
(movingplayer == 2 && peek2 == 3))
{
writestring(rp, PICK_FIRST_STRING, FALSE); /* Delete old message */
writestring(rp, TOO_MUCH_STRING, COLOR3); /* Peeked too much! */
Delay(50 * peektime / 2);
writestring(rp, TOO_MUCH_STRING, FALSE);
if (movingplayer == 1)
writestring(rp, PICK_FIRST_STRING, COLOR1);
else
writestring(rp, PICK_FIRST_STRING, COLOR2);
return(DUMMY_VALUE);
}
calling = 1;
Request(&peekreq, w);
return(PICKED_PEEK);
}
quitgame()
{
extern struct Requester quitreq;
extern struct Window *w;
int result;
while ((w -> ReqCount) != 0) /* Until a requester is active */
{
result = waitformess(); /* Wait... */
Delay(30);
}
calling = 2;
Request(&quitreq, w);
return(PICKED_QUIT);
}
easylevel()
{
extern int showtime, peektime;
extern int shuffles, memory, percentage;
showtime = 30;
peektime = 12;
shuffles = 40;
memory = 2;
percentage = 10;
return(PICKED_EASY);
}
normallevel()
{
extern int showtime, peektime;
extern int shuffles, memory, percentage;
showtime = 24;
peektime = 9;
shuffles = 50;
memory = 4;
percentage = 20;
return(PICKED_NORMAL);
}
hardlevel()
{
extern int showtime, peektime;
extern int shuffles, memory, percentage;
showtime = 18;
peektime = 6;
shuffles = 60;
memory = 6;
percentage = 30;
return(PICKED_HARD);
}