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