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

📄 guessdlg.cpp

📁 GuessNumber
💻 CPP
字号:
// GuessDlg.cpp : implementation file
//
#include<CString>


#include "stdafx.h"
#include "Guess.h"
#include "GuessDlg.h"
#include <stdio.h>
#include <sys/timeb.h>
#include <time.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGuessDlg dialog

CGuessDlg::CGuessDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CGuessDlg::IDD, pParent)
{



	count=0;
	number[0]=' ';
	number[1]=' ';
	number[2]=' ';
	number[3]=' ';

	GameState=1;

	ButtonControl=TRUE;


	InitializeNumber();   
	//{{AFX_DATA_INIT(CGuessDlg)
	m_strResult1 = _T("");
	m_strResult2 = _T("");
	m_strResult3 = _T("");
	m_strResult4 = _T("");
	m_strResult5 = _T("");
	m_strResult6 = _T("");
	m_strResult7 = _T("");
	m_strResult8 = _T("");
	m_strKey = _T("");
	m_strDis = _T("");
	m_nChance = 8;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CGuessDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CGuessDlg)
	DDX_Text(pDX, IDC_EDIT_Result1, m_strResult1);
	DDV_MaxChars(pDX, m_strResult1, 20);
	DDX_Text(pDX, IDC_EDIT_Result2, m_strResult2);
	DDV_MaxChars(pDX, m_strResult2, 20);
	DDX_Text(pDX, IDC_EDIT_Result3, m_strResult3);
	DDV_MaxChars(pDX, m_strResult3, 20);
	DDX_Text(pDX, IDC_EDIT_Result4, m_strResult4);
	DDV_MaxChars(pDX, m_strResult4, 20);
	DDX_Text(pDX, IDC_EDIT_Result5, m_strResult5);
	DDV_MaxChars(pDX, m_strResult5, 20);
	DDX_Text(pDX, IDC_EDIT_Result6, m_strResult6);
	DDV_MaxChars(pDX, m_strResult6, 20);
	DDX_Text(pDX, IDC_EDIT_Result7, m_strResult7);
	DDV_MaxChars(pDX, m_strResult7, 20);
	DDX_Text(pDX, IDC_EDIT_Result8, m_strResult8);
	DDV_MaxChars(pDX, m_strResult8, 20);
	DDX_Text(pDX, IDC_EDIT1_Key, m_strKey);
	DDV_MaxChars(pDX, m_strKey, 7);
	DDX_Text(pDX, IDC_EDIT_Display, m_strDis);
	DDV_MaxChars(pDX, m_strDis, 7);
	DDX_Text(pDX, IDC_EDIT_Chance, m_nChance);
	DDV_MinMaxInt(pDX, m_nChance, 0, 8);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CGuessDlg, CDialog)
	//{{AFX_MSG_MAP(CGuessDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_Confirm, OnConfirm)
	ON_BN_CLICKED(IDC_BUTTON_Ce, OnCe)
	ON_BN_CLICKED(IDC_BUTTON_NewGame, OnNewGame)
	ON_BN_CLICKED(IDC_BUTTON0, OnButton0)
	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_BN_CLICKED(IDC_BUTTON7, OnButton7)
	ON_BN_CLICKED(IDC_BUTTON8, OnButton8)
	ON_BN_CLICKED(IDC_BUTTON9, OnButton9)
	ON_BN_CLICKED(IDC_BUTTON_Help, OnBUTTONHelp)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGuessDlg message handlers

BOOL CGuessDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CGuessDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CGuessDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CGuessDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}


