he cursor to display while the user drags
// the minimized window.
HCURSOR CTwentyPointDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CTwentyPointDlg::OnOK()
{
}
//用户要牌
void CTwentyPointDlg::OnDeal()
{
int nCount = m_CardList.GetCount();
//用户要牌不能大于20张
if (nCount >= 20)
{
MessageBox("不能再要牌了!", "提示");
return;
}
CCard* pCard;
//产生随机牌面
int nCard = RandomCard();
int nImageType = nCard % CARD_TYPECOUNT;
nImageType --;
if (nImageType == -1)
{
nImageType = CARD_TYPECOUNT - 1;
}
pCard = new CCard(&m_ImgList[nImageType]);
int nLeft = 0;
nLeft = nCount*15 + 50;
int nTop = 240;
pCard->Create("", WS_VISIBLE|WS_CHILD, CRect(nLeft, nTop, nLeft + CARD_WIDTH, nTop + CARD_HEIGHT), this);
pCard->SetCardNumber(nCard);
m_CardList.AddTail(pCard);
pCard->Invalidate();
//超过了20点,用户输了
if (CalcNumber(TRUE) > 20)
{
ShowCard();
MessageBox("您输了!", "提示");
InitCardList();
InitCardNumbers();
}
}
void CTwentyPointDlg::InitCardList()
{
for(POSITION pos=m_CardList.GetHeadPosition(); pos != NULL;)
{
CCard* pCard = (CCard*)m_CardList.GetNext(pos);
if (pCard != NULL)
{
pCard->DestroyWindow();
delete pCard;
}
}
m_CardList.RemoveAll();
for(pos=m_ComputerList.GetHeadPosition(); pos != NULL;)
{
CCard* pCard = (CCard*)m_ComputerList.GetNext(pos);
if (pCard != NULL)
{
pCard->DestroyWindow();
delete pCard;
}
}
m_ComputerList.RemoveAll();
}
void CTwentyPointDlg::OnCancel()
{
InitCardList();
CDialog::OnCancel();
}
void CTwentyPointDlg::OnBeginGame()
{
InitCardList();
InitCardNumbers();
CButton* pRadioBtn = (CButton*)GetDlgItem(IDC_COMPUTERPRIOR);
if (pRadioBtn != NULL)
{
int nState = pRadioBtn->GetCheck();
if (nState > 0)
{
m_UserPrior = FALSE;
//电脑要牌
ComputerClubs();
}
else
{
m_UserPrior = TRUE;
}
}
}
void CTwentyPointDlg::InitCardNumbers()
{
for(int i=0; i<CARD_COUNT; i++)
{
m_CardNumbers[i] = -1;
}
}
int CTwentyPointDlg::RandomCard()
{
int nNumber = 0;
label:
nNumber = rand() % 53;
if (nNumber == 0)
goto label;
for(int i=0; i<CARD_COUNT; i++)
{
if (m_CardNumbers[i] == nNumber)
goto label;
}
for(i=0; i<CARD_COUNT; i++)
{
if (m_CardNumbers[i] == -1)
{
m_CardNumbers[i] = nNumber;
break;
}
}
return nNumber;
}
int CTwentyPointDlg::CalcNumber(BOOL bUser)
{
int nPointCount = 0;
if (bUser) //计算用户的分数
{
for(POSITION pos = m_CardList.GetHeadPosition(); pos != NULL;)
{
CCard* pCard = (CCard*)m_CardList.GetNext(pos);
nPointCount += pCard->m_nCardValue;
}
}
else
{
for(POSITION pos = m_ComputerList.GetHeadPosition(); pos != NULL;)
{
CCard* pCard = (CCard*)m_ComputerList.GetNext(pos);
nPointCount += pCard->m_nCardValue;
}
}
return nPointCount;
}
//电脑要牌
void CTwentyPointDlg::ComputerClubs()
{
label:
int nCount = m_ComputerList.GetCount();
CCard* pCard;
//产生随机牌面
int nCard = RandomCard();
int nImageType = nCard % CARD_TYPECOUNT;
nImageType --;
if (nImageType == -1)
{
nImageType = CARD_TYPECOUNT - 1;
}
pCard = new CCard(&m_ImgList[nImageType]);
int nLeft = 0;
nLeft = nCount*15 + 330;
int nTop = 240;
pCard->Create("", WS_VISIBLE|WS_CHILD, CRect(nLeft, nTop, nLeft + CARD_WIDTH, nTop + CARD_HEIGHT), this);
pCard->SetCardNumber(nCard);
pCard->ShowCardBK(TRUE);
m_ComputerList.AddTail(pCard);
pCard->Invalidate();
//超过了20点,用户赢了
int nNumber = CalcNumber(FALSE);
if (nNumber > 20)
{
ShowCard();
MessageBox("您赢了!", "提示");
m_UserPrior = TRUE;
InitCardList();
InitCardNumbers();
}
else
{
if (m_UserPrior) //如果用户先手
{[b