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

📄 stationview.cpp

📁 原子,棋牌游戏源代码,功能齐全,稳定,适合用于棋牌游戏开发
💻 CPP
字号:

#include "Stdafx.h"
#include "StationView.h"

IMPLEMENT_DYNAMIC(CStationView, CWnd)

BEGIN_MESSAGE_MAP(CStationView, CWnd)
	ON_WM_CREATE()
	ON_WM_PAINT()
END_MESSAGE_MAP()
//构造函数
CStationView::CStationView()
{
	m_iUpGrade=-1;
	m_iBeginStation=-1;
	m_iEndStation=-1;
	m_iMeStation=-1;
	m_iOtherStation=-1;
	m_iLessPlay=-1;	
	m_iPlayCount=0;	
	m_iNTStation=-1;
	m_iNTCount=0;
	m_iTurePoint=0;
	m_iPunishPoint=0;
	m_iPlayCardCount=2;
	m_bShowMessage=FALSE;

	m_bIsModify = FALSE;
	m_iDaoCard = 0;
	m_bNextHalf = FALSE;
	m_bShowDaoCard = FALSE;

	memset(m_szUserName,0,sizeof(m_szUserName));
	memset(m_iUserPoint,0,sizeof(m_iUserPoint));
	memset(m_iUserCardReamin,0,sizeof(m_iUserCardReamin));
}

//析构函数
CStationView::~CStationView()
{
}

//建立函数
int CStationView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)	return -1;

	//建立控件
	AfxSetResourceHandle(GetModuleHandle(CLIENT_DLL_NAME));
	SetClassLong(m_hWnd,GCL_HBRBACKGROUND,NULL);
	m_PointCard.Create(NULL,NULL,WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,50,NULL);
	m_PointCard.SetBasePoint(CPoint(100,-13),CUpGradeGameCard::XShowMode::SWX_MODE_LEFT,CUpGradeGameCard::YShowMode::SWY_MODE_TOP);
	m_PointCard.SetShowCard(true);

	//m_PicBottomBar.SetLoadInfo(GetModuleHandle(CLIENT_DLL_NAME),IDB_BOTTOM_BAR,CGameImageLink::m_bAutoLock);
m_PicBottomBar.SetLoadInfo("tml\\GmBot2.jpg",CGameImageLink::m_bAutoLock);
	//m_PicBottomBarLeft.SetLoadInfo(GetModuleHandle(CLIENT_DLL_NAME),IDB_BOTTOM_BAR_LEFT,CGameImageLink::m_bAutoLock);
m_PicBottomBarLeft.SetLoadInfo("tml\\GmBot1.jpg",CGameImageLink::m_bAutoLock);
	//m_PicBottomBarRight.SetLoadInfo(GetModuleHandle(CLIENT_DLL_NAME),IDB_BOTTOM_BAR_RIGHT,CGameImageLink::m_bAutoLock);
m_PicBottomBarRight.SetLoadInfo("tml\\GmBot3.jpg",CGameImageLink::m_bAutoLock);

	AfxSetResourceHandle(GetModuleHandle(NULL));

	return 0;
}

