飞机大战实训报告

合集下载

飞机大战实训报告

飞机大战实训报告

飞机大战实训报告作为一款经典的游戏,《飞机大战》已经深入人心,对于爱好游戏开发的人来说,掌握它的制作方法有助于提升自己的技能和经验。

在我的实训项目中,我选择了制作一款《飞机大战》游戏,下面是我的实训报告。

一、前期准备在开始制作游戏之前,我首先进行了一些前期准备,包括学习游戏开发工具和游戏设计思路的设计。

1.游戏开发工具的选择根据我的经验和需求,我选择了使用Cocos Creator 开发工具,因为它可以提供完整的游戏开发环境,包括UI 设计、动画制作、场景控制等功能,同时支持多平台发布。

2.游戏设计思路的设计在开发游戏之前,我需要对游戏的设计方案进行一定的考量。

我决定将游戏分为三个主要部分:开始场景、游戏场景和结束场景。

在开始场景中,我将为玩家提供游戏规则、操作说明等信息。

游戏场景将包括玩家战机、敌机、敌机攻击、奖励、分数等元素。

结束场景将显示玩家的得分、排名和游戏结束信息。

二、游戏开发1.开始场景开始场景是游戏的首屏,玩家可以在这里了解游戏规则和操作方法。

在这个场景中,我将使用Cocos Creator 的UI 设计功能创建一个开始界面。

在这个界面中,我会提供游戏开始、音乐开关、游戏规则等按钮。

2.游戏场景游戏场景是游戏的核心场景,游戏操作和游戏体验都在这里产生。

在这个场景中,我会使用Cocos Creator 的场景设计功能创建一个游戏场景。

在这个场景中,我将包含玩家战机、敌机、敌机攻击、奖励和分数等元素。

3.结束场景结束场景是游戏的最后一个场景,玩家可以在这里查看自己的得分和排名。

在这个场景中,我将使用Cocos Creator 的UI 设计功能创建一个结束界面。

三、游戏发布当游戏制作完成后,我需要将游戏发布到各个平台上。

对于HTML5 平台,我将使用Cocos Creator 提供的发布功能将游戏发布到浏览器上,对于移动平台,我将使用Cocos Creator 提供的发布功能将游戏发布到移动设备上。

飞机大作战游戏实训总结

飞机大作战游戏实训总结

飞机大作战游戏实训总结1.概述飞机大战游戏是在Microsoft Visual Studio编程软件的MFC环境下制作的一款游戏,界面简洁流畅、游戏方式简单。

游戏主要实现的功能和规则如下:(1)利用键盘中的上下左右键控制我方战机,空格键发射子弹。

战机初始有一定量的血量。

(2)屏幕上随机产生敌机,战机产生的数量和当前关卡,关卡越高,产生的敌机越多,游戏难度越大。

而且敌机产生的位置和速度是不确定的。

只有当我机位于敌机下方时,敌机会产生子弹,默认情况下是不发射任何子弹的。

(3)战机子弹打中敌机,敌机就会爆炸,同时玩家分数会增加,每得1000分进人下一关。

2.相关技术在设计该游戏时,用到许多技术,这里介绍几个相对重要的技术。

关于碰撞检测的相关函数:用CRect类的GetRect()函数可以获得当前对象的矩形区域,IntersectRect()并用此函数判断战机与敌机,子弹与战机,我方导弹与敌机,战机与物品是否相撞。

CObList链表:使用CObList链表来分别存储敌机,炸弹,导弹,爆炸效果。

CobList类似于一个双向链表,POSITION类型的变量为链表的键。

使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。

我们可以通过获得某元素的POSITION来访问它。

本程序中主要用到的函数有:GetHeadPosition()——获取链表首元素的POSITION;AddTail ()——向链表尾部添加新的元素;GetNext(POSITION&rPosition)返回当前rPosition指向的元素,并使rPosition指向下一个元素。

设置定时器、销毁定时器SetTimerO函数来设置定时器,控制每隔多少毫秒执行一次什么任务。

用Ki11Time()函数来销毁定时器。

双缓冲技术为了避免窗体频繁闪烁,引入双缓冲技术。

双缓冲的原理是先建立一个内存DC,捋游戏对象绘制到内存DC上,再一次性的把内存中绘制好的图形“拷贝”到设备DC上。

c++实训报告(飞机大战)

