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

📄 cbarrier.cpp

📁 坦克大战小游戏 控制说明: 玩家1相关控制: A/W/S/D:控制方向 F:开火 1 :玩家1复活 玩家2相关控制: UP/LEFT/RIGHT/DOWN:控制方
💻 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 + -