home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD2.img
/
d4xx
/
d429
/
tripppin
/
source
/
menu.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-01-10
|
9KB
|
419 lines
/* this file is got the menu stuff for the game Trippin. */
#include <intuition/intuition.h>
#include "trip.h"
#define MENWID 188
#define SUBWID 154
import struct Image olabel, blabel;
import void TellTurn(), Restart(), ShowBoard(), MakeAnts(), StartThinking(),
StopThinking(), DrawSquare(), LiftBob(), DropBob(),
TellTurn(), Ding();
import bool thinking, abort_think, lace, won, looprevent;
import short difficulty, sigdone, suggx, suggy, thite;
import piece bb, oo, *turn;
import struct Window *win;
import struct Task *child;
private struct IntuiText xquit = {
0, 1, JAM2, 4, 1, null, (ubyte *) "Quit the game", null
};
private struct MenuItem mlast = {
null, 0, (IMHITE << 1) + 64, MENWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP, 0L, (APTR) &xquit, null, 0, null, 0
};
private struct IntuiText xrestart = {
0, 1, JAM2, 4, 1, null, (ubyte *) "Start a new game", null
};
private struct MenuItem m7 = {
&mlast, 0, (IMHITE << 1) + 44, MENWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP, 0L, (APTR) &xrestart, null, 0, null, 0
};
private struct IntuiText xtakeback = {
0, 1, JAM2, 4, 1, null, (ubyte *) "Take back move", null
};
private struct MenuItem m6 = {
&m7, 0, (IMHITE << 1) + 34, MENWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | COMMSEQ,
0L, (APTR) &xtakeback, null, 'T', null, 0
};
private struct IntuiText xsuggest = {
0, 1, JAM2, 4, 1, null, (ubyte *) "Suggest move", null
};
private struct MenuItem m5 = {
&m6, 0, (IMHITE << 1) + 24, MENWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | COMMSEQ,
0L, (APTR) &xsuggest, null, 'S', null, 0
};
private struct IntuiText xprevent = {
0, 1, JAM2, 24, 1, null, (ubyte *) "Prevent loops", null
};
private struct MenuItem m4 = {
&m5, 0, (IMHITE << 1) + 14, MENWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED | MENUTOGGLE,
0L, (APTR) &xprevent, null, 0, null, 0
};
private struct IntuiText xd9 = {
0, 1, JAM2, 24, 1, null, (ubyte *) "9 ( zzz...)", null
};
private struct IntuiText xd8 = {
0, 1, JAM2, 24, 1, null, (ubyte *) "8 (savage)", null
};
private struct IntuiText xd7 = {
0, 1, JAM2, 24, 1, null, (ubyte *) "7 (brutal)", null
};
private struct IntuiText xd6 = {
0, 1, JAM2, 24, 1, null, (ubyte *) "6 (mean)", null
};
private struct IntuiText xd5 = {
0, 1, JAM2, 24, 1, null, (ubyte *) "5 (tough)", null
};
private struct IntuiText xd4 = {
0, 1, JAM2, 24, 1, null, (ubyte *) "4 (slick)", null
};
private struct IntuiText xd3 = {
0, 1, JAM2, 24, 1, null, (ubyte *) "3 (wary)", null
};
private struct IntuiText xd2 = {
0, 1, JAM2, 24, 1, null, (ubyte *) "2 (sloppy)", null
};
private struct IntuiText xd1 = {
0, 1, JAM2, 24, 1, null, (ubyte *) "1 (duuh...)", null
};
private struct IntuiText xdifficulty = {
0, 1, JAM2, 4, 1, null, (ubyte *) "Difficulty level:", null
};
private struct MenuItem m3i = {
null, MENWID - 26, 40, SUBWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
0xfffffeffL, (APTR) &xd9, null, 0, null, 0
};
private struct MenuItem m3h = {
&m3i, MENWID - 26, 30, SUBWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
0xffffff7fL, (APTR) &xd8, null, 0, null, 0
};
private struct MenuItem m3g = {
&m3h, MENWID - 26, 20, SUBWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
0xffffffbfL, (APTR) &xd7, null, 0, null, 0
};
private struct MenuItem m3f = {
&m3g, MENWID - 26, 10, SUBWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
0xffffffdfL, (APTR) &xd6, null, 0, null, 0
};
private struct MenuItem m3e = {
&m3f, MENWID - 26, 0, SUBWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
0xffffffefL, (APTR) &xd5, null, 0, null, 0
};
private struct MenuItem m3d = {
&m3e, MENWID - 26, -10, SUBWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
0xfffffff7L, (APTR) &xd4, null, 0, null, 0
};
private struct MenuItem m3c = {
&m3d, MENWID - 26, -20, SUBWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED,
0xfffffffbL, (APTR) &xd3, null, 0, null, 0
};
private struct MenuItem m3b = {
&m3c, MENWID - 26, -30, SUBWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
0xfffffffdL, (APTR) &xd2, null, 0, null, 0
};
private struct MenuItem m3a = {
&m3b, MENWID - 26, -40, SUBWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
0xfffffffeL, (APTR) &xd1, null, 0, null, 0
};
private struct MenuItem m3 = {
&m4, 0, (IMHITE << 1) + 4, MENWID, 10, ITEMTEXT | ITEMENABLED | HIGHNONE,
0L, (APTR) &xdifficulty, null, 0, &m3a, 0
};
private struct IntuiText xcomputer = {
0, 1, JAM2, 24, 1, null, (ubyte *) "Computer", null
};
private struct IntuiText xhuman = {
0, 1, JAM2, 24, 1, null, (ubyte *) "Human", null
};
private struct IntuiText xplayedby = {
0, 1, JAM2, 38, 3, null, (ubyte *) "is played by:", null
};
private struct MenuItem m2b = {
null, MENWID - 26, 10, SUBWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED, bit(0),
(APTR) &xcomputer, null, 0, null, 0
};
private struct MenuItem m2a = {
&m2b, MENWID - 26, 0, SUBWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, bit(1),
(APTR) &xhuman, null, 0, null, 0
};
private struct MenuItem m1b = {
null, MENWID - 26, 10, SUBWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, bit(0),
(APTR) &xcomputer, null, 0, null, 0
};
private struct MenuItem m1a = {
&m1b, MENWID - 26, 0, SUBWID, 10,
ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED, bit(1),
(APTR) &xhuman, null, 0, null, 0
};
private struct MenuItem m2i = {
&m3, 6, IMHITE + 3, 32, IMHITE, ITEMENABLED | HIGHNONE, 0L,
(APTR) &blabel, null, 0, null, 0
};
private struct MenuItem m2 = {
&m2i, 0, IMHITE + 2, MENWID, IMHITE + 2, ITEMTEXT | ITEMENABLED | HIGHNONE,
0L, (APTR) &xplayedby, null, 0, &m2a, 0
};
private struct MenuItem m1i = {
&m2, 6, 1, 32, IMHITE, ITEMENABLED | HIGHNONE, 0L,
(APTR) &olabel, null, 0, null, 0
};
private struct MenuItem m1 = {
&m1i, 0, 0, MENWID, IMHITE + 2, ITEMTEXT | ITEMENABLED | HIGHNONE, 0L,
(APTR) &xplayedby, null, 0, &m1a, 0
};
PUBLIC struct Menu manyou = {
null, 210, 0, MENWID, 10, MENUENABLED, "Tripppin out!", &m1, 0, 0, 0, 0
};
/* ------------------ JEEZ! All that for just ONE menu?! ------------ */
private void Spread(m, h) struct MenuItem *m; short h;
{
short t;
for (t = 0; m; m = m->NextItem) {
m->TopEdge += t;
m->Height = thite + 1;
t += h;
}
}
void ShoveMenus() /* compensate for lace and/or tall font */
{
struct MenuItem *mi;
short t = (IMHITE << 2) + 8, h = thite - 9;
if (lace) {
m1.Height = m2.Height = m2.TopEdge = (IMHITE << 1) + 4;
xplayedby.TopEdge = (IMHITE >> 1) + 3;
m2i.TopEdge = (IMHITE << 1) + 5;
m1i.Height = m2i.Height = IMHITE << 2;
for (mi = &m3; mi; mi = mi->NextItem) {
mi->TopEdge = t;
t += 10;
}
mlast.TopEdge += 10;
}
if (h > 0) {
Spread(&m3, h); /* main items below imaged ones */
Spread(&m3a, h); /* difficulty subitems */
manyou.Height = thite + 1;
Spread(&m1a, h);
Spread(&m2a, h);
}
/* this function assumes that thite < IMHITE + 2 */
}
private void Suck(who) piece *who;
{
history *h = who->hist;
if (!h->count)
return;
turn = turn->other;
LiftBob(who);
DrawSquare(who->x, who->y);
who->x = h->hx[h->top];
who->y = h->hy[h->top];
if (h->madegoal[h->top]) {
--who->reached;
SetGoal(who);
}
if (!h->top)
h->top = HISTORY - 1;
else --h->top;
--h->count;
DropBob(who);
}
private void TakeBack()
{
piece *oldturn = turn;
if ((oo.machine && bb.machine) || !turn->other->hist->count) {
Ding();
return;
}
StopThinking();
KillAnts();
won = false;
Suck(turn->other);
if (oldturn->other->machine)
Suck(oldturn);
Allow(turn->other, turn);
TellTurn();
StartThinking();
}
bool DoMenu(c) short c;
{
struct MenuItem *eye;
short i;
switch (c) {
case 0: /* orange player */
if ((oo.machine ? m1a.Flags : m1b.Flags) & CHECKED) {
oo.machine = !oo.machine;
if (turn == &oo) {
KillAnts();
StartThinking();
TellTurn();
}
}
break;
case 2: /* blue player */
if ((bb.machine ? m2a.Flags : m2b.Flags) & CHECKED) {
bb.machine = !bb.machine;
if (turn == &bb) {
KillAnts();
StartThinking();
TellTurn();
}
}
break;
case 4: /* difficulty level */
for (i = 1, eye = &m3a; eye; eye = eye->NextItem, i++)
if (eye->Flags & CHECKED) {
difficulty = i;
break;
}
/* do *NOT* trust SUBITEM to be same as the one now checked! */
break;
case 6: /* suggest a move */
if (suggx >= 0)
MakeAnts(suggx, suggy);
break;
case 7: /* take back a move */
TakeBack();
break;
case 8: /* restart the game */
Restart();
ShowBoard();
break;
case 9: /* quit the game */
abort_think = true;
return true;
}
looprevent = !!(m4.Flags & CHECKED);
return false;
}