附录4:防空战游戏程序 369 InvalidateRect( m plane. GetPlane();//修改飞机位置 m Plane. ChangePos o InvalidateRectm Plane. GetPlane(, FALSe) InvalidateRect( m bomb. GetBomb o);∥/修改炸弹位置 m Bomb. ChangePos(m Plane. GetPlane(. left InvalidateRect(m Bomb. GetBomb O, FALSE if(!m Stone. HaveStone o) /修改炮弹位置 CRect rect m Stone. GetStone o if(rect. top 3) m Stone Refill els InvalidateRect(rect) InvalidateRect(m Stone. GetStone o //判断射击效果 if(!m Stone. HaveStoneo&& ShotOn(m Plane. GetPlane(, m Stone. GetStone o)) SendMessage(ON WM GAMEOVER, YOU SHOT ME) else if( ShotOn(m Tank. Get(, m Bomb. GetBomb O)) SendMessage(ON WM GAMEOVER, I SHOT YOU) /自定义的游戏结束消息响应函数 void CMyWnd:: OnGame Over (UiNt tag KillTimer(1) if(tag = I SHOT YOU) MessageBox("我砸到你了!!!") 1 MessageBox("你击中我了!!!"); //按键消息响应函数 void CMy Wnd: OnKeyDown (UINT nChar, UINT nRepCnt, UINT nFlags if( n Char= VK LEFT)∥/使用〈键左移高炮附录 4:防空战游戏程序 - 369 - { InvalidateRect(m_Plane.GetPlane()); // 修改飞机位置 m_Plane.ChangePos(); InvalidateRect(m_Plane.GetPlane(), FALSE); InvalidateRect(m_Bomb.GetBomb()); // 修改炸弹位置 m_Bomb.ChangePos(m_Plane.GetPlane().left); InvalidateRect(m_Bomb.GetBomb(), FALSE); if(!m_Stone.HaveStone()) // 修改炮弹位置 { CRect rect = m_Stone.GetStone(); if(rect.top < 3) m_Stone.Refill(); else { InvalidateRect(rect); m_Stone.ChangePos(); } InvalidateRect(m_Stone.GetStone(), FALSE); } // 判断射击效果 if(!m_Stone.HaveStone() && ShotOn(m_Plane.GetPlane(), m_Stone.GetStone())) SendMessage(ON_WM_GAMEOVER, YOU_SHOT_ME); else if(ShotOn(m_Tank.GetTank(), m_Bomb.GetBomb())) SendMessage(ON_WM_GAMEOVER, I_SHOT_YOU); } // 自定义的游戏结束消息响应函数 void CMyWnd::OnGameOver(UINT tag) { KillTimer(1); if(tag == I_SHOT_YOU) MessageBox("我砸到你了!!!"); else MessageBox("你击中我了!!!"); } // 按键消息响应函数 void CMyWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { if(nChar == VK_LEFT) // 使用 < 键左移高炮