版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言小型项目开发报告目录项目功能目的1、功能说明 2、功能框图 1二、算法设计
1、算法思路2、算法流程图3、函数原型三、数据组织1、数据类型定义2、数据存储四、调试和运行1、调试过程2、运行结果五、心得体会实践活动题目;推箱子小程序一、实践目的1加深对课堂讲授内容的理解
2、熟悉程序开发环境、学习计算机系统的操作方法
3、学习上机调试程序4通过对书本知识的自学和理解,掌握用C语言编写实用程序和设计自定义用
户界面的基本方法,培养利用程序设计技术进行计算机与专业知识的交叉应
用,增强综合解决实际问题的能力,掌握多模块结构的程序设计与调试方法以
及程序模块间的数据传递方法,建立提出问题、分析问题、解决问题的思维方
式,提高自身计算机水平,促进灵活运用所学知识解决问题的能力。5使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。培养学生综合运用所学知识独立完成课题的能力。6培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。7培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程。8熟习在制作该项目所需要的技巧,将自己的小项目尽可能多的运用所学到的知识,并且将在课程上面学到的知识付诸于实践,并从实际操作中,找出自己的不足之处进行弥补。
二、实践内容项目功能:1.1功能说明:该程序是一个益智类的游戏,是一个单机游戏,人物通过推动箱子到达目的地以在游戏中取胜,同一时刻只能有一位玩家进行游戏。此游戏目的是在训练你的逻辑思考能力。1.2功能流程图:2算法设计:
2.1算法思路:(1)通过团队讨论先设计游戏地图,在制定游戏规则(2)因为制作的地图需要根据玩家每操作一步刷新一次地图,所以要用for循环语句对地图来进行循环刷新,并利用system(cls)将旧地图进行删除。(3).确定每一单位符号的表示,确定被控制符号的初始位置。(4).对被控制符号的移动进行编写,判断移动式的限制,并使被控制符号移动后的位置显示空格或目标符号。(5)再识别我们需要推动的箱子是否为该目标(6)当所有目标地方都被箱子覆盖时,判断结束,显示“YOUWIN”的图案2.2算法流程图:2.3函数原型:main函数和printf函数返回值类型为int,intgetChar(intx,inty)//来控制地图上的各种元素inttarget[maxX][maxY+1]//用来确定玩家移动箱子到目标点的位置intcanMove()//确定玩家控制后人物是否移动intmoveBox(intx,inty,intc)//移动箱子(白块)intwin()//判断是否胜利voidrules()//游戏的规则voidwriteMap()//地图制作voidgetInput()//指令输入3、调试和运行:3.1、调试过程:(1)当我们把人物移动碰到黑块的时候会发现人物直接将黑块变为了空格并且人物走到边界时人物也变成了空格如图:调试的过程:调试后该步骤能正常运行。在人物运动到目标点后再移动,目标点就变成了空格键调试过程:我们先利用target给目标点确定位置如图然后在通过如下图:先判断人物的地方是否为目标点如果是目标点则人物走后这个点变为目标点(圆圈)如果没有目标点则变为空格(3)在利用二维数组制作地图时提示错误:这个字符串相对于这个字符数组的长度过长了调试过程:■■■■■■■■■■这个字符串长度应该是21所以我们把二维数组设置为Map[7][21]调试后运行正常。(4)我们在前期打算每运行一次地图刷新一次所以我们想用到死循环但当我们运用后发现运行并不是我们理想的状态如图:因为地图在一个界面上一直在输出所以我们利用清屏代码使地图输出一次后再刷新如此循环下去运行结果:程序源代码:#include<stdio.h>#include<stdlib.h>#include<conio.h>#definemaxX7#definemaxY20#definefirstX3#definefirstY16inti,j;structP{ intx; inty;}now,next;charmap[maxX][maxY+1]={"■■■■■■■■■■",/*利用二维数组制作地图*/ "■■■■■■", "■■○□■■■■", "■○○□□※■", "■○□■■", "■■■■■■■■", "■■■■■■■■■■"};charcopyMap[maxX][maxY+1]={"■■■■■■■■■■", "■■■■■■", "■■○□■■■■", "■○○□□※■", "■○□■■", "■■■■■■■■", "■■■■■■■■■■"};inttarget[maxX][maxY+1];/*定义目标点(圆圈)的位置*/voidrules(){ printf("你的人物为※\n\n"); printf("请用W、S、A、D四个键分别控制人物的上下左右移动\n\n"); printf("游戏任务为将箱子(□)推到指定地点(○)\n\n"); printf("当所有箱子都抵达指定地点后,游戏结束\n\n");}voidwriteMap(){ for(i=0;i<maxX;i++){ for(j=0;j<maxY;j++){ printf("%c",map[i][j]); }printf("\n"); }}intgetChar(intx,inty){ if(map[x][y]=='')return0;/*表示空格*/ if(map[x][y]==-95&&map[x][y+1]==-10)return1;/*表示黑块*/ if(map[x][y]==-95&&map[x][y+1]==-11)return2;/*表示盒子*/ if(map[x][y]==-95&&map[x][y+1]==-16)return3;/*表示圆圈*/}intcanMove(){/*判断人物能否移动*/ if(map[next.x][next.y]==-95&&map[next.x][next.y+1]==-10)return0;/*碰到黑块不能走*/ if(next.x<0||next.y<0||next.x>=maxX||next.y>=maxY)return0;/*碰到边界不能移动*/return1;/*其他都可以走*/}intmoveBox(intx,inty,intc){ structPnextBox; switch(c){ case'w':case72: nextBox.x=x-1; nextBox.y=y; break; case's':case80: nextBox.x=x+1;nextBox.y=y; break;case'a':case75:nextBox.x=x;nextBox.y=y-2; break;case'd':case77: nextBox.x=x; nextBox.y=y+2; break; /*移动箱子(白块)*/ } if(nextBox.x<0||nextBox.x>=maxX||nextBox.y<0||nextBox.y>=maxY)return0;/*盒子若超出界限不移动*/ if(getChar(nextBox.x,nextBox.y)==1)return0;/*运用上文53行的1表示盒子碰到黑块则不能移动*/ if(getChar(nextBox.x,nextBox.y)==2)return0;/*运用上文54行的2表示盒子碰到盒子则不能移动*/ map[nextBox.x][nextBox.y]=-95; map[nextBox.x][nextBox.y+1]=-11; return1;/*表示盒子移动成功*/}voidgetInput(){ charc;c=getch();if(c=='b'){for(i=0;i<maxX;i++){for(j=0;j<maxY;j++){ map[i][j]=copyMap[i][j]; } }now.x=firstX;now.y=firstY; return; }switch(c)/*人物移动*/ { case'w':case72: next.x=now.x-1; next.y=now.y; break; case's':case80: next.x=now.x+1; next.y=now.y; break; case'a':case75: next.x=now.x; next.y=now.y-2; break; case'd':case77: next.x=now.x; next.y=now.y+2; break; } if(canMove()){ if(getChar(next.x,next.y)==2)/*确定该地方是否为盒子*/ { if(moveBox(next.x,next.y,c))/*人物与盒子移动*/ { map[next.x][next.y]=-95; map[next.x][next.y+1]=-7; if(target[now.x][now.y])/*确定该地方是否为目标点*/ { map[now.x][now.y]=-95;/*如果有目标点则为圆圈*/ map[now.x][now.y+1]=-16; } else{ /*如果没有目标点则为空格*/ map[now.x][now.y]=''; map[now.x][now.y+1]=''; } now.x=next.x; now.y=next.y;} } else{ /*不是盒子人物就直接移动*/ map[next.x][next.y]=-95; map[next.x][next.y+1]=-7; if(target[now.x][now.y]){ map[now.x][now.y]=-95; map[now.x][now.y+1]=-16; } else{ map[now.x][now.y]=''; map[now.x][now.y+1]=''; } now.x=next.x; now.y=next.y; } }}intwin()/*判断是否胜利*/{ for(i=0;i<maxX;i++){ for(j=0;j<maxY;j++){ if(target[i][j]){ if(target[i][j]==1&&getChar(i,j)!=2)return0;/*表示至少有一个目标点不是箱子则不运行*/ } } } return1;/*否则就运行胜利*/}intmain(){ system("modeconcols=40lines=17"); now.x=firstX; now.y=firstY; target[2][4]=1; target[3][2]=1; target[3][4]=1; target[4][2]=1; while(1)/*制作一个死循环*/ { system("cls");/*清屏*/ rules(); writeMap(); getInput(); if(win())break;/*如果胜利了跳出死循环*/ } system("cls");/*清屏*/ system("modeconcols=115lines=17"); printf("Youwin\n" return0;}三、实践过程第一天:分析问题,找出大体的设计思路。第二天:构造出程序大体框架,即各种功能模块的组合。第三天:分别写出个功能模块程序的源代码。第四天:讲个功能模块加入主程序中,并实现所有的程序基本功能。第五天:优化程序中的不足之处,优化显示界面,使程序软件更加适宜用户的操作和娱乐需要。四、实践体会通过本学期对c语言的学习,我们掌握了运用c来制作各种小项目,虽然不娴熟还有待提高,但是一些技术含量较低的小游戏还是很容易让我们掌握的。此次小程序设计的目的,主要是通过C语言来制作。通过c这个平台,熟习在制作该项目所需要的技巧,将自己的小项目尽可能多的运用所学到的知识,并且将在课程上面学到的知识付诸于实践,并从实际操作中,找出自己的不足之处进行弥补。在这个周里,我们在专业老师的带领下进行了c语言程序实践学习。我们的实践周分为两个部分一是校内实践二是校外实践。在实践周的第四天,我们去了京东航天数字经济示范园,那里有各种各样的商品在京东线上售卖,并且有讲解员为我们讲解京东的各种运营与规划,现在的规模等等,让我觉得一个软件后面是很多人,很多件小事的支持才能使这个软件运行起来。其余的时间我们都在实验楼上课,由周老师带领我们学习程序设计课程,在周延杰老师的带领与指导下,我们顺利完成了此次的程序制作。通过此次实训周,我对于c语言有了更加清晰的了解和兴趣。发现了其中的乐趣与困难。我们小组四人,都十分的配合与参与积极,这才使得我们此次实践得以顺利进行。C语言的实用性特别强,特别是在科技、信息快速发展的今天,我们更应该重视它。并将其运用到以后的生活、工作中。通过一段时间的学习,我对C语言有了更深的了解。在今后的生活中,也希望可以多多知晓C语言的用法,可以从生活中深切感受它的魅力。在时间不长的短学期中,我学到了很多,周老师也给我教了很多。让我重新认识到了自己的不足,发现C语言并没有那么难。虽然只是短短的一一个小学期,却留给了我无数的回忆。老师上课的地方,没有空调,炎炎夏日。同学们都熬了下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 极端降水下医院排水系统与功能恢复关联
- 临沂四年级数学几何作图专项训练卷
- 极端天气下医疗资源短缺的舆情化解策略
- 贵州省毕节市黔西市2025-2026学年高一下学期5月期中物理试卷(答案不全)
- 第一节 微生物的分离和纯培养说课稿2025学年高中生物中图版选修一生物技术实践-中图版
- 26年转运体研究脉络梳理
- 2025-2026学年江苏省盐城市阜宁中学高一(下)期中数学试卷(含答案)
- 肺癌术后呼吸机使用与撤离
- Lesson 13:Be Careful,Danny!说课稿2025学年初中英语冀教版2012九年级全册-冀教版2012
- 高中2025消防员心理韧性说课稿
- 2026广东肇庆市四会市龙甫镇专职消防队人员招聘1人笔试备考题库及答案解析
- (四模)新疆2026年高三普通高考五月适应性文科综合试卷(含答案及解析)
- 2026年中国工商银行校园招聘考试笔试试题及答案解析
- 2026年中考政治百校联考冲刺押题密卷及答案(共九套)
- 哈尔滨市达标名校2026届中考语文模拟预测题含解析
- 国资委安全生产十条硬措施
- 2026防灾减灾日安全培训课件
- 2026年 成都 事业单位考试 真题
- 2026年2026届高三第二次模拟考试化学试题+答案新版
- (二模)2026年广州市普通高中高三毕业班综合测试(二)物理试卷(含答案及解析)
- 浙江省湖州、衢州、丽水三地市2026届高三下学期4月二模技术试题(含答案)
评论
0/150
提交评论