//绘画函数
void CStationView::OnPaint()
{
	CFont Font;
	CPaintDC dc(this);
	Font.CreateFont(-12,0,0,0,400,NULL,NULL,NULL,134,3,2,1,2,TEXT("宋体"));
	dc.SelectObject(Font);
	dc.SetTextColor(RGB(0,0,0));
	dc.SetBkMode(TRANSPARENT);

	//绘画背景
	CRect rect;
	GetClientRect(rect);
	dc.FillSolidRect(rect,RGB(135,162,124));
	
	CGameImageHelper BottomBarHandle(&m_PicBottomBar);
	for(int i = 0; i < rect.Width(); i+=BottomBarHandle.GetWidth())
	{
		BottomBarHandle.BitBlt(dc.GetSafeHdc(),i,rect.Height() - BottomBarHandle.GetHeight());
	}

	CGameImageHelper BottomBarLeftHandle(&m_PicBottomBarLeft);
	BottomBarLeftHandle.BitBlt(dc.GetSafeHdc(),0,rect.Height() - BottomBarHandle.GetHeight());

	CGameImageHelper BottomBarRightHandle(&m_PicBottomBarRight);
	BottomBarRightHandle.BitBlt(dc.GetSafeHdc(),rect.Width() - BottomBarRightHandle.GetWidth(),rect.Height() - BottomBarHandle.GetHeight());

//	dc.TextOut(1,1,"版本:1.0.0.1");
	if (!m_bShowMessage) return;

	//绘画信息
	TCHAR szBuffer[50];
	TCHAR * szUpGrade[]={TEXT("本方 -- 对家"),TEXT("敌方 -- 右家"),TEXT("本方 -- 自己"),TEXT("敌方 -- 左家")};
	TCHAR * szHua[]={TEXT("方块"),TEXT("梅花"),TEXT("红桃"),TEXT("黑桃")};
	TCHAR * szCard[13]={TEXT("2"),TEXT("3"),TEXT("4"),TEXT("5"),TEXT("6"),TEXT("7"),
						TEXT("8"),TEXT("9"),TEXT("10"),TEXT("J"),TEXT("Q"),TEXT("K"),
						TEXT("A")};
/*
	dc.TextOut(10, 5,TEXT("庄家:"));
	dc.TextOut(10,5,TEXT("本方:"));	
	dc.TextOut(10,22,TEXT("敌方:"));
	dc.TextOut(10,44,TEXT("亮主:"));
	dc.TextOut(10,39,TEXT("已打局数:"));
	dc.TextOut(10,56,TEXT("积分:"));
	dc.TextOut(10,73,TEXT("罚分:"));

	if (m_iUpGrade!=-1) 
		dc.TextOut(50,5,szUpGrade[m_iUpGrade],lstrlen(szUpGrade[m_iUpGrade]));
	else 
		dc.TextOut(50,5,TEXT("暂时无人报主(抢庄)"));

	if (m_iMeStation!=-1)
	{
		sprintf(szBuffer,TEXT("从%s打到%s,现在打%s"),szCard[m_iBeginStation-2],szCard[m_iEndStation-2],szCard[m_iMeStation-2]);
		dc.TextOut(50,5,szBuffer,lstrlen(szBuffer));
	}
	if (m_iOtherStation!=-1)
	{
		sprintf(szBuffer,TEXT("从%s打到%s,现在打%s"),szCard[m_iBeginStation-2],szCard[m_iEndStation-2],szCard[m_iOtherStation-2]);
		dc.TextOut(50,22,szBuffer,lstrlen(szBuffer));
	}
	if (m_iNTStation!=-1)
	{
		sprintf(szBuffer,TEXT("%s [%s] (%s)"),szHua[m_iNTHua>>4],szUpGrade[m_iNTStation]+8,
				(m_iPlayCardCount==2)?TEXT("两幅牌"):TEXT("两幅牌"));
		dc.TextOut(50,44,szBuffer,lstrlen(szBuffer));
	}
	if (m_iLessPlay!=-1)
	{
		sprintf(szBuffer,TEXT("%d (最少回合=%d)"),m_iPlayCount,m_iLessPlay);
		sprintf(szBuffer,TEXT("%d"),m_iPlayCount);
		dc.TextOut(80,39,szBuffer,lstrlen(szBuffer));
	}
	sprintf(szBuffer,TEXT("%d"),m_iTurePoint);
	dc.TextOut(50,56,szBuffer,lstrlen(szBuffer));
	if (m_iPunishPoint!=0)
	{
		sprintf(szBuffer,TEXT("%d"),m_iPunishPoint);
		dc.TextOut(50,73,szBuffer,lstrlen(szBuffer));
	}
	else 
		dc.TextOut(50,73,TEXT("无"),2);
*/
	//dc.TextOut(10+VIEW_FRAME_LEFT,5+VIEW_FRAME_TOP,TEXT("本方:"));	
	//dc.TextOut(10+VIEW_FRAME_LEFT,20+VIEW_FRAME_TOP,TEXT("敌方:"));
	//dc.TextOut(10+VIEW_FRAME_LEFT,35+VIEW_FRAME_TOP,TEXT("已打局数:"));
//	dc.TextOut(10+VIEW_FRAME_LEFT,50+VIEW_FRAME_TOP,TEXT("分数:"));
//	dc.TextOut(10+VIEW_FRAME_LEFT,65+VIEW_FRAME_TOP,TEXT("罚分:"));
	//dc.TextOut(10+VIEW_FRAME_LEFT,50+VIEW_FRAME_TOP,TEXT("主牌:"));


	//dc.TextOut(10+VIEW_FRAME_LEFT,750,TEXT("本方:"));	
	//dc.TextOut(10+VIEW_FRAME_LEFT,20+VIEW_FRAME_TOP,TEXT("敌方:"));
	dc.TextOut(10+VIEW_FRAME_LEFT,35+VIEW_FRAME_TOP,TEXT("已打局数:"));
//	dc.TextOut(10+VIEW_FRAME_LEFT,50+VIEW_FRAME_TOP,TEXT("分数:"));
//	dc.TextOut(10+VIEW_FRAME_LEFT,65+VIEW_FRAME_TOP,TEXT("罚分:"));
	//dc.TextOut(10+VIEW_FRAME_LEFT,50+VIEW_FRAME_TOP,TEXT("主牌:"));

	if (m_bShowDaoCard)
	{	
		if (!m_bNextHalf) sprintf(szBuffer,"%s ","上半局");
		else sprintf(szBuffer,"%s ","下半局");
		
		dc.TextOut(10+VIEW_FRAME_LEFT,5+VIEW_FRAME_TOP,szBuffer,lstrlen(szBuffer));
		////char c;
		if (m_iDaoCard > 10)
		{
			if (m_iDaoCard == 11) sprintf(szBuffer,"刀   %s ","J");
			if (m_iDaoCard == 12) sprintf(szBuffer,"刀   %s ","Q");
			if (m_iDaoCard == 13) sprintf(szBuffer,"刀   %s ","K");
			if (m_iDaoCard == 14) sprintf(szBuffer,"刀   %s ","A");
			///CString s;
			///s.Format("%d",m_iDaoCard);
			///AfxMessageBox(s);
			
		}
		else sprintf(szBuffer,"刀   %d ",m_iDaoCard);
		
		dc.TextOut(10+VIEW_FRAME_LEFT,20+VIEW_FRAME_TOP,szBuffer,lstrlen(szBuffer));
	
	}

	//用户打牌信息
	dc.TextOut(160+VIEW_FRAME_LEFT,5+VIEW_FRAME_TOP,TEXT("用户名"));
	dc.TextOut(280+VIEW_FRAME_LEFT,5+VIEW_FRAME_TOP,TEXT("分数"));
	dc.TextOut(380+VIEW_FRAME_LEFT,5+VIEW_FRAME_TOP,TEXT("牌张数"));

	if (m_iLessPlay!=-1)
	{
//		sprintf(szBuffer,TEXT("%d (最少回合=%d)"),m_StationView.m_iPlayCount,m_StationView.m_iLessPlay);
		sprintf(szBuffer,TEXT("%d"),m_iPlayCount);
		dc.TextOut(80+VIEW_FRAME_LEFT,35+VIEW_FRAME_TOP,szBuffer,lstrlen(szBuffer));
	}
	
	if (m_bIsModify)
	{
		for (int i=0;i<4;i++)
		{
			if (strlen(m_szUserName[i]) > 0)
			{
				sprintf(szBuffer,"%s ",m_szUserName[i]);
				dc.TextOut(160+VIEW_FRAME_LEFT,20+i*15+VIEW_FRAME_TOP,szBuffer,lstrlen(szBuffer));
				sprintf(szBuffer,"%d 分 ",m_iUserPoint[i]);
				dc.TextOut(280+VIEW_FRAME_LEFT,20+i*15+VIEW_FRAME_TOP,szBuffer,lstrlen(szBuffer));
				sprintf(szBuffer,"%d 张 ",m_iUserCardReamin[i]);
				dc.TextOut(380+VIEW_FRAME_LEFT,20+i*15+VIEW_FRAME_TOP,szBuffer,lstrlen(szBuffer));
			}
		}
	}


//	sprintf(szBuffer,TEXT("%d"),m_StationView.m_iTurePoint);
//	dc.TextOut(50+VIEW_FRAME_LEFT,50+VIEW_FRAME_TOP,szBuffer,lstrlen(szBuffer));

	//if (m_StationView.m_iPunishPoint!=0)
	//{
	//	sprintf(szBuffer,TEXT("%d"),m_StationView.m_iPunishPoint);
	//	dc.TextOut(50+VIEW_FRAME_LEFT,65+VIEW_FRAME_TOP,szBuffer,lstrlen(szBuffer));
	//}
	//else 
	//	dc.TextOut(50+VIEW_FRAME_LEFT,65+VIEW_FRAME_TOP,TEXT("无"),2);
	
	return;
}
//绘画 NT 图标
void CStationView::DrawNtLogo(CDC * pDC, int x, int y, int iHuaKind)
{
	CDC NtDC;
	COLORREF crColor=0;
	NtDC.CreateCompatibleDC(pDC);
	NtDC.SelectObject(&m_NTLogo);
	int iBeginStation=(iHuaKind>>4)*15;
	for (int i=0;i<15;i++)
	{
		for (int j=0;j<15;j++)
		{
			crColor=NtDC.GetPixel(i+iBeginStation,j);
			if (crColor!=RGB(255,255,255)) pDC->SetPixel(x+i,y+j,crColor);
		}
	}
	return;
}
//设置庄家
void CStationView::SetUpGrade(int iUpGradeStation)
{
	m_iUpGrade=iUpGradeStation;
	Invalidate(FALSE);
	return;
}

