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

📄 mygrid.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// MyGrid.cpp : implementation file
//

#include "stdafx.h"
#include "MyShell.h"
#include "MyGrid.h"

#include "Hero.h"
#include "Shop.h"
#include "3DGameMap.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMyGrid
const int CHAR_WIDTH = 6 ;

CMyGrid::CMyGrid()
{
	m_GriPar.m_bMouseMove = false ;
	m_GriPar.m_bScale = true;
	m_GriPar.m_nGridAbleNum = 0 ;
	for ( int i = 0; i < 256; i++ )
		m_GriPar.m_bGridAble[i] = false ;
	m_GriPar.m_bEnable = true ;
	m_GriPar.m_bPickEnable = true ;
	m_GriPar.m_ClientRect = CRect ( 0, 0, 0, 0 ) ;
}

CMyGrid::~CMyGrid()
{
}


BEGIN_MESSAGE_MAP(CMyGrid, CButton)
	//{{AFX_MSG_MAP(CMyGrid)
	ON_WM_LBUTTONDOWN()
	ON_WM_RBUTTONDOWN()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONUP()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyGrid message handlers
void CMyGrid::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your code to draw the specified item
}

BOOL CMyGrid::Init(int xPos, int yPos, BYTE btLine, BYTE btRow, BYTE btOwnerID)
{
	memset(&m_GriPar, 0L, sizeof(m_GriPar));

	CRect rect ;
	CMyGrid::GetWindowRect ( rect ) ;
	m_GriPar.m_IntPoint.x = rect.left - xPos ;
	m_GriPar.m_IntPoint.y = rect.top - yPos ;
	m_GriPar.m_ClientRect.right = ( rect.right - rect.left ) ; 
	m_GriPar.m_ClientRect.bottom = ( rect.bottom - rect.top ) ; 
	
	m_GriPar.m_iGridSpacex = 1;
	m_GriPar.m_iGridSpacey = 1;
	m_GriPar.m_btGridLine = btLine ;
	m_GriPar.m_btGridRow = btRow ;
	m_GriPar.m_btOwnerID = btOwnerID ;
	m_GriPar.m_btGridWidth = ( rect.Width () - (btRow - 1) *m_GriPar.m_iGridSpacex) / btRow ;
	m_GriPar.m_btGridHeight = ( rect.Height () - (btLine - 1)*m_GriPar.m_iGridSpacey ) / btLine ;


	for ( int i = 0; i < 256; i++ )
	{
		m_GriPar.m_bGridAble[i] = false ;
		m_GriPar.m_IconIndex[i] = 0;
		m_GriPar.m_IconTypeID[i]= 0;
		m_GriPar.m_IconRealID[i] = 0;
	}
	
	m_GriPar.m_bEnable = true;
	m_GriPar.m_bPickEnable = true;
	m_GriPar.m_bScale = true;
	return true ;
}