//////////////////////////////////////////////////////////////////////////////////
//////////////////////确认输入的四个数字,然后调用NumberCompare函数,判断结果.
//////////////////////最后改变一些数据
void CGuessDlg::OnConfirm() 
{
	if(!ButtonControl)
		return;
	


	if(number[0]==' '||number[1]==' '||number[2]==' '||number[3]==' ')
	{
		MessageBox("请输入四个数字!\n 然后按 \"确定\"!");
		return;
	}
	if(number[0]==number[1]||number[0]==number[2]||number[0]==number[3]||number[1]==number[2]||number[1]==number[3]||number[2]==number[3])
	{
		MessageBox("请输入四个不同数字!\n然后按 \"确定\"!");
		return;
	}
	switch(m_nChance)
	{
	case 8:NumCompare(m_strResult1);break;
	case 7:NumCompare(m_strResult2);break;
	case 6:NumCompare(m_strResult3);break;
	case 5:NumCompare(m_strResult4);break;
	case 4:NumCompare(m_strResult5);break;
	case 3:NumCompare(m_strResult6);break;
	case 2:NumCompare(m_strResult7);break;
	case 1:NumCompare(m_strResult8);break;
	default:break;
	}

	
//////////////////////////////////////////////////////////////////////
/////   Change some parameter	
	
	count=0;
	m_strDis="";
	for(int i=0;i<4;i++)
		number[i]=' ';



	m_nChance--;


	if(m_nChance==0&&ButtonControl)
	{
		GameState=0;
		ButtonControl=FALSE;
		m_strKey=CString(key_num[0])+" "+CString(key_num[1])
	    	+" "+CString(key_num[2])+" "+CString(key_num[3]);
		UpdateData(FALSE);
		MessageBox("游戏结束!\n再接再厉!");
		return;
	}
	UpdateData(FALSE);
	// TODO: Add your control notification handler code here
	
}


///////////////////////////////////////////////////////////
///////////////////删除一个数字
void CGuessDlg::OnCe() 
{
	if(count==0&&number[count]==' ')
		return;
	if(ButtonControl)
	{
		if(count==0)
			count=3;
		else
			count--;

		number[count]=' ';

    	m_strDis=CString(number[0])+" "+CString(number[1])+" "+CString(number[2])+" "+CString(number[3]);
		UpdateData(FALSE);
	}

	// TODO: Add your control notification handler code here
	
}


////////////////////////////////////////////////////
///////////重新游戏,初始化所有变量

void CGuessDlg::OnNewGame() 
{

	count=0;
	number[0]=' ';
	number[1]=' ';
	number[2]=' ';
	number[3]=' ';

	GameState=1;

	ButtonControl=TRUE;


	InitializeNumber();   

	m_strResult1 = _T("");
	m_strResult2 = _T("");
	m_strResult3 = _T("");
	m_strResult4 = _T("");
	m_strResult5 = _T("");
	m_strResult6 = _T("");
	m_strResult7 = _T("");
	m_strResult8 = _T("");
	m_strKey = _T("");
	m_strDis = _T("");
	m_nChance = 8;
	UpdateData(FALSE);
	
}










///////////////////////////////////////////////////////////////////////
/////////////用来输入数字

void CGuessDlg::OnButton0() 
{
	if(ButtonControl)
		set_num('0');
	else
		return;

	// TODO: Add your control notification handler code here
	
}

void CGuessDlg::OnButton1() 
{
	if(ButtonControl)
		set_num('1');
	else
		return;
	// TODO: Add your control notification handler code here
	
}

void CGuessDlg::OnButton2() 
{
	if(ButtonControl)
		set_num('2');
	else
		return;
	// TODO: Add your control notification handler code here
	
}

void CGuessDlg::OnButton3() 
{
	if(ButtonControl)
		set_num('3');
	else
		return;
	// TODO: Add your control notification handler code here
	
}

void CGuessDlg::OnButton4() 
{
	if(ButtonControl)
		set_num('4');
	else
		return;
	// TODO: Add your control notification handler code here
	
}

void CGuessDlg::OnButton5() 
{
	if(ButtonControl)
		set_num('5');
	else
		return;
	// TODO: Add your control notification handler code here
	
}

void CGuessDlg::OnButton6() 
{
	if(ButtonControl)
		set_num('6');
	else
		return;
	// TODO: Add your control notification handler code here
	
}

void CGuessDlg::OnButton7() 
{
	if(ButtonControl)
		set_num('7');
	else
		return;
	// TODO: Add your control notification handler code here
	
}

void CGuessDlg::OnButton8() 
{
	if(ButtonControl)
		set_num('8');
	else
		return;
	// TODO: Add your control notification handler code here
	
}

