在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例C/C++游戏开发 → c++ 飞机大战 小游戏源码

c++ 飞机大战 小游戏源码

C/C++游戏开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:9.77M
  • 下载次数:31
  • 浏览次数:505
  • 发布时间:2020-06-17
  • 实例类别:C/C++游戏开发
  • 发 布 人:会雨尘
  • 文件格式:.zip
  • 所需积分:4
 相关标签: 飞机大战 飞机

实例介绍

【实例简介】经典飞机大战硬核还原,注释详细,适合新手快速升级

注释详细,新手进步快速的参考实例,有问题联系QQ:2085728093

【实例截图】
【核心代码】void CPlaneApp::OnCreateGame()  //  WM_CREATE  //创建消息
{
//1.背景初始化
back.InitBack(m_hIns);
//2.玩家飞机初始化
plane.InitPlayer(m_hIns);
//3.启动所有的定时器
::SetTimer(m_hMainWnd, BACK_MOVE_TIMER_ID, 100, 0);  //背景定时器
::SetTimer(m_hMainWnd, PLAYER_MOVE_TIMER_ID, 1, 0); //玩家飞机定时器
::SetTimer(m_hMainWnd, PLAYER_SEND_TIMER_ID, 350, 0); //玩家飞机发炮弹
::SetTimer(m_hMainWnd, GUNNER_MOVE_TIMER_ID, 1, 0); //所有炮弹移动
::SetTimer(m_hMainWnd, CREATE_FOEPLANE_TIMER_ID, 500, 0); //创建敌人飞机
::SetTimer(m_hMainWnd, FOEPLANE_MOVE_TIMER_ID, 30, 0); //敌人飞机移动
::SetTimer(m_hMainWnd, CHANGE_SHOWID_TIMER_ID, 150, 0); //改变ShowID
}
void CPlaneApp::OnGameDraw() //  WM_PAINT 重绘
{
PAINTSTRUCT ps = { 0 };
HDC hdc = ::BeginPaint(m_hMainWnd, &ps);
HDC hMemDC = ::CreateCompatibleDC(hdc);

HBITMAP hBitmap = ::CreateCompatibleBitmap(hdc, 380, 550);

::SelectObject(hMemDC, hBitmap);

//--------------------------------
back.ShowBack(hMemDC); //显示背景
plane.ShowPlayer(hMemDC); //显示玩家飞机
gunBox.AllGunnerShow(hMemDC); //显示所有炮弹
foeBox.AllFoePlaneShow(hMemDC); //显示所有敌人飞机
blastBox.AllBlastFoePlaneShow(hMemDC); //显示所有爆照敌人飞机
//--------------------------------

::BitBlt(hdc, 0, 0, 380, 550, hMemDC, 0, 0, SRCCOPY);
::DeleteObject(hBitmap);
::DeleteDC(hMemDC);
::EndPaint(m_hMainWnd, &ps);
}
void CPlaneApp::OnGameRun(WPARAM nTimerID) //  WM_TIMER      定时器
{
if (nTimerID == CHANGE_SHOWID_TIMER_ID)
{
blastBox.ChangeShowID();
}
if (nTimerID == FOEPLANE_MOVE_TIMER_ID) //敌人飞机移动
{
foeBox.AllFoePlaneMove();
if (this->IsGameOver() == true)
{
::KillTimer(m_hMainWnd, BACK_MOVE_TIMER_ID);  //背景定时器
::KillTimer(m_hMainWnd, PLAYER_MOVE_TIMER_ID); //玩家飞机定时器
::KillTimer(m_hMainWnd, PLAYER_SEND_TIMER_ID); //玩家飞机发炮弹
::KillTimer(m_hMainWnd, GUNNER_MOVE_TIMER_ID); //所有炮弹移动
::KillTimer(m_hMainWnd, CREATE_FOEPLANE_TIMER_ID); //创建敌人飞机
::KillTimer(m_hMainWnd, FOEPLANE_MOVE_TIMER_ID); //敌人飞机移动
::KillTimer(m_hMainWnd, CHANGE_SHOWID_TIMER_ID); //改变ShowID
MessageBox(0, "Game Over!", "tip", MB_OK);
}
}
if (nTimerID == CREATE_FOEPLANE_TIMER_ID) //创建敌人飞机
{
foeBox.CreateFoePlane(m_hIns);
}
if (nTimerID == GUNNER_MOVE_TIMER_ID) //炮弹移动
{
gunBox.AllGunnerMove();
this->GunnerHitFoePlane();
}
if (nTimerID == PLAYER_SEND_TIMER_ID) //玩家发射炮弹
{
plane.SendGunner(m_hIns,gunBox);
}
if (nTimerID == BACK_MOVE_TIMER_ID) //背景移动
{
back.MoveBack();
}

if (nTimerID == PLAYER_MOVE_TIMER_ID) //玩家飞机移动
{
if (GetAsyncKeyState(VK_LEFT))
plane.MovePlayer(VK_LEFT);
if (GetAsyncKeyState(VK_RIGHT))
plane.MovePlayer(VK_RIGHT);
if (GetAsyncKeyState(VK_UP))
plane.MovePlayer(VK_UP);
if (GetAsyncKeyState(VK_DOWN))
plane.MovePlayer(VK_DOWN);
}



//重绘
RECT rect = { 0,0,380,550 };
::InvalidateRect(m_hMainWnd, &rect,FALSE);
}
void CPlaneApp::OnKeyDown(WPARAM nKey) //  WM_KEYDOWN 键盘消息
{
//plane.MovePlayer(nKey);
//RECT rect = { 0,0,380,550 };
//::InvalidateRect(m_hMainWnd, &rect, FALSE);
}
void CPlaneApp::GunnerHitFoePlane() //炮弹击中敌人飞机
{
bool bFlag = false;
//遍历所有炮弹
list<CGunner*>::iterator iteGun = gunBox.m_lstGunner.begin();
while (iteGun != gunBox.m_lstGunner.end())
{
//遍历所有敌人飞机
list<CFoePlane*>::iterator iteFoe = foeBox.m_lstFoePlane.begin();
while (iteFoe != foeBox.m_lstFoePlane.end())
{
if ((*iteFoe)->IsGunnerHitFoePlane(*iteGun) == true)
{
bFlag = true;
//删除炮弹
delete(*iteGun);
iteGun = gunBox.m_lstGunner.erase(iteGun);
//计算飞机血量
(*iteFoe)->DownBlood();
//判断是否爆炸
if ((*iteFoe)->IsBoom() == true)
{
//将爆炸敌人飞机添加到爆炸飞机盒子
blastBox.m_lstBlastPlane.push_back(*iteFoe);
foeBox.m_lstFoePlane.erase(iteFoe); //删除敌人飞机节点
}
break;
}
iteFoe ;
}
if (bFlag == false)
iteGun ;
else
bFlag = false;
}
}
bool CPlaneApp::IsGameOver()
{
list<CFoePlane*>::iterator ite = foeBox.m_lstFoePlane.begin();
while (ite != foeBox.m_lstFoePlane.end())
{
if ((*ite)->IsHitPlayer(plane) == true)
{
return true;
}
ite;
}
return false;

}



标签: 飞机大战 飞机

实例下载地址

c++ 飞机大战 小游戏源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警