⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bmbomb.cpp

📁 类似泡泡堂程序代码 类属游戏
💻 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 + -