c++实训报告(飞机大战)
2. 相关技术
此次实训的飞机大战游戏其中的技术主要就是一些函数、内存释放和双缓冲技术。
2.1 透明贴图函数(技术一的名称)
此次实训中用于贴图的函数: LoadImage(CImageList& imageList,UINT bmpID,COLORREF crMask,int cx,int cy,int nInitial) //此函数主要用于将图片放入图像链表 imageList 中。 img_Bomb.Draw(pDC,0,m_m_ptPos,ILD_TRANSPARENT) // 此 函 数 主 要 是 讲 img_Bomb1 链表中的图像显示在 pDC 这个句柄中。ILD_TRANSPARENT 表示是透明贴图。 其中主要就是 CImageList 图像列表。它是相同大小图像的一个集合,每个集合中均以 0 为 图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。可以利 用 WINDOWS32 位应用程序接口函数 API 来绘制、建立和删除图像,并能实现增加、删除、替 换和拖动图像等操作。
3
信息科学与工程学院软件实践实训报告
2.3 获取矩形区域函数
CRect rc; //定义 GetClientRect(&rc); // 获 取 其 矩 形 区 域 获 取 结 果 课 为 : rc.Width() // 矩 形 区 域 的 宽 度
rc.Height() //矩形区域的高度 CRect tmpRect; tmpRect.IntersectRect(&bRect,eRect))//判断两个矩形是否有交接
实训报告
飞机大战游戏设计与开发
专业名称:__________ ____________

级:__________________

程序设计综合实践 飞机大战 实训报告

程序设计综合实践 飞机大战 实训报告

[在此处键入]实训报告飞机大战游戏设计与开发专业名称:班级:学号:信息科学与工程学院二零一八年七月目录1. 概述 (3)2. 相关技术 (3)2.1 碰撞检测 (3)2.2 COblist链表 (3)2.3 双缓冲技术 (4)2.4 背景滚动 (4)2.5 爆炸动画的实现 (4)2.6定时器的使用 (4)3. 总体设计与详细设计 (4)3.1 系统模块划分 (4)3.2 主要功能模块 (5)4. 编码实现 (7)5. 实训中遇到的主要问题及解决方法 (42)6. 实训体会 (43)1. 概述本次实训任务是以visual studio 2017为环境,利用MFC和C++编写一个飞机大战游戏。

其实现的主要功能为:实现游戏对象的爆炸特效,界面背景切换,文字提示和血条显示功能,奖励机制(血包、护盾、僚机、武器升级),大招和无敌模式等。

通过方向键控制战机移动,空格键发射子弹,击毁敌机可以得分。

游戏中可以按“X”开启或关闭无敌模式。

按“P”可以暂停。

游戏设有能量槽,能量不断积累,超过一半可以按“Z”键使用大招,大招为全屏攻击。

玩家收到攻击血量减少,血量为0游戏结束,显示“Game Over”,可以按“R”复活,继续游戏。

游戏设有关卡机制,每关开始一段时间后出现boss。

击败boss进入下一关。

boss有三种,难度依次增加。

第一种boss发射直线子弹,第二种boss发射散射子弹,第三种boss 两种子弹随机发射。

前三关背景图和boss固定,之后背景图与boss随机生成。

游戏中随机出现四种道具:血包:可以恢复一定的血量。

护盾:一段时间内无敌。

武器升级:升级玩家的武器,共三个等级。

僚机:获得一个僚机。

2. 相关技术2.1 碰撞检测游戏中需要处理一系列的碰撞,在处理碰撞时,可以认为每个对象是与位图大小相同的矩形,用Crect类的GetRect函数获取我方战机的矩形与敌机子弹矩形,然后新建一个矩形并且调用IntersectRect(&bRect,mRect)再用if条件语句判断,若矩形区域重叠不为空,则视为碰撞,在if语句中填写实现碰撞后的功能。

飞机大战实训日记

飞机大战实训日记

飞机大战实训日记
1. 第一天的实训主要是了解飞机大战游戏的基本操作和规则,包括如何控制飞机移动和射击,如何进行升级和购买武器等。

2. 在第二天的实训中,我们开始进行游戏的各种模式练习,了解不同模式的特点和游戏策略。

3. 第三天的实训中,我们开始进行组队游戏,分工合作,制定战术,更好地完成各种任务和挑战。

4. 在第四天的实训中,我们开始进行实际的比赛,与其他小组进行对抗,锻炼自己的竞技能力和团队合作能力。

5. 第五天的实训中,我们对比赛过程中出现的问题进行了总结和反思,分析自己的不足之处,制定下一步的改进方案。

6. 经过一周的实训,我们的游戏水平和团队合作能力都有了很大提高,已经能够独立完成各种任务和挑战。

