#include "StdAfx.h"
#include ".\llk.h"
#include <atlbase.h>
#include <atlcomtime.h>
#include "resource.h"
namespace LLK
{
void SetXYPOS(XYPOS &des ,const POS & org)
{
des.x = org.x;
des.y = org.y;
}
void SetPOS(POS &des ,const XYPOS & org)
{
des.x = org.x;
des.y = org.y;
}
CPlayLlk::CPlayLlk()
{
m_dscx = m_dscy = 8;
m_bImgValid = false;
m_playMode = NONE;
m_bAssertCanConnect = false;
m_nCurrImgIcon = 0;
}
BOOL CPlayLlk::LoadConfig()
{
CString strIniFile(m_mapVar["IniFile"]);
{
CFileFind ff;
BOOL bFileExists = ff.FindFile(strIniFile);
ff.Close();
if(!bFileExists)
{
this->WriteDefaultConfig();
}
}
TCHAR buf[MAX_PATH];
CString strPath,strTmp;
strPath = m_mapVar["IniFilePath"];
::GetPrivateProfileString("IconSetting","IconFilePath","",buf,MAX_PATH,strIniFile);
if(::_tcslen(buf) == 0)
{
return FALSE;
}
strTmp = strPath + buf;
m_mapVar.SetAt("IconFilePath",strTmp);
::GetPrivateProfileString("IconSetting","LightIconFilePath","",buf,MAX_PATH,strIniFile);
if(::_tcslen(buf) == 0)
{
return FALSE;
}
strTmp = strPath + buf;
m_mapVar.SetAt("LIconFilePath",strTmp);
return true;
}
void CPlayLlk::WriteDefaultConfig()
{
CString strIniFile(m_mapVar["IniFile"]);
::WritePrivateProfileString("IconSetting","IconCount","22",strIniFile);
::WritePrivateProfileString("IconSetting","IconFilePath","",strIniFile);
::WritePrivateProfileString("IconSetting","LightIconFilePath","",strIniFile);
}
CPlayLlk::~CPlayLlk()
{
this->ClearPosArray();
this->DeleteImgPosition();
this->ClearIconList();
m_imgDropShadow.Destroy();
}
void CPlayLlk::ClearIconList()
{
this->m_iconList.DeleteImageList();
}
void CPlayLlk::ClearPosArray()
{
//清空Map
this->m_posArray.RemoveAll();
}
void CPlayLlk::ClearIconPosList()
{
//清空查找MAP
INT_PTR nCount = this->m_iconPosList.GetCount();
for(int i=0;i<nCount;++i)
{
this->m_iconPosList.GetAt(i)->RemoveAll();
}
}
void CPlayLlk::DeleteImgPosition()
{
//清空查找MAP
INT_PTR nCount = this->m_iconPosList.GetCount();
for(int i=0;i<nCount;++i)
{
this->m_iconPosList.GetAt(i)->RemoveAll();
delete m_iconPosList.GetAt(i);
}
this->m_iconPosList.RemoveAll();
}
BOOL CPlayLlk::InitGame(LPCTSTR szIniFile)
{
CString strPath(szIniFile);
strPath = strPath.Left(strPath.ReverseFind('\\') + 1);
this->m_mapVar.SetAt("IniFilePath",strPath);
this->m_mapVar.SetAt("IniFile",szIniFile);
this->m_nMaxImg = ::GetPrivateProfileInt("IconSetting","IconCount",8,szIniFile);
if(!this->LoadConfig())
return false;
return true;
}
void CPlayLlk::AbortGame()
{
}
BOOL CPlayLlk::StartGame(INT x,INT y,INT nIconCount)
{
if(x < 1 || y < 1)
return FALSE;
//保证是偶数
if(x * y % 2 != 0)
{
return FALSE;
}
if(nIconCount > m_nMaxImg) nIconCount = 0;
m_nImg = nIconCount == 0? this->m_nMaxImg:nIconCount;
for(int i = 0;i< m_nImg; ++i)
{
this->m_iconPosList.Add(new CXYPOS_LIST());
}
if(!this->LoadImgs())
{
return false;
}
VERIFY(x > 0 && y > 0);
//先清空 里面的数据
this->ClearPosArray();
//先清空位置
this->ClearIconPosList();
this->m_nX = x;
this->m_nY = y;
//设置大小
this->m_posArray.SetSize(x * y);
m_posArray.SetDimension(x,y);
this->OnStartMission();
//设置画板
//重排
return this->Reset(TRUE);
}
///TODO:这里是生成阴影的地方
void CPlayLlk::OnStartMission()
{
if(m_imgDropShadow.IsNull())
{
m_imgDropShadow.Create(m_cx + m_dscx,m_cy + m_dscy, m_imgBPP);
}
//生成 图像
DWORD rgbHug = GetIconHug();
CBrush brush(rgbHug);
CPen pen(PS_SOLID,1,RGB(GetRValue(rgbHug)/2,GetGValue(rgbHug)/2,GetBValue(rgbHug)/2)),*pOldPen;
CDC dc;
dc.Attach(m_imgDropShadow.GetDC());
pOldPen = dc.SelectObject(&pen);
dc.FillRect(CRect(0,0,m_cx,m_cy),&brush);
brush.DeleteObject();
CRect rcFrame(1,1,m_cx,m_cy);
dc.DrawEdge(rcFrame,BDR_RAISEDINNER,BF_RECT);
//生成右边的渐变
CImage img;
img.Create(m_dscx,m_cy,this->m_imgBPP);
TRIVERTEX vert[2] ;
GRADIENT_RECT gRect;
vert [0] .x = 0;// m_cx;
vert [0] .y = 0;
vert [0] .Red = GetRValue(rgbHug) << 8;
vert [0] .Green = GetGValue(rgbHug) << 8;
vert [0] .Blue = GetBValue(rgbHug) << 8;
vert [0] .Alpha = 0x0000;
vert [1] .x = m_dscx;// + m_cx;
vert [1] .y = m_cy + m_dscy;
vert [1] .Red = GetRValue(rgbHug) << 8 /2;
vert [1] .Green = GetGValue(rgbHug) << 8 /2;
vert [1] .Blue = GetBValue(rgbHug) << 8 /2;
vert [1] .Alpha = 0x0000;
gRect.UpperLeft = 0;
gRect.LowerRight = 1;
CDC imgDC;
imgDC.Attach(img.GetDC());
imgDC.GradientFill(vert,2,&gRect,1,GRADIENT_FILL_RECT_H);
POINT pts[3];//={CPoint(m_cx,0), CPoint(m_cs+m_dscx,m_dscy), CPoint(m_cs,m_cy) };
pts[0].x = m_cx , pts[0].y = 0;
pts[1].x = m_cx + m_dscx, pts[1].y = m_dscy;
pts[2].x = m_cx , pts[2].y = m_cy;
CBitmap bmpGradient;
dc.PlgBlt(pts,&imgDC,0,0,m_dscx,m_cy,bmpGradient,0,0);
imgDC.Detach();
img.ReleaseDC();
img.Destroy();
//下面画下面的阴影
vert [0] .x = 0;
vert [0] .y = 0;
vert [0] .Red = GetRValue(rgbHug) << 8;
vert [0] .Green = GetGValue(rgbHug) << 8;
vert [0] .Blue = GetBValue(rgbHug) << 8;
vert [0] .Alpha = 0x0000;
vert [1] .x = m_cx;// + m_dscx;
vert [1] .y = m_dscy;// + m_cy;
vert [1] .Red = GetRValue(rgbHug) << 8 /2;
vert [1] .Green = GetGValue(rgbHug) << 8 /2;
vert [1] .Blue = GetBValue(rgbHug) << 8 /2;
vert [1] .Alpha = 0x0000;
gRect.UpperLeft = 0;
gRect.LowerRight = 1;
ASSERT(imgDC.m_hDC == NULL);
ASSERT(img.IsNull());
img.Create(m_cx , m_dscy,this->m_imgBPP);
imgDC.Attach(img.GetDC());
imgDC.GradientFill(vert,2,&gRect,1,GRADIENT_FILL_RECT_V);
//POINT pts[3];
pts[0].x = 0 , pts[0].y = m_cy;
pts[1].x = m_cx, pts[1].y = m_cy;
pts[2].x = m_dscx , pts[2].y = m_cy + m_dscy;
//CBitmap bmpGradient;
dc.PlgBlt(pts,&imgDC,0,0,m_cx,m_dscy,bmpGradient,0,0);
imgDC.Detach();
img.ReleaseDC();
img.Destroy();
//画上线条
dc.MoveTo(m_cx,0); dc.LineTo(m_cx + m_dscx,m_dscy);
dc.MoveTo(m_cx,m_cy); dc.LineTo(m_cx + m_dscx,m_cy + m_dscy);
dc.MoveTo(0,m_cy); dc.LineTo(m_dscx, m_cy + m_dscy);
dc.SelectObject(pOldPen);
dc.Detach();
m_imgDropShadow.ReleaseDC();
//生成带阴影的小图片
CImage imgDraw;
imgDraw.Create((m_cx + m_dscx) * m_nImg,m_cy + m_dscy,this->m_imgBPP);
HDC hdcDraw = imgDraw.GetDC();
CDC dcDraw;
dcDraw.Attach(hdcDraw);
CPoint ptZero(0,0);
for(int i = 0;i<this->m_nImg; ++i)
{
m_imgDropShadow.Draw(hdcDraw,CPoint(i * (m_cx + m_dscx),0));
//生成Mask位图
CBitmap bitMask,*pOldBitMask = NULL;
bitMask.CreateBitmap(m_cx,m_cy,1,1,NULL);
//准备Mask 位图 场景
CDC dcMask;
dcMask.CreateCompatibleDC(NULL);
pOldBitMask = dcMask.SelectObject(&bitMask);
//准备小图片位图
CImage imgIcon;
imgIcon.Create(m_cx,m_cy,m_imgBPP);
CBitmap *pOldIcon;
//准备小图片 场景
CDC dcIcon;
dcIcon.CreateCompatibleDC(NULL);
pOldIcon = dcIcon.SelectObject(CBitmap::FromHandle(imgIcon));//bmpIcon);
//从ImageList中取出图形
m_iconList.Draw(&dcIcon,i,ptZero,ILD_MASK);
dcIcon.SetBkColor(RGB(0,0,0));
#ifdef USE_MASKBLT
//生成Mask位图
dcMask.BitBlt(0,0,m_cx,m_cy,&dcIcon,0,0,NOTSRCCOPY);
dcDraw.MaskBlt(i * (m_cx + m_dscx),0,m_cx,m_cy,&dcIcon,0,0,bitMask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
#else
//生成Mask位图
dcMask.BitBlt(0,0,m_cx,m_cy,&dcIcon,0,0,SRCCOPY);
dcDraw.BitBlt(i * (m_cx + m_dscx),0,m_cx,m_cy,&dcIcon,0,0,SRCINVERT);
dcDraw.BitBlt(i * (m_cx + m_dscx),0,m_cx,m
llk.rar_源码
版权申诉
186 浏览量
2022-09-23
07:35:54
上传
评论
收藏 679KB RAR 举报
Kinonoyomeo
- 粉丝: 76
- 资源: 1万+