当前位置:C++技术网 > 资讯 > MFC实现的最简单的打地鼠游戏

MFC实现的最简单的打地鼠游戏

更新时间:2016-01-13 17:07:53浏览次数:1+次

  打地鼠游戏就是以随机数和命中检测的游戏,本来也是再简单不过的了。不过做的好的游戏,就用上了漂亮的图形画面,让游戏界面更加好看,效果就很棒。

    打地鼠游戏的核心就是一个随机和一个坐标检测。随机的是地鼠(目标矩形)的位置,鼠标单击后就得到当前的鼠标的坐标,然后检测坐标是否在地鼠头部的范围内。如果在这个范围内,就表示击中了,就要加分。然后显示总分。

    MFC实现这个不难,下面看代码,代码的解释请看原文,说的很清楚《win32实现的最简单的打地鼠游戏》:

void C打地鼠Dlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		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;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		PAINTSTRUCT	ps;
		p1DC=BeginPaint(&ps);
		p1DC->SelectObject(GetStockObject(GRAY_BRUSH));
		p1DC->Rectangle(rect);
		lp=msg.AllocSysString();
		wsprintf(lp,_T("当前得分:%d"),sum*100);
		p1DC->TextOutW(0,0,lp);
		EndPaint(&ps);
		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR C打地鼠Dlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}



void C打地鼠Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CDC* pDC=GetDC();
	if(PtInRect(&rect,point))
	{
		sum++;
		pDC->Ellipse(rect);
	}
	ReleaseDC(pDC);
	CDialogEx::OnLButtonDown(nFlags, point);
}


void C打地鼠Dlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	GetClientRect(rectClient);
	rect.left=rand()%(rectClient.right-200);
	rect.right=rect.left+100;
	rect.top=rand()%(rectClient.bottom-200);
	rect.bottom=rect.top+100;
	Invalidate();
	CDialogEx::OnTimer(nIDEvent);
}


int C打地鼠Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDialogEx::OnCreate(lpCreateStruct) == -1)
		return -1;

	// TODO:  在此添加您专用的创建代码
	SetTimer(1,1000,NULL);
	return 0;
}