?? bmplayer.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 + -