7. 在实训过程中,我发现自己最大的问题是对游戏策略的理解不够深刻,需要更加努力的学习和实践。

8. 实训期间我们也注意到一些游戏中的问题和难点,需要更加深入的学习和研究,为今后的游戏发展提供更好的思路和方案。

9. 最后的比赛让我们深刻认识到团队合作和个人能力的重要性,大家都非常努力地为团队争取胜利,这样的经历让我们受益匪浅。

10. 在未来的实践过程中,我们希望能够更加深入地学习飞机大战游戏的各种技巧和策略,为团队的发展和个人能力的提升做出更多的努力。

飞机大战课设报告

飞机大战课设报告

飞机大战课设报告飞机大战是一款经典的游戏,也是计算机科学中常见的课设项目之一。

在这个项目中,我们需要设计一个能够实现基本飞机大战功能的程序,包括游戏场景,敌人飞机,玩家飞机以及子弹等元素。

在本文中,我们将介绍飞机大战的实现原理以及我们的设计思路。

一、游戏场景的实现游戏场景是飞机大战中最基本的元素之一。

我们需要在程序中创建一个游戏窗口,用于展示游戏场景。

在窗口中,我们需要绘制背景图像,以及玩家飞机和敌人飞机等元素。

为了实现更加真实的游戏体验,我们还可以添加背景音乐和音效。

二、敌人飞机的实现在飞机大战中,敌人飞机是玩家需要消灭的目标。

我们需要在程序中创建敌人飞机,并控制其在游戏场景中的运动轨迹。

为了增加游戏难度,我们可以让敌人飞机在不同的高度和速度上运动,同时还可以添加不同种类的敌人飞机,例如飞行速度更快或者攻击力更强的飞机。

三、玩家飞机的实现玩家飞机是游戏中最重要的元素之一。

我们需要在程序中创建玩家飞机,并控制其在游戏场景中的运动轨迹。

为了让玩家更好地操作飞机,我们还可以添加键盘控制功能,例如向上或向下移动、向左或向右转向等。

四、子弹的实现子弹是玩家攻击敌人飞机的主要武器。

我们需要在程序中创建子弹,并控制其在游戏场景中的运动轨迹。

为了增加游戏体验,我们还可以添加不同种类的子弹,例如攻击力更强或者射程更远的子弹。

五、游戏逻辑的实现游戏逻辑是飞机大战中最重要的部分之一。

我们需要实现游戏的开始和结束逻辑,例如游戏开始前的介绍页面和游戏结束后的排名页面。

同时,在游戏过程中,我们还需要实现敌人飞机的生成和移动、玩家飞机的控制和移动、子弹的生成和移动以及碰撞检测等功能。

六、总结在本文中,我们介绍了飞机大战的实现原理以及我们的设计思路。

通过以上的步骤,我们可以实现一个基本的飞机大战游戏,并在程序中添加更多的功能和元素,以实现更加完整的游戏体验。

飞机大战不仅仅是一款游戏,更是一个综合性的课设项目,可以让我们更好地掌握计算机科学中的相关知识。

飞机大战游戏课程设计报告

飞机大战游戏课程设计报告

飞机大战游戏课程设计报告一、课程目标知识目标:1. 学生能理解并掌握编程语言的基本语法和结构,如变量、循环、条件语句等。

2. 学生能运用所学的编程知识,设计和开发一个简单的“飞机大战”游戏。

3. 学生能理解游戏设计中的数学原理,如坐标系统、碰撞检测等。

技能目标:1. 学生能够运用编程工具(如Scratch或Python等)进行游戏设计和开发,提高编程实践能力。

2. 学生通过团队协作,培养沟通与协作能力,学会共同解决问题。

3. 学生能够运用创新思维,设计和优化游戏功能,提高游戏的可玩性和趣味性。

情感态度价值观目标:1. 学生培养对计算机编程的兴趣和热情,激发学习动力。

2. 学生在游戏设计和开发过程中,培养自信心和成就感,增强自主学习能力。

3. 学生通过游戏设计,体会团队合作的重要性,学会尊重他人,培养良好的团队精神。

课程性质:本课程为信息技术学科,以实践为主,注重培养学生的动手能力和创新思维。

学生特点:五年级学生,对新鲜事物充满好奇心,具备一定的逻辑思维能力,喜欢动手操作。

教学要求:教师应引导学生通过自主学习、合作探究的方式,完成游戏设计和开发任务,关注学生的学习过程,及时给予反馈和指导,提高学生的综合素质。

在教学过程中,将课程目标分解为具体的学习成果,以便于教学设计和评估。

