📄 bmbomb.cpp
字号:
// BMBomb.cpp: implementation of the BMBomb class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "BMBomb.h"
#include "BMPlayer.h"
extern int i, j, k;
extern char map[13][18];
extern BMPlayer player[6];
extern LPDIRECTSOUNDBUFFER DSBuf[5];
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
BMBomb::BMBomb()
{
}
BMBomb::~BMBomb()
{
}
void BMBomb::setStart()
{
map[i][j] = 'E';
row = i;
col = j;
time = 180;
length = player[index].bomblength;
ulength = length;
dlength = length;
llength = length;
rlength = length;
end = false;
}
bool BMBomb::doBlast()
{
time --;
if (time > 0)
{
//被引爆
if (map[row][col] == 'A')
time = 0;
else if (time%15 == 0)
{
//加上偏移量
map[row][col] = (180-time)/15%4 + 'E';
false;
}
}
if (time == 0)
{
DSBuf[2]->Play(0, 0, 0);
map[row][col] = 'A';
//判断爆炸长度
//上方
for (j=1; j<=ulength; j++)
{
//边界
if (row-j < 0)
{
ulength = j-1;
break;
}
//炸掉
if (map[row-j][col]>='I' && map[row-j][col]<='J')
{
ulength = j;
break;
}
//阻挡
if (map[row-j][col]>='M' && map[row-j][col]<='N')
{
ulength = j-1;
break;
}
//引爆
if (map[row-j][col]>='E' && map[row-j][col]<='H')
{
map[row-j][col] = 'A';
}
}
//下方
for (j=1; j<=dlength; j++)
{
//边界
if (row+j >= 13)
{
dlength = j-1;
break;
}
//炸掉
if (map[row+j][col]>='I' && map[row+j][col]<='J')
{
dlength = j;
break;
}
//阻挡
if (map[row+j][col]>='M' && map[row+j][col]<='N')
{
dlength = j-1;
break;
}
//引爆
if (map[row+j][col]>='E' && map[row+j][col]<='H')
{
map[row+j][col] = 'A';
}
}
//左方
for (j=1; j<=llength; j++)
{
//边界
if (col-j < 0)
{
llength = j-1;
break;
}
//炸掉
if (map[row][col-j]>='I' && map[row][col-j]<='J')
{
llength = j;
break;
}
//阻挡
if (map[row][col-j]>='M' && map[row][col-j]<='N')
{
llength = j-1;
break;
}
//引爆
if (map[row][col-j]>='E' && map[row][col-j]<='H')
{
map[row][col-j] = 'A';
}
}
//右方
for (j=1; j<=rlength; j++)
{
//边界
if (col+j >= 18)
{
rlength = j-1;
break;
}
//炸掉
if (map[row][col+j]>='I' && map[row][col+j]<='J')
{
rlength = j;
break;
}
//阻挡
if (map[row][col+j]>='M' && map[row][col+j]<='N')
{
rlength = j-1;
break;
}
//引爆
if (map[row][col+j]>='E' && map[row][col+j]<='H')
{
map[row][col+j] = 'A';
}
}
}
//烟雾消失1
if (time==-10)
{
//向上爆炸
if (map[row-ulength][col]=='B')
{
map[row-ulength][col] = 'C';
}
//向下爆炸
if (map[row+dlength][col]=='B')
{
map[row+dlength][col] = 'C';
}
//向左爆炸
if (map[row][col-llength]=='B')
{
map[row][col-llength] = 'C';
}
//向右爆炸
if (map[row][col+rlength]=='B')
{
map[row][col+rlength] = 'C';
}
}
//烟雾消失2
if (time==-20)
{
//向上爆炸
if (map[row-ulength][col]=='C')
{
switch ((rand()+i)%8)
{
case 0:
map[row-ulength][col] = 'm';
DSBuf[3]->Play(0,0,0);
break;
case 1:
map[row-ulength][col] = 'q';
DSBuf[3]->Play(0,0,0);
break;
case 2:
DSBuf[3]->Play(0,0,0);
map[row-ulength][col] = 'u';
break;
default:
map[row-ulength][col] = '`';
break;
}
ulength--;
}
//向下爆炸
if (map[row+dlength][col]=='C')
{
switch ((rand()+i+2)%8)
{
case 0:
map[row+dlength][col] = 'm';
DSBuf[3]->Play(0,0,0);
break;
case 1:
map[row+dlength][col] = 'q';
DSBuf[3]->Play(0,0,0);
break;
case 2:
map[row+dlength][col] = 'u';
DSBuf[3]->Play(0,0,0);
break;
default:
map[row+dlength][col] = '`';
break;
}
dlength--;
}
//向左爆炸
if (map[row][col-llength]=='C')
{
switch ((rand()+i+3)%8)
{
case 0:
map[row][col-llength] = 'm';
DSBuf[3]->Play(0,0,0);
break;
case 1:
map[row][col-llength] = 'q';
DSBuf[3]->Play(0,0,0);
break;
case 2:
map[row][col-llength] = 'u';
DSBuf[3]->Play(0,0,0);
break;
default:
map[row][col-llength] = '`';
break;
}
llength--;
}
//向右爆炸
if (map[row][col+rlength]=='C')
{
switch ((rand()+i+5)%8)
{
case 0:
map[row][col+rlength] = 'm';
DSBuf[3]->Play(0,0,0);
break;
case 1:
map[row][col+rlength] = 'q';
DSBuf[3]->Play(0,0,0);
break;
case 2:
map[row][col+rlength] = 'u';
DSBuf[3]->Play(0,0,0);
break;
default:
map[row][col+rlength] = '`';
break;
}
rlength--;
}
}
//爆炸1
if (time<0 && time>-12)
{
j = -time;
for (k=1; k<=j; k++)
{
//向上爆炸
if (k <= ulength)
{
//通过
if (map[row-k][col]>='`' || map[row-k][col]=='A')
{
map[row-k][col] = 'a';
}
//炸掉
else if (map[row-k][col]>='I' && map[row-k][col]<='J')
{
map[row-k][col] = 'B';
}
//已炸掉
else if (map[row-k][col]=='B' && k==j)
{
ulength = k-1;
}
}
//向下爆炸
if (k <= dlength)
{
//通过
if (map[row+k][col]>='`' || map[row+k][col]=='A')
{
map[row+k][col] = 'b';
}
//炸掉
else if (map[row+k][col]>='I' && map[row+k][col]<='J')
{
map[row+k][col] = 'B';
}
//已炸掉
else if (map[row+k][col]=='B' && k==j)
{
dlength = k-1;
}
}
//向左爆炸
if (k <= llength)
{
//通过
if (map[row][col-k]>='`' || map[row][col-k] == 'A')
{
map[row][col-k] = 'c';
}
//炸掉
else if (map[row][col-k]>='I' && map[row][col-k]<='J')
{
map[row][col-k] = 'B';
}
//已炸掉
else if (map[row][col-k]=='B' && k==j)
{
llength = k-1;
}
}
//向右爆炸
if (k <= rlength)
{
//通过
if (map[row][col+k]>='`' || map[row][col+k]=='A')
{
map[row][col+k] = 'd';
}
//炸掉
else if (map[row][col+k]>='I' && map[row][col+k]<='J')
{
map[row][col+k] = 'B';
}
//已炸掉
else if (map[row][col+k]=='B' && k==j)
{
rlength = k-1;
}
}
}
}
//爆炸2
if (time<-2 && time>-30)
{
j = -time-2;
for (k=1; k<=j; k++)
{
//向上爆炸
if (k<=ulength
&& (map[row-k][col]>='`' && map[row-k][col]<'m' || map[row-k][col]=='A'))
{
if (k != length)
map[row-k][col] = 'e';
}
//向下爆炸
if (k<=dlength
&& (map[row+k][col]>='`' && map[row+k][col]<'m' || map[row+k][col]=='A'))
{
if (k != length)
map[row+k][col] = 'f';
}
//向左爆炸
if (k<=llength
&& (map[row][col-k]>='`' && map[row][col-k]<'m' || map[row][col-k]=='A'))
{
if (k != length)
map[row][col-k] = 'g';
}
//向右爆炸
if (k<=rlength
&& (map[row][col+k]>='`' && map[row][col+k]<'m' || map[row][col+k]=='A'))
{
if (k != length)
map[row][col+k] = 'h';
}
}
}
//爆炸3
if (time<-23 && time>-35)
{
j = -time-15;
for (k=1; k<=j; k++)
{
//向上爆炸
if (k<=ulength
&& (map[row-k][col]>='`' && map[row-k][col]<'m' || map[row-k][col]=='A'))
{
map[row-k][col] = 'i';
}
//向下爆炸
if (k<=dlength
&& (map[row+k][col]>='`' && map[row+k][col]<'m' || map[row+k][col]=='A'))
{
map[row+k][col] = 'j';
}
//向左爆炸
if (k<=llength
&& (map[row][col-k]>='`' && map[row][col-k]<'m' || map[row][col-k]=='A'))
{
map[row][col-k] = 'k';
}
//向右爆炸
if (k<=rlength
&& (map[row][col+k]>='`' && map[row][col+k]<'m' || map[row][col+k]=='A'))
{
map[row][col+k] = 'l';
}
}
}
//爆炸结束
if (time<-25 && time>-35)
{
j = -time-25;
for (k=1; k<=j; k++)
{
//向上爆炸
if (k<=ulength
&& (map[row-k][col]>='`' && map[row-k][col]<'m' || map[row-k][col]=='A'))
{
map[row-k][col] = '`';
}
//向下爆炸
if (k<=dlength
&& (map[row+k][col]>='`' && map[row+k][col]<'m' || map[row+k][col]=='A'))
{
map[row+k][col] = '`';
}
//向左爆炸
if (k<=llength
&& (map[row][col-k]>='`' && map[row][col-k]<'m' || map[row][col-k]=='A'))
{
map[row][col-k] = '`';
}
//向右爆炸
if (k<=rlength
&& (map[row][col+k]>='`' && map[row][col+k]<'m' || map[row][col+k]=='A'))
{
map[row][col+k] = '`';
}
}
}
if (time<0 && time>-20)
{
map[row][col] = 'A';
}
else if (time==-20)
{
map[row][col] = '`';
}
if (time<-35)
{
player[index].bombcount --;
return true;
}
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -