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

📄 dot04_20view.cpp

📁 计算24点的C++源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// Dot04_20View.cpp : implementation of the CDot04_20View class
//

#include "stdafx.h"
#include "Dot04_20.h"

#include "Dot04_20Doc.h"
#include "Dot04_20View.h"
#include "changecard.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDot04_20View

IMPLEMENT_DYNCREATE(CDot04_20View, CFormView)

BEGIN_MESSAGE_MAP(CDot04_20View, CFormView)
	//{{AFX_MSG_MAP(CDot04_20View)
	ON_BN_CLICKED(IDC_CARD1, OnCard1)
	ON_BN_CLICKED(IDC_CARD2, OnCard2)
	ON_BN_CLICKED(IDC_CARD3, OnCard3)
	ON_BN_CLICKED(IDC_CARD4, OnCard4)
	ON_BN_CLICKED(IDC_CARD5, OnCard5)
	ON_BN_CLICKED(IDC_YES, OnYes)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
	ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
	ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
	ON_COMMAND(ID_STOP, OnStop)
	ON_EN_CHANGE(IDC_EDIT, OnChangeEdit)
	ON_WM_CTLCOLOR()
	ON_COMMAND(ID_CHANGECOLOR, OnChangecolor)
	ON_COMMAND(ID_START, OnStart)
	ON_BN_CLICKED(IDC_NONE, OnNone)
	ON_COMMAND(ID_CHANGECARD, OnChangecard)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDot04_20View construction/destruction

CDot04_20View::CDot04_20View()
	: CFormView(CDot04_20View::IDD)
{  
	//{{AFX_DATA_INIT(CDot04_20View)
	m_score =1000;//得分赋值
	m_time = 0;
	m_input = _T("");
	m_ju = 0;
	m_lun = 0;
	m_mtd = _T("");
	color=RGB(5,90,5);//背景为绿色
	S=0;
	noanswer=0;
	m_none = FALSE;
	h=0;
	stop=0;
	count=0;
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CDot04_20View::~CDot04_20View()
{
}

void CDot04_20View::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDot04_20View)
	DDX_Text(pDX, IDC_SCORE, m_score);
	DDX_Text(pDX, IDC_TIME, m_time);
	DDX_Text(pDX, IDC_EDIT, m_input);
	DDX_Text(pDX, IDC_JU, m_ju);
	DDX_Text(pDX, IDC_LUN, m_lun);
	DDX_LBString(pDX, IDC_MTD, m_mtd);
	DDX_Check(pDX, IDC_NONE, m_none);
	//}}AFX_DATA_MAP
}

BOOL CDot04_20View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}
//对52张牌进行初始化,位图放进数组
void CDot04_20View::OnInitialUpdate()
{   
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
	
	m_Bitmapback.LoadBitmap(IDB_BACK);
	
	bbjmap[0].LoadBitmap(IDB_BITMAP1);
    bbjmap[1].LoadBitmap(IDB_BITMAP2);
    bbjmap[2].LoadBitmap(IDB_BITMAP3);
    bbjmap[3].LoadBitmap(IDB_BITMAP4);
    bbjmap[4].LoadBitmap(IDB_BITMAP5);
    

	 m_card[0]=(CButton*)GetDlgItem(IDC_CARD1);
	m_card[1]=(CButton*)GetDlgItem(IDC_CARD2);//五张牌的按钮指针放的数组里
	m_card[2]=(CButton*)GetDlgItem(IDC_CARD3);
	m_card[3]=(CButton*)GetDlgItem(IDC_CARD4);
	m_card[4]=(CButton*)GetDlgItem(IDC_CARD5);
	m_card[0]->SetBitmap(HBITMAP(m_Bitmapback));//开始时五张牌全为背面	
    m_card[1]->SetBitmap(HBITMAP(m_Bitmapback));
    m_card[2]->SetBitmap(HBITMAP(m_Bitmapback));
    m_card[3]->SetBitmap(HBITMAP(m_Bitmapback));
	m_card[4]->SetBitmap(HBITMAP(m_Bitmapback));
    
	m_Bitmap[0].LoadBitmap(IDB_HE1);      //52张牌全部放到数组中
	m_Bitmap[1].LoadBitmap(IDB_HE2);
	m_Bitmap[2].LoadBitmap(IDB_HE3);
	m_Bitmap[3].LoadBitmap(IDB_HE4);	
	m_Bitmap[4].LoadBitmap(IDB_HE5);
	m_Bitmap[5].LoadBitmap(IDB_HE6);
	m_Bitmap[6].LoadBitmap(IDB_HE7);
	m_Bitmap[7].LoadBitmap(IDB_HE8);
	m_Bitmap[8].LoadBitmap(IDB_HE9);
	m_Bitmap[9].LoadBitmap(IDB_HE10);
	m_Bitmap[10].LoadBitmap(IDB_HE11);
	m_Bitmap[11].LoadBitmap(IDB_HE12);
	m_Bitmap[12].LoadBitmap(IDB_HE13);
	m_Bitmap[13].LoadBitmap(IDB_M1);
    m_Bitmap[14].LoadBitmap(IDB_M2);
	m_Bitmap[15].LoadBitmap(IDB_M3);
	m_Bitmap[16].LoadBitmap(IDB_M4);
    m_Bitmap[17].LoadBitmap(IDB_M5);
	m_Bitmap[18].LoadBitmap(IDB_M6);
	m_Bitmap[19].LoadBitmap(IDB_M7);
	m_Bitmap[20].LoadBitmap(IDB_M8);
	m_Bitmap[21].LoadBitmap(IDB_M9);
	m_Bitmap[22].LoadBitmap(IDB_M10);
	m_Bitmap[23].LoadBitmap(IDB_M11);
	m_Bitmap[24].LoadBitmap(IDB_M12);
	m_Bitmap[25].LoadBitmap(IDB_M13);
	m_Bitmap[26].LoadBitmap(IDB_F1);
	m_Bitmap[27].LoadBitmap(IDB_F2);
	m_Bitmap[28].LoadBitmap(IDB_F3);
	m_Bitmap[29].LoadBitmap(IDB_F4);
	m_Bitmap[30].LoadBitmap(IDB_F5);
	m_Bitmap[31].LoadBitmap(IDB_F6);
	m_Bitmap[32].LoadBitmap(IDB_F7);
	m_Bitmap[33].LoadBitmap(IDB_F8);
	m_Bitmap[34].LoadBitmap(IDB_F9);
	m_Bitmap[35].LoadBitmap(IDB_F10);
	m_Bitmap[36].LoadBitmap(IDB_F11);
	m_Bitmap[37].LoadBitmap(IDB_F12); 
	m_Bitmap[38].LoadBitmap(IDB_F13);
	m_Bitmap[39].LoadBitmap(IDB_H1);
	m_Bitmap[40].LoadBitmap(IDB_H2);
	m_Bitmap[41].LoadBitmap(IDB_H3);
	m_Bitmap[42].LoadBitmap(IDB_H4);
	m_Bitmap[43].LoadBitmap(IDB_H5);
	m_Bitmap[44].LoadBitmap(IDB_H6);
	m_Bitmap[45].LoadBitmap(IDB_H7);
	m_Bitmap[46].LoadBitmap(IDB_H8);
	m_Bitmap[47].LoadBitmap(IDB_H8);
	m_Bitmap[48].LoadBitmap(IDB_H9);
	m_Bitmap[49].LoadBitmap(IDB_H10);
	m_Bitmap[50].LoadBitmap(IDB_H11);
	m_Bitmap[51].LoadBitmap(IDB_H12);
	m_Bitmap[52].LoadBitmap(IDB_H13);
	
}

/////////////////////////////////////////////////////////////////////////////
// CDot04_20View diagnostics

#ifdef _DEBUG
void CDot04_20View::AssertValid() const
{
	CFormView::AssertValid();
}

void CDot04_20View::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CDot04_20Doc* CDot04_20View::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDot04_20Doc)));
	return (CDot04_20Doc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDot04_20View message handlers

void CDot04_20View::OnCard1()         //当点击第一张牌时随机发放其它四张牌
{    UpdateData(true);
	m_none = false;
     noanswer=1;
	h=0;
if (stop==0) 
{if(S==1)
{	m_card[1]=(CButton*)GetDlgItem(IDC_CARD2);
	m_card[2]=(CButton*)GetDlgItem(IDC_CARD3);
	m_card[3]=(CButton*)GetDlgItem(IDC_CARD4);
	m_card[4]=(CButton*)GetDlgItem(IDC_CARD5);
    m_card[1]->SetBitmap(HBITMAP(m_Bitmap[a=rand()%52]));//指向随机给出牌的数组
    m_card[2]->SetBitmap(HBITMAP(m_Bitmap[x=rand()%52]));
    m_card[3]->SetBitmap(HBITMAP(m_Bitmap[y=rand()%52]));
	m_card[4]->SetBitmap(HBITMAP(m_Bitmap[z=rand()%52]));
//记录牌面的大小
	if(a<13)
	t1=a+1;
	else
		t1=a%13+1;
	if(x<13)
	t2=x+1;
	else
		t2=x%13+1;
	if(y<13)
	t3=y+1;
	else
		t3=y%13+1;
	if(z<13)
	t4=z+1;
	else
		t4=z%13+1;

    SetTimer(1,1000,NULL);//按下牌记时器开始工作
	m_time=0;
    m_input = _T("");//对编辑框清空
    m_lun++;
	if(m_lun>13)
	{m_lun=1;m_ju++;}
 CListBox *p;
 p=(CListBox *)GetDlgItem(IDC_MTD);
 p->ResetContent();}
else MessageBox("请先开局!");
 noanswer=0;
	UpdateData(false);}
else MessageBox("现在游戏暂停,请按继续!");
}

void CDot04_20View::OnCard2() 
{ if(S==1&&noanswer==0&&stop==0)
{	UpdateData(true);
	CString s;
   s.Format("%d",t1);//把整形数字转换为字符型
   m_input=m_input+s;//放到input数组中	
   UpdateData(false);}



}

void CDot04_20View::OnCard3() 
{if(S==1&&noanswer==0&&stop==0)
{	UpdateData(true);
	CString s;
s.Format("%d",t2);//把整形数字转换为字符型
m_input=m_input+s;//放到input数组中	
UpdateData(false);}
	
}

void CDot04_20View::OnCard4() 
{if(S==1&&noanswer==0&&stop==0)
{	UpdateData(true);
CString s;
s.Format("%d",t3);//把整形数字转换为字符型
m_input=m_input+s;//放到input数组中	
UpdateData(false);}

}

void CDot04_20View::OnCard5() 
{if(S==1&&noanswer==0&&stop==0)
{	UpdateData(true);
	CString s;
s.Format("%d",t4);//把整形数字转换为字符型
m_input=m_input+s;//放到input数组中	
UpdateData(false);}

}

void CDot04_20View::OnYes() 
{
	CString s,s1,s2;
   s=compu(t1,t2,t3,t4);
	s1=compu(t3,t2,t1,t4);//四张牌的计算
    s2=compu(t4,t2,t1,t3);
 m_none = false;
if(stop==0)	
{ if(noanswer==0)
{
		if(S==1)
	{	KillTimer(1);
	
	
  CListBox *p;
 p=(CListBox *)GetDlgItem(IDC_MTD);//把答案放到列表上
 p->AddString(s);
 p->AddString(s1);
 p->AddString(s2);

n=	TotalCompute(m_input);

  if(n==24)
  { m_score=m_score+100;MessageBox("正确,请继续!");}
   
   else MessageBox("错误!请看答案!");
   }
	if(S==0)
	MessageBox("请先开局!");}
if(noanswer==1)
{if(s==R||s1==R||s2==R)
{m_score=m_score+100;
MessageBox("正确,请继续!");}
else {	KillTimer(1);
	CString s,s1,s2;
	s=compu(t1,t2,t3,t4);
	s1=compu(t3,t2,t1,t4);//四张牌的计算
    s2=compu(t4,t2,t1,t3);
  CListBox *p;
 p=(CListBox *)GetDlgItem(IDC_MTD);//把答案放到列表上
 p->AddString(s);
 p->AddString(s1);
 p->AddString(s2);

 
 MessageBox("有解!请看答案!");}}
noanswer=0;
UpdateData(false);}
else MessageBox("现在游戏暂停,请按继续!");
}


void CDot04_20View::OnTimer(UINT nIDEvent) 
{m_time++;  //在记时器中数字的变换
 m_score-- ;  //得分减少  
UpdateData(false);
	// TODO: Add your message handler code here and/or call default
	
	CFormView::OnTimer(nIDEvent);
}

void CDot04_20View::OnButton1()   //按下(键
{
	if(S==1&&noanswer==0&&stop==0)
{	UpdateData(true);
  m_input=m_input+"(";//在编辑框中显示符号
  UpdateData(false);
}
}

void CDot04_20View::OnButton2()   //按下+键
{if(S==1&&noanswer==0&&stop==0)
{	UpdateData(true);
  m_input=m_input+"+";
  UpdateData(false);}
	
}

void CDot04_20View::OnButton3()   //按下-键
{if(S==1&&noanswer==0&&stop==0)
{	UpdateData(true);
  m_input=m_input+"-";	
  UpdateData(false);
}	
}

void CDot04_20View::OnButton4()   //按下*键
{if(S==1&&noanswer==0&&stop==0)
{	UpdateData(true);
  m_input=m_input+"*";	
  UpdateData(false);}
  
}

void CDot04_20View::OnButton5()   //按下/键
{if(S==1&&noanswer==0&&stop==0)
{	UpdateData(true);
	m_input=m_input+"/";
	UpdateData(false);
}
}

void CDot04_20View::OnButton6()   //按下)键
{if(S==1&&noanswer==0&&stop==0)
{UpdateData(true);
   m_input=m_input+")";
   UpdateData(false);
}
}



void CDot04_20View::OnStop() 
{count++;
if(count%2==0)
stop=0;
else stop=1;
KillTimer(1);	// TODO: Add your command handler code here
	
}
//算法
CString CDot04_20View::compu(int i1, int i2, int i3, int i4)
{
	CString s;
	int i,j,k,l;
	float a[4];
	a[0]=(float)i1;
	a[1]=(float)i2;
	a[2]=(float)i3;
	a[3]=(float)i4;
	for (i=0;i<4;i++)
		for (j=0;j<4;j++)

⌨️ 快捷键说明

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