二、教学内容本课程教学内容依据课程目标进行选择和组织,主要包括以下几部分:1. 编程基础知识:- 变量的定义和使用- 常用的数据类型- 程序流程控制(条件语句、循环语句)- 函数的定义和调用2. 游戏设计原理:- 游戏的基本元素(玩家、敌人、子弹等)- 坐标系统与运动控制- 碰撞检测与游戏逻辑3. 编程工具与操作:- Scratch或Python编程环境的使用- 图形和角色的绘制与导入- 事件处理与声音效果的应用4. 项目实践:- 设计并开发“飞机大战”游戏- 团队合作与分工- 游戏测试与优化教学内容安排和进度:第一课时:介绍编程基础知识和游戏设计原理,让学生了解课程目标和要求。

飞机大战实训报告

飞机大战实训报告

程序设计综合实践实习报告学院名称专业班级学生姓名学号指导教师山东科技大学一、实习题目:飞机大战游戏的设计与实现二、实习时间:18周~ 19周实习地点:三、实习任务:1.基本功能要求:飞机大战游戏必须运用透明贴图、按键处理、定时控制、双缓冲技术等技术实现战机(玩家)和敌机(计算机)对战功能2.扩展功能:在完成基本功能基础上可以增加双人对战、游戏积分制、声音效果、多种子弹类型、客机类型、游戏关卡设计、多种类型敌机、游戏中间结果存贮等功能四、小组分工说明:自己完成五、实习成绩六、指导教师对实习的评语:指导教师(签章):2015年月日目录1.概述 (4)1.1实训项目简介 (4)1.2实训项目功能说明 (4)2.相关技术 (5)2.1透明贴图技术 (5)2.2 获取矩形区域并判断两个矩形区域是否相撞 (5)2.3鼠标控制我方战机 (5)2.4 Windows定时器技术 (6)2.5 CObList链表 (6)2.6对话框的应用 (7)2.7双缓冲技术 (7)3.需求分析 (7)3.1功能需求分析 (7)3.2 数据需求分析 . (7)3.3 行为需求分析 (7)3.4 其他需求 (7)4.总体设计与详细设计 (8)4.1 系统模块划分 (8)4.2 主要功能模块 (8)4.2.1系统主要类图 (8)4.2.2飞机大战游戏设计执行流程图 (8)4.3 扩展功能设计思路 (9)4.4 软件结构设计体会 (9)5.编码实现 (10)5.1绘制游戏背景位图的程序 (10)5.2各个游戏对象的绘制 (10)5.3我方战机位置的动态控制 (12)5.4各个游戏对象碰撞的实现 (13)5.5游戏界面输出当前游戏信息 (15)6.测试情况说明 (17)6.1主要模块测试情况 (17)6.2 主要功能测试情况 (18)7. 实训中遇到的主要问题及解决方法 (19)8.实训收获与体会 (19)1. 概述1.1实训项目简介本次实训项目是应用MFC编程完成一个界面简洁、运行流畅、操作简单、易于上手的飞机大战。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AddTail():将新的元素添加到链表最后;
GetNext( POSITION& rPosition ):使rPosition指向下一个元素。
设置定时器
SetTimer()函数来设置定时器。
背景滚动
为了让游戏场景更加逼真,游戏节奏更加合理,可以通过让背景滚动来提高游戏的场景效应,实现这一技术时,可以将一张背景图片复制为2张,从上到下连续的拼接在一起,使其不会出现图片的卡顿和瞬移现象。
4.战机子弹打中敌机,敌机就会爆炸,boss血量随关卡升高而增多,打败敌机或者boss会有分数加成。
5.设有无敌模式和普通模式,无敌模式大招无限,生命无限,战机导弹直接升至最高等级。
2.相关技术
碰撞检测
用CRect类的GetRect()函数可以获得当前对象的矩形区域,IntersectRect()并用此函数判断二者是否碰撞。
CBall* pBall = (CBall*)m_ObjList[endazhao].GetNext(bPos1);
CRect mRect = pBall->GetRect();
CRect tmpRect;
if (&mRect, bRect))
{
dazhao++;
emoveAt(bPos2);
delete pBall;
if (level == 5&&bn==0&&count>=150&&count<=152)
{
m_ObjList[enboss].AddTail(new Cboss);
bxt = 1;
bn++;
}
if (level>5&&count%200==0&&bn==0)
{
m_ObjList[enboss].AddTail(new Cboss);
for (int i = -level + 1; i <= level - 1; i++)
{
t = new CBossball + 20, + 30);
t->zx = int*sin(* double(i)) / 9));
t->zy = int*cos(* double(i)) / 9));
m_ObjList[enBossball].AddTail(t);
delete pEnemy;
break;
}
}
}
etHeadPosition(); (mPos4 = mPos3) != NULL;)
{
CBomb* pBomb = (CBomb*)m_ObjList[enBomb].GetNext(mPos3);
CRect bRect = pBomb->GetRect();
}
}
num = 100;
}
num--;
etHeadPosition(); ePos != NULL;)
{
CEnemy* pEnemy = (CEnemy*)m_ObjList[enEnemy].GetNext(ePos);
if (!pEnemy->Fired())
continue;
CPoint ePt = pEnemy->GetPoint();
}
}
}
if (GetKey(VK_F1) == 1)etHeadPosition(); ePos != NULL;)
{
Cboss* pEnemy = (Cboss*)m_ObjList[enboss].GetNext(ePos);
CPoint ePt = pEnemy->GetPoint();
CBossball * t;
CBall* pBall = (CBall*)m_ObjList[enEnemy].GetNext(nPos1);
CRect bRect = pBall->GetRect();
CRect tmpRect;
if (&bRect, mnRect))
{
ddTail(
new CExplosion,
);
emoveAt(nPos2);
if (pObj && !pObj->Draw(pMemDC, FALSE))
{
m_ObjList[i].RemoveAt(pos2);
delete pObj;
}
}
}}
ddTail(new CEnemy);
}
nCreator--;
ddTail(new Cda);
count++;
}
ddTail(new Cshengming);
CRect mRect = pEnemy->GetRect();
CRect tmpRect;
if (&bRect, mRect))
{
count++;
number += 5;
ddTail(
new CExplosion,
);
emoveAt(mPos2);
delete pBomb;
}
emoveAt(ePos2);
内存释放技术
这个程序中有大量的地方需要使用内存,如果不及时删除会出现闪图等情况,容易导致程序崩溃,要及时释放内存资源。
3.总体设计与详细设计
系统模块划分
主要功能模块
类关系图:
4.编码实现
etHeadPosition(); (pos2 = pos1) != NULL; )
{
CGameObject* pObj = (CGameObject*)m_ObjList[i].GetNext(pos1);
POSITION ePos3 = NULL, ePos4 = NULL;
for (ePos3 = m_ObjList[enBall].GetHeadPosition(); (ePos4 = ePos3) != NULL;)
{
CBall* pBall = (CBall*)m_ObjList[enBall].GetNext(ePos3);
bxt = 1;bn++;
}
if (m_pMe == NULL)
return;
ddTail(new CBomb + 20, + 10));
}
if (level == 2 && wu == 0)
{
m_ObjList[enBomb].AddTail(new CBomb + 10, + 30));
m_ObjList[enBomb].AddTail(new CBomb + 30, + 30));
CRect mRect = pBall->GetRect();
CRect tmpRect;
if (&bRect, mRect))
{
emoveAt(mPos4);
delete pBomb;
count++;
}
ddTail(new Cboss);
bxt = 1;bn++;
}
if (level == 2&&bn==0&&count>=50&&count<=52)
{
m_ObjList[enboss].AddTail(new Cboss);
bxt = 1;bn++;
}
if (level == 3&&bn==0&&count>=75&&count<=77)
{
shengming++;
emoveAt(bPos2);
delete pBall;
}
}
}
etHeadPosition();(mPos2 = mPos1) != NULL;)
{
CBomb* pBomb = (CBomb*)m_ObjList[enBomb].GetNext(mPos1);
CRect bRect = pBomb->GetRect();
BOOL by = FALSE;
ddTail(t);
}
}
}
}
etHeadPosition(); (nPos4 = nPos3) != NULL;)
{பைடு நூலகம்
CBall* pBall = (CBall*)m_ObjList[enBossball].GetNext(nPos3);
CRect bRect = pBall->GetRect();
m_ObjList[enBomb].AddTail(new CBomb + 30, + 30));
m_ObjList[enBomb].AddTail(new CBomb + 20, + 30));
m_ObjList[enBomb].AddTail(new CBomb, + 30));
m_ObjList[enBomb].AddTail(new CBomb + 40, + 30));
m_ObjList[enBomb].AddTail(new CBomb , + 30));
m_ObjList[enBomb].AddTail(new CBomb + 40, + 30));
}
if (wu == 1)
{
m_ObjList[enBomb].AddTail(new CBomb + 10, + 30));
相关文档
最新文档