home *** CD-ROM | disk | FTP | other *** search
- /* 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);
- }
-