泡泡代码c语言,重发一次,带注释的泡泡模拟程序!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/* 在屏幕上放一个炸弹,位置为放弹人的位置 */

putimage(ball[i].x*30,ball[i].y*30,tu[1],0);

map[ball[i].x][ball[i].y]=20+i;

}

/***********************

产生炸弹的动态显示

*************************/

DrawZaDan()

{int i;

for (i=0;i<10;i++)

{if (ball[i].used==0)continue;/* 如果炸弹末使用继续循环*/

if (ball[i].page<4)/* 如果炸弹帧数<4,帧数加1,直接在炸弹位置放下一帧*/

{ball[i].page++;

putimage(ball[i].x*30,ball[i].y*30,tu[ball[i].page],0);

}

else/* 把帧数置为1,清去原图,绘第一帧*/

{ball[i].page=1;

putimage(ball[i].x*30,ball[i].y*30,tu[0],0);

putimage(ball[i].x*30,ball[i].y*30,tu[1],0);

}

}

}

/*****************************

检查是否有该炸的炸弹

如果有则引爆它

****************************/

CheckZaDan()

{

int i,t;

struct time t1;

gettime(&t1);

t=t1.ti_sec;

for (i=0;i<10;i++)

if (ball[i].used==1&&(t+60-ball[i].time)%60>=2&&man[ball[i].man].definetime==0) BaoZa(i);

}

/***********************

定时器引爆炸弹

参数为引爆人的编号

*************************/

DefineZa(int n)

{

int i;

if (man[n].definetime==0) return 0;

for (i=0;i<10;i++)

if (ball[i].used==1&&ball[i].man==n)BaoZa(i);

}

/***************************

产生人的移动效果

其中包括吃东西,推箱子等功能

参数x1,y1为移动的方向

和zaline()相同

mann为要移动人的编号

****************************/

move(int x1 ,int y1,int mann )

{

int fx ,fy,x,y;/*x,y 为现在的位置,fx,fy,存放要移动到的位置*/

x=man[mann].x;/*取要移动人的位置*/

y=man[mann].y;

fx=x+x1;/*要移动到 的位置为*/

fy=y+y1;

if ((fx>=0&&fx=0&&fy

{switch(map[fx][fy])

{ case 0:/*如果要移动到的位置为空*/

putimage(x*BOXLONG,y*BOXLONG,tu[0],0);

putimage(fx*BOXLONG,fy*BOXLONG,tu[11+mann],0);

break;

case 5:/*如果要移动到的位置为定时器*/

putimage(x*BOXLONG,y*BOXLONG,tu[0],0);

putimage(fx*BOXLONG,fy*BOXLONG,tu[11+mann],0);

man[mann].definetime=1;

break;

case 6:/*如果要移动到的位置为爆出的炸弹*/

putimage(x*BOXLONG,y*BOXLONG,tu[0],0);

putimage(fx*BOXLONG,fy*BOXLONG,tu[11+mann],0);

man[mann].maxball++;

break;

case 7:/*如果要移动到的位置为闪电,则*/

putimage(x*BOXLONG,y*BOXLONG,tu[0],0);

putimage(fx*BOXLONG,fy*BOXLONG,tu[11+mann],0);

man[mann].power++;

break;

case 9:/*如果要移动到的位置为可推的箱子,产生推箱效果*/

if(x+x1*2>=0&&x+x1*2=0&&y+y1*2

{putimage((x+x1*2)*BOXLONG,(y+y1*2)*BOXLONG,tu[9],0);

putimage((fx)*BOXLONG,(fy)*BOXLONG,tu[0],0);

putimage((fx)*BOXLONG,(fy)*BOXLONG,tu[mann+11],0);

putimage(x*30,y*30,tu[0],0);

map[x+x1*2][y+y1*2]=9;

map[fx][fy]=mann+11;

map[x][y]=0;

break;}

default:return 0;

}/* end of switch*/

/*移动完毕,修改屏幕数组信息*/

map[x][y]=0;

map[fx][fy]=11+mann;

/*修改移动人的信息*/

man[mann].x=fx;

man[mann].y=fy;

}/*end of if 范围*/

}/* end of funtion*/

GameOver()

{ int i;

/*释放内存空间*/

for(i=0;i<13;i++) if (i!=6) free(tu[i]);

/*关闭图形显示模式*/

closegraph();

/*结束程序*/

exit(1);

}

main()

{

int key=0,oldtime=0;/*K用来保存按键值,oldtime用来计时*/

struct time t1;/*定义一个时间型结构体*/

initgra();/*屏幕初始化*/

draw();/*绘图并保存图像*/

initgame();/*游戏初始化*/

while(1)

{if (bioskey(1)==0)/*没有按键*/

{/*每90百分秒,检测一次炸弹是否到爆炸时间,并重绘一次炸弹,产生动态效果*/

gettime(&t1);

if(t1.ti_hund+100-oldtime>90)

{

CheckZaDan();

DrawZaDan();

}

}else{

/*根据按键值,执行相应功能数*/

key=bioskey(0);

switch(key)

{case UP1: move(0,-1,0);break;

case DOWN1: move(0,1,0);break;

case LEFT1: move(-1,0,0);break;

case RIGHT1:move(1,0,0);break;

case UP2:move(0,-1,1);break;

case DOWN2:move(0,1,1);break;

case LEFT2:move(-1,0,1);break;

case RIGHT2:move(1,0,1);break;

case ENTER:PutZaDan(1);break;

case SPACE:PutZaDan(0);break;

case Z:DefineZa(0);break;

case DEL:DefineZa(1);break;

case ESC: GameOver();break;

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值