home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / game / think / arachnid / suchekarte.c < prev    next >
C/C++ Source or Header  |  1993-12-27  |  6KB  |  227 lines

  1. #include <ctype.h>
  2. #include <functions.h>
  3.  
  4. #define GD_Wert   0
  5. #define GD_Farbe  1
  6. #define GD_OK     2
  7. #define GD_Cancel 3
  8.  
  9. extern APTR   VisualInfo;
  10. extern BYTE   PlayStack[][10];
  11. extern struct Screen *Scr;
  12. extern struct Window *Wnd;
  13. extern struct TextAttr topaz8;
  14.  
  15. struct Window *SCWnd = NULL;
  16. struct Gadget *SCGList = NULL;
  17. struct Gadget *SCGadgets[4];
  18.  
  19. UBYTE *Wert0Labels[] = {
  20.         (UBYTE *)"_Ass", (UBYTE *)"_2",    (UBYTE *)"_3",
  21.         (UBYTE *)"_4",   (UBYTE *)"_5",    (UBYTE *)"_6",
  22.         (UBYTE *)"_7",   (UBYTE *)"_8",    (UBYTE *)"_9",
  23.         (UBYTE *)"_10",  (UBYTE *)"_Bube", (UBYTE *)"_Dame",
  24.         (UBYTE *)"_König",
  25.         NULL };
  26.  
  27. UBYTE *Farbe0Labels[] = {
  28.         (UBYTE *)"Kar_o", (UBYTE *)"_Herz",
  29.         (UBYTE *)"_Pik",  (UBYTE *)"K_reuz",
  30.         NULL };
  31.  
  32. UBYTE *WertLabel[] = {
  33.         (UBYTE *)"Ass", (UBYTE *)"2",    (UBYTE *)"3",
  34.         (UBYTE *)"4",   (UBYTE *)"5",    (UBYTE *)"6",
  35.         (UBYTE *)"7",   (UBYTE *)"8",    (UBYTE *)"9",
  36.         (UBYTE *)"10",  (UBYTE *)"Bube", (UBYTE *)"Dame",
  37.         (UBYTE *)"König",
  38.         NULL };
  39.  
  40. UBYTE *FarbeLabel[] = {
  41.         (UBYTE *)"Karo", (UBYTE *)"Herz",
  42.         (UBYTE *)"Pik", (UBYTE *)"Kreuz",
  43.         NULL };
  44.  
  45. UBYTE ShortCuts[] = {'A','2','3','4','5','6','7','8','9','1',
  46.                      'B','D','K','O','H','P','R','S','N'};
  47.  
  48. void FehlerAus(long nr);
  49.  
  50. struct TagItem SCGTag1[] =
  51. {
  52.   {GTMX_Labels,},/*  {GTMX_Labels, *Wert0Labels},*/
  53.   {GTMX_Spacing, 3},
  54.   {GT_Underscore, '_'},
  55.   {TAG_DONE,}
  56. };
  57.  
  58. struct TagItem SCGTag2[] =
  59. {
  60.   {GTMX_Labels,},/*  {GTMX_Labels, *Farbe0Labels},*/
  61.   {GTMX_Spacing, 3},
  62.   {GT_Underscore, '_'},
  63.   {TAG_DONE,}
  64. };
  65.  
  66. struct TagItem SCGTag3[] =
  67. {
  68.   {GT_Underscore, '_'},
  69.   {TAG_DONE,}
  70. };
  71.  
  72. struct TagItem *SCGTags[] = {SCGTag1, SCGTag2, SCGTag3, SCGTag3};
  73.  
  74. struct IntuiText SCIText[] = {
  75.         1, 0, JAM1,26, 30, &topaz8, (UBYTE *)"Wert der Karte :", &SCIText[1],
  76.         1, 0, JAM1,185, 30, &topaz8, (UBYTE *)"Farbe der Karte :", NULL };
  77.  
  78. ULONG SCGTypes[] = {
  79.         MX_KIND,
  80.         MX_KIND,
  81.         BUTTON_KIND,
  82.         BUTTON_KIND
  83. };
  84.  
  85. struct NewGadget SCNGad[] = {
  86.          70,  60,  17,  9, NULL, &topaz8,  GD_Wert, PLACETEXT_RIGHT, NULL, NULL,
  87.         225,  60,  17,  9, NULL, &topaz8, GD_Farbe, PLACETEXT_RIGHT, NULL, NULL,
  88.         185, 110, 150, 47, (UBYTE *)"_Suchen",       &topaz8, GD_OK, PLACETEXT_IN, NULL, NULL,
  89.         185, 160, 150, 47, (UBYTE *)"_nicht Suchen", &topaz8, GD_Cancel, PLACETEXT_IN, NULL, NULL
  90. };
  91.  
  92. struct Gadget *gads[4];
  93.  
  94. struct EasyStruct SearchMess = {sizeof(struct EasyStruct), 0, NULL, NULL, "OK"};
  95.  
  96. void OpenSCWindow()
  97. {
  98.   long i;
  99.   struct Gadget *gad;
  100.  
  101.   SCGTag1[0].ti_Data = (ULONG)Wert0Labels;
  102.   SCGTag2[0].ti_Data = (ULONG)Farbe0Labels;
  103.  
  104.   gad = CreateContext(&SCGList);
  105.  
  106.   for(i=0;i<4;i++)
  107.   {
  108.     SCNGad[i].ng_VisualInfo = VisualInfo;
  109.     gads[i] = gad = CreateGadgetA(SCGTypes[i], gad, &SCNGad[i], SCGTags[i]);
  110.   }
  111.  
  112.   if(!gad)
  113.   {
  114.     FehlerAus(9);
  115.     return;
  116.   }
  117.  
  118.   if(!(SCWnd = OpenWindowTags(NULL,
  119.                    WA_Left,      140,
  120.                    WA_Top,       141,
  121.                    WA_Width,     360,
  122.                    WA_Height,    230,
  123.                    WA_IDCMP,     MXIDCMP|BUTTONIDCMP|IDCMP_MOUSEBUTTONS|IDCMP_INACTIVEWINDOW|IDCMP_VANILLAKEY,
  124.                    WA_Flags,     WFLG_DRAGBAR|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  125.                    WA_Gadgets,   SCGList,
  126.                    WA_Title,     (UBYTE *)"Karte suchen...",
  127.                    WA_PubScreen, Scr,
  128.                    TAG_DONE )))
  129.   {
  130.     FehlerAus(7);
  131.     return;
  132.   }
  133.  
  134.   GT_RefreshWindow(SCWnd, NULL);
  135.  
  136.   DrawBevelBox(SCWnd->RPort, 26, 37, 150, 170, GT_VisualInfo, VisualInfo, TAG_DONE);
  137.   DrawBevelBox(SCWnd->RPort, 185, 37, 150, 70, GT_VisualInfo, VisualInfo, TAG_DONE);
  138.   PrintIText(SCWnd->RPort, SCIText, 10, 15);
  139. }
  140.  
  141. void CloseSCWindow()
  142. {
  143.   if(SCWnd)
  144.   {
  145.     CloseWindow(SCWnd);
  146.     SCWnd = NULL;
  147.   }
  148.  
  149.   if(SCGList)
  150.   {
  151.     FreeGadgets(SCGList);
  152.     SCGList = NULL;
  153.   }
  154. }
  155.  
  156. void SucheKarte()
  157. {
  158.   long i,j,class,code,Karte,Wert=0,Farbe=0;
  159.   long posx1=0,posy1,posx2=0,posy2;
  160.   BOOL suchen,ende = FALSE;
  161.   struct IntuiMessage *message;
  162.   struct MsgPort      *UserPort;
  163.   struct Gadget       *gad;
  164.  
  165.   OpenSCWindow();
  166.   UserPort = SCWnd->UserPort;
  167.   while(!ende)
  168.   {
  169.     Wait(1L << UserPort->mp_SigBit);
  170.     while(message = (struct IntuiMessage *) GT_GetIMsg(UserPort))
  171.     {
  172.       gad = (struct Gadget*)message->IAddress;
  173.       class = message->Class;
  174.       code  = message->Code;
  175.       GT_ReplyIMsg(message);
  176.       switch(class)
  177.       {
  178.         case IDCMP_INACTIVEWINDOW: ActivateWindow(SCWnd);
  179.                                    break;
  180.         case IDCMP_GADGETUP:       suchen = (gad->GadgetID == GD_OK);
  181.                                    ende = TRUE;
  182.                                    break;
  183.         case IDCMP_GADGETDOWN:     if(gad->GadgetID == GD_Wert) Wert = code;
  184.                                    else Farbe = code;
  185.                                    break;
  186.         case IDCMP_VANILLAKEY:
  187.           code = toupper(code);
  188.           if(code == 13) code = 'S';
  189.           for(i=0;i<19;i++)
  190.             if(code == ShortCuts[i]) break;
  191.           if(i == 19) break;
  192.           if(i<13) Wert = i;
  193.           else if(i<17) Farbe = i - 13;
  194.           if(i>16)
  195.           {
  196.             suchen = (i == 17);
  197.             ende = TRUE;
  198.           }
  199.           GT_SetGadgetAttrs(gads[0], SCWnd, NULL, GTMX_Active, Wert, TAG_DONE);
  200.           GT_SetGadgetAttrs(gads[1], SCWnd, NULL, GTMX_Active, Farbe, TAG_DONE);
  201.       }
  202.     }
  203.   }
  204.   CloseSCWindow();
  205.  
  206.   if(suchen)
  207.   {
  208.     Karte = Farbe*13+Wert+1;
  209.     for(j=9;j>=0;j--)
  210.       for(i=PlayStack[0][j];i>0;i--)
  211.       {
  212.         if(PlayStack[i][j]<0) break;
  213.         if(PlayStack[i][j] == Karte)
  214.         {
  215.           posx2 = posx1;
  216.           posy2 = posy1;
  217.           posx1 = i;
  218.           posy1 = j;
  219.         }
  220.       }
  221.     SearchMess.es_TextFormat = "%s-%s ist nicht sichtbar!";
  222.     if(posx1) SearchMess.es_TextFormat = "%s-%s ist in Reihe %ld und Spalte %ld";
  223.     if(posx2) SearchMess.es_TextFormat = "%s-%s ist in Reihe %ld und Spalte %ld,\nsowie in Reihe %ld und Spalte %ld";
  224.     EasyRequest(Wnd, &SearchMess, NULL, FarbeLabel[Farbe], WertLabel[Wert], posy1+1, posx1, posy2+1, posx2);
  225.   }
  226. }
  227.