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

📄 pgegameobj.h

📁 使ppc屏幕变成黑白的程序
💻 H
字号:
#pragma once
#include "../pgesurface.h"
#include "mmsystem.h"

#define WORLD_CLASS extern ObjectList world;

class CPGETimer
{
public:
	DWORD dwDalyTimes;
	DWORD dwStaticTimes;
	DWORD dwAllTimes;

	CPGETimer(void)
	{
		dwDalyTimes = 0;
		dwStaticTimes = 0;
	}
	~CPGETimer(void){}

	void Init()
	{
		dwStaticTimes = timeGetTime();
		dwAllTimes = 0;
	}

	void Tick()
	{	
		dwDalyTimes = timeGetTime() - dwStaticTimes;
		dwStaticTimes += dwDalyTimes;
		dwAllTimes += dwDalyTimes;
	}

	DWORD GetAllTimes()
	{
		return dwAllTimes;
	}

	DWORD GetDalyTimes()
	{
		return dwDalyTimes;
	}

};

enum GAMEOBJ_TYPE
{
	OBJ_MAP = 0x6f,
	OBJ_PLAYER,
};

struct WPOINT
{
	short int wx;
	short int wy;
};

class CPGEGameObj
{
public:
	CPGEGameObj(BYTE btType){
		m_btType = btType;
	}
	~CPGEGameObj(void){}

	virtual void Tick(CPGETimer* timer){}
	virtual void Draw(CPGESurface* pMainSuf) = 0;
	WPOINT m_ptCur;
	BYTE m_btType;
};

#define HASH_SIZE 512
class ObjectList	// 身体的链表
{

public:
	ObjectList(){
		map = 0;
		player = 0;
		m_iStart = 0;
		clear();
	}
	~ObjectList(){}
	void push_back(CPGEGameObj* pBody)	// 在链表尾部添加节点
	{
		for (int i=0; i<HASH_SIZE; i++)
		{
			if (!m_pLstData[i])
			{

				m_pLstData[i] = pBody;
				m_iCount++;
				m_iEnd = m_iCount;
				break;
			}
		}
	}

	void reMove(CPGEGameObj* pobj)
	{
		for (int i=0; i<HASH_SIZE; i++)
		{
			if (m_pLstData[i] == pobj)
			{

				m_pLstData[i] = 0;
				m_iCount--;
				break;
			}
		}
	}

	CPGEGameObj* GetPos(int iPos)	// 取得指标指示节点的内容
	{
		return m_pLstData[iPos];
	}

	int begin()	// 取得头部节点的指标
	{
		return m_iStart;
	}

	int end()	// 取得尾部节点的指标
	{
		return m_iEnd;
	}

	void clear()	// 清除全部链表
	{
		memset(m_pLstData, 0, sizeof(m_pLstData));
		m_iStart = 0;
		m_iEnd = 0;
		m_iCount = 0;
	}
	
	void SetMap(CPGEGameObj* pMap)
	{
		map = pMap;
	}

	void sort()
	{
		DWORD dwBox[256]; 
		int j = 0; 
		DWORD pos = 0 ; 
		DWORD temp = 0; 
		for(int i=0; i<4; i++) 
		{ 
			memset(dwBox, 0, sizeof(DWORD)<<8); 
			memcpy(m_pLstDataBf, m_pLstData, HASH_SIZE * sizeof(void*)); 
			for(j=0; j<m_iCount; j++) 
			{ 
				++dwBox[(m_pLstDataBf[j]->m_ptCur.wy >> (i<<3)) & 0xFF]; 
			} 
			pos = 0; 
			for(j=0; j<256; j++) 
			{ 
				temp = dwBox[j]; 
				dwBox[j] = pos; 
				pos += temp; 
			} 
			for(j=0; j<m_iCount; j++) 
			{ 
				m_pLstData[dwBox[(m_pLstDataBf[j]->m_ptCur.wy >> (i<<3)) & 0xFF]++] = m_pLstDataBf[j]; 
			} 
		}	
	}

	CPGEGameObj* m_pLstData[HASH_SIZE];	
	CPGEGameObj* m_pLstDataBf[HASH_SIZE];
	CPGEGameObj* map;
	CPGEGameObj* player;
	int m_iStart;
	int m_iEnd;
	int m_iCount;

};

⌨️ 快捷键说明

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