- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
飞机大战游戏设计实验(山科大)教程
程序设计综合实践报告
姓名 学号 班级 计算机科学与技术 项目名称 飞机大战游戏设计实验 实习地点 实习时间 实习成绩 指导教师签字
信息科学与工程学院
2015年 7月25日
目 录
1. 概述
(3)每个关卡都会产生BOSS,BOSS横向移动,生命值200。战机和BOSS同时存在时,BOSS发射子弹。
(4)战机子弹打中敌机,敌机就会爆炸,同时玩家分数会增加1分,战机子弹打中BOSS,BOSS生命值减1,每得100分并且杀死BOSS过关。
2. 相关技术2.1CObList链表
在本程序中使用了CObList链表来分别存储敌机,炸弹,导弹,爆炸效果。CobList类似于一个双向链表,POSITION类型的变量为的键。使用POSITION,既可以作为表循环中的循环变量,也可以作为标记某个位置的标签。
class CObList : public CObject
//枚举类型
enum ObjType{enEnemy,enEnemy1,enBOSS,enBomb,enBall,enExplosion,enjiang,enshengming,enboer,};
CObList m_ObjList[9];
POSITION pos1,pos2; //定义指针
for( pos1 = m_ObjList[i].GetHeadPosition(); ( pos2 = pos1 ) != NULL ; ) //遍历链表
CGameObject* pObj = (CGameObject*)m_ObjList[i].GetNext( pos1 );
2.2获取矩形区域函数
CRect bRect = pBomb-GetRect();//获得矩形区域CRect GetRect()
{
return CRect(m_ptPos,CPoint(m_ptPos.x+10,m_ptPos.y+BOMB_HEIGHT));
}
static const int BOMB_HEIGHT = 20;//图片定义
2.3添加爆炸效果函数
//用新位置绘制图像
m_Images.Draw(pDC,m_nProcess,m_ptPos,ILD_TRANSPARENT);
m_nProcess++;
return TRUE;//添加爆炸效果
m_ObjList[enExplosion].AddTail(new CExplosion(mRect.left,mRect.top));
2.4弹出对话框函数
//过关时弹出对话框
int t = MessageBox(TEXT(敌人太过强大,少侠想重整旗鼓重新开始吗?),TEXT(Game Over!),MB_YESNO);
if (t==IDYES) {……}
if (t == IDNO) PostQuitMessage(0); //退出
5字体的输出
pMemDC-SetBkMode(TRANSPARENT);//文字背景透明
wsprintf(lifeleft, L当前血量:%d, m_pMe-HP );
pMemDC-SetTextColor( RGB(255, 255,0) ); //字体颜色
pMemDC-TextOutW(10,10, lifeleft, _tcslen(lifeleft));//字体位置
BOOL CEnemy::LoadImage(int t)
{
if (t==0)
return CGameObject::LoadImage(m_Images,IDB_BITMAP1,RGB(0,0,0),53,41,1);
return CGameObject::LoadImage(m_Images,IDB_BITMAP1,RGB(0,0,0),1,35,1);
}
CEnemy::LoadImage(yyyy);//载入图像
CEnemy1::LoadImage(yyyy);
2.8设置定时器
定时器告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。SetTimer(1,30,NULL); //设置每30毫秒刷新一次9双缓冲技术
关于双缓冲技术主要就是利用缓存的原理进行将所有的东西都先存在一个缓冲得虚拟的区域,然后再一次性的将所有的虚拟缓存中的东西都放入实在的存储器中。
//建立设备DC
m_pDC = new CClientDC(this);
//建立内存DC
m_pMemDC =
文档评论(0)