home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 2
/
goldfish_vol2_cd1.bin
/
files
/
game
/
think
/
arachnid
/
suchekarte.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-12-27
|
6KB
|
227 lines
#include <ctype.h>
#include <functions.h>
#define GD_Wert 0
#define GD_Farbe 1
#define GD_OK 2
#define GD_Cancel 3
extern APTR VisualInfo;
extern BYTE PlayStack[][10];
extern struct Screen *Scr;
extern struct Window *Wnd;
extern struct TextAttr topaz8;
struct Window *SCWnd = NULL;
struct Gadget *SCGList = NULL;
struct Gadget *SCGadgets[4];
UBYTE *Wert0Labels[] = {
(UBYTE *)"_Ass", (UBYTE *)"_2", (UBYTE *)"_3",
(UBYTE *)"_4", (UBYTE *)"_5", (UBYTE *)"_6",
(UBYTE *)"_7", (UBYTE *)"_8", (UBYTE *)"_9",
(UBYTE *)"_10", (UBYTE *)"_Bube", (UBYTE *)"_Dame",
(UBYTE *)"_König",
NULL };
UBYTE *Farbe0Labels[] = {
(UBYTE *)"Kar_o", (UBYTE *)"_Herz",
(UBYTE *)"_Pik", (UBYTE *)"K_reuz",
NULL };
UBYTE *WertLabel[] = {
(UBYTE *)"Ass", (UBYTE *)"2", (UBYTE *)"3",
(UBYTE *)"4", (UBYTE *)"5", (UBYTE *)"6",
(UBYTE *)"7", (UBYTE *)"8", (UBYTE *)"9",
(UBYTE *)"10", (UBYTE *)"Bube", (UBYTE *)"Dame",
(UBYTE *)"König",
NULL };
UBYTE *FarbeLabel[] = {
(UBYTE *)"Karo", (UBYTE *)"Herz",
(UBYTE *)"Pik", (UBYTE *)"Kreuz",
NULL };
UBYTE ShortCuts[] = {'A','2','3','4','5','6','7','8','9','1',
'B','D','K','O','H','P','R','S','N'};
void FehlerAus(long nr);
struct TagItem SCGTag1[] =
{
{GTMX_Labels,},/* {GTMX_Labels, *Wert0Labels},*/
{GTMX_Spacing, 3},
{GT_Underscore, '_'},
{TAG_DONE,}
};
struct TagItem SCGTag2[] =
{
{GTMX_Labels,},/* {GTMX_Labels, *Farbe0Labels},*/
{GTMX_Spacing, 3},
{GT_Underscore, '_'},
{TAG_DONE,}
};
struct TagItem SCGTag3[] =
{
{GT_Underscore, '_'},
{TAG_DONE,}
};
struct TagItem *SCGTags[] = {SCGTag1, SCGTag2, SCGTag3, SCGTag3};
struct IntuiText SCIText[] = {
1, 0, JAM1,26, 30, &topaz8, (UBYTE *)"Wert der Karte :", &SCIText[1],
1, 0, JAM1,185, 30, &topaz8, (UBYTE *)"Farbe der Karte :", NULL };
ULONG SCGTypes[] = {
MX_KIND,
MX_KIND,
BUTTON_KIND,
BUTTON_KIND
};
struct NewGadget SCNGad[] = {
70, 60, 17, 9, NULL, &topaz8, GD_Wert, PLACETEXT_RIGHT, NULL, NULL,
225, 60, 17, 9, NULL, &topaz8, GD_Farbe, PLACETEXT_RIGHT, NULL, NULL,
185, 110, 150, 47, (UBYTE *)"_Suchen", &topaz8, GD_OK, PLACETEXT_IN, NULL, NULL,
185, 160, 150, 47, (UBYTE *)"_nicht Suchen", &topaz8, GD_Cancel, PLACETEXT_IN, NULL, NULL
};
struct Gadget *gads[4];
struct EasyStruct SearchMess = {sizeof(struct EasyStruct), 0, NULL, NULL, "OK"};
void OpenSCWindow()
{
long i;
struct Gadget *gad;
SCGTag1[0].ti_Data = (ULONG)Wert0Labels;
SCGTag2[0].ti_Data = (ULONG)Farbe0Labels;
gad = CreateContext(&SCGList);
for(i=0;i<4;i++)
{
SCNGad[i].ng_VisualInfo = VisualInfo;
gads[i] = gad = CreateGadgetA(SCGTypes[i], gad, &SCNGad[i], SCGTags[i]);
}
if(!gad)
{
FehlerAus(9);
return;
}
if(!(SCWnd = OpenWindowTags(NULL,
WA_Left, 140,
WA_Top, 141,
WA_Width, 360,
WA_Height, 230,
WA_IDCMP, MXIDCMP|BUTTONIDCMP|IDCMP_MOUSEBUTTONS|IDCMP_INACTIVEWINDOW|IDCMP_VANILLAKEY,
WA_Flags, WFLG_DRAGBAR|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
WA_Gadgets, SCGList,
WA_Title, (UBYTE *)"Karte suchen...",
WA_PubScreen, Scr,
TAG_DONE )))
{
FehlerAus(7);
return;
}
GT_RefreshWindow(SCWnd, NULL);
DrawBevelBox(SCWnd->RPort, 26, 37, 150, 170, GT_VisualInfo, VisualInfo, TAG_DONE);
DrawBevelBox(SCWnd->RPort, 185, 37, 150, 70, GT_VisualInfo, VisualInfo, TAG_DONE);
PrintIText(SCWnd->RPort, SCIText, 10, 15);
}
void CloseSCWindow()
{
if(SCWnd)
{
CloseWindow(SCWnd);
SCWnd = NULL;
}
if(SCGList)
{
FreeGadgets(SCGList);
SCGList = NULL;
}
}
void SucheKarte()
{
long i,j,class,code,Karte,Wert=0,Farbe=0;
long posx1=0,posy1,posx2=0,posy2;
BOOL suchen,ende = FALSE;
struct IntuiMessage *message;
struct MsgPort *UserPort;
struct Gadget *gad;
OpenSCWindow();
UserPort = SCWnd->UserPort;
while(!ende)
{
Wait(1L << UserPort->mp_SigBit);
while(message = (struct IntuiMessage *) GT_GetIMsg(UserPort))
{
gad = (struct Gadget*)message->IAddress;
class = message->Class;
code = message->Code;
GT_ReplyIMsg(message);
switch(class)
{
case IDCMP_INACTIVEWINDOW: ActivateWindow(SCWnd);
break;
case IDCMP_GADGETUP: suchen = (gad->GadgetID == GD_OK);
ende = TRUE;
break;
case IDCMP_GADGETDOWN: if(gad->GadgetID == GD_Wert) Wert = code;
else Farbe = code;
break;
case IDCMP_VANILLAKEY:
code = toupper(code);
if(code == 13) code = 'S';
for(i=0;i<19;i++)
if(code == ShortCuts[i]) break;
if(i == 19) break;
if(i<13) Wert = i;
else if(i<17) Farbe = i - 13;
if(i>16)
{
suchen = (i == 17);
ende = TRUE;
}
GT_SetGadgetAttrs(gads[0], SCWnd, NULL, GTMX_Active, Wert, TAG_DONE);
GT_SetGadgetAttrs(gads[1], SCWnd, NULL, GTMX_Active, Farbe, TAG_DONE);
}
}
}
CloseSCWindow();
if(suchen)
{
Karte = Farbe*13+Wert+1;
for(j=9;j>=0;j--)
for(i=PlayStack[0][j];i>0;i--)
{
if(PlayStack[i][j]<0) break;
if(PlayStack[i][j] == Karte)
{
posx2 = posx1;
posy2 = posy1;
posx1 = i;
posy1 = j;
}
}
SearchMess.es_TextFormat = "%s-%s ist nicht sichtbar!";
if(posx1) SearchMess.es_TextFormat = "%s-%s ist in Reihe %ld und Spalte %ld";
if(posx2) SearchMess.es_TextFormat = "%s-%s ist in Reihe %ld und Spalte %ld,\nsowie in Reihe %ld und Spalte %ld";
EasyRequest(Wnd, &SearchMess, NULL, FarbeLabel[Farbe], WertLabel[Wert], posy1+1, posx1, posy2+1, posx2);
}
}