《打气球课设报告 .docx》由会员分享,可在线阅读,更多相关《打气球课设报告 .docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品名师归纳总结课程设计报告1. 设计内容程序设计题目为 “打气球 ”嬉戏设计与实现,主要实现以下功能:2,翱翔的气球怎么飞 .随机飞 ,随机速度又怎么表现 .该如何记时 .3,打气球 怎么算打中 .打中后 ,气球爆炸怎么表现 .声音了 .4,给我个计数器 运算打中的 ,飞走的 ,甚至击中概率 5,成与败 怎么算成功 .怎么算失败 .如何表现 6,完善结尾1 使用面对对象的方法,设计并实现 “打气球 ”嬉戏。2 气球由的平线随机产生,并向上运动。3 用户使用鼠标点击气球,点中气球,气球消逝,分数增加100分。4 嬉戏时间为 60秒,时间采纳倒计时方式显示,嬉戏时间为0时,提示用户是否重新开头。
2、5 “开头/暂停”按钮。当点击 “开头”按钮,嬉戏开头,按钮文字变为“暂定”。点击“暂停”按钮,嬉戏处于暂停状态,按钮文字变为“开头”。6 “退出”按钮。点击 “退出”按钮,提示是否退出信息,如确定退出,关闭程序。如取消,就回到软件运行界面。2. 设计思想和实现方法1)绘制嬉戏界面。综合考虑绘图和控件功能的实现,使用AppWizard 建立一个基于对话窗口的MFC 应用程序框架,并通过控件工具栏选取绘图区域,创建“暂停/开头”按钮、“退出”按钮以及分别显示时间和分数的两个编辑框。函数下添加代码,创建黑色画笔和红色画刷,分别用来勾画椭圆 气球)、直线 函数擦除四边,从而规定了图形显示区域。绘图时
3、,以椭圆中心坐标作为参考,用Ellipse函数绘制气球,用 MoveTo 、LineTo函数画绳子和的平线。 退出程序。 实现暂停功能,按钮变为“开头”。再点击就重新调用SetTimer 开启计时器,按钮变为“暂停”。函数使横纵坐标随机变化实现气球的随机摇摆,当气球升至显示区域外就重新产生一个。响应时间大事时,定义一个时间全局变量并初始化为60,变量递减同时以文本形式不断输出以实现倒计时。假如时间为0,就暂停。在OnCreate函数下,通过 for 循环随机产生每个气球中心点的横纵坐标,并通过SetTimer定义两个定时器,分数每0.05 秒刷新一次,时间每过1 秒刷新一次。6)用鼠标“打”气
4、球。这是鼠标的单击大事,当嬉戏暂停或终止时不执行。嬉戏进行时,判定鼠标单击的位置是否在气球上,即判定鼠标坐标到气球中心的距离,当点在气球范畴内的时候将气球坐标移至界面外,气球消逝,同时分数加100,并重新以文本形式输出。3. 核心代码说明1)变量定义#define NUM 10/ 每一次随机产生的气球最大数int aNUM2 。/第一维掌握数目 其次维表示气球坐标int count=60。/时间long score。/分数bool state=1。说明:此段代码写在程序的开端,将产生的气球数目赋值给变量,就只需转变此处变量的值就可以轻易的转变气球个数,易于修改操作。二维数组的第一维与 for
5、循环语句相结合,可以实现对每一个气球的操作,其次维表示坐标,实现对气球的定位。可编辑资料 - - - 欢迎下载精品名师归纳总结。CPaintDC dcthis。CPen bPenPS_SOLID, 0, RGB0,0,0。 /黑色画笔CBrush rbrushRGB255,0,0。 /红色画刷dc.SelectObject&bPen。 dc.SelectObject&rbrush。dc.ExcludeClipRect450,0,800,600。/规定图形显示区域dc.ExcludeClipRect0,401,800,600。dc.ExcludeClipRect0,0,10,600。dc.Exc
6、ludeClipRect0,0,800,10。dc.MoveTo30,400。/绘制的平线dc.LineTo440,400。forint i=0。i/ 绘制气球和绳子以气球的中心点作可编辑资料 - - - 欢迎下载精品名师归纳总结为参考点高 50dc.Ellipseai0-20,ai1-25,ai0+20,ai1+25。/宽 40 dc.MoveToai0,ai1+25 。dc.LineToai0,ai1+65 。/绳长 40可编辑资料 - - - 欢迎下载精品名师归纳总结说明:用 RGB函数挑选颜色,黑色画笔绘制气球轮廓、绳子和的平线,红色画刷填充气球。为使界面分明,需要规定显示气球的区域,
7、四次调用ExcludeClipRect函数分别擦除了界面右、下、左、上的部分区域。绘制的平线时,纵坐标需稍小于绘图区的下边界纵坐标。为简化操作,选取球心作为气球的定位点,并以此点坐标表示气球和绳子的端点坐标,操作此点即操作整体。ifIDYES=MessageBox 确认退出 .,Exit,MB_YESNO/弹出确认退出对话框CDialog:OnOK 。说明:单击按钮,屏幕弹出对话框,点击“是”,调用OnOK 退出程序。可编辑资料 - - - 欢迎下载精品名师归纳总结ifstate=0&count=0/ 时间为 0 单击重新开头ifIDYES=MessageBox 是否重新开头 ., ,MB_Y
8、ESNOSetDlgItemTextIDP_S,暂停。/按钮变为暂停char buffer15 。score=0。sprintf buffer, SCORE:%4d,score。m_score1=LPCTSTRbuffer。UpdateData0。count=60。state=1。SetTimer1,50,NULL 。/分数 0.05 秒刷新一次SetTimer2,1000,NULL 。/时间 1 秒刷新一次return。ifstate=1/点击后暂停 按钮变为开头SetDlgItemTextIDP_S,开头。KillTimer1 。KillTimer2 。state=0。Else/点击后嬉戏
9、开头 按钮变为暂停SetDlgItemTextIDP_S,暂停。SetTimer1,50,NULL 。SetTimer2,1000,NULL 。state=1。说明:state 初值为 1,通过判定其值执行相应的if 语句。嬉戏开头后,单击按钮,按钮变为“开头”,同时调用KillTimer 函数,程序暂停。再次单击,按钮变为“暂停”,调用SetTimer函数,程序连续。随着嬉戏的进行,当时间递减为 0 时,点击弹出确认重新开头的对话框,如点击“是”,就时间变为60,分数归 0 并输出,按钮变为“暂停”,嬉戏重新开头。int i 。switch nIDEvent可编辑资料 - - - 欢迎下载精
10、品名师归纳总结case 1:fori=0 。iifai1=0|ai0/气球升至界面外 就重新随机产生一个ai0=rand%450-30+30 。ai1=rand%480-450+450 。可编辑资料 - - - 欢迎下载精品名师归纳总结Else/气球上升并随机摇摆ai1-=rand%4+2 。ai0+=rand%4-2 。可编辑资料 - - - 欢迎下载精品名师归纳总结InvalidateRectNULL,TRUE 。return 。case 2: /输出时间char buffer15 。count-。sprintf buffer, TIME:%4d,count 。 /格式化输出到字符串m_t
11、ime1=LPCTSTRbuffer 。UpdateData0。 ifcount=0SetDlgItemTextIDP_S,重新开头 。KillTimer1 。KillTimer2 。state=0。return 。说明:OnTimer函数是通过switch 语句对大事进行响应,此段程序中,case1中第一对每个气球进行了位置判定,如气球中心到了界面之外就重新产愤怒 球。而界面中的气球就在上升过程中随机摇摆,这样就大大防止了气球相互重叠的情形。 case2 中主要实现倒计时功能,并将时间转化为字符格式输出,时间为 0 时,开头按钮变为“重新开头”。if CDialog:OnCreatelpCr
12、eateStruct = -1 return -1。可编辑资料 - - - 欢迎下载精品名师归纳总结srand intGetCurrentTime 。/ 初始化随机数发生器rand%MAX-MIN+MINPOINT point 。/记录鼠标位置GetCursorPos&point。ScreenToClient&point。forint i=0 。iai0=rand%450-30+30 。ai1=rand%480-450+450 。SetTimer1,50,NULL 。SetTimer2,1000,NULL 。char buffer15 。sprintf buffer, SCORE:%4d,sc
13、ore。 /输出分数m_score1=LPCTSTRbuffer。sprintf buffer, TIME:%4d,count 。 /输出时间m_time1=LPCTSTRbuffer 。return 0。说明:此段代码主要就各功能进行函数的创建和定义,包括:初始化随机数发生器并猎取随机数产愤怒球,定义并猎取鼠标位置,设置时间和分数的定时 器,定义时间和分数的输出。 / 打气球ifstate=0 return。forint i=0 。iifpoint.x-ai0*point.x-ai0*point.y-ai1/判定鼠标是否点中气球ai0=0 。ai1=0 。score+=100。char bu
14、ffer15 。sprintf buffer, SCORE:%4d,score。m_score1=LPCTSTRbuffer。UpdateData0。break。可编辑资料 - - - 欢迎下载精品名师归纳总结CDialog:OnLButtonDownnFlags, point 。说明 :打气球过程是通过鼠标点击气球实现的。State 为 0 时,嬉戏暂停或终止,程序不运行。嬉戏过程中,通过判定鼠标点击的位置与气球中心位置的距离判定是否点中气球。如点中,将气球移至显示界面外,同时分数加100 并重新输出。4. 测试报告嬉戏开头后,界面如下:点击暂停按钮,程序暂停:可编辑资料 - - - 欢迎下
15、载精品名师归纳总结用鼠标点击气球,分数加 100:可编辑资料 - - - 欢迎下载精品名师归纳总结时间倒计为 0,程序暂停,按钮变为“重新开头”:点击“重新开头”按钮,弹出确认对话框:可编辑资料 - - - 欢迎下载精品名师归纳总结点击“是”,嬉戏重新开头,分数为0,时间从 60 倒计:点击“退出”按钮,弹出确认对话框:可编辑资料 - - - 欢迎下载精品名师归纳总结点击“是”就程序退出。5. 存在问题及分析1)随机产愤怒球时,为使界面清楚美观,需要掌握产生的数目,尽量防止气球相互重叠掩盖的情形。数目可由二维数组掌握,后一问题就必需操作气球位置来解决,程序中是通过气球的随机摇摆来削减重叠机会的
16、。2)打气球时,判定鼠标是否点中气球,实际就是判定到椭圆中心的距离。而点中范畴其实是气球所在的矩形。如要点中椭圆,就判定时最好与椭圆方程相结合。3)嬉戏中对分数的刷新频率要把握适度,太快屏幕显得不稳固,太慢分数变化不准时。经在嬉戏中的不断调整挑选了 0.05 秒作为刷新频率,比较合适。气球由的平线随机产生,并向上运动,同时随机小范畴摇摆。2用户使用鼠标点击气球,点中气球,气球消逝,分数增加100 分。3嬉戏时间为 60 秒,时间采纳倒计时方式显示,嬉戏时间为0 时,程序暂停,单击“重新开头”按钮,提示用户是否重新开头。4 “开头 /暂停 ”按钮。嬉戏开头后,点击“暂停 ”按钮,嬉戏处于暂停状态,按钮文字变为 “开头”。点击 “开头”按钮,嬉戏重新开头,按钮文字变为 “暂停”。 5 “退出 ”按钮。点击 “退出 ”按钮,提示是否退出信息,如确定退出,关闭程序。如取消,就回到软件运行界面。仍存在的不足是:运行程序时嬉戏直接开头,不是通过点击“开头”按钮实现的。本程序简洁易懂,层次清楚,可读性和可操作性都很强,用简洁的语句实现了多种功能,修改或完善时也较为敏捷便利。可编辑资料 - - - 欢迎下载