📄 cbarrier.cpp
字号:
//----------------------------------------------------------------------------
// 文件名: CBarrier.h
//
// 描述:障碍物对象实现
//
// 作者:朱波 创建日期:2007-03-22
//----------------------------------------------------------------------------
#include <windows.h> // include important windows stuff
#include <windowsx.h>
#include <mmsystem.h>
#include <iostream.h> // include important C/C++ stuff
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>
#include <io.h>
#include <fcntl.h>
#include <sys/timeb.h>
#include <time.h>
#include <vector>
#include <string>
using namespace std;
#include <ddraw.h>
#include <dsound.h>
#include "dxtools.h"
#include "CBarrier.h"
CBarrier::CBarrier( void )
{
m_lpMapRegion = NULL;
m_lpGeometryVec = NULL;
m_draw_width = 0;
m_draw_hight = 0;
m_barrierKind = 0;
m_draw_lppSurface = NULL;
}
CBarrier::~CBarrier( void )
{}
int CBarrier::Create( int kind, POINT pos, LPDIRECTDRAWSURFACE7 surface[],
const RECT * lpMapRegion, vector<GEOMETRY> * lpGeometryVec )
{
if ( !CanPutThere(pos, lpMapRegion, lpGeometryVec) )
{
return(0);
}
m_position.x = pos.x;
m_position.y = pos.y;
MakeBoundingBox( pos, m_boundingBox );
m_draw_start.x = m_boundingBox.left;
m_draw_start.y = m_boundingBox.top;
if ( kind < 0 || kind > BARRIER_PIC_COUNT - 1 )
{
kind = abs(kind)%BARRIER_PIC_COUNT;
}
m_barrierKind = kind;
m_draw_lppSurface = surface;
m_lpMapRegion = (RECT *) lpMapRegion;
m_lpGeometryVec = lpGeometryVec;
return(1);
}
BOOL CBarrier::CanPutThere( POINT pos, const RECT *lpMapRegion,
vector<GEOMETRY> * lpGeometryVec )
{
RECT temp_box;
MakeBoundingBox( pos, temp_box );
if ( temp_box.left <= lpMapRegion->left ||
temp_box.right >= lpMapRegion->right ||
temp_box.top <= lpMapRegion->top ||
temp_box.bottom >= lpMapRegion->bottom )
return FALSE;
int src_left = temp_box.left;
int src_right = temp_box.right;
int src_top = temp_box.top;
int src_bottom = temp_box.bottom;
int dest_left, dest_right, dest_top, dest_bottom;
for (vector<GEOMETRY>::iterator it=lpGeometryVec->begin();
it!=lpGeometryVec->end(); it++)
{
dest_left = it->m_lpBoundingBox->left;
dest_right = it->m_lpBoundingBox->right;
dest_top = it->m_lpBoundingBox->top;
dest_bottom = it->m_lpBoundingBox->bottom;
if ( ( (src_left >= dest_left && src_left <= dest_right)
|| (src_right >= dest_left && src_right <= dest_right) )
&& ( (src_top >= dest_top && src_top <= dest_bottom)
|| (src_bottom >= dest_top && src_bottom <= dest_bottom) )
|| ( (dest_left >= src_left && dest_left <= src_right)
|| (dest_right >= src_left && dest_right <= src_right) )
&& ( (dest_top >= src_top && dest_top <= src_bottom)
|| (dest_bottom >= src_top && dest_bottom <= src_bottom) ) )
{
return FALSE;
}
}
return TRUE;
}
int CBarrier::MakeBoundingBox( POINT pos, RECT & box )
{
box.left = pos.x - BARRIER_PIC_WIDTH/2;
box.right = pos.x + BARRIER_PIC_WIDTH/2;
box.top = pos.y - BARRIER_PIC_HEIGHT/2;
box.bottom = pos.y + BARRIER_PIC_HEIGHT/2;
return(1);
}
int CBarrier::Draw( void )
{
DDraw_Draw_Surface(m_draw_lppSurface[m_barrierKind],
m_draw_start.x, m_draw_start.y, BARRIER_PIC_WIDTH, BARRIER_PIC_HEIGHT, lpddsback,1);
return(1);
}
RECT & CBarrier::GetBoundingBox( void )
{
return m_boundingBox;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -