home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 138.lha / Cycle / graphic.c < prev    next >
C/C++ Source or Header  |  1986-11-20  |  5KB  |  185 lines

  1. /*
  2.  * Here we have all of the graphics rendering code...
  3.  */
  4. #include <exec/types.h>
  5. #include <intuition/intuition.h>
  6. #include "cycles.h"
  7.  
  8. #define INTUITION_REV   29
  9. #define GRAPHICS_REV    29
  10. #define X_BYTES ((X_SIZE / 8) + !!(X_SIZE % 8))
  11.  
  12. struct NewScreen newscreen = {
  13.   0L,0L,               /* left edge, top edge  */
  14.   320L,200L,           /* width, height        */
  15.   3L,                  /* depth                */
  16.   0L,1L,               /* DetailPen, BlockPen  */
  17.   0L,                  /* viewmodes            */
  18.   CUSTOMSCREEN,        /* type                 */
  19.   NULL,                /* font                 */
  20.   (UBYTE *)"  Cycles", /* title                */
  21.   NULL,                /* Gadgets              */
  22.   NULL                 /* CustomBitMap         */
  23. };
  24.  
  25. struct NewWindow newwindow = {
  26.   0L,0L,              /* left edge, top edge   */
  27.   15L,10L,            /* width, height         */
  28.   0L,1L,              /* detail pen, block pen */
  29.   CLOSEWINDOW,        /* IDCMP Flags           */
  30.   WINDOWCLOSE,        /* flags                 */
  31.   NULL,               /* first gadget          */
  32.   NULL,               /* checkmark             */
  33.   NULL,               /* title                 */
  34.   NULL,               /* screen will be filled in later */
  35.   NULL,               /* bitmap                */
  36.   0L,0L,              /* min width, height     */
  37.   -1L,-1L,            /* max width, height     */
  38.   CUSTOMSCREEN        /* type                  */
  39. };
  40. UWORD scr_colours[] = {
  41.   0x000, 0xf80, 0x002, 0xf00,
  42.   0x00f, 0xfff, 0x0f0, 0xff0
  43. };
  44. BYTE scr_image[ X_BYTES * Y_SIZE ];
  45.  
  46. struct IntuitionBase  *IntuitionBase;
  47. struct GfxBase        *GfxBase;
  48. struct Screen         *war_screen;
  49. struct Window         *war_window;
  50. struct RastPort       *rp;
  51. struct Screen         *OpenScreen();
  52. struct Window         *OpenWindow();
  53. void                  *OpenLibrary();
  54.  
  55. g_init()
  56. {
  57.   IntuitionBase = OpenLibrary("intuition.library",INTUITION_REV);
  58.   if (!IntuitionBase) {
  59.     g_finish();
  60.     printf("unable to open intuition\n");
  61.     return(1);
  62.   }
  63.   GfxBase = OpenLibrary("graphics.library",GRAPHICS_REV);
  64.   if (!GfxBase) {
  65.     g_finish();
  66.     printf("Unable to open graphics library\n");
  67.     return(1);
  68.   }
  69.   war_screen = OpenScreen(&newscreen);
  70.   if (!war_screen) {
  71.     g_finish();
  72.     printf("Unable to open screen\n");
  73.     return(1);
  74.   }
  75.   LoadRGB4(&war_screen->ViewPort,scr_colours,8);
  76.   rp = &war_screen->RastPort;
  77.   newwindow.Screen = war_screen;
  78.  
  79.   war_window = OpenWindow(&newwindow);
  80.   if (!war_window) {
  81.     g_finish();
  82.     printf("Unable to open window\n");
  83.     return(1);
  84.   }
  85.   return(0);
  86. }
  87.  
  88. g_restart()
  89. {
  90.   long i,j;
  91.   for (i=0; i<X_BYTES * Y_SIZE; i++) scr_image[i] = 0;
  92.  
  93.   SetAPen(rp,0);
  94.   RectFill(rp,0,10,319,199);
  95.   SetAPen(rp,1);
  96. }
  97.  
  98. g_finish()
  99. {
  100.   if (war_window)    CloseWindow(war_window);
  101.   if (war_screen)    CloseScreen(war_screen);
  102.   if (GfxBase)       CloseLibrary(GfxBase);
  103.   if (IntuitionBase) CloseLibrary(IntuitionBase);
  104. }
  105.  
  106. static long power[] = {1,2,4,8,16,32,64,128};
  107.  
  108. rpix(x,y)
  109. {
  110.   if (x < 0 || y < 0 || x >= X_SIZE || y >= Y_SIZE) return(1);
  111.   return(scr_image[(x>>3) + y * X_BYTES] & power[x&7]);
  112. }
  113. typedef struct {
  114.   long x,y;
  115. } PAIR;
  116. PAIR old_data[] = { {4,7},{0,4},{4,0},{7,4} };
  117. PAIR new_data[] = { {4,0},{7,4},{4,7},{0,4} };
  118.  
  119. void link_pix(c,x,y,dir)
  120. {
  121.   long sx,sy;
  122.  
  123.   if (x < 0 || y < 0 || x >= X_SIZE || y >= Y_SIZE) return;
  124.  
  125.   SetAPen(rp,c+3);  /* don't use title bar colours */
  126.   sx = x<<3;
  127.   sy = (y<<3) + 10;
  128.   Move(rp,sx + 4,sy + 4);
  129.   Draw(rp,sx + new_data[dir].x,sy + new_data[dir].y);
  130. }
  131.  
  132. void wpix(c,x,y,dir)
  133. {
  134.   long sx,sy;
  135.  
  136.   if (x < 0 || y < 0 || x >= X_SIZE || y >= Y_SIZE) return;
  137.   scr_image[(x>>3) + y * X_BYTES] |= power[x&7];
  138.   SetAPen(rp, c+3); /* don't use title bar colours */
  139.   sx = x<<3;
  140.   sy = (y<<3) + 10;
  141.   Move(rp,sx + old_data[dir].x, sy + old_data[dir].y);
  142.   Draw(rp,sx + 4,sy + 4);
  143. }
  144.  
  145. flash_colour(c)
  146. {
  147.   UWORD rgb;
  148.   long i,red,grn,blu;
  149.   struct ViewPort *vp;
  150.  
  151.   vp = &war_screen->ViewPort;
  152.   rgb = GetRGB4(vp->ColorMap,c);
  153.   red = (rgb>>8) & 0x0f;
  154.   grn = (rgb>>4) & 0x0f;
  155.   blu = rgb      & 0x0f;
  156.  
  157.   for (i=0; i<10; i++) {
  158.     Delay(5);
  159.     WaitTOF();
  160.     SetRGB4(vp,c,8^red,8L^grn,8^blu);
  161.     Delay(5);
  162.     WaitTOF();
  163.     SetRGB4(vp,c,red,grn,blu);
  164.   }
  165. }
  166.  
  167. draw_scores()
  168. {
  169.   long i;
  170.   char buf[20];
  171.   extern long ties;
  172.  
  173.   SetBPen(rp,1);
  174.   SetDrMd(rp,JAM2);
  175.   Move(rp,90,7);
  176.   SetAPen(rp,0);
  177.   sprintf(buf,"%-3d",ties);
  178.   Text(rp,buf,strlen(buf));
  179.   for (i=0;i<MAX_COLOURS; i++) {
  180.     SetAPen(rp,i + 3);
  181.     sprintf(buf,"%-3d",scores[i]);
  182.     Text(rp,buf,strlen(buf));
  183.   }
  184. }
  185.