C++课程设计报告【飞机大战】

合集下载

飞机大战c课程设计

飞机大战c课程设计

飞机大战 c课程设计一、课程目标知识目标:1. 学生能理解并掌握编程语言中的基础语法和结构,如变量、循环、条件语句等;2. 学生能运用所学的编程知识,设计并实现一个简单的“飞机大战”游戏;3. 学生能了解游戏设计的基本流程和原理,包括游戏规则、角色设计、界面布局等。

技能目标:1. 学生能运用编程软件,独立编写代码,实现游戏功能;2. 学生能在团队协作中发挥自己的专长,与他人共同完成游戏设计;3. 学生能通过分析问题、解决问题的过程,培养逻辑思维和编程实践能力。

情感态度价值观目标:1. 学生能对编程产生兴趣,树立学习信息技术的自信心;2. 学生能在游戏设计过程中,体会团队合作的重要性,培养团队精神和沟通能力;3. 学生能认识到编程在现实生活中的应用,增强创新意识,提高对科技发展的关注。

分析课程性质、学生特点和教学要求:本课程为信息技术学科,针对五年级学生设计。

此阶段学生具有一定的逻辑思维能力和动手实践能力,对新鲜事物充满好奇。

课程以“飞机大战”为主题,结合编程知识,旨在激发学生的学习兴趣,培养其编程技能和团队协作能力。

在教学过程中,注重引导学生主动探究、实践,鼓励创新,以提高学生的信息技术素养。

通过本课程的学习,使学生能够在实践中掌握编程知识,培养良好的情感态度价值观。

二、教学内容1. 编程基础:变量、数据类型、运算符;条件语句(if-else);循环语句(for、while);函数定义与调用。

教学安排:2课时。

2. 游戏设计原理:游戏规则、角色设计、界面布局;游戏循环、事件处理。

教学安排:1课时。

3. 编程实践:- 设计飞机角色:使用绘图软件设计飞机外观,导入编程环境。

- 编写飞机移动代码:实现飞机上下左右移动功能。

- 编写敌机生成与移动代码:实现敌机自动生成并向下移动功能。

- 编写子弹发射与敌机销毁代码:实现子弹发射及击中敌机效果。

- 游戏结束判定:判断飞机与敌机相撞,游戏结束。

教学安排:4课时。

飞机大战课设报告

飞机大战课设报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

飞机大战c语言课课程设计

飞机大战c语言课课程设计

飞机大战c语言课课程设计一、教学目标本课程旨在通过学习飞机大战C语言编程,让学生掌握C语言的基本语法、数据结构、算法和编程思想,培养学生解决实际问题的能力。

具体目标如下:1.知识目标:–掌握C语言的基本语法和编程规范。

–理解数据类型、变量、常量的概念及使用。

–学会使用条件语句、循环语句进行程序控制。

–熟悉函数的定义和调用。

–掌握常用的数据结构(如数组、链表、栈、队列等)。

–了解常用的算法和编程思想(如递归、分治、贪心等)。

2.技能目标:–能够运用C语言编写简单的程序,解决实际问题。

–具备良好的编程习惯,能够阅读和理解他人的代码。

–能够使用调试工具对程序进行调试和优化。

3.情感态度价值观目标:–培养学生对计算机科学的兴趣和热情。

–培养学生勇于探索、创新的精神。

–培养学生团队合作、沟通协调的能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.C语言基本语法和编程规范。

2.数据类型、变量、常量的概念及使用。

3.条件语句、循环语句的用法。

4.函数的定义和调用。

5.数组、链表、栈、队列等数据结构的使用。

6.常用的算法和编程思想。

7.实战项目:飞机大战游戏开发。

三、教学方法为了提高教学效果,我们将采用以下几种教学方法:1.讲授法:通过讲解C语言的基本语法、数据结构、算法和编程思想,使学生掌握相关知识。

2.案例分析法:通过分析实际案例,使学生更好地理解知识点,提高编程能力。

3.实验法:让学生动手实践,编写程序,培养学生的实际操作能力。

4.小组讨论法:鼓励学生分组讨论,培养团队合作精神和沟通协调能力。

四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:《C程序设计语言》(K&R)或《C Primer Plus》。

2.参考书::《C语言编程思想》、《数据结构与算法分析》。

3.多媒体资料:教学PPT、视频教程、在线编程练习题。

4.实验设备:计算机、网络环境、编程调试工具(如VS Code、GCC等)。

中南大学电信-C语言飞机大战实验报告资料

中南大学电信-C语言飞机大战实验报告资料
char g_back[g_back_x][g_back_y]=
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
{
for(j=1;j<g_back_y-1;j++)
{
if((g_back[i-1][j]==2)||(g_back[i-1][j]==4))
continue;
g_back[i][j]=g_back[i-1][j];
}
}
produce_air();
}
//英雄飞机发子弹函数
void air_shot(int x,int y)
}
pEnd=ptemp;
}
//子弹移动函数
void shot_move()
{
struct Node *ptemp=pHead;
struct Node *ptemp1=pHead;
struct Node *pt=pHead;
int i;
int k;
while(ptemp1!=NULL)
{
ptemp=ptemp1;
for(i=0;i<g_back_x;i++)
{
for(j=0;j<g_back_y;j++)
{
switch(g_back[i][j])
{
case 0:strcat(strback[i]," ");
break;
case 1:strcat(strback[i],"■");

c++课设报告飞机大战

c++课设报告飞机大战

c++课设报告飞机大战飞机大战是一款经典的游戏,可以作为C++课设的一个很好的主题。

在这份报告中,我将从多个角度来回答你关于飞机大战的问题。

首先,我们可以从游戏的基本要求和功能开始。

飞机大战游戏通常包括以下几个方面的功能,游戏界面设计、玩家飞机的控制、敌机的生成与控制、子弹的发射与碰撞检测、得分系统和游戏难度的逐渐增加等。

你可以详细描述每个功能的实现方法,并给出相应的代码示例。

其次,你可以从算法和数据结构的角度来讨论飞机大战的实现。

例如,你可以介绍如何使用数组或链表来存储和管理敌机、子弹等游戏元素,如何使用递归或循环实现游戏的主循环,以及如何使用碰撞检测算法来判断游戏元素之间的碰撞等。

这些算法和数据结构的选择将直接影响游戏的性能和可玩性。

此外,你还可以从图形界面设计的角度来讨论飞机大战的实现。

C++中可以使用图形库(如SFML、OpenGL等)来创建游戏窗口、绘制游戏元素和处理用户输入等。

你可以介绍如何使用这些图形库来实现游戏的界面,并给出相应的代码示例。

另外,你可以考虑添加一些额外的功能来增加游戏的趣味性和挑战性。

例如,你可以添加道具系统,让玩家可以获得各种增益效果;你还可以设计多个关卡,每个关卡的敌机种类和难度都不同;你还可以设计BOSS战,让玩家在游戏的最后面对更强大的敌人等。

这些额外的功能可以提升游戏的可玩性,使得玩家更加投入其中。

最后,你可以总结整个课设的过程和心得体会。

你可以讨论在实现飞机大战游戏的过程中遇到的问题和解决方法,以及你对C++编程和游戏开发的理解和体会。

同时,你还可以对未来可能的改进和扩展提出建议。

在这份报告中,我从游戏功能、算法和数据结构、图形界面设计、额外功能和总结等多个角度回答了你关于飞机大战的问题。

希望这些回答能够帮助你完成一份全面完整的C++课设报告。

c飞机大战课程设计

c飞机大战课程设计

c 飞机大战课程设计一、课程目标知识目标:1. 学生能够理解飞机大战游戏背景,掌握相关的历史知识。

2. 学生能够描述飞机大战游戏中的基本物理原理,如重力、惯性等。

3. 学生能够解释飞机大战游戏中的编程逻辑,如角色移动、碰撞检测等。

技能目标:1. 学生能够运用所学的编程知识,设计并实现一个简单的飞机大战游戏。

2. 学生能够运用创新思维,对飞机大战游戏进行改进和优化。

3. 学生能够通过合作与交流,解决在游戏设计过程中遇到的问题。

情感态度价值观目标:1. 学生培养对科学技术的热爱和兴趣,激发探索未知世界的欲望。

2. 学生培养团队协作意识,学会尊重和倾听他人的意见。

3. 学生培养勇于面对挑战的精神,不断提高自己的动手能力和解决问题的能力。

课程性质:本课程为信息技术学科拓展课程,旨在让学生在实践操作中学习编程知识,提高创新能力。

学生特点:五年级学生对新鲜事物充满好奇,具备一定的信息技术基础,喜欢动手实践和团队合作。

教学要求:教师应注重理论与实践相结合,引导学生主动探索,关注学生的个体差异,提高学生的综合素质。

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

二、教学内容1. 介绍飞机大战游戏背景及历史,让学生了解游戏与科技发展的关系。

相关教材章节:第一章,信息技术与生活。

2. 讲解飞机大战游戏中所涉及的物理原理,如重力、惯性、运动轨迹等。

相关教材章节:第二章,计算机与物理。

3. 基本编程知识学习,包括变量、循环、条件语句等,为飞机大战游戏编程打下基础。

相关教材章节:第三章,编程基础。

4. 设计飞机大战游戏框架,学习角色移动、碰撞检测等编程逻辑。

相关教材章节:第四章,游戏设计与制作。

5. 实践操作:分组进行飞机大战游戏设计,学生自主探究,教师指导解答疑问。

相关教材章节:第五章,实践与探究。

6. 游戏优化与改进,培养学生的创新思维和解决问题的能力。

相关教材章节:第六章,创新与拓展。

教学内容安排和进度:第一课时:介绍飞机大战游戏背景及历史,激发学生兴趣。

c预言飞机大战课程设计报告

c预言飞机大战课程设计报告

c预言飞机大战课程设计报告一、课程目标知识目标:1. 学生能理解c语言编程的基本概念,如变量、数据类型、控制结构等;2. 学生能掌握c语言中数组的使用,理解其在游戏开发中的应用;3. 学生能了解飞机大战游戏的基本逻辑和编程实现。

技能目标:1. 学生能运用c语言编写简单的飞机大战游戏程序;2. 学生能通过调试和修改代码,优化游戏性能;3. 学生能运用所学知识,发挥创意,设计和开发具有个人特色的飞机大战游戏。

情感态度价值观目标:1. 学生培养对编程的兴趣和热情,提高信息素养;2. 学生通过团队协作,培养沟通能力和合作精神;3. 学生在游戏开发过程中,体验科技创新的乐趣,增强自信心。

课程性质:本课程为实践性较强的学科,结合c语言编程和游戏开发,旨在培养学生的编程兴趣和实际操作能力。

学生特点:六年级学生对新鲜事物充满好奇,具备一定的逻辑思维能力,但编程基础薄弱,需要从基础开始逐步引导。

教学要求:教师应注重理论与实践相结合,关注学生个体差异,引导他们通过实践掌握编程技能,并在此过程中培养情感态度价值观。

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

二、教学内容1. c语言基础知识回顾:变量、数据类型、运算符、控制结构(条件语句、循环语句);2. 数组的使用:一维数组、二维数组,数组在游戏中的应用;3. 飞机大战游戏设计:游戏框架搭建、角色设定、控制逻辑、碰撞检测;4. 编程实践:编写飞机大战游戏程序,包括角色移动、射击、敌机生成、得分统计等;5. 游戏优化与调试:分析程序性能,优化代码,调试游戏,提升游戏体验;6. 创意发挥:鼓励学生发挥个人创意,设计和开发独特的飞机大战游戏。

教学内容安排与进度:第一课时:回顾c语言基础知识,讲解数组的使用;第二课时:介绍飞机大战游戏设计,搭建游戏框架;第三课时:编写游戏角色控制逻辑,实现角色移动和射击;第四课时:实现敌机生成和碰撞检测,完成得分统计;第五课时:游戏优化与调试,分享创意发挥成果。

c语言飞机大战实践报告

c语言飞机大战实践报告

c语言飞机大战实践报告C语言飞机大战实践报告引言:飞机大战是一款经典的游戏,它让玩家扮演一架战斗机,在天空中与敌人进行激烈的战斗。

本报告将详细介绍我们实践过程中所采取的步骤和方法,以及所遇到的挑战和解决方案。

第一部分:项目准备在开始编写代码之前,我们首先进行了项目准备工作。

我们使用C语言作为开发语言,并使用了一个基本的图形库来实现游戏画面的显示。

我们选择了一个简单的控制台窗口来作为游戏的界面,这样我们可以利用图形库提供的函数来绘制游戏场景和玩家的飞机。

第二部分:项目架构在开始编写代码之前,我们进行了项目架构的设计。

我们将游戏分为几个模块,每个模块负责不同的功能。

首先是游戏引擎模块,它负责处理游戏的主流程,包括初始化游戏界面、接收用户输入、更新游戏状态和绘制游戏画面。

然后是游戏逻辑模块,它负责实现游戏的逻辑规则,比如玩家和敌人的移动、碰撞检测和计分等。

最后是图形绘制模块,它负责将游戏逻辑模块的数据转换成图形数据,并在界面上进行绘制。

第三部分:编写代码在完成项目架构设计后,我们开始编写代码。

首先是游戏引擎模块的实现,我们使用了一个循环来不断更新游戏状态和绘制游戏画面。

然后是游戏逻辑模块的实现,我们使用了一些基本的算法来处理玩家和敌人的移动和碰撞检测。

最后是图形绘制模块的实现,我们使用了图形库提供的函数来实现游戏画面的绘制。

第四部分:调试和优化在完成代码编写后,我们进行了调试和优化工作。

我们通过测试不同的输入和场景来验证代码的正确性,并修复了一些错误和bug。

此外,我们还尝试优化代码的性能,使游戏的运行更加流畅和稳定。

第五部分:心得体会通过这次实践,我们学到了很多关于C语言和游戏开发的知识。

我们了解到C语言是一种非常强大和灵活的编程语言,可以用来实现各种不同的应用程序。

同时,我们也体会到了游戏开发的复杂性和挑战性,需要综合运用各种不同的技术和算法来实现一个完整的游戏。

结论:通过这次实践,我们成功地完成了一款简单的C语言飞机大战游戏。

飞机大战c语言程序设计报告

飞机大战c语言程序设计报告

飞机大战c语言程序设计报告飞机大战是一款经典的射击类游戏,玩家通过控制飞机的移动和射击来击败敌人。

在本次C语言程序设计报告中,我将介绍飞机大战游戏的设计思路、主要功能和实现方法。

首先,我们需要设计游戏的界面。

使用C语言的图形库,我们可以创建一个窗口来展示游戏。

窗口中央是玩家操控的飞机,周围是敌人飞机和其他的游戏元素。

我们可以使用ASCII字符来绘制游戏界面,使用光标移动和颜色控制函数来实现动态效果。

接下来,我们需要实现玩家飞机的控制。

通过监听键盘输入,我们可以控制飞机的移动。

当按下方向键时,可以让飞机上下左右移动。

同时,我们还需要实现飞机的射击功能。

当用户按下空格键时,飞机会发射子弹,击中敌人飞机会得分。

在游戏中,我们还需要实现敌人飞机的出现和移动。

为了增加游戏的难度,可以设置多个敌人飞机,它们会从屏幕的上方或者右方进入游戏界面,并以一定的速度进行移动。

当敌人飞机飞出屏幕或者被玩家击中时,会消失并重新生成新的敌人飞机。

除了敌人飞机,我们还可以在游戏中添加其他的游戏元素,如道具箱、障碍物等。

玩家可以通过接触道具箱获得奖励,如增加射速、伤害等。

而障碍物可以增加游戏的挑战性,玩家需要躲避障碍物的同时击败敌人飞机。

最后,我们还可以为游戏增加音效和背景音乐,增强游戏的趣味性和可玩性。

通过调用C语言的音频库,我们可以实现在游戏中播放声音。

总结起来,飞机大战是一款非常经典和有趣的游戏。

通过本次C语言程序设计,我们可以深入了解游戏的设计思路和实现方法。

希望本次报告能够对大家了解飞机大战及其相应的C语言程序设计有所帮助。

飞机大战c课程设计报告

飞机大战c课程设计报告

飞机大战c 课程设计报告一、课程目标知识目标:1. 让学生掌握飞机大战C课程中的基础编程概念,如变量、循环和条件语句。

2. 使学生了解游戏设计的基本流程,包括游戏规则、角色设计和用户交互。

3. 帮助学生理解坐标系在游戏编程中的应用。

技能目标:1. 培养学生运用编程语言解决问题和实现简单游戏的能力。

2. 提高学生运用逻辑思维进行程序设计和调试的能力。

3. 培养学生团队协作和沟通能力,共同完成飞机大战游戏项目。

情感态度价值观目标:1. 激发学生对编程和游戏设计的兴趣,培养其主动探索和创新的意识。

2. 培养学生面对困难和挑战时保持积极心态,勇于尝试和克服困难。

3. 培养学生遵守网络道德规范,正确对待游戏,养成良好的生活习惯。

分析课程性质、学生特点和教学要求:1. 课程性质:本课程为信息技术课程,结合游戏设计,提高学生的编程能力和逻辑思维。

2. 学生特点:五年级学生,具备一定的计算机操作能力和逻辑思维能力,对游戏有浓厚兴趣。

3. 教学要求:课程内容要贴近学生生活,注重实践操作,培养实际编程能力。

1. 熟练运用编程语言,独立完成飞机大战游戏的设计与编程。

2. 提高解决问题的能力和团队协作精神,为后续学习打下坚实基础。

3. 树立正确的价值观,养成良好的学习习惯,激发对信息技术的热爱。

二、教学内容1. 课程导入:介绍飞机大战游戏的基本概念,激发学生兴趣,明确学习目标。

教材章节:《信息技术》五年级下册第四章第一节。

2. 编程基础:讲解变量、循环和条件语句等编程概念,为游戏设计打下基础。

教材章节:《信息技术》五年级下册第四章第二节。

3. 游戏设计流程:介绍游戏设计的基本流程,包括游戏规则、角色设计和用户交互。

教材章节:《信息技术》五年级下册第四章第三节。

4. 坐标系应用:讲解坐标系在游戏编程中的应用,使学生能够实现角色移动和碰撞检测。

教材章节:《信息技术》五年级下册第四章第四节。

5. 实践操作:分组进行飞机大战游戏的编程实践,巩固所学知识,提高编程能力。

c飞机大战实训报告

c飞机大战实训报告

实训报告飞机大战游戏设计与开发姓名:陆再旺专业名称:___数字媒体技术___________班级:______2011级__________________ 学号:___201101051114____________信息科学与工程学院二零一三年十二月目录1. 项目概述 ····················································错误!未定义书签。

2. 相关技术 ····················································错误!未定义书签。

2.1透明贴图技术 ················································错误!未定义书签。

c课课程设计飞机大战

c课课程设计飞机大战

c课课程设计飞机大战一、教学目标本节课的学习目标包括以下三个方面:1.知识目标:学生需要掌握飞机大战游戏的基本概念、游戏机制和编程原理。

2.技能目标:学生能够运用编程语言实现简单的飞机大战游戏,培养学生的编程能力和解决问题的能力。

3.情感态度价值观目标:通过制作飞机大战游戏,培养学生对计算机科学的兴趣,提高学生主动学习和探索的精神,培养团队合作意识。

二、教学内容本节课的教学内容主要包括以下几个部分:1.飞机大战游戏概述:介绍飞机大战游戏的背景、游戏机制和玩法。

2.编程基础知识:回顾编程语言的基本语法和编程概念,为学生编写飞机大战游戏打下基础。

3.飞机大战游戏制作:引导学生动手实践,逐步完成飞机大战游戏的制作,包括飞机控制、敌机生成、碰撞检测等功能。

4.游戏优化与调试:教授学生如何对游戏进行优化和调试,提高游戏性能和用户体验。

三、教学方法本节课采用以下教学方法:1.讲授法:教师讲解飞机大战游戏的基本概念、游戏机制和编程原理。

2.案例分析法:分析已有的飞机大战游戏案例,引导学生了解游戏制作的流程和技巧。

3.实验法:学生动手实践,编写和调试飞机大战游戏,培养学生的实际操作能力。

4.小组讨论法:学生分组合作,共同完成飞机大战游戏制作,培养团队合作意识和沟通能力。

四、教学资源本节课所需的教学资源包括:1.教材:提供飞机大战游戏制作的相关知识和案例分析。

2.多媒体资料:展示飞机大战游戏的制作过程和示例代码。

3.实验设备:计算机和编程软件,用于学生实践操作。

4.网络资源:提供在线编程教程和飞机大战游戏制作的相关讨论区,便于学生学习和交流。

五、教学评估本节课的评估方式包括以下几个方面:1.平时表现:观察学生在课堂上的参与程度、提问回答情况和团队合作表现,给予相应的评价。

2.作业:布置相关的编程练习和游戏制作任务,评估学生的完成情况和解决问题的能力。

3.考试:设置期末考试,测试学生对飞机大战游戏制作的知识点和编程技能的掌握程度。

飞机大战c课程设计

飞机大战c课程设计

飞机大战 c课程设计一、教学目标本课程旨在通过学习飞机大战C语言编程,让学生掌握C语言的基本语法、数据结构、函数等核心概念,培养学生运用C语言解决实际问题的能力。

同时,通过项目实践,培养学生的编程思维、团队协作能力和创新意识。

此外,课程还注重培养学生的信息素养,提高他们对计算机科学的兴趣和热情。

具体来说,知识目标包括:1.掌握C语言的基本语法和编程规范。

2.理解数据结构、函数、指针等核心概念。

3.熟悉常用的C语言库函数和算法。

技能目标包括:1.能够运用C语言编写简单的程序。

2.具备阅读和理解他人代码的能力。

3.学会使用调试工具,分析并解决问题。

情感态度价值观目标包括:1.培养学生的编程思维,提高解决问题的能力。

2.培养学生团队协作意识和创新精神。

3.增强学生对计算机科学的兴趣和热情,提高信息素养。

二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、函数、指针等核心概念,以及常用的C语言库函数和算法。

具体安排如下:1.C语言概述:介绍C语言的历史、特点和应用领域。

2.基本语法:变量、常量、运算符、表达式、语句等。

3.数据类型:整型、浮点型、字符型、布尔型等。

4.函数:函数的定义、声明、调用和返回值。

5.指针:指针的概念、声明、运算和应用。

6.数组和字符串:数组的定义和操作、字符串的存储和处理。

7.结构体和联合:结构体的定义、初始化和使用。

8.文件操作:文件的打开、读写、关闭等操作。

9.常用库函数和算法:数学函数、字符串函数、排序算法等。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式,包括:1.讲授法:教师讲解C语言的基本语法、数据结构、函数等核心概念,引导学生理解并掌握相关知识。

2.案例分析法:通过分析实际案例,让学生学会运用C语言解决实际问题。

3.实验法:学生动手编写代码,进行实验操作,培养编程能力和实践能力。

4.小组讨论法:学生分组讨论,共同解决问题,培养团队协作能力和创新意识。

打飞机c语言课程设计

打飞机c语言课程设计

打飞机c语言课程设计一、课程目标知识目标:1. 让学生掌握C语言的基本语法和结构,特别是数组、循环和函数的应用。

2. 培养学生运用C语言进行程序设计的能力,理解飞机大战游戏的逻辑和实现过程。

3. 使学生了解计算机图形处理的基本原理,并能运用C语言实现简单的图形界面。

技能目标:1. 培养学生运用C语言编写、调试和运行程序的能力。

2. 培养学生独立分析问题、设计解决方案并实现的能力。

3. 培养学生团队协作和沟通技巧,能够与团队成员共同完成课程项目。

情感态度价值观目标:1. 培养学生对计算机编程的兴趣和热情,激发他们主动探索新技术。

2. 培养学生勇于面对挑战、克服困难的精神,增强自信心。

3. 培养学生遵守程序设计规范,养成良好的编程习惯,认识到编程对社会的积极影响。

分析课程性质、学生特点和教学要求,本课程目标旨在让学生在掌握C语言基础知识的基础上,通过设计并实现打飞机游戏,提高编程实践能力。

课程目标具体、可衡量,便于学生和教师在教学过程中明确预期成果,为后续教学设计和评估提供依据。

二、教学内容1. C语言基础知识回顾:变量、数据类型、运算符、表达式、控制语句(条件语句、循环语句)。

相关教材章节:第一章至第三章。

2. 数组和字符串:一维数组、二维数组、字符串操作。

相关教材章节:第四章。

3. 函数:函数定义、调用、传值方式、递归。

相关教材章节:第五章。

4. 指针:指针的概念、指针与数组、指针与函数。

相关教材章节:第六章。

5. 结构体和文件操作:结构体的定义和使用、文件读写。

相关教材章节:第七章、第八章。

6. 图形处理基础:图形显示原理、C语言图形库的使用。

相关教材章节:第十章。

7. 打飞机游戏设计:游戏逻辑、程序架构、角色设计、碰撞检测、得分系统。

教学内容安排:分阶段进行,先讲解游戏设计思路,再逐步引导学生实现各个功能模块。

教学内容根据课程目标制定,具有科学性和系统性。

教学大纲明确,涵盖C语言基础知识、数组、函数、指针、结构体和文件操作等关键内容,结合图形处理基础,使学生在掌握理论知识的基础上,能够运用所学设计并实现打飞机游戏。

c飞机大战实训报告附带码

c飞机大战实训报告附带码

目录1. 概述 (3)1.1 实训项目简介 (3)1.2 实训功能说明 (3)1.2.1 基本功能 (3)1.2.2 附加功能 (3)2. 相关技术 (4)2.1 Windows定时器技术 (4)2.2 透明贴图实现技术 (4)2.3 CObList链表 (5)2.4获取矩形区域 (6)2.5使用AfxMessageBox显示游戏过程中的提示信息 (7)2.6内存释放 (7)2.7 CImageList处理爆炸效果 (7)2.8对话框的应用 (8)3. 总体设计与详细设计 (8)3.1 系统模块划分 (8)3.2 主要功能模块 (9)3.2.1 系统对象类图 (9)3.2.2 系统主程序活动图 (10)3.2.3 系统部分流程图 (11)4. 编码实现 (13)4.1 绘制游戏背景位图程序 (13)4.2 飞机大战游戏对象的绘制程序 (14)4.3 飞机大战游戏对象战机位置的动态控制 (18)4.4 飞机大战游戏对象之间的碰撞实现 (21)4.5 游戏界面输出当前信息 (22)5. 项目程序测试 (24)5.1战机移动及子弹发射模块测试 (24)5.2 敌机及炸弹模块测试 (20)5.3 爆炸模块测试 (20)6. 实训中遇到的主要问题及解决方法 (25)7. 实训体会 (25)1. 概述1.1 实训项目简介本次实训项目是做一个飞机大战的游戏,应用MFC编程,完成一个界面简洁流畅、游戏方式简单,玩起来易于上手的桌面游戏。

该飞机大战项目运用的主要技术即是MFC编程中的一些函数、链表思想以及贴图技术。

1.2 实训功能说明1.2.1 基本功能(1)设置一个战机具有一定的速度,通过键盘,方向键可控制战机的位置,空格键发射子弹。

(2)界面中敌机出现的位置,以及敌机炸弹的发射均为随机的,敌机与敌机炸弹均具有一定的速度,且随着关卡难度的增大,数量和速度均增加。

(3)对于随机产生的敌机和敌机炸弹,若超过矩形区域,则释放该对象。

c语言课程设计飞机大战

c语言课程设计飞机大战

c语言课程设计飞机大战一、教学目标本章节的教学目标旨在让学生掌握C语言编程基础,学会使用C语言编写简单的游戏程序。

具体目标如下:1.知识目标:–理解C语言的基本语法和数据类型。

–掌握函数的定义和调用。

–了解指针的概念和应用。

–学习结构体的使用和文件操作。

2.技能目标:–能够运用C语言编写小程序,解决实际问题。

–学会使用集成开发环境(IDE)进行C语言编程。

–掌握调试程序的基本方法。

3.情感态度价值观目标:–培养学生的创新意识和团队合作精神。

–激发学生对计算机编程的兴趣,提高学习的积极性。

–培养学生的自主学习能力和解决问题的能力。

二、教学内容本章节的教学内容主要包括C语言的基本语法、数据类型、函数、指针、结构体和文件操作。

具体安排如下:1.C语言的基本语法和数据类型:介绍C语言的基本结构和数据类型,包括整型、浮点型、字符型等。

2.函数的定义和调用:讲解函数的定义、声明和调用,包括内置函数和用户自定义函数。

3.指针的概念和应用:介绍指针的定义和运算,以及指针在数组、字符串和函数中的应用。

4.结构体的使用:讲解结构体的定义和使用,包括结构体的声明、初始化和成员访问。

5.文件操作:介绍文件的基本概念和文件操作函数,包括文件的打开、读写、关闭等。

三、教学方法本章节的教学方法采用讲授法、案例分析法和实验法相结合的方式进行。

具体方法如下:1.讲授法:通过讲解C语言的基本语法、数据类型、函数、指针、结构体和文件操作等内容,让学生掌握相关知识。

2.案例分析法:通过分析实际编程案例,让学生学会运用C语言解决实际问题。

3.实验法:安排实验室实践环节,让学生亲自动手编写程序,巩固所学知识。

四、教学资源本章节的教学资源包括教材、参考书、多媒体资料和实验设备。

具体资源如下:1.教材:选用《C语言程序设计》作为主教材,辅助以相关参考书籍。

2.参考书:提供《C语言编程实例教程》等参考书籍,供学生课后自学。

3.多媒体资料:制作课件、教学视频等多媒体资料,便于学生理解和掌握知识。

飞机大战c课程设计

飞机大战c课程设计

飞机大战c 课程设计一、课程目标知识目标:1. 学生能理解并掌握飞机大战游戏中的基础编程概念,如变量、循环和条件语句。

2. 学生能够描述游戏开发中的坐标系及角色移动原理。

3. 学生能够解释游戏中碰撞检测的基本原理。

技能目标:1. 学生能够运用所学的编程知识,独立设计并编写简单的飞机大战游戏。

2. 学生能够通过调试和修改代码,优化游戏性能,提升游戏体验。

3. 学生能够在团队中有效沟通,协作完成复杂的游戏设计任务。

情感态度价值观目标:1. 学生能够培养对编程和计算机科学的兴趣和热情。

2. 学生能够在游戏设计过程中,锻炼问题解决能力和创新思维。

3. 学生能够在团队协作中,学会尊重他人意见,培养合作精神和集体荣誉感。

课程性质:本课程为信息技术课程,结合游戏设计,提高学生对编程知识的兴趣和实际应用能力。

学生特点:五年级学生具备一定的计算机操作能力,对游戏有浓厚兴趣,喜欢动手实践。

教学要求:教师通过引导和辅导,帮助学生掌握编程基础,鼓励学生独立思考和团队合作,培养创新意识和实际操作能力。

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

二、教学内容1. 编程基础:变量定义、数据类型、运算符、流程控制(条件语句、循环语句)。

相关教材章节:第二章《编程基础》。

2. 游戏设计原理:坐标系、角色移动、碰撞检测。

相关教材章节:第四章《游戏设计基础》。

3. 编程实践:使用Scratch或Python等编程工具,设计并实现飞机大战游戏。

相关教材章节:第六章《编程实践与游戏设计》。

4. 团队协作与沟通:项目分组、任务分配、进度汇报、问题讨论。

相关教材章节:第八章《团队协作与沟通》。

教学内容安排与进度:第一课时:介绍编程基础,学生了解并掌握变量、数据类型和运算符。

第二课时:学习流程控制,通过实例讲解条件语句和循环语句的使用。

第三课时:讲解游戏设计原理,让学生了解坐标系、角色移动和碰撞检测。

第四课时:分组讨论,确定游戏主题和角色设计,进行编程实践。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++程序设计A2课程设计报告课程名称C++程序设计A2课题名称飞机大战专业计算机科学与技术班级1820544 ___学号********* _____姓名王锐____ _指导教师韩燕丽__2019年6 月15 日(一)、课程设计题目:飞机大战(二)、目的与要求:1、目的:(1)要求学生达到熟练掌握C++语言的基本知识和技能;(2)基本掌握面向对象程序设计的基本思路和方法;(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

2、基本要求:(1)要求利用面向对象的方法以及C++的编程思路来完成系统的设计。

(2)在系统的设计中,要求运用面向对象的机制(继承及多态性),来实现系统功能,并且要建立清晰的类层次结构。

(3)在系统设计中要分析和定义各个类,每个类中要有各自的数据成员和成员数。

(4)主函数中提供菜单选项,并给出足够的选择信息以及提示信息。

(5)程序具有一定的健壮性,不会因为用户的输入错误引起程序运行错误而中断执行。

对输入值的类型、大小范围、字符串的长度等,进行正确性检查,对不合法的输入值给出出错信息,指出错误类型,等待重新输入。

3、创新要求:在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。

(三)、设计方法和基本原理:功能要求:设计一个基于控制台的简洁流畅的飞机大战游戏。

问题的解决方案:根据系统功能要求,可以将问题解决分为以下步骤:(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系包括属性和行为;(3)根据问题描述,设计系统的类层次;(4)完成类层次中各个类的描述(包括属性和方法);(5)完成类中各个成员函数的定义;(6)完成系统的应用模块;(7)功能调试;目录1.系统需求分析 (1)2.总体设计 (2)3.详细设计及实现 (5)4.系统调试 (5)5.结论 ............................................................................................... 错误!未定义书签。

6.心得体会 ....................................................................................... 错误!未定义书签。

7.参考书目 (45)1.系统需求分析1.1系统设计的目的与意义:飞机大战游戏作为 PC 中一款桌面游戏,界面简洁流畅、游戏方式简单玩起来容易上手。

面向休闲游戏的玩家,例如:家庭、办公人员等,使用人群广泛。

1.2 系统功能需求:1)通过键盘,方向键 WASD 键可控制战机的位置,空格键发射子弹,2)界面中敌机出现的位置是随机的。

3)对于随机产生的敌机及子弹,若超出界面,则释放该对象。

4)战机、敌机、子弹都有生命值,敌机和玩家碰撞、敌机和玩家的子弹碰撞、敌机的子弹和玩家碰撞、敌机的子弹和玩家的子弹碰撞均需考虑。

敌机的生命值为0,则删除敌机或BOSS,战机生命值为0,游戏结束。

5)战机子弹:战机有两种子弹可自由选择。

6)结束功能:游戏中按下2会结束游戏,再次按下 Y/N 可继续或者退出游戏。

2.总体设计2.1 系统功能分析:系统通过调用类函数来实现游戏的运行,通过面向对象类的继承、多态等思想在使程序简洁的同时保证游戏的正常运行。

2.2系统功能模块划分与设计:系统定义了Bullet()、Plane()两个基类,通过继承得到Bullet_1()、Bullet_2()、Bullet_3()、Bullet_3()、Bullet()_4、Player()等类。

Map 类用于地图的绘制,Bullet 类用于子弹的实现,Plane 类是飞机的实现,在通过 Plane 类的继承,编写敌机和战机类。

2.3 系统功能模块图:2.4 类的设计(1)Bullet类(抽象类)的设计:(2)Plane类的设计:(3)Map类的设计:(4)Manager类的设计:3.详细设计及实现3.1 Public_using及stdafx的实现// Public_Using.h#pragma once// 组成飞机和子弹的节点struct Note{int m_x;int m_y;Note(int x, int y):m_x(x), m_y(y){}};// 枚举类型(自己定义)enum Type{KONG,HEAD_F,LEFT_F,RIGHT_F,XUNL_F,OBSTACLE,BULLET,SMALL,BOSS,MIND,B_U_HEAD,SHENTI,B_HEAD,B_LEFT,B_RIGHT ,BOOS,PLAYER,A,B,C,D,E,F,G,H,I,J,K,BULLET_4_HEAK,BULLET_4_SHENTI};// stdafx.h// stdafx.h : 标准系统包含文件的包含文件,// 或是经常使用但不常更改的// 特定于项目的包含文件//#pragma once#include"targetver.h"#include<stdio.h>#include<tchar.h>#include<Windows.h>#include<iostream>#include<conio.h>#include<vector>#include<list>#include<ctime>using namespace std;// TODO: 在此处引用程序需要的其他头文件3.2 地图类的实现// Map.h#pragma once#include"Public_Using.h"class Map{public:Map(int x=25, int y=30);~Map(void);void draw();void change_map(int x, int y ,Type t); //地图的改变char** map; //地图二维指针int m_row; //行int m_clo; //列};// Map.cpp#include"stdafx.h"#include"Map.h"#include"Public_Using.h"Map::Map(int x, int y):m_row(x),m_clo(y){map=new char*[m_row];for(int i = 0; i < m_row; i ++){map[i] = new char[m_clo];memset(map[i], KONG, m_clo);}}Map::~Map(){for(int i = 0; i < m_row; i++ )delete[] map[i];delete[] map;map = NULL;}void Map::draw(){for (int i = 0; i < m_row; i++){for (int j = 0; j < m_clo; j++){if(map[i][j] == KONG)cout<<"";else if(map[i][j] == HEAD_F)cout<<"▲";else if(map[i][j] == LEFT_F)cout<<"◢";else if(map[i][j] == RIGHT_F)cout<<"◣";else if(map[i][j] == BULLET)cout<<"●";else if(map[i][j] == MIND)cout<<"⑩";else if(map[i][j] == SMALL)cout<<"▼";else if(map[i][j] == PLAYER)cout<<"★";else if(map[i][j] == B_U_HEAD)cout<<"∨";else if(map[i][j] == SHENTI)cout<<"∏";else if(map[i][j] == B_HEAD)cout<<"▼";else if(map[i][j] == B_LEFT)cout<<"◥";else if(map[i][j] == B_RIGHT)cout<<"◤";else if(map[i][j] == B)cout<<"⑨;else if(map[i][j] == C)cout<<"⑧;else if(map[i][j] == D)cout<<"⑦";else if(map[i][j] == E)cout<<"⑥";else if(map[i][j] == F)cout<<"⑤";else if(map[i][j] == G)cout<<"⑤";else if(map[i][j] == H)cout<<"③";else if(map[i][j] == I)cout<<"②";else if(map[i][j] == J)cout<<"①";else if(map[i][j] == BULLET_4_HEAK)cout<<"∨";else if(map[i][j] == BULLET_4_SHENTI)cout<<"⊕";}cout<<endl;}}void Map::change_map(int x, int y ,Type t){map[x][y] = t;}3.3 子弹类的实现1)// Bullet.h#pragma once#include"Public_Using.h"class Map;class Bullet{public:Bullet(int atk=0,int m_hp_b=0,bool isOut=false,bool isDead=false); //构造函数~Bullet(void); //析构函数virtual void draw_on_map(Map* m)=0; //在地图上绘制virtual void clearMe(Map* m)=0; //清空自己的轨迹virtual void init(int x,int y)=0; //初始化自己virtual void upDate(Map* m)=0; //位置更新virtual void overstep(Map* m)=0; //越界判定Note* noo; //节点的指针vector<Note*>* m_bull; //存放自己包含的节点的容器(这里是指针)bool isOut; //是否越界bool isDead; //是否死亡int atk; //攻击力int m_hp_b; //血量};// Bullet.cpp#include"stdafx.h"#include"Bullet.h"#include"Map.h"Bullet::Bullet(int atk, int m_hp_b, bool isOut, boolisDead):atk(atk),isOut(isOut),isDead(isDead),m_hp_b(m_hp_b){// 开空间m_bull = new vector<Note*>();}Bullet::~Bullet(){// 释放内存delete m_bull;m_bull = NULL;}2)// Bullet_1.h#pragma once#include"Bullet.h"class Bullet_1:public Bullet{public:Bullet_1(int x, int y, int atk = 1, int m_hp_b = 1);~Bullet_1();virtual void draw_on_map(Map* m);virtual void clearMe(Map* m);virtual void init(int x, int y);virtual void upDate(Map* m);virtual void overstep(Map* m);};// Bullet_1.cpp#include"stdafx.h"#include"Bullet_1.h"#include"Map.h"Bullet_1::Bullet_1(int x, int y, int atk, int m_hp_b):Bullet(atk, m_hp_b) {init(x, y);}Bullet_1::~Bullet_1(){// 释放内存delete noo;noo = NULL;}void Bullet_1::draw_on_map(Map* m){for(int i = 0; i < m_bull->size(); i ++){Note* n = m_bull->at(i); // 循环返回容器元素的位置m->change_map(n->m_x, n->m_y, BULLET);}}void Bullet_1::clearMe(Map* m){for(int i = 0; i < m_bull->size(); i ++){Note* n = m_bull->at(i);m->change_map(n->m_x, n->m_y, KONG);}}void Bullet_1::init(int x, int y){noo = new Note(x, y);m_bull->push_back(noo);}void Bullet_1::upDate(Map* m){// 清空自己的轨迹clearMe(m);// 自己更新for(int i = 0; i < m_bull->size(); i ++)m_bull->at(i)->m_x--;// 判断是否越界overstep(m);}void Bullet_1::overstep(Map* m){for(int i = 0; i < m_bull->size(); i ++){Note* n = m_bull->at(i);if(n->m_x < 0 || n->m_y < 0 || n->m_x > m->m_row - 1 || n->m_y > m->m_clo - 1) isOut = true;}}3)// Bullet_2.h#pragma once#include"Bullet.h"class Bullet_2:public Bullet{public:Bullet_2(int x, int y, int atk = 1);~Bullet_2();virtual void draw_on_map(Map* m);virtual void clearMe(Map* m);virtual void init(int x, int y);virtual void upDate(Map* m);virtual void overstep(Map* m);};// Bullet_2.cpp#include"stdafx.h"#include"Bullet_2.h"#include"Map.h"#include"Public_Using.h"Bullet_2::Bullet_2(int x, int y, int atk):Bullet(atk){init(x, y);}Bullet_2::~Bullet_2(){// 释放内存delete noo;noo = NULL;}void Bullet_2::draw_on_map(Map* m){for(int i = 0; i < m_bull->size(); i ++){Note* n = m_bull->at(i); // 循环返回容器元素的位置m->change_map(n->m_x, n->m_y, BULLET);}}void Bullet_2::clearMe(Map* m){for(int i = 0; i < m_bull->size(); i ++){Note* n = m_bull->at(i);m->change_map(n->m_x, n->m_y, KONG);}}void Bullet_2::init(int x, int y){// 内存泄漏noo = new Note(x, y - 1);m_bull->push_back(noo);noo = new Note(x, y + 1);m_bull->push_back(noo);}void Bullet_2::upDate(Map* m){clearMe(m);for(int i = 0; i < m_bull->size(); i ++)m_bull->at(i)->m_x--;overstep(m);}void Bullet_2::overstep(Map* m){for(int i = 0; i < m_bull->size(); i ++){Note* n = m_bull->at(i);if(n->m_x < 0 || n->m_y < 0 || n->m_x > m->m_row - 1 || n->m_y > m->m_clo - 1) isOut = true;}}4)// Bullet_3.h#pragma once#include"Bullet.h"class Bullet_3:public Bullet{public:Bullet_3(int x, int y, int atk = 1);~Bullet_3();virtual void draw_on_map(Map* m);virtual void clearMe(Map* m);virtual void init(int x, int y);virtual void upDate(Map* m);virtual void overstep(Map* m);};// Bullet_3.cpp#include"stdafx.h"#include"Bullet_3.h"#include"Map.h"#include"Public_Using.h"Bullet_3::Bullet_3(int x, int y, int atk):Bullet(atk){init(x, y);}Bullet_3::~Bullet_3(){// 释放内存delete noo;noo = NULL;}void Bullet_3::draw_on_map(Map* m){for(int i = 0; i < m_bull->size(); i ++){Note* n = m_bull->at(i);m->change_map(n->m_x, n->m_y, BULLET);}}void Bullet_3::clearMe(Map* m){for(int i = 0; i < m_bull->size(); i ++){Note* n = m_bull->at(i);m->change_map(n->m_x, n->m_y, KONG);}}void Bullet_3::init(int x, int y){noo = new Note(x - 1, y - 1);m_bull->push_back(noo);noo = new Note(x - 1, y + 1);m_bull->push_back(noo);noo = new Note(x - 1, y - 1);m_bull->push_back(noo);noo = new Note(x - 1, y + 1);m_bull->push_back(noo);noo = new Note(x + 1, y - 1);m_bull->push_back(noo);noo = new Note(x + 1, y + 1);m_bull->push_back(noo);}void Bullet_3::upDate(Map* m){clearMe(m);for(int i = 0; i < m_bull->size(); i ++){if(i == 0)m_bull->at(i)->m_x--;if(i == 1)m_bull->at(i)->m_x--;if(i == 2){m_bull->at(i)->m_x--;m_bull->at(i)->m_y--;}if(i == 3){m_bull->at(i)->m_x--;m_bull->at(i)->m_y++;}if(i == 4){m_bull->at(i)->m_x--;m_bull->at(i)->m_y--;}if(i == 5){m_bull->at(i)->m_x--;m_bull->at(i)->m_y++;}}overstep(m);}void Bullet_3::overstep(Map* m){for(int i = 0; i < m_bull->size(); i ++){Note* n = m_bull->at(i);if(n->m_x < 0 || n->m_y < 0 || n->m_x > m->m_row - 1 || n->m_y > m->m_clo - 1) isOut = true;}}5)// Bullet_4.h#pragma once#include"Bullet.h"class Bullet_4:public Bullet{public:Bullet_4(int x, int y, int atk = 3, int m_hp_b = 5);~Bullet_4();virtual void draw_on_map(Map* m);virtual void clearMe(Map* m);virtual void init(int x, int y);virtual void upDate(Map* m);virtual void overstep(Map* m);};// Bullet_4.cpp#include"stdafx.h"#include"Bullet_4.h"#include"Map.h"#include"Public_Using.h"Bullet_4::Bullet_4(int x, int y, int atk, int m_hp_b):Bullet(atk, m_hp_b){init(x, y);}Bullet_4::~Bullet_4(){// 释放内存delete noo;noo = NULL;}void Bullet_4::draw_on_map(Map* m){m->change_map(m_bull->at(0)->m_x, m_bull->at(0)->m_y, BULLET_4_SHENTI);m->change_map(m_bull->at(1)->m_x, m_bull->at(1)->m_y, BULLET_4_HEAK);m->change_map(m_bull->at(2)->m_x, m_bull->at(2)->m_y, B_LEFT);m->change_map(m_bull->at(3)->m_x, m_bull->at(3)->m_y, B_RIGHT);}void Bullet_4::clearMe(Map* m){for(int i = 0; i < m_bull->size(); i ++){Note* n = m_bull->at(i);m->change_map(n->m_x, n->m_y, KONG);}}void Bullet_4::init(int x, int y){noo = new Note(x + 1, y);m_bull->push_back(noo);noo = new Note(x + 2, y);m_bull->push_back(noo);noo = new Note(x + 1, y - 1);m_bull->push_back(noo);noo = new Note(x + 1, y + 1);m_bull->push_back(noo);}void Bullet_4::upDate(Map* m){clearMe(m);for(int i = 0; i < m_bull->size(); i ++)m_bull->at(i)->m_x++;overstep(m);}void Bullet_4::overstep(Map* m){for(int i = 0; i < m_bull->size(); i ++){Note* n = m_bull->at(i);if(n->m_x < 0 || n->m_y < 0 || n->m_x > m->m_row - 1 || n->m_y > m->m_clo - 1) isOut = true;}}3.4 飞机类及玩家类的实现1)// Plane.h#pragma onceclass Map;#include"Public_Using.h"class Plane{public:Plane(int m_h = 0, int _atk = 0, bool isD = false, bool isO = false);~Plane();virtual void init() = 0; // 纯虚函数virtual void draw_on_map(Map* m) = 0;virtual void clear(Map* m) = 0;virtual void up_date(Map* m) = 0;virtual void is_game_over(); // 判断玩家是否死亡char direction; // 飞机的方向Note* noo; // 节点指针vector<Note*>* m_data; // 存储飞机包含的节点的容器(指针)int m_hp; // 血量int atk; // 攻击力bool isDead; // 死亡判定bool isOut; // 越界判定};// Plane.cpp#include"stdafx.h"#include"Plane.h"#include"Public_Using.h"#include"Map.h"Plane::Plane(int m_h,int _atk,bool isD,bool isOut):m_hp(m_h),isDead(isD),atk(_atk),isOut(isOut){m_data=new vector<Note*>();}Plane::~Plane(void){delete m_data;m_data=NULL;}void Plane::is_game_over(){if (m_hp<=0){m_hp=0;isDead=true;}}2)// Player.h#pragma once#include"Plane.h"class Bullet;class Bullet_1;class Map;class Player:public Plane{public:Player(int hp = 5, int count = 0, int bullettype = 1, int atk = 1);~Player();virtual void init();virtual void draw_on_map(Map* m);virtual void up_date(Map* m);virtual void clear(Map* m);void init_bullet_1(); // 子弹1void init_bullet_2(); // 子弹2void init_bullet_3(); // 子弹3(有问题)bool overstep(int x, int y, Map* m);void up(Map* m); // 上void dowm(Map* m); // 下void left(Map* m); // 左void right(Map* m); // 右int count; // 玩家的分数int bullettype; // 子弹类型vector<Bullet*>* m_bullet; // 存放玩家子弹的容器(指针)};// Player.cpp#include"stdafx.h"#include"Player.h"#include"Bullet.h"#include"Bullet_1.h"#include"Bullet_2.h"#include"Bullet_3.h"#include"Map.h"Player::Player(int hp, int count, int bullettype, int atk):Plane(hp, atk), count(count), bullettype(bullettype){init();m_bullet = new vector<Bullet*>();}Player::~Player(){delete m_bullet;m_bullet = NULL;delete noo;noo = NULL;}void Player::init(){noo = new Note(24, 15);m_data->push_back(noo);noo = new Note(24, 14);m_data->push_back(noo);noo = new Note(24, 16);m_data->push_back(noo);noo = new Note(23, 15);m_data->push_back(noo);}void Player::draw_on_map(Map* m){// 绘制自己m->map[m_data->at(0)->m_x][m_data->at(0)->m_y] = PLAYER;m->map[m_data->at(1)->m_x][m_data->at(1)->m_y] = LEFT_F;m->map[m_data->at(2)->m_x][m_data->at(2)->m_y] = RIGHT_F;m->map[m_data->at(3)->m_x][m_data->at(3)->m_y] = HEAD_F;// 玩家子弹的绘制for(int i = 0; i < m_bullet->size(); i ++)if(!m_bullet->at(i)->isOut){for(int i = 0; i < m_bullet->size(); i ++)m_bullet->at(i)->draw_on_map(m);}}void Player::up_date(Map* m){clear(m);if(_kbhit()) // 检测按键direction = _getch();elsedirection = -100;switch(direction){case'w':up(m);break;case'a':left(m);break;case's':dowm(m);break;case'd':right(m);break;case' ':if(bullettype == 1)init_bullet_1();else if(bullettype == 2)init_bullet_2();else if(bullettype == 3)init_bullet_3();break;case'p':system("pause");break;case'3':bullettype = 1; // 切换子弹break;case'4':bullettype = 2;break;case'5':bullettype = 3;break;case'2':this->isDead = true;break;default:break;}for(int i = 0; i < m_bullet->size(); i ++)m_bullet->at(i)->upDate(m);for(int i = 0; i < m_bullet->size();){if(m_bullet->at(i)->isOut == true || m_bullet->at(i)->isDead == true){// 用一个新的指针指向越界或者已经打到敌人身上需要删除的子弹Bullet* b = m_bullet->at(i);vector<Bullet*>::iterator vit = m_bullet->begin(); // 定义一个迭代器m_bullet->erase(vit + i);// 释放已经被删除的子弹delete b;}elsei++;}}void Player::clear(Map* m){// 清除飞机for(int i = 0; i < m_data->size(); i ++){Note* n = m_data->at(i);m->change_map(n->m_x, n->m_y, KONG);}// 清除子弹for(int i = 0; i < m_bullet->size(); i ++){Bullet* b = m_bullet->at(i);for(int j = 0; j < b->m_bull->size(); j ++){int x = b->m_bull->at(j)->m_x;int y = b->m_bull->at(j)->m_y;m->change_map(x, y, KONG);}}}void Player::init_bullet_1(){int x = m_data->at(3)->m_x;int y = m_data->at(3)->m_y;Bullet* b = new Bullet_1(x - 1, y);m_bullet->push_back(b);}void Player::init_bullet_2(){int x = m_data->at(3)->m_x;int y = m_data->at(3)->m_y;Bullet* b = new Bullet_2(x - 1, y);m_bullet->push_back(b);}void Player::init_bullet_3(){int x = m_data->at(3)->m_x;int y = m_data->at(3)->m_y;Bullet* b = new Bullet_3(x - 1, y);m_bullet->push_back(b);}bool Player::overstep(int offx, int offy, Map* m){int x, y;for(int i = 0; i < m_data->size(); i ++){x = m_data->at(i)->m_x + offx;y = m_data->at(i)->m_y + offy;if(x < 0 || y < 0 || x > m->m_row - 1 || y > m->m_clo - 1) return true;}return false;}void Player::up(Map* m){if(overstep(-1, 0, m))return ;for(int i = 0; i < m_data->size(); i ++)m_data->at(i)->m_x--;}void Player::dowm(Map* m){if(overstep(1, 0, m))return ;for(int i = 0; i < m_data->size(); i ++)m_data->at(i)->m_x++;}void Player::left(Map* m){if(overstep(0, -1, m))return ;for(int i = 0; i < m_data->size(); i ++)m_data->at(i)->m_y--;}void Player::right(Map* m){if(overstep(0, 1, m))return ;for(int i = 0; i < m_data->size(); i ++)m_data->at(i)->m_y++;}3)// Enemy.h#pragma once#include"Plane.h"#include"Public_Using.h"class Bullet;class Player;class Enemy:public Plane{public:Enemy(int m_h = 0, int atk = 0);~Enemy();virtual void init() = 0;virtual void draw_on_map(Map* m)=0;virtual void clear(Map* m)=0;virtual void up_date(Map* m)=0;virtual void collision(Player* p); // 碰撞判断void gameagain(Player* p); // 重新开始游戏·vector<Bullet*>* m_bullet; // 存放子弹的容器(指针类型)};// Enemy.cpp#include"stdafx.h"#include"Enemy.h"#include"Map.h"#include"Player.h"#include"Bullet.h"#include"Bullet_1.h"Enemy::Enemy(int m_h, int atk):Plane(m_h, atk){m_bullet = new vector<Bullet*>();}Enemy::~Enemy(){}void Enemy::collision(Player* p){// 敌机和玩家碰撞for(int i = 0; i < m_data->size(); i ++){Note* enemy = m_data->at(i);for(int j = 0; j < p->m_data->size(); j ++){Note* n = p->m_data->at(j);if(enemy->m_x == n->m_x && enemy->m_y == n->m_y){// 判断BOSSif(this->m_data->size() > 2){this->m_hp -= p->atk;if(this->m_hp <= 0)this->isDead = true;}// 判断小兵if(this->m_data->size() == 1)this->isDead = true;p->m_hp -= this->atk;if(p->m_hp <= 0){// 玩家死亡游戏结束p->m_hp = 0;p->isDead = true;}}}}// 敌机和玩家的子弹碰撞for(int i = 0; i < m_data->size(); i ++){Note* enemy = m_data->at(i);for(int j = 0; j < p->m_bullet->size(); j ++){Bullet* b = p->m_bullet->at(j);for(int k = 0; k < b->m_bull->size(); k ++){Note* n = b->m_bull->at(k);if(enemy->m_x == n->m_x && enemy->m_y == n->m_y){// 敌机减去玩家子弹的攻击力this->m_hp -= b->atk;// 子弹消失b->isDead = true;if(this->m_hp <= 0){// 敌机死亡this->isDead = true;// 玩家加分if(this->m_data->size() > 2)p->count += 50;if(this->m_data->size() == 1)p->count += 10;}}}}}// 敌机的子弹和玩家碰撞for(int i = 0; i < m_bullet->size(); i ++){Bullet* b = m_bullet->at(i);for(int j = 0; j < b->m_bull->size(); j ++){Note* n = b->m_bull->at(j);for(int k = 0; k < p->m_data->size(); k ++){Note* player = p->m_data->at(k);if(n->m_x == player->m_x && n->m_y == player->m_y){// 子弹消失b->isDead = true;// 玩家的血量减去子弹的攻击力p->m_hp -= b->atk;if(p->m_hp <= 0){// 玩家死亡游戏结束p->m_hp = 0;p->isDead = true;}}}}}// 敌机的子弹和玩家的子弹碰撞for(int i = 0; i < m_bullet->size(); i ++){Bullet* b = m_bullet->at(i);for(int j = 0; j < b->m_bull->size(); j ++){Note* n = b->m_bull->at(j);for(int k = 0; k < p->m_bullet->size(); k ++){Bullet* player = p->m_bullet->at(k);for(int l = 0; l < player->m_bull->size(); l ++){Note* noo = player->m_bull->at(l);if(n->m_x == noo->m_x && n->m_y == noo->m_y){// 敌机子弹的血量减去玩家子弹的攻击力b->m_hp_b -= player->atk;// 玩家子弹的血量减去敌机子弹的攻击力player->m_hp_b -= b->atk;// 判断敌机的子弹是否死亡if(b->m_hp_b <= 0)b->isDead = true;// 判断玩家的子弹是否死亡if(player->m_hp_b <= 0)player->isDead = true;}}}}}}void Enemy::gameagain(Player* p){cout<<"游戏结束!"<<endl;cout<<"是否继续Y/N"<<endl;char ch;cin>>ch;if(ch == 'y'){p->isDead = false;p->m_hp = 5;}}4)// Enemy_Aircraft.h#pragma once#include"Public_Using.h"#include"Enemy.h"class Player;class Enemy_Aircraft:public Enemy{public:Enemy_Aircraft(int hp = 1, int atk = 1);~Enemy_Aircraft();virtual void init();virtual void draw_on_map(Map* m);virtual void clear(Map* m);virtual void up_date(Map* m);};// Enemy_Aircraft.cpp#include"stdafx.h"#include"Enemy_Aircraft.h"#include"Player.h"#include"Map.h"#include"Public_Using.h"#include"Bullet.h"#include"Bullet_1.h"Enemy_Aircraft::Enemy_Aircraft(int hp, int atk):Enemy(hp, atk){init();}Enemy_Aircraft::~Enemy_Aircraft(){delete noo;noo = NULL;}void Enemy_Aircraft::init(){srand((unsigned)time(NULL));int x = rand()%3 - 2;int y = rand()%23 + 3;noo = new Note(x, y);m_data->push_back(noo);}void Enemy_Aircraft::draw_on_map(Map* m){for(int i = 0; i < m_data->size(); ++ i){// 判断是否在地图上Note* n = m_data->at(i);if(n->m_x < 0 || n->m_y < 0 || n->m_x > m->m_row - 1 || n->m_y > m->m_clo - 1) {this->isOut = true;continue;}// 在地图上开始绘制m->change_map(n->m_x, n->m_y, SMALL);}}void Enemy_Aircraft::up_date(Map* m){clear(m);for(int i = 0; i < m_data->size(); i ++){Note* n = m_data->at(i);n->m_x++;}}void Enemy_Aircraft::clear(Map* m){for(int i=0; i<m_data->size(); ++i){Note* n=m_data->at(i);if(n->m_x<0 ||n->m_y<0 ||n->m_x>m->m_row-1 ||n->m_y>m->m_clo-1)continue;m->change_map(n->m_x,n->m_y,KONG);}}5)// Enemy_Boss.h#pragma once#include"Enemy.h"class Bullet;class Enemy_Boss:public Enemy{public:Enemy_Boss(int hp = 100);~Enemy_Boss();virtual void init();virtual void draw_on_map(Map* m);virtual void clear(Map* m);virtual void up_date(Map* m);void init_bullet_4(); // Boss子弹的初始化int intervalBullet_4; // Boss子弹的刷新频率int currentBullet_4; // 计算频率};// Enemy_Boss.cpp#include"stdafx.h"#include"Enemy_Boss.h"#include"Map.h"#include"Public_Using.h"#include"Bullet_4.h"#include"Bullet.h"Enemy_Boss::Enemy_Boss(int hp):Enemy(hp), intervalBullet_4(30), currentBullet_4(0) {init();}Enemy_Boss::~Enemy_Boss(){delete noo;noo = NULL;}void Enemy_Boss::init(){srand((unsigned)time(NULL));int x, y;do{x = 0;y = rand()%23 + 3;}while(y > 10 && y < 17);noo = new Note(x, y);m_data->push_back(noo);noo = new Note(x, y - 1);m_data->push_back(noo);noo = new Note(x, y - 2);m_data->push_back(noo);noo = new Note(x, y + 1);m_data->push_back(noo);noo = new Note(x, y + 2);m_data->push_back(noo);noo = new Note(x + 1, y - 1);m_data->push_back(noo);noo = new Note(x + 1, y + 1);m_data->push_back(noo);}void Enemy_Boss::draw_on_map(Map* m){for(int i = 0; i < m_data->size(); i ++){Note* n = m_data->at(i);// BOSS不在地图上时不绘制if(n->m_x < 0 || n->m_y < 0 || n->m_x > m->m_row - 1 || n->m_y > m->m_clo - 1) {this->isOut = true;continue;}// BOSS坐标符合条件后开始绘制else{// 根据BOSS的血量绘制BOSS中心的图形if(i == 0){if(m_hp >= 90 && m_hp <= 100)m->map[m_data->at(0)->m_x][m_data->at(0)->m_y] = MIND;else if(m_hp >= 80 && m_hp < 90)m->map[m_data->at(0)->m_x][m_data->at(0)->m_y] = B;else if(m_hp >= 70 && m_hp < 80)m->map[m_data->at(0)->m_x][m_data->at(0)->m_y] = C;else if(m_hp >= 60 && m_hp < 70)m->map[m_data->at(0)->m_x][m_data->at(0)->m_y] = D;else if(m_hp >= 50 && m_hp < 60)m->map[m_data->at(0)->m_x][m_data->at(0)->m_y] = E;else if(m_hp >= 40 && m_hp < 50)m->map[m_data->at(0)->m_x][m_data->at(0)->m_y] = F;。

相关文档
最新文档