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

📄 bmplayer.cpp

📁 类似泡泡堂程序代码 类属游戏
💻 CPP
字号:
// BMPlayer.cpp: implementation of the BMPlayer class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "BMPlayer.h" 


extern int posP1;
extern int i, j, k;
extern char map[13][18];
extern LPDIRECTSOUNDBUFFER DSBuf[5];  

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

BMPlayer::BMPlayer()
{
	movetime=0;
	laytime=0;
	alive = true;
	lastaction = 0;
	traptime = 0;

	bombsum = 1;
	bombcount = 0;
	bomblength = 1;
	speed = 1.5;

}

BMPlayer::~BMPlayer()
{
}

void BMPlayer::initPos()
{
	//初始位置
	switch (posP1)
	{
	case 0:
		posX = 30;
		posY = 20;
		break;
	case 1:
		posX = 30;
		posY = 500;
		break;
	case 2:
		posX = 710;
		posY = 20;
		break;
	case 3:
		posX = 710;
		posY = 500;
		break;
	case 4:
		posX = 390;
		posY = 20;
		break;
	case 5:
		posX = 350;
		posY = 500;
		break;
	default:
		break;
	}
}

void BMPlayer::doMove()
{
	//向下
	if (lastaction==0)
	{
		if (posY > 500)
		{
			posY = 500;
			return;
		}

		i = ((int)posY+59)/40;
		j = ((int)posX+30)/40-1;

		//不进入新区域
		if ((int)(posY+59)/40 == (int)(posY+59+speed)/40)
		{

			//倒退
			if (map[i-1][j]<'`' && ((int)posY+59)/40!=((int)posY+40)/40)
			{
				posY -= speed;
				if (posY < i*40-60)
					posY = (float)i*40-60;
				return;
			}
			posY += speed;
			return;
		}
		//下方有障碍
		if (map[i][j] < '`')
			return;
		//右滑
		j = ((int)posX+10)/40-1;
		if (map[i][j] < '`')
		{
			posX += speed;
			if (posX > (j+2)*40-10)
				posX = (float)(j+2)*40-10;
			return;
		}
		//左滑
		j = ((int)posX+49)/40-1;
		if (map[i][j] < '`')
		{
			posX -= speed;
			if (posX < (j+1)*40-50)
				posX = (float)(j+1)*40-50;
			return;
		}
		posY += speed;
		return;
	}

	//向上
	if (lastaction==1)
	{
		if (posY < 20)
		{
			posY = 20;
			return;
		}

		i = ((int)posY+20)/40-2;
		j = ((int)posX+30)/40-1;

		//不进入新区域
		if ((int)(posY+20)/40 == (int)(posY+20-speed)/40)
		{
			//倒退
			if (map[i+1][j]<'`' && ((int)posY+20)/40!=((int)posY+40)/40)
			{
				posY += speed;
				if (posY > (i+3)*40-20)
					posY = (float)(i+3)*40-20;
				return;
			}
			posY -= speed;
			return;
		}

		//上方有障碍
		if (map[i][j] < '`')
			return;
		//右滑
		j = ((int)posX+10)/40-1;
		if (map[i][j] < '`')
		{
			posX += speed;
			if (posX > (j+2)*40-10)
				posX = (float)(j+2)*40-10;
			return;
		}
		//左滑
		j = ((int)posX+49)/40-1;
		if (map[i][j] < '`')
		{
			posX -= speed;
			if (posX < (j+1)*40-50)
				posX = (float)(j+1)*40-50;
			return;
		}
		posY -= speed;
		return;
	}

	//向左
	if (lastaction==2)
	{
		if (posX < 30)
		{
			posX = 30;
			return;
		}

		i = ((int)posY+40)/40-1;
		j = ((int)posX+10)/40-2;

		//不进入新区域
		if ((int)(posX+10)/40 == (int)(posX+10-speed)/40)
		{
			//倒退
			if (map[i][j+1]<'`' && ((int)posX+10)/40!=((int)posX+30)/40)
			{
				posX += speed;
				if (posX > (j+3)*40-10)
					posX = (float)(j+3)*40-10;
				return;
			}
			posX -= speed;
			return;
		}

		//左方有障碍
		if (map[i][j] < '`')
			return;
		//下滑
		i = ((int)posY+20)/40-1;
		if (map[i][j] < '`')
		{
			posY += speed;
			if (posY > (i+2)*40-20)
				posY = (float)(i+2)*40-20;
			return;
		}
		//上滑
		i = ((int)posY+59)/40-1;
		if (map[i][j] < '`')
		{
			posY -= speed;
			if (posY < (i+1)*40-60)
				posY = (float)(i+1)*40-60;
			return;
		}
		posX -= speed;
		return;
	}

	//向右
	if (lastaction==3)
	{
		if (posX > 710)
		{
			posX = 710;
			return;
		}

		i = ((int)posY+40)/40-1;
		j = ((int)posX+49)/40;

		//不进入新区域
		if ((int)(posX+49)/40 == (int)(posX+49+speed)/40)
		{
			//倒退
			if (map[i][j-1]<'`' && ((int)posX+49)/40!=((int)posX+30)/40)
			{
				posX -= speed;
				if (posX < j*40-50)
					posX = (float)j*40-50;
				return;
			}
			posX += speed;
			return;
		}

		//右方有障碍
		if (map[i][j] < '`')
			return;
		//下滑
		i = ((int)posY+20)/40-1;
		if (map[i][j] < '`')
		{
			posY += speed;
			if (posY > (i+2)*40-20)
				posY = (float)(i+2)*40-20;
			return;
		}
		//上滑
		i = ((int)posY+59)/40-1;
		if (map[i][j] < '`')
		{
			posY -= speed;
			if (posY < (i+1)*40-60)
				posY = (float)(i+1)*40-60;
			return;
		}
		posX += speed;
		return;
	}

}

