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

📄 playcards.cpp

📁 简单的游戏24点
💻 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 + -