Human.h
上传用户:kf1822
上传日期:2021-06-02
资源大小:2156k
文件大小:6k
- /* 由于当前分辨率为640X350 因此画圆时Y坐标要参照比例 proportion*/
- #include <graphics.h>
- #include "AllBoard.h"
- typedef struct Human
- {
- int x;
- int y;
- int life; /* 生命 */
- int diretion; /* 运动方向 0-向右 1-向左 */
- int style ;/* 状态标记 2-跳板上 1-刺上、0-平板上*/
- int color[4];
- int speed; /* Human移动速度 */
- int temp; /* 标记量 标记Human当前在空中还是在板子上,
- 以确认下落还是跟随板子上升 */
- int isCarry; /* 标记Human是否被板子承载着 */
- int vx;
- int vy;
- int Dspeed; /* Human下落速度 */
- int time; /* 用于触碰爆炸板子记时 */
- }Human;
- int liveStyle=0;
- int liveStyleE=0; /* 弹板用的恢复生命标记 */
- void initHuman(Human *h,Board b)/* 初始化Human */
- {
- h->x=b.x+45; /* 让Human在游戏开始时处在第一块板子的中间出现 */
- h->y=b.y-7;
- h->vx=0;
- h->life=10;
- h->diretion=0;
- h->speed=4;
- h->style=0;
- h->color[0]=15;
- h->color[1]=5;
- h->color[2]=5;
- h->color[3]=5;
- h->vy=-7;
- h->time=0;
- }
- void drawHuman(Human h)/* 画Human */
- {
- setcolor(h.color[0]);
- setfillstyle(1,h.color[0]); /* 画出来的Human的样子 */
- fillellipse(h.x,h.y-4,2,2); /* O */
- setcolor(h.color[1]);
- setfillstyle(1,h.color[1]); /* */
- fillellipse(h.x+5,h.y,2,2); /* 0 O */
- setcolor(h.color[2]);
- setfillstyle(1,h.color[2]); /* */
- fillellipse(h.x,h.y+4,2,2); /* 0 */
- setcolor(h.color[3]);
- setfillstyle(1,h.color[3]); /* */
- fillellipse(h.x-5,h.y,2,2);
- }
- void drawHuman1(Human h)
- {
- h.y=h.y+1;
- setcolor(h.color[0]);
- setfillstyle(1,h.color[0]); /* 画出来的Human1的样子 */
- fillellipse(h.x+3,h.y-3,2,2); /* */
- setcolor(h.color[1]);
- setfillstyle(1,h.color[1]); /* 0 0 */
- fillellipse(h.x+3,h.y+3,2,2); /* */
- setcolor(h.color[2]);
- setfillstyle(1,h.color[2]); /* 0 0 */
- fillellipse(h.x-3,h.y+3,2,2); /* */
- setcolor(h.color[3]);
- setfillstyle(1,h.color[3]); /* */
- fillellipse(h.x-3,h.y-3,2,2); /* 让两个Human交替运动使其产生旋转效果 */
- }
- void rightHuman(Human *h)/* 右旋转 转换Human虚拟转动 */
- {
- int temp;
- temp=h->color[0];
- h->color[0]=h->color[3];
- h->color[3]=h->color[2];
- h->color[2]=h->color[1];
- h->color[1]=temp;
- }
- void leftHuman(Human *h)/* 左旋转 转换Human虚拟转动 */
- {
- int temp;
- temp=h->color[0];
- h->color[0]=h->color[1];
- h->color[1]=h->color[2];
- h->color[2]=h->color[3];
- h->color[3]=temp;
- }
- void moveHuman(Human *h)
- {
- h->x=h->x+h->speed+h->vx;
- }
- int carryHuman(Human *h,Board b[],int n) /* 扫描Human是否被承载着 */
- {
- int i;
- int j;
- h->isCarry=0;
- for(i=0;i<n;i++)
- {
- if(b[i].temp==4) /* 如果是刺板则以 */
- {
- if(b[i].isShow==1 && h->x>=b[i].x && h->x<=b[i].x+90 && h->y+6>b[i].y+1 && h->y+6<b[i].y+5) /* 判断Human的XY坐标是否在某板子的X坐标范围内 */
- {
- h->isCarry=i+1;
- i=n;
- }
- }
- else
- {
- if(b[i].isShow==1 && h->x>=b[i].x && h->x<=b[i].x+90 && h->y+6>b[i].y-2 && h->y+6<b[i].y+5) /* 判断Human的XY坐标是否在某板子的X坐标范围内 */
- {
- h->isCarry=i+1; /* 让h->isCarry不等于0 便与以后做判断*/
- i=n;
- }
- }
- }
- if(h->isCarry!=0)
- {
- switch(b[h->isCarry-1].temp)
- {
- case 0:
- h->vy=-1;
- h->y=b[h->isCarry-1].y-7;
- liveStyleE=0;
- if(liveStyle==0)
- {
- liveStyle=1;
- if(h->life<10)
- h->life++;
- }
- break;
- case 1:
- h->vy=-1;
- h->y=b[h->isCarry-1].y-7;
- if(b[h->isCarry-1].direct==1)
- h->vx=2;
- else
- h->vx=-2;
- h->time=0;
- liveStyleE=0;
- if(liveStyle==0)
- {
- liveStyle=1;
- if(h->life<10)
- h->life++;
- }
- break;
- case 2:
- b[h->isCarry-1].temp=5;
- h->vy=-28;
- h->time=0;
- if(liveStyleE==0)
- {
- liveStyleE=1;
- if(h->life<10)
- h->life++;
- }
- break;
- case 3:
- h->vy=-1;
- h->y=b[h->isCarry-1].y-7;
- h->time++; /* 引发爆炸板子记时 */
- liveStyleE=0;
- if(liveStyle==0)
- {
- liveStyle=1;
- if(h->life<10)
- h->life++;
- }
- break;
- case 4:
- h->vy=-1;
- h->y=b[h->isCarry-1].y-3;
- h->time=0;
- liveStyleE=0;
- if(liveStyle==0)
- {
- h->life=h->life-3;
- liveStyle=1;
- }
- break;
- }
- }
- else
- {
- liveStyle=0;
- h->time=0;
- h->vx=0;
- h->vy=5;
- }
- }