c语言程序设计课设简单,北京工业大学C语言程序设计课设报告.docx

253b171540df25e1b84436cbe50dfc72.gif北京工业大学C语言程序设计课设报告.docx

高级语言程序设计课设报告题 目 光头强摘苹果 学 号 15074219 姓 名 梁丰洲 指导教师 陈彩 提交日期 年 月 日 成绩评价表实验报告内容实验报告结构实验报告图表实验报告与程序一致性最终成绩丰富正确 基本正确 有一些问题 问题很大完全符合要求 基本符合要求 有比较多的缺陷 完全不符合要求符合规范 基本符合规范 有一些错误 完全不正确完全一致基本一致 基本不一致程序功能实现程序执行情况问题回答情况总体评价完成基本功能和 扩展功能完成基本功能几乎无扩展功能基本完成基本功能未完成基本功能顺畅有问题,经过老师指出之后改正 有问题,无法改正立即正确回答 经思考后正确回答 回答有部分错误 回答完全错误 不能回答问题 教师签字 目录1 需求分析31.1 功能需求31.2数据需求31.3 界面需求31.4 开发与运行环境需求52 概要设计52.1 主要数据结构52.1.1常量52.1.2主要结构体52.1.3主要变量62.2 程序总体结构62.2.1 模块调用图62.2.1 主程序流程图82.3 子模块设计93详细设计113.1 变量定义用于变量的申明定义(无全局变量)113.2 变量初始化用于变量的初始化赋值(涉及文件的读取)113.3 显示环境设置用于屏幕创建、背景音乐和文字样式设置153.4 游戏状态判定用于游戏运行状态处理(包括文件读取)163.5 绘图处理用于游戏的绘图163.6 逻辑运算处理用于游戏逻辑处理包括游戏计时173.7 鼠标操作用于鼠标操作处理183.8 键盘操作用于键盘操作处理193.9 摘取判定用于苹果摘取判定193.10 运动判定用于运动可行判定及操作203.11 运动修改用于运动位置修改223.12 碰撞判定用于运动碰撞判定233.13 自由落体用于物体自由落体判定和操作243.14 平台移动用于处理平台移动和平台的状态随机生成263.15 熊大移动用于处理熊大移动284 测试284.1 按键测试284.2 鼠标测试304.3 计时测试305 用户手册305.1 游戏的设计目的305.2 游戏的运行环境和要求315.3 游戏的安装和启动方法315.4 游戏的操作方法316 总结提高316.1 课程设计总结316.2 对本课程意见与建议31附录 程序代码32gtq123.cpp32MY_image_move.h371 需求分析游戏名称光头强摘苹果 这是一款PC端的益智小游戏。玩家通过对鼠标键盘的控制操控人物来躲避熊大监视并摘取苹果进行游戏。1.1 功能需求基本功能1.进入游戏后提示输入玩家名。游戏界面有两部分组成,左侧为1000632的游戏运行界面,右侧为300632的按键操作和玩家信息显示界面。2.键盘输入玩家名后按“Start”按钮开始游戏。3.平台生成并随机移动,通过键盘上下左右键控制人物在平台和地面之间来回移动跳跃、跳下。熊大不断的上下移动监视光头强,玩家可操控人物在平台上按空格键摘取苹果,如成功摘取苹果积10分。在时间(60s)结束或摘苹果被发现后视为游戏结束。4.初始化读取并显示历史最高分与姓名。拓展功能1.能够显示玩家排行榜。这个功能需要从文件中获取每个玩家的最高得分,并按得分排序。2.增加和美化界面元素,是游戏更具趣味性。如光头强向上跳跃时可能被滑块撞回,不是直接站上。光头强跳跃时考虑到重力,且使曲线更加真实优美等3.添加更多的按钮功能。4.同时用键盘和鼠标控制游戏1.2数据需求1.历史最高分和最高分玩家。2.玩家名和当前得分。3.运行的剩余游戏时间。4.人物的坐标和各个方向移动速度,平台的坐标和状态,熊大的坐标。1.3 界面需求游戏开始键入玩家名和开始画面游戏运行过程中界面游戏结束后界面1.4 开发与运行环境需求开发环境Visual studio 2010运行环境win82 概要设计2.1 主要数据结构2.1.1常量物体碰撞计算公式define RECT_HIT_RECTx,y,w,h,x1,y1,w1,h1 yhy1 yy1h1 xwx1 xx1w1 物体碰撞计算公式define LINE_ON_LINEx1,y1,w1,x2,y2,w2 y1y2 x1x2w2 x1x2-w1 速度define MOVE_SPEED_HERO 6define JUMP_HEIGHT 160define MOVE_SPEED_MONSTER 72.1.2主要结构体typedef struct角色结构体IMAGE pic5;int x;int y;int direct; 运动方向 0左 1右 2上 3下 int width; 图片的宽度和高度,用于碰撞判定 int height;int p_movex;随平台上移动速度int movex;横向移动速度int jumpx;跳跃状态横向移动速度int movey; 跳跃速度int jumpheight; 跳跃高度int P_num;怪兽所在层数Make_hero;typedef struct平台结构体IMAGE pic7;int x;int y;int width;int height;int state; 状态 0-平台 1-有苹果平台 2-无苹果平台int layer;平台的第几层Make_plat;2.1.3主要变量1.Make_hero m_hero1,Monster1; 光头强 熊大 2.Make_plat Plat9;平台最大数量3.int Num_plat3,NUM_P0,count40,0,TIME_COUNT,0,state0,game_point0;各个平台数 平台总数NUM_P 按键是否弹起计数0,1 计时2 逻辑运算计数3 游戏状态 分数4.MOUSEMSG my_mouse;鼠标5.LOGFONT f;信息字体6.char H_Player_name10;最高分玩家7.int h_game_point;最高分8.TCHAR Player_name10; 玩家tchar9.Char player_name10;玩家名char10.FILE *fp;文件2.2 程序总体结构2.2.1 模块调用图482.2.1 主程序流程图2.3 子模块设计1. 图片加载模块1void Load_heroMake_hero m_hero,LPCTSTR pImgFile,LPCTSTR pImgFile_,int x,int y,int width,int hight,int x_,int y_2void Load_heroMake_hero m_hero,LPCTSTR pImgFile,int x,int y,int width,int hight,int x_,int y_3void Load_platMake_plat plat,LPCTSTR pImgFile,int g功能给指定变量架构体image变量初始化。参数Make_hero m_hero -人物结构体, Make_plat plat -平台结构体, LPCTSTR pImgFile -图片地址, int x,int y,int width,int hight,int x_,int y -图片截图坐标, int g -平台总数返回值无返回值。2. 绘图函数模块1void DrawMake_hero hero2void DrawMake_plat plat,int NUM_P功能绘制图片。参数Make_hero hero -人物结构体, Make_plat plat -平台结构体, int NUM_P -平台总数返回值无返回值。3. 文字显示函数模块1void Text_outint text,int x,int y2void Text_outchar text,int x,int y3void Text_outTCHAR text,int x,int y功能文字显示。参数int text,char text,TCHAR text -函数重载 不同的类型变量显示, int x,int y -显示坐标返回值无返回值。4. 键盘操作模块1void Key_checkint count,Make_hero m_hero功能按键接收。参数int count -按键计数, Make_hero m_hero -人物结构体返回值无返回值。5. 苹果摘取函数模块1int CheckPickMake_hero m_hero,Make_hero Monster,Make_plat Plat,int NUM_P功能苹果摘取。参数Make_hero hero -人物结构体, Make_hero Monster -熊大结构体, Make_plat plat -平台结构体, int NUM_P -平台总数返回值整形返回值 0-不能摘取 1-摘取成功积分 3-摘取失败游戏结束。6. 运动判定函数模块1void MovecheckMake_hero m_hero,Make_plat Plat,int NUM_P功能运动可行判定及操作。参数Make_hero hero -人物结构体, Make_plat plat -平台结构体, int NUM_P -平台总数返回值无返回值。7. 运动修改函数模块1void MoveOffsetint x,int y,Make_hero m_hero,Make_plat Plat,int NUM_P功能运动位置修改。参数Make_hero hero -人物结构体, Make_plat plat -平台结构体, int NUM_P -平台总数, int x,int y -x y方向的人物移动速度返回值无返回值。8. 碰撞判定函数模块1int RoleCanMoveint xoff, int yoff,Make_hero m_hero,Make_plat Plat,int NUM_P功能判断是否碰撞。参数Make_hero hero 人物结构体, Make_plat plat -平台结构体, int NUM_P -平台总数, int xoff int yoff -x y方向的人物移动速度返回值整形返回值 0-碰撞 不能移动 1-可以进行移动。9. 自由落体函数模块1int CheckRoleMake_hero m_hero,Make_plat Plat,int NUM_P功能判断是否需要自由落体。参数Make_hero hero 人物结构体, Make_plat plat -平台结构体, int NUM_P -平台总数返回值整形返回值 0-自由落体 1-无须自由落体。10. 平台移动函数模块1void Plat_MoveMake_plat Plat,int NUM_P功能平台移动和随机状态生成。参数Make_plat plat -平台结构体, int NUM_P -平台总数返回值无返回值。11. 熊大移动函数模块1void Monster_MoveMake_hero monster功能熊大移动。参数Make_hero Monster -熊大结构体返回值无返回值。3 详细设计3.1 变量定义用于变量的申明定义Make_hero m_hero1,Monster1; 光头强 熊大Make_plat Plat9;平台各个平台数 平台总数NUM_P 按键是否弹起计数0,1 计时2 逻辑运算计数3 游戏状态 分数int Num_plat3, NUM_P0,count40,0,TIME_COUNT,0,state0,game_point0;MOUSEMSG my_mouse;鼠标LOGFONT f;信息字体char H_Player_name10;最高分玩家int h_game_point;最高分TCHAR Player_name10; 玩家char player_name10;FILE *fp;3.2 变量初始化用于变量的初始化赋值(涉及文件的读取)玩家信息 最高分信息初始化fp resPoints fight.txt,r;fscanffp,d,s,fclosefp;光头强的初始化m_hero0.x100;m_hero0.y465;m_hero0.direct0;m_hero0.width55;m_hero0.height85;m_hero0.movex0;横向移动速度m_hero0.jumpx0;跳跃时横向速度m_hero0.movey0;跳跃时纵向速度m_hero0.jumpheight0;跳跃高度级别m_hero0.p_movex0; 初始平台速度为0m_hero0.P_num0;熊大的初始化Monster0.x1000;Monster0.y350;Monster0.direct3;Monster0.width108;Monster0.height126;Monster0.jumpx0;Monster0.movex0;Monster0.jumpheight0;Monster0.movey0;Monster0.P_num1;熊大的初始平台第一层平台的初始化srandunsignedtimeNULL;doint i0;forint t0;t3;t给平台 layer赋值Num_platt rand31;ift0fori;iNum_platt;iPlati.layer1;ift1fori;iNum_plattNum_plat0;iPlati.layer2;ift2fori;iNum_plattNum_plat1Num_plat0;iPlati.layer3;NUM_Pi;得到总平台数while5NUM_P;forint g0;gNUM_P;g平台 (及初始值设定)ifPlatg.layer1Load_platPlat,_TresPlat.jpg,g;Platg.xg*1214/Num_plat0;设定水平坐标 平均Platg.y400;Platg.height30;Platg.width214;Platg.state0;ifPlatg.layer2Load_platPlat,_TresPlat.jpg,g;Platg.xg-Num_plat0*1214/Num_plat1125;Platg.y255;Platg.height30;Platg.width214;Platg.state0;ifPlatg.layer3Load_platPlat,_TresPlat.jpg,g;Platg.xg-Num_plat1-Num_plat0*1214/Num_plat275;Platg.y110;Platg.height30;Platg.width214;Platg.state0;动态图加载Load_herom_hero,_Tresm_hero.jpg,_Tresm_hero_.jpg,0,0,55,85,0,85;Load_heroMonster,_TresMonster.jpg,0,0,108,126,0,126;背景静态图加载IMAGE img9;loadimageloadimageloadimageloadimageloadimageSetWorkingImagegetimagegetimagegetimagegetimage3.3 显示环境设置用于屏幕创建、背景音乐和文字样式设置创建屏幕initgraph1300,632;信息字体设置gettextstylef.lfHeight25;字体大小_tcscpy_sf.lfFaceName,_T微软雅黑;字体f.lfQuality ANTIALIASED_QUALITY;抗锯齿setbkmodeTRANSPARENT;透明settextstyle工作状态settextcolorBLACK;颜色绘图BeginBatchDraw;putimage0,0,putimage0,550,putimage1000,0,putimage1173,276,putimage1173,276,EndBatchDraw;背景音乐mciSendString_Topen resbgm.mp3 alias BackMusic, NULL, 0, NULL; 打开音乐mciSendString_Tsetaudio BackMusic volume to 500,NULL,0,NULL;设置音量大小mciSendString_Tplay BackMusic repeat, NULL, 0, NULL;玩家名加载BoxPlayer_name,10,_T输入玩家名;WideCharToMultiByteCP_ACP, 0, Player_name, -1, player_name, 10, NULL, NULL;3.4 游戏状态判定用于游戏运行状态处理(包括文件读取)/游戏结束/ifstate3ifgame_point h_game_pointiffp resPoints fight.txt,wNULL;fprintffp,d,s,game_point,player_name;fclosefp;putimage250,150,Sleep3000;exit0;3.5 绘图处理用于游戏的绘图/画图处理/静态图/BeginBatchDraw;putimage0,0,putimage0,550,动态图/DrawPlat,NUM_P;putimage1000,0,putimage1173,276,putimage1173,276,DrawMonster;Drawm_hero;/用户信息 时间输出/Text_outcount2/1000,1210,34;Text_outgame_point,1150,450;ifgame_point h_game_pointText_outgame_point,1150,550;Text_outPlayer_name,1150,504;elseText_outh_game_point,1150,550;Text_outH_Player_name,1150,504;Text_outPlayer_name,1150,400;EndBatchDraw;3.6 逻辑运算处理用于游戏逻辑处理包括游戏计时/逻辑运算处理/ifcount34在10毫秒每帧设定下 每40毫秒走一次逻辑运算count30;ifstate1 游戏状态判定count2 -40; 计时器 if0count2状态改变state 3;按键操作判定 键压Key_checkcount,m_hero;ifGetAsyncKeyStateVK_SPACE 0ifCheckPickm_hero,Monster,Plat,NUM_P1 苹果摘取判定game_point 10;ifCheckPickm_hero,Monster,Plat,NUM_P3state 3;移动可行判定以及操作Movecheckm_hero,Plat,NUM_P;/自由落体 以及 平台站定判定/CheckRolem_hero,Plat,NUM_P;/平台移动函数/Plat_MovePlat,NUM_P;/熊大移动函数/Monster_MoveMonster;count3;3.7 鼠标操作用于鼠标操作处理/鼠标接收/ifMouseHitmy_mouseGetMouseMsg;ifmy_mouse.uMsg WM_LBUTTONUPifstate0state21200my_mouse.xmy_mouse.x1280 86 my_mouse.ymy_mouse.y170state 1;if 1200my_mouse.xmy_mouse.x1280180 my_mouse.ymy_mouse.y260state 3;ifstate11200my_mouse.xmy_mouse.x1280280 my_mouse.ymy_mouse.y360state 2;3.8 键盘操作用于键盘操作处理按键操作判定 键压Key_checkcount,m_hero;ifGetAsyncKeyStateVK_SPACE 0ifCheckPickm_hero,Monster,Plat,NUM_P1 苹果摘取判定game_point 10;ifCheckPickm_hero,Monster,Plat,NUM_P3state 3;3.9 摘取判定用于苹果摘取判定int CheckPickMake_hero m_hero,Make_hero Monster,Make_plat Plat,int NUM_Pforint g0;gNUM_P;gif LINE_ON_LINEm_hero0.x, 是否站在平台的苹果树范围内m_hero0.ym_hero0.height,m_hero0.width,Platg.x50,Platg.y,Platg.width-100ifPlatg.state1Platg.layerMonster0.P_numPlatg.state2;修改苹果树平台被摘后状态return 1;else ifPlatg.state1Platg.layerMonster0.P_numreturn 3;elsereturn 0;3.10 运动判定用于运动可行判定及操作void MovecheckMake_hero m_hero,Make_plat Plat,int NUM_Pif0 m_hero0.movey如果不是跳跃, 横向移动MoveOffsetm_hero0.movex, 0,m_hero,Plat,NUM_P;else跳跃, 先横向移动, 再纵向移动MoveOffsetm_hero0.jumpx, 0,m_hero,Plat,NUM_P;MoveOffset0, m_hero0.movey,m_hero,Plat,NUM_P;ifm_hero0.movey0向上运动纵向速度movey为负值m_hero0.jumpheight-m_hero0.movey; 增加跳跃高度重力影响,速度减慢ifm_hero0.movey-1m_hero0.movey;到达顶点后向下落, 最大跳跃高度为JUMP_HEIGHTifm_hero0.jumpheight JUMP_HEIGHT m_hero0.jumpheight JUMP_HEIGHT; 跳跃高度置为最大m_hero0.movey4; 纵向下落速度置为4, 表示开始下落else ifm_hero0.movey0下落过程, 跳跃高度减少m_hero0.jumpheight - m_hero0.movey;重力影响,速度增大m_hero0.movey;3.11 运动修改用于运动位置修改void MoveOffsetint x,int y,Make_hero m_hero,Make_plat Plat,int NUM_P横纵增量为0,不移动,代码结束ifx0 y0 m_hero0.x m_hero0.p_movex;ifm_hero0.x0m_hero0.x0;ifm_hero0.x945m_hero0.x945;return;ify0跳跃状态下清除 随平台速度m_hero0.p_movex0;如果碰到物体,不移动,代码结束ifRoleCanMovex,y,m_hero,Plat,NUM_Preturn;修改玩家坐标m_hero0.x m_hero0.xxm_hero0.p_movex;m_hero0.y y; 判断是否超出左边界ifm_hero0.x0m_hero0.x0;ifm_hero0.x945m_hero0.x945;3.12 碰撞判定用于运动碰撞判定int RoleCanMoveint xoff, int yoff,Make_hero m_hero,Make_plat Plat,int NUM_Pint canmove1;初始化, 1表示能移动

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值