void BMPlayer::doTrap()
{
	if (traptime<20 && traptime%10==0)
	{
		k = traptime/10;
		offsetX = k%4 * 80;
		offsetY = k/4 * 120;
	}
	else if (traptime>=20 && traptime<320 && traptime%25==0)
	{
		k = (traptime-20)/25%4+2;
		offsetX = k%4 * 80;
		offsetY = k/4 * 120;
	}
	else if (traptime>=320 && traptime<420 && traptime%25==0)
	{
		k = (traptime-320)/25+6;
		offsetX = k%4 * 80;
		offsetY = k/4 * 120;
	}
	else if (traptime>=420 && traptime<480 && traptime%10==0)
	{
		k = (traptime-420)/10+10;
		offsetX = k%4 * 80;
		offsetY = k/4 * 120;
	}
	else if (traptime > 480)
	{
		traptime = 480;
	}

	if (traptime == 420)
	{
		DSBuf[6]->Play(0,0,0);
	}
	traptime ++;
}


void BMPlayer::doPlay()
{
	//放置间隔
	if (laytime != 0)
	{
		laytime ++;
		if (laytime == 10)
			laytime = 0;
	}

	//判断拾道具
	for (k=0; k<4; k++)
	{
		i = ((int)posY+30+k/2*20)/40-1;
		j = ((int)posX+20+k%2*20)/40-1;
		if (map[i][j]>='m' && map[i][j]<='x')
		{
			//加速
			if (map[i][j]>='u' && speed<4)
				speed += 0.5;
			//加长
			else if (map[i][j]>='q' && bomblength<6)
				bomblength ++;
			//加速
			else if (bombsum<6)
				bombsum ++;
			DSBuf[4]->Play(0,0,0);
			map[i][j] = '`';
		}
	}

	//判断被炸
	i = ((int)posY+40)/40-1;
	j = ((int)posX+30)/40-1;
	if (alive && map[i][j]>='a' && map[i][j]<='l' || map[i][j]=='A')
	{
		alive = false;
		traptime = 0;
		DSBuf[5]->Play(0,0,0);
	}

	if (!alive)
		doTrap();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -