程序设计基础之飞机大战说明书
- 格式:doc
- 大小:59.00 KB
- 文档页数:10
程序设计综合实践报告信息科学与工程学院2015年12月20日目录1. 概述 (1)1.1 关卡设置 (1)1.2 敌机设置 (1)1.3 战机设置 (2)1.4 游戏设置 (2)2. 相关技术 (2)2.1 Windows定时器技术 (2)2.2 双缓冲技术 (3)2.3 获取矩形区域 (3)3. 总体设计与详细设计 (3)3.1 系统模块划分 (3)3.2 主要功能模块 (4)4. 编码实现 (4)4.1 初始准备 (4)4.2 战机对象 (6)4.3 敌机对象 (8)4.4 道具对象 (9)4.5 主要内容 (10)4.6 窗口显示信息 (19)5. 实训中遇到的主要问题及解决方法 (20)5.1 产生中断及解决方案 (20)5.2 图片闪烁问题及解决方案 (20)6. 实训体会 (22)飞机大战游戏设计与实现1. 概述项目:飞机大战主要功能有以下几点:1.1 关卡设置本次飞机大战游戏中共设置了四个关卡,第一关的难度设置较低,仅有敌机对其进行攻击;第二关在原有的基础上增加一些补血的小道具,当积分达到一定的时候便会出现该道具,并且敌机出现的频率也比第一关高;第三关在第二关的基础上新出现了小boss,并增加了其他的道具;第四关在第三关的基础上再新出现大boss,当积分达到要求以及大boss被消灭后通关成功。
1.2 敌机设置小敌机随机出现,炮弹也随机发射,当小敌机与战机相撞或被战机的子弹击中时,小敌机消失。
当达到一定积分时,小boss出现并随机发射出与小敌机一样的炮弹,但是炮弹分三个方向发射出。
当小boss被战机的子弹击中或与战机相撞时失去5滴血。
当到达四关并且积分足够多时出现大boss,同小boss一样,当大boss与战机相撞或被战机子弹击中时失去1滴血。
除此之外,小boss和大boss上方都有血条显示,当血条消失时意味着生命消失,大boss和小boss 消失。
小boss会在屏幕上随机出现和走动出了屏幕后会在屏幕的任意地方再随机出现,直至血量为0消失。
飞机大战游戏编程指南飞机大战游戏是一种经典的射击游戏,也是游戏开发者们非常喜欢挑战的项目之一。
本文将为大家介绍飞机大战游戏的基本设计原则和编程指南,希望能帮助广大游戏开发者初步掌握开发这类游戏所需的技术要点。
第一节:游戏概述飞机大战游戏是一款以战机为主角,在虚拟的游戏世界里进行空中战斗的游戏。
玩家需要操控战机躲避敌机的攻击,同时发射武器摧毁敌机以获取高分。
游戏通常以关卡的形式进行,每一关都充满了挑战和惊险刺激的战斗。
第二节:游戏设计原则在开始编程之前,我们需要对游戏的设计原则有一个清晰的认识。
以下是一些重要原则:1. 游戏界面设计:游戏界面应该简洁明了,要让玩家一目了然地了解游戏规则和操作方式。
界面元素的摆放要合理,不要过于拥挤,以免影响游戏体验。
2. 玩家操作体验:玩家操控战机的体验应该流畅自然,操作响应要及时准确。
游戏难度需要适中,既要保持玩家的挑战性,又要让他们能够体验到游戏的乐趣。
3. 敌机设计:游戏的敌机设计应该考虑多样性和难度层次。
敌机的速度、攻击方式和移动轨迹可以根据关卡的难度进行调整,确保游戏的可玩性和刺激感。
4. 音效和音乐:一个好的音效和音乐能够提升游戏的氛围和趣味性。
适当选择背景音乐和特效音效,可以使游戏更加生动有趣。
第三节:游戏实现步骤在了解了游戏的设计原则之后,接下来我们将介绍游戏的实现步骤,供开发者们参考。
1. 创建游戏窗口:在开始编程之前,我们需要先创建一个游戏窗口。
游戏窗口应该具备适当的大小和边框,以便于游戏操作和显示。
2. 添加玩家战机:玩家战机的添加是游戏的核心步骤之一。
我们需要为玩家战机设置移动方式和操作按键,确保玩家能够自由地控制战机进行移动和发射子弹。
3. 添加敌机:游戏的难度和乐趣在于与敌机的战斗。
我们可以通过设置不同类型的敌机、不同的移动轨迹和攻击方式,使游戏更加多彩和具有挑战性。
4. 添加碰撞检测:在游戏中,碰撞检测是一个重要的组成部分。
通过判断战机和子弹与敌机的碰撞情况,可以实现击毁敌机、减少生命值等效果,使游戏更加真实和具有战斗感。
实训报告飞机大战游戏设计与开发专业名称:软件工程班级:学号:信息科学与工程学院二零一三年十一月目录1. 概述 (03)1.1 实训项目简介 (03)1.2 实训功能说明 (03)1.2.1 基本功能 (03)2. 相关技术 (03)2.1 基类的使用 (03)2.2 Windows定时器技术 (03)2.3获取矩形区域 (03)2.4内存释放 (04)3. 总体设计与详细设计 (04)3.1 系统模块划分 (04)3.2 主要功能模块 (05)4. 编码实现 (31)5. 实训中遇到的主要问题及解决方法 (32)6. 实训体会 (32)1. 概述1.1 实训项目简介本次实训项目是做一个飞机大战的游戏,完成一个界面简洁流畅、游戏方式简单,玩起来易于上手的桌面游戏。
该飞机大战项目运用的主要技术即是MFC编程中的一些函数、链表思想以及贴图技术。
1.2 实训功能说明1.2.1 基本功能(1)设置一个战机具有一定的速度,通过键盘,鼠标,方向键可控制战机的位置,空格键发射子弹。
(2)界面中敌机出现的位置为随机的。
(3)对于随机产生的敌机和敌机炸弹,若超过矩形区域,则释放该对象。
(4)添加爆炸效果,包括战机子弹打中敌机爆炸、敌机炸弹打中战机爆炸、战机与敌机相撞爆炸以及战机子弹与敌机炸弹相撞爆炸四种爆炸效果。
且爆炸发生后敌机、子弹、炸弹均消失。
2. 相关技术2.1基类的使用在飞机大战的游戏中用到了很多基类,例如MyPlane、Bomb等等,这样使得游戏的实现更加规范,有效性。
通过主函数的调用,实现了很多功能。
2.2 Windows定时器技术Windows定时器是一种输入设备,它周期性地在每经过一个指定的时间间隔后就通知应用程序一次。
程序将时间间隔告诉Windows,然后Windows给您的程序发送周期性发生的WM_TIMER消息以表示时间到了。
本程序中使用多个定时器,分别控制不同的功能。
在MFC的API函数中使用SetTimer()函数设置定时器,设置系统间隔时间,在OnTimer()函数中实现响应定时器的程序。
课程设计飞机大战csdn软件一、课程目标知识目标:1. 学生能理解计算机编程中游戏设计的基本原理,掌握飞机大战游戏的规则及开发流程。
2. 学生能够运用已学的编程知识,结合CSDN软件,设计并实现一个简单的飞机大战游戏。
3. 学生了解游戏设计中涉及到的数学和物理知识,如坐标系、碰撞检测等。
技能目标:1. 学生能够熟练使用CSDN软件进行编程,掌握基本的代码调试和错误处理方法。
2. 学生通过本课程的学习,提高问题分析能力,学会运用编程解决实际问题。
3. 学生通过团队合作,提升沟通协调能力和项目协作能力。
情感态度价值观目标:1. 学生培养对计算机编程的兴趣,激发创新意识和动手实践能力。
2. 学生在游戏设计过程中,树立正确的价值观,认识到科技对社会发展的积极作用。
3. 学生在团队合作中,学会尊重他人,培养团结协作、共同进步的精神。
课程性质:本课程为信息技术学科的教学内容,旨在通过实际操作,让学生掌握计算机编程的基本技能,培养其创新意识和团队协作能力。
学生特点:学生处于初中年级,具备一定的计算机操作基础,对游戏有浓厚的兴趣,喜欢动手实践,但编程经验有限。
教学要求:结合学生特点,课程设计应注重实践操作,以激发学生兴趣,提高其编程技能和团队协作能力。
同时,注重引导学生在实践中发现并解决问题,培养其解决问题的能力。
通过分解课程目标,使学生在完成具体学习成果的过程中,达到课程目标的要求。
二、教学内容1. 游戏设计原理:介绍游戏设计的基本概念,包括游戏类型、游戏规则、游戏界面设计等,使学生了解游戏设计的基本框架。
2. 编程基础:回顾已学的编程知识,如变量、循环、条件语句等,为学生进行游戏开发奠定基础。
3. CSDN软件使用:讲解CSDN软件的基本操作,包括代码编写、调试、运行等,使学生熟练掌握CSDN软件的使用方法。
4. 飞机大战游戏设计:根据游戏设计原理,引导学生分析飞机大战游戏的规则,明确游戏中的角色、道具、得分等要素。
C程序设计课程设计飞机大战一、教学目标本课程的教学目标是使学生掌握C程序设计的基本知识和技能,通过制作飞机大战游戏,提高学生的编程能力和解决问题的能力。
具体目标如下:1.知识目标:学生能够理解并掌握C程序设计的基本语法、数据结构和算法。
2.技能目标:学生能够运用C程序设计语言编写简单的程序,并能够独立解决编程过程中遇到的问题。
3.情感态度价值观目标:学生能够体验到编程的乐趣,增强对计算机科学的兴趣,培养坚持不懈、勇于探索的学习精神。
二、教学内容本课程的教学内容主要包括C程序设计的基本语法、数据结构和算法,以及飞机大战游戏的制作。
具体安排如下:1.C程序设计的基本语法:学生通过学习C程序设计的基本语法,掌握变量、数据类型、运算符、控制语句等基本概念。
2.数据结构:学生学习常用的数据结构,如数组、链表、栈和队列,并能够运用这些数据结构解决实际问题。
3.算法:学生学习常用的算法,如排序、查找、递归等,并能够运用这些算法解决实际问题。
4.飞机大战游戏的制作:学生通过学习C程序设计的基本语法、数据结构和算法,制作一个简单的飞机大战游戏,提高编程能力和解决问题的能力。
三、教学方法本课程的教学方法采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:教师通过讲解C程序设计的基本语法、数据结构和算法,使学生掌握相关知识。
2.讨论法:学生分组讨论编程问题,培养学生的团队合作能力和解决问题的能力。
3.案例分析法:教师通过分析实际的编程案例,引导学生运用所学知识解决实际问题。
4.实验法:学生动手编写程序,制作飞机大战游戏,提高编程能力和解决问题的能力。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备等。
1.教材:选用权威、实用的C程序设计教材,如《C程序设计语言》(K&R)等。
2.参考书:提供相关的参考书籍,如《C程序设计思想》(Deitel)等,供学生自主学习。
一、概述飞机大战是一款经典的射击游戏,玩家控制飞机在屏幕上不断向上飞行,同时射击敌机,躲避敌机的攻击。
Python作为一种广泛应用于软件开发的高级编程语言,可以用来开发各种类型的游戏。
本报告将详细介绍使用Python语言设计飞机大战程序的过程和实现方法。
二、程序设计目标1. 实现一个具有玩家飞机和敌机的基本射击游戏;2. 能够控制玩家飞机的移动和发射子弹;3. 敌机能够不断向下移动,并且发射子弹攻击玩家飞机;4. 实现游戏得分的计算和显示;5. 添加背景音乐和游戏音效。
三、程序设计思路1. 确定游戏窗口大小和背景图片;2. 创建玩家飞机和敌机的类,并实现它们的移动和碰撞检测;3. 实现玩家飞机的发射子弹和敌机的发射子弹;4. 添加得分和生命值的显示;5. 引入背景音乐和游戏音效。
四、程序设计过程1. 导入pygame模块,并初始化pygame;2. 设置游戏窗口大小和标题,并加载背景图片;3. 创建玩家飞机和敌机的类,实现它们的移动和碰撞检测;4. 实现玩家飞机的发射子弹和敌机的发射子弹;5. 添加得分和生命值的显示;6. 引入背景音乐和游戏音效。
五、程序设计实现1. 导入pygame模块,并初始化pygame:import pygamepygame.init()2. 设置游戏窗口大小和标题,并加载背景图片:SCREEN_WIDTH = 480SCREEN_HEIGHT = 600screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))pygame.display.set_caption('飞机大战')background = pygame.image.load('background.jpg').convert()3. 创建玩家飞机和敌机的类,实现它们的移动和碰撞检测:class Plane(pygame.sprite.Sprite):def __init__(self, image, speed):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image)self.rect = self.image.get_rect()self.speed = speeddef move(self):passdef shoot(self):passdef collide(self):pass4. 实现玩家飞机的发射子弹和敌机的发射子弹:class Bullet(pygame.sprite.Sprite):def __init__(self, image, speed, position): pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image) self.rect = self.image.get_rect()self.speed = speedself.rect.midbottom = positiondef move(self):pass5. 添加得分和生命值的显示:class Score(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)self.score = 0self.font = pygame.font.Font(None, 36)def update(self):self.text = 'Score: d' self.scoreself.image = self.font.render(self.text, 1, (255, 0, 0))self.rect = self.image.get_rect()self.rect.topleft = [10, 10]6. 引入背景音乐和游戏音效:pygame.mixer.init()pygame.mixer.music.load('background_music.mp3') pygame.mixer.music.play(-1, 0.0)bullet_sound = pygame.mixer.Sound('bullet.wav')enemy_sound = pygame.mixer.Sound('enemy.wav')六、程序设计实现结果1. 程序设计完成后,玩家可以通过键盘控制飞机的移动和发射子弹;2. 敌机会不断向下移动,并发射子弹攻击玩家飞机;3. 游戏窗口中显示玩家的得分和生命值;4. 背景音乐和游戏音效能够正常播放。
程序设计综合实践报告姓名田梦涛学号201301051923班级软件13-3项目名称飞机大战实习地点J-13实习时间16、17周实习成绩指导教师签字信息科学与工程学院年月日目录1. 概述 (3)2. 相关技术 (3)2.1 建立基类CGameObject (3)2.2 透明图片贴图 (4)2.3 CObList链表 (4)2.4获得矩形区域函数 (4)2.5发射子弹或导弹函数 (4)2.6 添加爆炸效果技术 (5)2.7对于对象的绘制以及越出边界的处理 (5)2.8字体的个性化输出函数 (6)2.9获取键盘操作函数 (6)2.10用键盘控制战机的移动 (6)2.11 设置定时器 (7)2.12 双缓冲技术 (8)2.13内存释放技术 (8)3. 需求分析 (8)4. 总体设计与详细设计 (8)4.1 系统模块划分 (9)4.2 主要功能模块 (11)4.3 扩展功能设计思路 (11)4.4 软件结构设计体会 (12)5. 编码实现 (12)5.1游戏初始创建 (12)5.2游戏结束处理 (13)5.3 背景设定 (13)5.4 创建游戏对象 (14)5.4 战机技能的创建 (15)5.5 发射模块使用(以发射战机导弹为例,敌机、BOSS发射子弹,乘客逃离客机类似) (16)5.6碰撞检测(以战机与敌机相撞为例,导弹炸毁敌机、子弹命中战机与战机、BOSS或敌机相撞与战机吃到各种道具等情况类似) (17)5.7 定时器的创建 (18)5.8 难度的事件处理程序的创建 (18)6.测试情况说明。
(19)7. 实训中遇到的主要问题及解决方法 (19)8. 实训收获与体会 (20)1. 概述飞机大战游戏是基于Windows桌面的射击类游戏,其需要实现的功能为:实现游戏对象的爆炸特效、文字提示功能和界面背景特效,其主要是遵循一定的游戏规则进行游戏。
游戏中的主要角色可分为如下几个基本部分:战机、敌机(普通敌机、小BOSS和大BOSS)、战机的导弹、敌机的子弹。
飞机大战c语言程序设计报告飞机大战是一款经典的射击类游戏,玩家通过控制飞机的移动和射击来击败敌人。
在本次C语言程序设计报告中,我将介绍飞机大战游戏的设计思路、主要功能和实现方法。
首先,我们需要设计游戏的界面。
使用C语言的图形库,我们可以创建一个窗口来展示游戏。
窗口中央是玩家操控的飞机,周围是敌人飞机和其他的游戏元素。
我们可以使用ASCII字符来绘制游戏界面,使用光标移动和颜色控制函数来实现动态效果。
接下来,我们需要实现玩家飞机的控制。
通过监听键盘输入,我们可以控制飞机的移动。
当按下方向键时,可以让飞机上下左右移动。
同时,我们还需要实现飞机的射击功能。
当用户按下空格键时,飞机会发射子弹,击中敌人飞机会得分。
在游戏中,我们还需要实现敌人飞机的出现和移动。
为了增加游戏的难度,可以设置多个敌人飞机,它们会从屏幕的上方或者右方进入游戏界面,并以一定的速度进行移动。
当敌人飞机飞出屏幕或者被玩家击中时,会消失并重新生成新的敌人飞机。
除了敌人飞机,我们还可以在游戏中添加其他的游戏元素,如道具箱、障碍物等。
玩家可以通过接触道具箱获得奖励,如增加射速、伤害等。
而障碍物可以增加游戏的挑战性,玩家需要躲避障碍物的同时击败敌人飞机。
最后,我们还可以为游戏增加音效和背景音乐,增强游戏的趣味性和可玩性。
通过调用C语言的音频库,我们可以实现在游戏中播放声音。
总结起来,飞机大战是一款非常经典和有趣的游戏。
通过本次C语言程序设计,我们可以深入了解游戏的设计思路和实现方法。
希望本次报告能够对大家了解飞机大战及其相应的C语言程序设计有所帮助。
JIANGXI AGRICULTURAL UNIVERSITY 科技月月评设计报告题目:飞机大战学院:软件学院组长:陈凡小组成员: 陈凡(20121990)班级:软件1212班2014 年11 月一、引言1.1、目的和意义:通过所学的java基础和android开发技巧开发一个飞机大战游戏,用户可以使用移动飞机,发射子弹等功能,同时也使自己更熟练掌握所学的相关知识;1.2、开发工具及技术:开发工具: Eclipse开发技术:java语言1.3、软硬件需求:硬件需求:windows XP,windows 7CPU:英特尔i3以上内存: 2G以上软件需求:无操作系统版本:android版本2.2以上开发工具:Eclipse开发语言:java语言二、需求分析2.1、需求调研通过使用eclipse制作出的飞机大战游戏,能够使在安卓手机上安装了该游戏的用户享受该游戏的乐趣。
2.2、可行性分析(1)技术的可行性需要熟练运用java语言编译。
(2)操作可行性(1)需要将该程序安装在配备安卓系统的手机上.。
(2)需要用户根据游戏界面的提示选择是否进行游戏。
2.3、功能模块需求分析(1)飞机大战游戏的使用功能模块图(2)数据流图:(a)顶层图:(b)0层图:(c)1层图:用户选择(3)流程图:三、系统功能实现3.1、游戏界面与功能实现(1)图标的创建学习要点:创建虚拟机不能放在含有中文的目录。
通过与虚拟机的链接,创建一个新的安卓应用程序,选择游戏图标,并安装在虚拟机上,我的游戏图标是岚标志,效果如下图1.1所示:开始游戏图1.1 游戏图标设计(2)游戏登陆界面的创建学习要点:全屏设置,在清单文件中配置android:theme="@android:style/Theme.No Title Bar.Full screen"点击游戏图标即可直接进入游戏界面,且游戏界面显示为全屏,游戏界面如图1.1所示:图1.2游戏登陆界面设计(3)游戏点击确认的创建学习要点:在布局文件中代码中添加android:on Click="change";在java代码中添加一个相应点击确认的方法。
c课课程设计飞机大战一、教学目标本节课的学习目标包括以下三个方面:1.知识目标:学生需要掌握飞机大战游戏的基本概念、游戏机制和编程原理。
2.技能目标:学生能够运用编程语言实现简单的飞机大战游戏,培养学生的编程能力和解决问题的能力。
3.情感态度价值观目标:通过制作飞机大战游戏,培养学生对计算机科学的兴趣,提高学生主动学习和探索的精神,培养团队合作意识。
二、教学内容本节课的教学内容主要包括以下几个部分:1.飞机大战游戏概述:介绍飞机大战游戏的背景、游戏机制和玩法。
2.编程基础知识:回顾编程语言的基本语法和编程概念,为学生编写飞机大战游戏打下基础。
3.飞机大战游戏制作:引导学生动手实践,逐步完成飞机大战游戏的制作,包括飞机控制、敌机生成、碰撞检测等功能。
4.游戏优化与调试:教授学生如何对游戏进行优化和调试,提高游戏性能和用户体验。
三、教学方法本节课采用以下教学方法:1.讲授法:教师讲解飞机大战游戏的基本概念、游戏机制和编程原理。
2.案例分析法:分析已有的飞机大战游戏案例,引导学生了解游戏制作的流程和技巧。
3.实验法:学生动手实践,编写和调试飞机大战游戏,培养学生的实际操作能力。
4.小组讨论法:学生分组合作,共同完成飞机大战游戏制作,培养团队合作意识和沟通能力。
四、教学资源本节课所需的教学资源包括:1.教材:提供飞机大战游戏制作的相关知识和案例分析。
2.多媒体资料:展示飞机大战游戏的制作过程和示例代码。
3.实验设备:计算机和编程软件,用于学生实践操作。
4.网络资源:提供在线编程教程和飞机大战游戏制作的相关讨论区,便于学生学习和交流。
五、教学评估本节课的评估方式包括以下几个方面:1.平时表现:观察学生在课堂上的参与程度、提问回答情况和团队合作表现,给予相应的评价。
2.作业:布置相关的编程练习和游戏制作任务,评估学生的完成情况和解决问题的能力。
3.考试:设置期末考试,测试学生对飞机大战游戏制作的知识点和编程技能的掌握程度。
X X大学程序设计基础课内项目说明书XXXX年XX月XX日1.设计目的(小标题黑体五号字)制作一个简单的飞机大战游戏。
2.设计内容此飞机大战游戏是一款射击游戏,它随着你的分数增加,而不断改变你的等级,同时等级越高难度就会越大,一旦敌机逃离那么你的分数将会减少,与敌机相撞你的生命值将会减少,按鼠标左键可以连续发射子弹,鼠标移动控制我机移动。
3.本设计所采用的数据结构使用了两个动态链表,分别储存敌机图片的左上角坐标(X,Y)以及子弹图片的左上角坐标(X,Y),删除子弹与敌机以及敌机与我机的碰撞都是基于图片的左上角坐标(X,Y)来判定。
4.功能模块详细设计4.1 子弹相关模块4.1.1详细设计思想当检测到左键按下时,调用添加子弹的函数并进行传参(鼠标的位置坐标)产生新的子弹;当子弹击中敌机(移动子弹的函数来判断是否击中)后调用删除子弹函数来删除子弹并释放内存;移动子弹函数在中还包括子弹是否出界并删除的函数;游戏结束后把所有的子弹都删掉。
4.1.2 核心代码//子弹int bulletvx=0;int bulletvy=-20;int bulletwidth=6;int bullethigh=11;typedef struct Tag_Bullet{int x;int y;struct Tag_Bullet*Next;}bullet,*lbullet;bullet bullethead;lbullet lbhead=&bullethead,lbtail=&bullethead;lbullet pushbullet(int bx,int by); //添加子弹-返回添加的子弹指针lbullet removebullet(lbullet it); //删除子弹-返回下一个子弹的指针lbullet freebullet(); //删除全部子弹lbullet movebullet(); //移动子弹//添加子弹lbullet pushbullet(int bx,int by){lbtail=lbtail->Next=(lbullet)malloc(sizeof(bullet));lbtail->x=bx;lbtail->y=by;lbtail->Next=NULL;return lbtail;}//删除子弹lbullet removebullet(lbullet It){lbullet cbullet;for (cbullet=lbhead;cbullet->Next!=NULL;cbullet=cbullet->Next) {if(cbullet->Next==It){if(It==lbtail)//尾节点单独处理lbtail=cbullet;cbullet->Next=It->Next;free(It);break;}}return cbullet->Next;}//清空子弹lbullet freebullet(){for(lbullet cp=lbhead->Next,Nextp;cp!=NULL;){Nextp=cp->Next;free(cp);cp=Nextp;}lbhead->Next=NULL;return lbhead;}//移动子弹lbullet movebullet(){for(lbullet cbullet=lbhead->Next;cbullet!=NULL;){cbullet->x+=bulletvx;cbullet->y+=bulletvy;for(lenemy cenemy=lenemyhead->Next;cenemy!=NULL;cenemy=cenemy->Next){//检测子弹与敌机的碰撞if(pengzhuang1(cbullet,cenemy)){int a,b;a=cenemy->x;b=cenemy->y;removebullet(cbullet);removeenemy(cenemy);show(a-35,b-60);pushenemy(rand()%400,0);//敌机死亡,添加新的敌机break;}}//判断子弹是否出界if(cbullet->x<0||cbullet->x>=WIDTH||cbullet->y<=0||cbullet->y>=HEIGHT) cbullet=removebullet(cbullet);elsecbullet=cbullet->Next;}return lbhead;}//检测子弹与敌机是否碰撞int pengzhuang1(lbullet bullet,lenemy enemy){if(!(bullet->x+bulletwidth<enemy->x||bullet->x>enemy->x+enemywidth||bullet->y+bullethigh<enemy->y||bullet->y>enemy->y+enemyhigh))score+=3;return !(bullet->x+bulletwidth<enemy->x||bullet->x>enemy->x+enemywidth||bul let->y+bullethigh<enemy->y||bullet->y>enemy->y+enemyhigh);}4.2 敌机相关模块4.2.1详细设计思想一开始就随机产生三个敌机,子弹击中敌机就会删除敌机(子弹相关模块中)并调用产生敌机的函数来再产生一个新的敌机;移动敌机的函数中同样检测敌机是否出界并调用删除敌机函数;在用户数据更新函数中:检测我机是否与敌机碰撞;游戏结束之后将所有飞机删除。
4.2.2 核心代码//敌机int enemyvx=0;int enemyvy=5;int enemywidth=110;int enemyhigh=84;typedef struct Tag_Enemy{int x;int y;struct Tag_Enemy*Next;}enemy, *lenemy;enemy enemyhead;lenemy lenemyhead=&enemyhead,lenemytail=&enemyhead;lenemy pushenemy(int ex,int ey); //添加敌机-返回添加的敌机指针lenemy removeenemy(lenemy it); //删除敌机-返回下一个敌机的指针lenemy freeenemy(); //删除全部敌机lenemy moveenemy(); //移动敌机//用户数据更新函数void updateinput(){MOUSEMSG m;while(MouseHit()){m=GetMouseMsg();if(m.uMsg==WM_MOUSEMOVE){plancex=m.x;plancey=m.y;for(lenemycenemy=lenemyhead->Next;cenemy!=NULL;cenemy=cenemy->Next){//检测敌机与我机是否碰撞if(pengzhuang2(plancex,plancey,cenemy)){int a,b;a=cenemy->x;b=cenemy->y;removeenemy(cenemy);show(a-35,b-60);pushenemy(rand()%400,0);//TODO:敌机死亡,添加新的敌机break;}}}else if(m.uMsg==WM_LBUTTONDOWN){pushbullet(plancex+13,plancey+40);}}char in;if(_kbhit()){in=getch();if(in==32)d=3;}}//添加敌机lenemy pushenemy(int bx,int by){lenemytail=lenemytail->Next=(lenemy)malloc(sizeof(enemy));lenemytail->x=bx;lenemytail->y=by;lenemytail->Next=NULL;return lenemytail;}//删除敌机lenemy removeenemy(lenemy It){lenemy cenemy;for(cenemy=lenemyhead;cenemy->Next!=NULL;cenemy=cenemy->Next) {if(cenemy->Next==It){if(It==lenemytail)//尾节点单独处理lenemytail=cenemy;cenemy->Next=It->Next;free(It);break;}}return cenemy->Next;}//清空敌机lenemy freeenemy(){for(lenemy cp=lenemyhead->Next,Nextp;cp!=NULL;){Nextp=cp->Next;free(cp);cp=Nextp;}lenemyhead->Next=NULL;return lenemyhead;}//移动敌机lenemy moveenemy(){for(lenemy cp=lenemyhead->Next;cp!=NULL;){cp->x+=enemyvx;cp->y+=enemyvy;if(cp->x<0||cp->x>=WIDTH||cp->y<=0||cp->y>=HEIGHT){cp->y=0;cp->x=rand()%410;score-=1;}else{cp=cp->Next;}}return lenemyhead;}//检测敌机与我机是否碰撞int pengzhuang2(int x,int y,lenemy enemy){if(!(x+100<enemy->x||x>enemy->x+enemywidth||y+151<enemy->y||y>enemy->y+enem yhigh))l--;return !(x+100<enemy->x||x>enemy->x+enemywidth||y+151<enemy->y||y>enemy->y+ enemyhigh);}5.心得体会详细从这次的C语言项目开发,我学到了许多东西,主要有:(1)对全局变量和局部变量有了全新的认识,局部变量更适合于分函数,在一个分函数中更能发挥它的独特优势,而全局变量更能适于整个项目的使用,便于在各个分函数中使用,但有一定的缺陷,我认为局部变量更加好用。