void CMyGrid::Show(int x, int y)
{
	m_GriPar.m_Point = CPoint ( m_GriPar.m_IntPoint.x + x, m_GriPar.m_IntPoint.y + y ) ;
	int index ;
	int nRowLeft ;
	int nLineLeft ;
	
	for ( int i = 1; i <= m_GriPar.m_btGridLine; i++ )
		for ( int j = 1; j <= m_GriPar.m_btGridRow; j++ )
		{
			
			index = ( i - 1 ) * m_GriPar.m_btGridRow + j ;
			nRowLeft = ( j - 1 ) * ( m_GriPar.m_btGridWidth + m_GriPar.m_iGridSpacex ) ;
			nLineLeft = ( i - 1 ) * ( m_GriPar.m_btGridHeight + m_GriPar.m_iGridSpacey ) ;
			
			// Shwo the focus
			if ( m_GriPar.m_bMouseMove && m_GriPar.m_MouseMoveIconLandR.x == j && m_GriPar.m_MouseMoveIconLandR.y == i )
			{
				CAni* ShowAni = g_objGameDataSet.GetDataAni ( ( char * )g_strControlAni, "Image2", EXIGENCE_IMMEDIATE ) ;
				if ( ShowAni != NULL )
				{
					RECT rect = { 0, 0, 32, 32 } ;
					ShowAni->ShowEx( 0,
						m_GriPar.m_Point.x + nRowLeft,
						m_GriPar.m_Point.y + nLineLeft,
						&rect,
						m_GriPar.m_btGridWidth,
						m_GriPar.m_btGridHeight ) ;
					
				}
				if (!GetGridAble(CPoint(j,i)))
				{
					char strInfo[32]="";
					int  nPosX = 0;
					int  nPosY = 0;
					switch(m_GriPar.m_btOwnerID)
					{
					case DLG_MPCGOODS:
//						sprintf(strInfo,"物品装备");
						break;
					case DLG_MONSTEREGG:
						sprintf(strInfo,g_objGameDataSet.GetStr(10311));		//"幻兽蛋"
						nPosY = -12;
						break;
					case DLG_MONSTERSKILL:
						sprintf(strInfo,g_objGameDataSet.GetStr(10312));   // "幻兽技能"						
						nPosX = m_GriPar.m_btGridWidth;
						break;
					case DLG_STONEGOODS0:
//						sprintf(strInfo,"魔魂宝石");						
						break;
					default:
						break;
					}
					CMySize FontSize;
					CMyBitmap::GetFontSize(FontSize);
					
				
					if (strlen(strInfo) > 0)
					{
						g_objGameDataSet.ShowInfoBack( m_GriPar.m_Point.x + nRowLeft + m_GriPar.m_btGridWidth - strlen(strInfo)*CHAR_WIDTH - 5,
						m_GriPar.m_Point.y + nLineLeft + nPosY -1 - 15,	
						strlen(strInfo)*CHAR_WIDTH + 10,
						FontSize.iHeight + 1 + 10) ;
			
						CMyBitmap::ShowString(m_GriPar.m_Point.x + m_GriPar.m_btGridWidth - strlen(strInfo)*CHAR_WIDTH + nRowLeft,
							m_GriPar.m_Point.y + nLineLeft + nPosY - 10,
						0xffffff,strInfo);
					}
				}
			}			
			
			if ( GetGridAble ( CPoint ( j, i ) ) )
			{
				// show effect 
				{
					ItemEffectInfo* pInfo = g_objGameDataSet.GetItemEffectInfo(m_GriPar.m_IconTypeID[index - 1]);
					if(pInfo && _stricmp(pInfo->strItemBgEffect.c_str(), "NULL") != 0)
					{
						if(!m_GriPar.m_objEffect[index - 1].TestEffect((char*)pInfo->strItemBgEffect.c_str()))
						{
							m_GriPar.m_objEffect[index - 1].Clear();
							if(::RandGet(30) == 1)
							{
								m_GriPar.m_objEffect[index - 1].Add((char*)pInfo->strItemBgEffect.c_str());
								m_GriPar.m_objEffect[index - 1].EverPlay();
							}
						}

						CMyPos pPosWorld,pPosBg;
						g_objGameMap.Screen2World(m_GriPar.m_Point.x + nRowLeft,
											m_GriPar.m_Point.y + nLineLeft, pPosWorld.x, pPosWorld.y);
						g_objGameMap.World2Bg(pPosWorld.x, pPosWorld.y, pPosBg.x, pPosBg.y );	

						m_GriPar.m_objEffect[index - 1].Process();
						m_GriPar.m_objEffect[index - 1].Show(pPosBg);
					}
				}
				switch ( m_GriPar.m_btIconType[index - 1] )				
				{
				case ICON_TYPE_TASKITEM:
					if(m_GriPar.m_IconTypeID[index-1])
					{
						ShowTypeItem(m_GriPar.m_IconTypeID[index-1],
							m_GriPar.m_Point.x + nRowLeft,
							m_GriPar.m_Point.y + nLineLeft );
					}
					break;
				case ICON_TYPE_ITEM:
					{
						// Show the item owner
						CItem* pItem = g_objHero.GetItem ( m_GriPar.m_IconRealID[index - 1] ) ;
						if ( pItem != NULL )
						{
							pItem->ShowMiniItem( m_GriPar.m_Point.x + nRowLeft,
													 m_GriPar.m_Point.y + nLineLeft ,m_GriPar.m_bScale) ;

							if (( pItem->GetTypeID() == _ARROW || pItem->GetTypeID() == _DART || pItem->GetSort() == ITEMSORT_EXPEND)
								&& pItem->GetPackageType() != PACKAGE_EGG
								&& pItem->GetAmount() > 1 && pItem->GetAmountLimit() > 1 )
							{
								char strNum[32] ;
								itoa( pItem->GetAmount(), strNum, 10 ) ;
								CMyBitmap::ShowString( m_GriPar.m_Point.x + nRowLeft + m_GriPar.m_btGridWidth - CHAR_WIDTH * strlen( strNum ),
													   m_GriPar.m_Point.y + nLineLeft + m_GriPar.m_btGridHeight - CHAR_WIDTH - 5,
													   0xffffffff,
													   strNum ) ;
							}
						}
					}
					break ;
				case ICON_TYPE_QUSE:
					{
						// Show the item owner
						BOOL bLoad = false;
						int nAmount = g_objHero.GetItemAmount();
						for(int k = 0; k < nAmount; k ++)
						{
							CItem* pMyItem = g_objHero.GetItemByIndex(k);
							if(pMyItem && pMyItem->GetTypeID() == m_GriPar.m_IconTypeID[index - 1])
							{
								pMyItem->ShowMiniItem( m_GriPar.m_Point.x + nRowLeft  ,
													   m_GriPar.m_Point.y + nLineLeft );
								char strNum[8] ;
								itoa( m_GriPar.m_IconNum[index - 1], strNum, 10 ) ;
								CMyBitmap::ShowString( m_GriPar.m_Point.x + nRowLeft,
													   m_GriPar.m_Point.y + nLineLeft,
													   0xffffffff,
													   strNum ) ;
								bLoad = true;
								break;
							}
						}
						if (!bLoad)
						{
							nAmount = g_objHero.GetItemAmount(PACKAGE_SOUL);
							for(int k = 0; k < nAmount; k ++)
							{
								CItem* pMyItem = g_objHero.GetItemByIndex(k,PACKAGE_SOUL);
								if(pMyItem && pMyItem->GetTypeID() == m_GriPar.m_IconTypeID[index - 1])
								{
									pMyItem->ShowMiniItem( m_GriPar.m_Point.x + nRowLeft  ,
										m_GriPar.m_Point.y + nLineLeft );
									char strNum[8] ;
									itoa( m_GriPar.m_IconNum[index - 1], strNum, 10 ) ;
									CMyBitmap::ShowString( m_GriPar.m_Point.x + nRowLeft,
										m_GriPar.m_Point.y + nLineLeft,
										0xffffffff,
										strNum ) ;
									break;
								}
							}
						}						
					}
					break;
				case ICON_TYPE_SKILL:
					{
						char strName[32] ;
						sprintf( strName, "MagicSkillType%d", m_GriPar.m_IconTypeID[index - 1] ) ;
						CAni* ShowAni = g_objGameDataSet.GetDataAni ( ( char * )g_strMagicAni,
																	  strName, 
																	  EXIGENCE_IMMEDIATE ) ;
						RECT rect = { 0, 0, GRID_ICONMOVE_WIDTH, GRID_ICONMOVE_HEIGHT } ;
						if ( ShowAni != NULL )
						{
							ShowAni->ShowEx( 0,
											 m_GriPar.m_Point.x + nRowLeft ,
										     m_GriPar.m_Point.y + nLineLeft ,
											 &rect,
											 GRID_ICONQUICK_WIDTH,
											 GRID_ICONQUICK_HEIGHT ) ;
						}
					}
					break ;
				case ICON_TYPE_SHOP:
					{
						// Show the item owner
						CItem *pItem = g_objShop.GetItem( m_GriPar.m_IconIndex[index - 1] ) ;
						if ( pItem != NULL )
						{
							pItem->ShowMiniItem( m_GriPar.m_Point.x + nRowLeft  ,
													m_GriPar.m_Point.y + nLineLeft ,m_GriPar.m_bScale ) ;
						}
					}
					break ;
				case ICON_TYPE_DEPOT:
					{
						// Show the item owner
						CItem *pItem = g_objHero.GetPackageItemByIndex( m_GriPar.m_IconIndex[index - 1] ) ;
						if ( pItem != NULL )
						{
							pItem->ShowMiniItem( m_GriPar.m_Point.x + nRowLeft ,
													 m_GriPar.m_Point.y + nLineLeft,m_GriPar.m_bScale ) ;
						}
						else 
						{
							pItem = g_objHero.GetItem(m_GriPar.m_IconRealID[index - 1]);
							if (pItem != NULL)
							{
								pItem->ShowMiniItem( m_GriPar.m_Point.x + nRowLeft ,
									m_GriPar.m_Point.y + nLineLeft,m_GriPar.m_bScale ) ;

⌨️ 快捷键说明

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