📄 playcards.cpp
字号:
// PlayCards.cpp: implementation of the CPlayCards class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "24points.h"
#include "PlayCards.h"
#include <string.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CPlayCards::CPlayCards()
{
memset(m_got_cards,0,sizeof(int)*4);
}
CPlayCards::~CPlayCards()
{
}
/*初始化52张扑克*/
card CPlayCards::m_deck[52]={DIAMOND, TWO, DIAMOND, THREE, DIAMOND, FOUR, DIAMOND, FIVE,
DIAMOND, SIX, DIAMOND, SEVEN, DIAMOND, EIGHT, DIAMOND, NINE, DIAMOND, TEN,
DIAMOND, J, DIAMOND, Q, DIAMOND, K, DIAMOND, A ,
CLUB, TWO, CLUB, THREE, CLUB, FOUR, CLUB, FIVE, CLUB, SIX, CLUB, SEVEN,
CLUB, EIGHT, CLUB, NINE, CLUB, TEN, CLUB, J, CLUB, Q, CLUB, K, CLUB, A,
HEART, TWO, HEART, THREE, HEART, FOUR, HEART, FIVE, HEART, SIX, HEART, SEVEN,
HEART, EIGHT, HEART, NINE, HEART, TEN, HEART, J, HEART, Q, HEART, K, HEART, A,
SPADE, TWO, SPADE, THREE, SPADE, FOUR, SPADE, FIVE, SPADE, SIX, SPADE, SEVEN,
SPADE, EIGHT, SPADE, NINE, SPADE, TEN, SPADE, J, SPADE, Q, SPADE, K, SPADE, A };
void CPlayCards::Pick_Card()
{
int i=0;
unsigned seed=(unsigned)time(NULL);
srand(seed);/*设置随机种子*/
int j=rand()%52;/*随机获取牌号*/
m_got_cards[0]=j;
do{
j=rand()%52;
m_got_cards[1]=j;
}while(j==m_got_cards[0]);
do{
j=rand()%52;
m_got_cards[2]=j;
}while(j==m_got_cards[0]||j==m_got_cards[1]);
do{
j=rand()%52;
m_got_cards[3]=j;
}while(j==m_got_cards[0]||j==m_got_cards[1]||j==m_got_cards[2]);
}
void CPlayCards::Draw(CDC *pDC, const CPoint &p,BOOL &shuffle)
{
int bmWidth=71,bmHeight=96;
if(shuffle)
{
shuffle=FALSE;
Pick_Card();
}
CBitmap bitmap;
CDC memDC;
CBitmap*oldBitmap;
bitmap.LoadBitmap(m_deck[m_got_cards[0]].suit+m_deck[m_got_cards[0]].point);
memDC.CreateCompatibleDC(pDC);
oldBitmap=memDC.SelectObject(&bitmap);
memDC.BitBlt(0,0,bmWidth,bmHeight,&memDC,0,0,SRCCOPY);
pDC->BitBlt(p.x,p.y,bmWidth,bmHeight,&memDC,0,0,SRCCOPY);
bitmap.DeleteObject();
bitmap.LoadBitmap(m_deck[m_got_cards[1]].suit+m_deck[m_got_cards[1]].point);
memDC.SelectObject(&bitmap);
memDC.BitBlt(0,0,bmWidth,bmHeight,&memDC,0,0,SRCCOPY);
pDC->BitBlt(p.x+bmWidth+2,p.y,bmWidth*2,bmHeight,&memDC,0,0,SRCCOPY);
bitmap.DeleteObject();
bitmap.LoadBitmap(m_deck[m_got_cards[2]].suit+m_deck[m_got_cards[2]].point);
memDC.SelectObject(&bitmap);
memDC.BitBlt(0,0,bmWidth,bmHeight,&memDC,0,0,SRCCOPY);
pDC->BitBlt(p.x+2*bmWidth+4,p.y,bmWidth*2,bmHeight,&memDC,0,0,SRCCOPY);
pDC->SelectObject(oldBitmap);
bitmap.DeleteObject();
bitmap.LoadBitmap(m_deck[m_got_cards[3]].suit+m_deck[m_got_cards[3]].point);
memDC.SelectObject(&bitmap);
memDC.BitBlt(0,0,bmWidth,bmHeight,&memDC,0,0,SRCCOPY);
pDC->BitBlt(p.x+3*bmWidth+6,p.y,bmWidth*2,bmHeight,&memDC,0,0,SRCCOPY);
pDC->SelectObject(oldBitmap);
bitmap.DeleteObject();
for(int i=0;i<4;i++)
{
if(m_index_set.find(i)!=m_index_set.end())
{
pDC->MoveTo(p.x+i*bmWidth+i*2,p.y);
pDC->LineTo(p.x+(i+1)*bmWidth+2*i,p.y+bmHeight);
pDC->MoveTo(p.x+(i+1)*bmWidth+2*i,p.y);
pDC->LineTo(p.x+i*bmWidth+2*i,p.y+bmHeight);
}
}
}
BOOL CPlayCards::GetResult(CString &str)
{
int data[4];
int i;
for(i=0;i<4;i++)
{
data[i]=m_got_cards[i]%13+2;
if(data[i]==14)
data[i]=1;
}
int tmp[4];
char index[]="012301320213023103120321102310321203123013021320201320312103213023012310301230213102312032013210";
i=0;
while(i<24)
{
for(int j=0;j<4;j++)
tmp[j]=data[index[4*i+j]-'0'];
if(tmp[0]+tmp[1]+tmp[2]+tmp[3]==24)// 'a+b+c+d
{
str.Format("%d+%d+%d+%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]+tmp[1]+tmp[2]-tmp[3]==24)// 'a+b+c-d
{
str.Format("%d+%d+%d-%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]+tmp[1]-tmp[2]-tmp[3]==24)// 'a+b-c-d
{
str.Format("%d+%d-%d-%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]+tmp[2]*tmp[3]==24)// 'a*b+c*d
{
str.Format("%d*%d+%d*%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]-tmp[2]*tmp[3]==24)// 'a*b-c*d
{
str.Format("%d*%d-%d*%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]*tmp[2]+tmp[3]==24)// 'a*b*c+d
{
str.Format("%d*%d*%d+%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]*tmp[2]-tmp[3]==24)// 'a*c*b-d
{
str.Format("%d*%d*%d-%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]*tmp[2]==tmp[3]*24) // 'a*b*c/d
{
str.Format("%d*%d*%d/%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]+tmp[2]+tmp[3]== 24)// 'a*b+c+d
{
str.Format("%d*%d+%d+%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]+tmp[2]-tmp[3]== 24)// 'a*b+c-d
{
str.Format("%d*%d+%d-%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]-tmp[2]-tmp[3]== 24)// 'a*b-c-d
{
str.Format("%d*%d-%d-%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if((tmp[0]+tmp[1])*(tmp[2]+tmp[3])== 24)// '(a+b)*(c+d)
{
str.Format("(%d+%d)*(%d+%d)=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if((tmp[0]+tmp[1])*(tmp[2]-tmp[3])== 24)// '(a+b)*(c-d)
{
str.Format("(%d+%d)*(%d-%d)=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if((tmp[0]-tmp[1])*(tmp[2]-tmp[3])== 24)// '(a-b)*(c-d)
{
str.Format("(%d-%d)*(%d-%d)=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]*(tmp[2]-tmp[3])== 24)// 'a*b*(c-d)
{
str.Format("%d*%d*(%d-%d)=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]*(tmp[2]+tmp[3])== 24)// 'a*b*(c+d)
{
str.Format("%d*%d*(%d+%d)=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]==(tmp[2]+tmp[3])*24)// 'a*b/(c+d)
{
str.Format("%d*%d/(%d+%d)=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]==(tmp[2]-tmp[3])*24)// 'a*b/(c-d)
{
str.Format("%d*%d/(%d-%d)=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]==tmp[2]*tmp[3]*24)// 'a*b/(c*d)
{
str.Format("%d*%d/(%d*%d)=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]+tmp[1]+tmp[2]==tmp[3]*24)// '(a+b+c)/d
{
str.Format("(%d+%d+%d)/%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]+tmp[2]==tmp[3]*24)// '(a*b+c)/d
{
str.Format("(%d*%d+%d)/%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]-tmp[2]==tmp[3]*24)// '(a*b-c)/d
{
str.Format("(%d*%d-%d)/%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*(tmp[1]-tmp[2])==tmp[3]*24)// 'a*(b-c)/d
{
str.Format("%d*(%d-%d)/%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*(tmp[1]+tmp[2])==tmp[3]*24)// 'a*(b+c)/d
{
str.Format("%d*(%d+%d)/%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*(tmp[1]+tmp[2])+tmp[3]==24)// 'a*(b+c)+d
{
str.Format("%d*(%d+%d)+%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*(tmp[1]+tmp[2])-tmp[3]==24)// 'a*(b+c)-d
{
str.Format("%d*(%d+%d)-%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*(tmp[1]-tmp[2])+tmp[3]==24)// 'a*(b-c)+d
{
str.Format("%d*(%d-%d)+%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*(tmp[1]-tmp[2])-tmp[3]==24)// 'a*(b-c)-d
{
str.Format("%d*(%d-%d)-%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]*tmp[3]+tmp[2]==tmp[3]*24)// 'a*b+c/d
{
str.Format("%d*%d+%d/%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*tmp[1]*tmp[3]-tmp[2]==tmp[3]*24)// 'a*b-c/d
{
str.Format("%d*%d-%d/%d=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*(tmp[1]*tmp[2]-tmp[3])==24)//a*(b*c-d)
{
str.Format("%d*(%d*%d-%d)=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*(tmp[1]*tmp[2]+tmp[3])==24)//a*(b*c+d)
{
str.Format("%d*(%d*%d+%d)=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*(tmp[1]+tmp[2]+tmp[3])==24)//a*(b+c+d)
{
str.Format("%d*(%d+%d+%d)=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*(tmp[1]+tmp[2]-tmp[3])==24)//a*(b+c-d)
{
str.Format("%d*(%d+%d-%d)=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
if(tmp[0]*(tmp[1]-tmp[2]-tmp[3])==24)//a*(b-c-d)
{
str.Format("%d*(%d-%d-%d)=24",tmp[0],tmp[1],tmp[2],tmp[3]);
return TRUE;
}
i++;
}
if(str.GetLength()==0)
str="I have no integer algorithm";
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -