AllBoard.h
上传用户:kf1822
上传日期:2021-06-02
资源大小:2156k
文件大小:7k
源码类别:

游戏

开发平台:

Java

  1. #include <graphics.h>
  2. #include "SetTime.h"
  3. typedef struct Board /* 板组子新类型 */
  4. {
  5.     int x;
  6.     int y;
  7.     int speed;    /* 板子的速度 */
  8.     int chosse;   /* 随即选择板子的类型标记量 */
  9.     int isShow;   /* 标记板子是否被描绘出来,主作用于用与会消失的板子 */
  10.     int direct;   /* 用于标记滑板滑动的方向 1-向右 0-向左 */
  11.     int temp;
  12.     int tempR;  /* 标记滑板传送带向右运动 */
  13.     int tempL;  /* 标记滑板传送带向左运动 */
  14.     int isChange; /* 标记板子的数值是否需要被改变 1-可被改变 0-不可被改变 */
  15. }Board;
  16. typedef struct ExpStar  /* 爆炸板子专用 */
  17. {
  18.     int x;
  19.     int y;
  20.     int tempX;
  21.     int tempY;
  22.     int vx;
  23.     int vy;
  24.     int isShow;   /* 是否被描绘 */
  25.     int signX;     /* X方向标量 */
  26.     int signY;     /* Y方向标量 */
  27. }ExpStar;
  28. void drawSBoard(Board s)    /* 画安全板 */
  29. {
  30.     setfillstyle(1,YELLOW);
  31.     bar(s.x,s.y,s.x+90,s.y+10);     /* 安全板的长宽为91x11 */
  32.     setcolor(BROWN);
  33.     rectangle(s.x,s.y,s.x+90,s.y+10);
  34. }
  35. void drawTBoard(Board b)    /* 话刺板 刺板由刺和板子组成 */
  36. {
  37.     int xy[7][3][2];                  /* 定义有21个点共21个X坐标21个Y坐标的数组  */
  38.     int i;
  39.     int j;
  40.     int k;
  41.     int temp;
  42.     setfillstyle(1,WHITE);            /* 话出刺板下的板子 */
  43.     bar(b.x,b.y+5,b.x+90,b.y+10);
  44.     for(i=0;i<7;i++)                    /* 根据传进来的b对21个点赋值 */
  45.     {
  46.         for(j=0;j<3;j++)
  47.         {
  48.             if(j==1)
  49.                 b.x=b.x+12;
  50.             for(k=0;k<2;k++)
  51.             {
  52.                 if(j<2)
  53.                 {
  54.                     if(k==0)
  55.                         xy[i][j][k]=b.x;
  56.                     else
  57.                         xy[i][j][k]=b.y+4;
  58.                 }
  59.                 else
  60.                 {
  61.                     if(k==0)
  62.                         xy[i][j][k]=b.x-6;
  63.                     else
  64.                         xy[i][j][k]=b.y;
  65.                 }
  66.             }
  67.         }
  68.         b.x++;
  69.     }
  70.     for(i=0;i<7;i++)                  /* 画出刺板的刺 */
  71.     {
  72.         setfillstyle(1,RED);
  73.         setcolor(WHITE);
  74.         fillpoly(3,*xy[i]);
  75.     }
  76. }
  77. void drawExpBoard(Board b)   /* 画爆炸的板子 触碰引发爆炸 (explosive爆炸的) */
  78. {
  79.     int i;                   /* 此紧画无爆炸状态下的爆炸板 */
  80.     if(b.isShow==1)
  81.     {
  82.         setfillstyle(1,GREEN);
  83.         bar(b.x,b.y,b.x+90,b.y+10);
  84.         setcolor(RED);
  85.         rectangle(b.x,b.y,b.x+90,b.y+10);
  86.         for(i=0;i<7;i++)
  87.         {
  88.             setcolor(RED);
  89.             line(b.x+12+i*13,b.y,b.x+i*13,b.y+10);
  90.         }
  91.     }
  92. }
  93. void initExpEdBoard(Board b,ExpStar s[],int n)    /* 初始化已经爆炸的板子 */
  94. {
  95.     int i;
  96.     int temp;
  97.     for(i=0;i<n;i++)
  98.     {
  99.         s[i].x=b.x+45;
  100.         s[i].y=b.y+5;
  101.         s[i].tempX=b.x;
  102.         s[i].tempY=b.y;
  103.         s[i].isShow=1;
  104.         temp=rand()%10;
  105.         if(temp<5)
  106.         {
  107.             s[i].signX=1;
  108.         }
  109.         else
  110.         {
  111.             s[i].signX=-1;
  112.         }
  113.         temp=rand()%10;
  114.         if(temp<5)
  115.         {
  116.             s[i].signY=1;
  117.         }
  118.         else
  119.         {
  120.             s[i].signY=-1;
  121.         }
  122.         temp=rand()%2+1;
  123.         s[i].vx=temp;
  124.         temp=rand()%2+1;
  125.         s[i].vy=temp;
  126.     }
  127. }
  128. void moveExpEdBoard(ExpStar s[],int n)
  129. {
  130.     int i;
  131.     for(i=0;i<n;i++)
  132.     {
  133.         s[i].x=s[i].x+s[i].vx*s[i].signX;
  134.         s[i].y=s[i].y+s[i].vy*s[i].signY;
  135.         if(s[i].x<=s[i].tempX || s[i].x>=s[i].tempX+90 ||
  136.            s[i].y<=s[i].tempY-20 || s[i].y>=s[i].tempY+28) /* 判断星星的位置是否超过限定范围 */
  137.         {
  138.             s[i].isShow=0;                                /* 如果上述成立 就改变该星星的isShow 让他不被描绘 */
  139.         }
  140.     }
  141. }
  142. void drawExpEdBoard(ExpStar s[],int n)    /* 已经爆炸的板子 */
  143. {
  144.     int i;
  145.     for(i=0;i<n;i++)
  146.     {
  147.         if(s[i].isShow==1)
  148.         {
  149.             setfillstyle(1,RED);
  150.             fillellipse(s[i].x,s[i].y,2,1);
  151.         }
  152.     }
  153. }
  154. void drawStrBoard(Board b)     /* 有弹性的板子 (stretch有弹性的) */
  155. {                              /* 画原始状态下的弹板、在此视压缩状态为原始状态 */
  156.     int i;
  157.     setfillstyle(1,BLUE);
  158.     bar(b.x,b.y,b.x+90,b.y+1);
  159.     bar(b.x,b.y+9,b.x+90,b.y+10);
  160.     for(i=0;i<3;i++)
  161.     {
  162.         setcolor(RED);
  163.         line(b.x+16+i*26,b.y+2,b.x+10+i*26,b.y+5); /* 画压缩状态下弹簧的左半边 */
  164.         line(b.x+10+i*26,b.y+5,b.x+16+i*26,b.y+8);
  165.         line(b.x+21+i*26,b.y+2,b.x+27+i*26,b.y+5); /* 画压缩状态下弹簧的右半边 */
  166.         line(b.x+27+i*26,b.y+5,b.x+21+i*26,b.y+8);
  167.     }
  168. }
  169. void drawExtBoard(Board b)  /* 画伸展状态下的弹板 (extend伸展) */
  170. {
  171.     int i;
  172.     setfillstyle(1,BLUE);
  173.     bar(b.x,b.y-3,b.x+90,b.y-2);
  174.     bar(b.x,b.y+9,b.x+90,b.y+10);
  175.     for(i=0;i<3;i++)
  176.     {
  177.         setcolor(RED);
  178.         line(b.x+16+i*26,b.y-1,b.x+16+i*26,b.y+8); /* 伸展状态下弹簧的左半边 */
  179.         line(b.x+21+i*26,b.y-1,b.x+21+i*26,b.y+8); /* 伸展状态下弹簧的右半边 */
  180.     }
  181. }
  182. void drawSlipBoard(Board b) /* 画滑动的板子 分为向左和向右滑动 */
  183. {
  184.     setfillstyle(1,MAGENTA); /* 洋红 */
  185.     bar(b.x,b.y,b.x+90,b.y+2);
  186.     bar(b.x,b.y+8,b.x+90,b.y+10);
  187.     if(b.direct==1)         /* 模拟传送带向右运动 */
  188.     {
  189.         setfillstyle(1,LIGHTBLUE); /* 淡蓝色 */
  190.         bar(b.x+b.tempR*13,b.y+3,b.x+b.tempR*13+12,b.y+7);
  191.     }
  192.     else                       /* 两者需用两个不同的时间中断分开运动 */
  193.     {
  194.         setfillstyle(1,LIGHTBLUE); /* 淡蓝色 */
  195.         bar(b.x+b.tempL*13,b.y+3,b.x+b.tempL*13+12,b.y+7);
  196.     }
  197. }
  198. void chooseBoard(Board b[],int n,int m)   /* n为数组大小,m为循环i的起始值 */
  199. {
  200.     int temp;
  201.     int i;
  202.     for(i=m;i<n;i++)
  203.     {
  204.         temp=rand()%100;
  205.         if(temp<55)
  206.             b[i].temp=0;        /* 0代表平板 %55机会 */
  207.         else if(temp<70)
  208.             b[i].temp=1;        /* 1代表滑板 %15机会 */
  209.         else if(temp<85)
  210.             b[i].temp=2;        /* 2代表弹板 %15机会 */
  211.         else if(temp<95)
  212.             b[i].temp=3;        /* 3代表爆炸板 %10机会*/
  213.         else if(temp<100)
  214.             b[i].temp=4;        /* 4代表刺板 %5机会 */
  215.     }
  216. }
  217. void initAllBoard(Board b[],int n,int m) /* m表示循环内i的起始值 */
  218. {
  219.     int i;
  220.     for(i=m;i<n;i++)
  221.     {
  222.         b[i].x=rand()%250+79;  /* 随即给板子赋X值 因为游戏版面范围在79--418 */
  223.                                /* 考虑到板子的91长度问题 所以取值在79--328 */
  224.         b[i].y=357;
  225.         b[i].direct=rand()%2;  /* 如果为滑板 随即为它取方向0-左或1-右 */
  226.         b[i].isShow=1;         /* 如果为爆炸板 先标示为未爆炸 */
  227.         b[i].tempR=0;
  228.         b[i].tempL=6;
  229.         b[i].isChange=0;
  230.         b[i].speed=1;
  231.     }
  232. }
  233. void drawBoards(Board b)     /* 根据b.temp选择要画的板子 */
  234. {
  235.     switch(b.temp)
  236.     {
  237.         case 0:
  238.             drawSBoard(b);        /* 0代表平板 %55机会 */
  239.         break;
  240.         case 1:
  241.             drawSlipBoard(b);     /* 1代表滑板 %15机会 */
  242.         break;
  243.         case 2:
  244.             drawStrBoard(b);      /* 2代表弹板 %15机会 */
  245.         break;
  246.         case 3:
  247.             drawExpBoard(b);      /* 3代表爆炸板 %10机会 */
  248.         break;
  249.         case 4:
  250.             drawTBoard(b);        /* 4代表刺板 %5机会 */
  251.         break;
  252.         case 5:                   /* 当弹板被触发时 此变量才有效 */
  253.             cleardevice();
  254.             drawExtBoard(b);      /* 弹板的伸展状态 */
  255.     }
  256. }