//设置本方牌局信息
void CStationView::SetMeSideInfo(int iBeginStation, int iEndStation, int iPlayStation)
{
	m_iBeginStation=iBeginStation;
	m_iEndStation=iEndStation;
	m_iMeStation=iPlayStation;
	Invalidate(FALSE);
	return;
}


//设置用户信息
void CStationView::SetUserPlayInfo(char szUserName[][21], int iPoint[], int iRemainCard[], BOOL bIsModify)
{
	m_bIsModify = bIsModify;
	::CopyMemory(m_iUserPoint,iPoint,sizeof(m_iUserPoint));
	::CopyMemory(m_iUserCardReamin,iRemainCard,sizeof(m_iUserCardReamin));
	::CopyMemory(m_szUserName,szUserName,sizeof(m_szUserName));

	Invalidate(FALSE);
	return;
}

//设置刀牌信息
void CStationView::SetDaoCardInfo(int iDaoCard, BOOL bShow, BOOL bNextHalf)
{
	m_iDaoCard = iDaoCard;
	m_bShowDaoCard = bShow;
	m_bNextHalf = bNextHalf;
	Invalidate(FALSE);
}

//设置敌方牌局信息
void CStationView::SetOtherSideInfo(int iBeginStation, int iEndStation, int iPlayStation)
{
	m_iBeginStation=iBeginStation;
	m_iEndStation=iEndStation;
	m_iOtherStation=iPlayStation;
	Invalidate(FALSE);
	return;
}

