tlink.cpp

来自「一个另类的坦克大战源程序」· C++ 代码 · 共 143 行

CPP
143
字号
// TLink.cpp: implementation of the TLink class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TLink.h"

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

TLink::TLink()
{
	m_pHeader = NULL;
}

TLink::~TLink()
{
	DeleteAll();
}

void TLink::AddHeader(TObject * pObject)
{
	ASSERT(pObject);
	TLinkNode * pAddNode = NEW TLinkNode(pObject);
	pAddNode->m_pNext = m_pHeader;
	m_pHeader = pAddNode;
}

void TLink::AddTail(TObject * pObject)
{
	ASSERT(pObject);
	TLinkNode * pAddNode = NEW TLinkNode(pObject);
	if(m_pHeader==NULL)
	{
		m_pHeader = pAddNode ;
		m_pHeader->m_pNext = NULL;
	}else
	{
		TLinkNode * pNode = m_pHeader ;
		while(pNode->m_pNext)
		{
			ASSERT(pObject!=pNode->m_pObject);
			pNode = pNode->m_pNext ;
		}
		pNode->m_pNext = pAddNode ;
		pAddNode->m_pNext = NULL;
	}

}

void TLink::Add(TObject * pObject)
{
	AddHeader(pObject);
}

void TLink::DeleteAll()
{
	TLinkNode * pNode = m_pHeader;
	while(pNode)
	{
		m_pHeader = pNode->m_pNext ;
		delete pNode ;
		pNode = m_pHeader;
	}
}

void TLink::Delete(TObject * pObject)
{
	TLinkNode * pPreNode = m_pHeader ;

	if(m_pHeader->m_pObject == pObject)
	{
		m_pHeader = m_pHeader->m_pNext ;
		delete pPreNode ;
		return ;
	}

	TLinkNode * pNode = pPreNode->m_pNext ;
	while(pNode)
	{
		if(pNode->m_pObject == pObject)
		{
			pPreNode->m_pNext = pNode->m_pNext ;
			delete pNode;
			return ;
		}
		pPreNode = pNode ;
		pNode = pNode->m_pNext ;
	}
}

///////////////////////////////
//画出链表中所有的对象
void TLink::DrawAll()
{
	TLinkNode * pNode = m_pHeader;
	while(pNode)
	{
		pNode->m_pObject->Draw();
		pNode = pNode->m_pNext ;
	}
}

////////////////////////////////////////////
//移动链表中所有的对象
void TLink::MoveAll()
{
	//取得第一个结点
	TLinkNode * pNode = m_pHeader;

	//循环整个链表
	while(pNode)
	{
		if(pNode->m_pObject->IsDead())
		{
			//该对象已经被击毁,从链表中删除
			TObject * pDeleteObj = pNode->m_pObject;
			pNode = pNode->m_pNext ;
			Delete(pDeleteObj);
		}
		else
		{
			//调用该对象的Move()函数
			pNode->m_pObject->Move();
			pNode = pNode->m_pNext ;
		}
	}
}

BOOL TLink::HitTestAll(TObject * pObj)
{
	TLinkNode * pNode = m_pHeader;
	BOOL bHit = FALSE;
	while(pNode && bHit==FALSE)
	{
		if(pNode->m_pObject != pObj)
			bHit=pNode->m_pObject->HitTest(pObj);
		pNode = pNode->m_pNext ;
	}
	return bHit;
}

⌨️ 快捷键说明

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