void CGuessDlg::OnButton9() 
{
	if(ButtonControl)
		set_num('9');
	else
		return;
	// TODO: Add your control notification handler code here
	
}
///////////////////////////////////////////////////////////////////////////////
////////////产生随机数
void CGuessDlg::InitializeNumber()
{
////////////////////////////////////////////////////////
//////   Get time message
 struct _timeb timebuffer;
   char *timeline;

   _ftime( &timebuffer );
   timeline = ctime( & ( timebuffer.time ) );
   int t1=int(timeline[17])-int('0');
   int t2=int(timeline[18])-int('0');

   int i,j,k,n;
   unsigned int millitm=timebuffer.millitm;
   int temp=5*(millitm+1)+(10*t1+t2+1)/15;


   	for(i=0;i<10&&temp>0;i++)
	{
	   	for(j=0;j<10&&temp>0;j++)
		{
			if(i==j)
				continue;
	    	for(k=0;k<10&&temp>0;k++)
			{
				if(i==k||j==k)
					continue;
			   	for(n=0;n<10&&temp>0;n++)
				{
					if(i==n||j==n||k==n)
						continue;
					temp--;
					if(temp==0)
						goto stop;
				}
			}
		}
		if(i==9)
			i=0;
	}
stop:
    key_num[0]=TypeChange(i);
	key_num[1]=TypeChange(j);
	key_num[2]=TypeChange(k);
	key_num[3]=TypeChange(n);




}



//////////////////////////////////////////////////////////////////////////////
//////////////////////The NumCompare function is used to compare the numbers(four numbers) 
//////////////////////that user put in with the key numbers

void CGuessDlg::NumCompare(CString &m_strResult)
{
	short Y_num,y_num;
	Y_num=0;
	y_num=0;
	for(int i=0;i<4;i++)
	{
		if(number[i]==key_num[i])
			Y_num++;
	}
	if(Y_num==4)
	{
		GameState=0;
		ButtonControl=FALSE;
		MessageBox("你赢了!");
		m_strKey=CString(key_num[0])+" "+CString(key_num[1])
	    	+" "+CString(key_num[2])+" "+CString(key_num[3]);
		UpdateData(FALSE);
	}

	else
	{
		if(number[0]==key_num[1]||number[0]==key_num[2]||number[0]==key_num[3])
			y_num++;
		if(number[1]==key_num[0]||number[1]==key_num[2]||number[1]==key_num[3])
			y_num++;
		if(number[2]==key_num[0]||number[2]==key_num[1]||number[2]==key_num[3])
			y_num++;
		if(number[3]==key_num[0]||number[3]==key_num[1]||number[3]==key_num[2])
			y_num++;
	}
	m_strResult=m_strDis+"  "+CString(TypeChange(Y_num))+"Y"+CString(TypeChange(y_num))+"y";

}
////////////////////////////////////////////////////////
///////////////////把一个用int表示的数字转化成用char表示
char CGuessDlg::TypeChange(int num)
{
	char temp;
	switch(num)
	{
	case 1:temp='1';break;
	case 2:temp='2';break;
	case 3:temp='3';break;
	case 4:temp='4';break;
	case 5:temp='5';break;
	case 6:temp='6';break;
	case 7:temp='7';break;
	case 8:temp='8';break;
	case 9:temp='9';break;
	case 0:temp='0';break;
	default:break;
	}
	return temp;

}
////////////////////////////////////////////////////////////
/////////////每次按下数字键便调用此函数,并显示输入
void CGuessDlg::set_num(char num)
{
	if(count==0)
	{
		number[1]=' ';
		number[2]=' ';
		number[3]=' ';
	}
	
	number[count]=num;
	m_strDis=CString(number[0])+" "+CString(number[1])+" "+CString(number[2])+" "+CString(number[3]);

	count++;

	if(count==4)
		count=0;

	UpdateData(FALSE);


}
//////////////////////////////////////////////////////
////////////提供帮助说明
void CGuessDlg::OnBUTTONHelp() 
{
	MessageBox("使用说明:\n1.电脑随机产生四个数字,用户每次用数字键输入四个数字,然后按\"Confirm\"按钮,在\"Results\"栏中出现结果。\n2.\"Results\"栏中\'y\'表示数字正确,但位置错误.\'Y\'表示数字和位置均正确.然后根据结果再猜下一组.\n3.每次游戏最多猜八次.\n4.最后在\"Key\"栏输出结果.\n5.结束后可退出或重玩.","Help");

	// TODO: Add your control notification handler code here
	
}

⌨️ 快捷键说明

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