//设置主牌信息
void CStationView::SetNTInfo(int iNTStation, int iNTHua, int iPlayCardCount)
{
	m_iNTStation=iNTStation;
	m_iNTHua=iNTHua;
	m_iPlayCardCount=iPlayCardCount;
	Invalidate(FALSE);
	return;
}

//设置回合信息
void CStationView::SetPlayInfo(int iPlayCount, int iLessCount)
{
	m_iPlayCount=iPlayCount;
	m_iLessPlay=iLessCount;
	Invalidate(FALSE);
	return;
}

//加入分牌
void CStationView::AddPointCard(BYTE iCardList[], int iCardCount)
{
	BYTE iTempCard[36];
	int iCount=m_PointCard.GetCard(iTempCard,NULL);
	::CopyMemory(&iTempCard[iCount],iCardList,sizeof(BYTE)*iCardCount);
	m_PointCard.SetCard(iTempCard,NULL,iCardCount+iCount);
	return;
}

//加入积分
void CStationView::SetTurePoint(int iTurePoint)
{
	m_iTurePoint=iTurePoint;
	Invalidate(FALSE);
	return;
}

//加入罚分
void CStationView::AddPunishPoint(int iPunishPoint)
{
	m_iPunishPoint+=iPunishPoint;
	Invalidate(FALSE);
	return;
}

//清理信息
void CStationView::CleanAllInfo(BOOL bAll)
{
	m_iNTStation=-1;
	m_iNTCount=0;
	if (bAll) 
	{
		m_iUpGrade=-1;
		m_iMeStation=-1;
		m_iOtherStation=-1;
		m_iPlayCount=0;	
		m_iBeginStation=-1;	
		m_iEndStation=-1;	
		m_iLessPlay=-1;	
		m_iTurePoint=0;
		m_iPunishPoint=0;
		m_iPlayCardCount=2;
	}
	m_PointCard.SetCard(NULL,NULL,0);
	Invalidate(FALSE);
	return;
}

//是否显示信息
void CStationView::SetShowMessage(BOOL bShow)
{
	m_bShowMessage=bShow;
	Invalidate(FALSE);
	return;
}

//建立函数
BOOL CStationView::Create(CWnd * pParentWnd, UINT nID)
{
	return CWnd::Create(NULL,NULL,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS,CRect(0,0,0,0),pParentWnd,nID,NULL);
}

⌨️ 快捷键说明

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