MFC飞机大战代码

MFC飞机大战代码,第1张

前不着村,后不着店,只能根据经验猜,请采纳:

首先,m_pMe应该是一个封装了窗口视区 *** 作的对象指针,m_MemDC是一个封装了临时位图数据的设备句柄,是一个CDC对象,它是在内存中"作画",而没有直接输出到屏幕。代码注解如下:

// 如果m_pMe对象指针不为NULL(即关联视区的对象存在)

if(m_pMe!=NULL)

{

   // 没有函数代码,不知道Draw功脊升羡能。

   m_pMe->Draw(m_pMemDC,FALSE)

   // 设置pMemDC的背景模式,即在输出文字时不擦除已存在的背景。

   pMemDC->SetBkMode(TRANSPARENT)

   // 把"生命值:"输出到指定坐标(0, 20)位置的内存位图中,4是字符串长度。

   pMemDC->TextOutW(0, 20, L"生命值:", 4)

   

   // 设置输出文字的颜色为红色。

   pMemDC->SetTextColor(RGB(255, 0, 0))

   CString c

   // 把Plane_Life数值转换成指定格式的字符串,并保存在CString对象中。

   c.Format(_T("%d"), Plane_Life)

   // 把Plane_Life结果输出到指定坐标(50, 20)位置的内存位图中。

   pMemDC->TextOutW(50, 20, c)

   // 把"得分:"输出到指定坐标(0, 40)位置的内存位图中。

   pMemDC->TextOutW(0, 40, L"得分:", 3)

   

   // 参照上面

   CString ss

   ss.Format(_T("%d"), score)

   pMemDC->TextOutW(50, 40, ss)

   pMemDC->TextOutW(0, 0, L"关卡:",3)

   

   // 参照上面

   CString cs

   cs.Format(_T("%d"樱拍), guan)

   笑差pMemDC->TextOutW(50, 0, cs)

}

这里涉及一个函数GetKeyState。

一般逻辑上是这样判断的:在PreTranslateMessage中,如果pMsg->wParam==SHOOTKEY设置一个标记位(并发射一颗),如果标记已经为真芹稿空,那么敬州SetTimer触发定时器,定时器中GetKeyState判断按键状态,如果为真,完成连续发射,为假,KillTimer。

同样在PretranslateMessage中,在WM_KEYUP消嫌瞎息中,KillTimer结束定时器。

如果希望做的更好,用线程取代定时器。

循环m_service和m_queue的时候,循环超界了。镇肆

int server::FindNextOne(int type)

{

int ret

int length=m_service.GetCount()

int comtype

POSITION pos = m_service.GetHeadPosition()

POSITION tpos = m_queue.GetHeadPosition()

while(pos!=NULL &&tpos!=NULL) //同步循团旅灶环m_service和m_queue

{

comtype =m_service.GetAt(pos)

if (comtype==type) {//如果m_service当前值与type相同

ret = m_queue.GetAt(tpos)//返回m_queue同一位置的值

m_service.RemoveAt(pos) //删塌扮除当前位置并返回

m_queue.RemoveAt(tpos)

return ret

}

m_service.GetNext(pos) //同时向后移动一个位置

m_queue.GetNext(tpos)

}

return -1//返回错误

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12457406.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存