C语言课程设计报告_第1页
C语言课程设计报告_第2页
C语言课程设计报告_第3页
C语言课程设计报告_第4页
C语言课程设计报告_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北系联合大学信息学院程序设计基础课程设计报告打字母游戏设计报告姓名(学号):专业:计算机科学与技术程序设计基础课程设计报告第1页C语言课程设计是一门实践性很强的课程,必须十分重视实践环节,保证应有足够的上机实验时间。课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识化为解决问题的能力,由此提高学生适应实际环境和实践编程的能力。程序设计可以调动学生的创新能力和求知欲不能满足于能看懂书上的程序,而应当熟练地掌握程序设计的全过程,即能独立地编写出源程序,独立地上机调试程序,独立运行程序和分析结果。针对C语言课程设计需要,根据要求设计一个简单打字程序,锻炼动手动脑能力和知识的掌握。根据一些练习打字软件的启发所制作的游戏,实现经过不断重复的记忆法熟悉键盘字母所在位置的目的。第一章.需求分析当今时代,网络已经成为人们生活中不可缺少的一部分,世界上的第三媒体Internet,它打破了地域时间限制,改变了人们的工作和生活方式,制作站点是企业和个综合运用能力、对结构体、文件、颜色函数的控制函数的使用,以及我们的软件设计能力。打字母游戏通过简单的操作锻炼学生的输入能力,简单快捷非常有效。计算机已经成工作效率,同时可以使敏感文档更加安全,等等。运用数据结构中的算法思想作为数据结构,结合C语言的基本知识,编写一个简单的打字母游戏。通过完成课程设计,进一步熟悉C语言程序设计的基本知识,掌握数据结构的一些基本算法思想,掌握C语言的文件操作,进一步熟悉指针的用法,数组的建立运用和函数的调用等。加深对数据结构的理解,提高算法设计能力,锻炼编程能力。础上做更多的改进,例如提示文字,字母修正,于自己的打字程序,在一定程度上我们还是有一定的自豪感的。现在练习打字的软件不多,最好用的当属金山公司开发的金山打字通,金山打字是金山公司推出的系列教育软件,主要由金山打字通和金山打字游戏两部分构成是一款功能齐户也许更需要一种可以运行在各种配置上而且很节省资源,可以随意更改的练习打字的工具,这就让我们有了想法。我们这次使用的是MicrosoftVisualC++6.0,并且该平台易第二章.方案论证和比较欢迎界面基本功能:(1)随机产生一组字符,横向一定的速度通过屏幕中的某一显示范围。(2)用户敲击显示范围中的字母,如击中某一字母,字母消失。(3)击中一个字符,成绩累加一个固定的分值。(4)程序结束条件为下落完指定个数的字母。(5)实现不同下落速度。(6)要求保存最好的10次成绩,并从大到小排序。拓展功能:(1)游戏者可用一个已有的用户名第四天产生、一成员负责在随机范围内产生字母、另外三成员负同实现击中字母后的声音提示,并最终测试,成员共同完成课程设计报告第三章.系统分析与设计显示分数及体现打字母比较人性化的说明。游戏结束的时候,有是否再来一局的询问,退出每次下落200个字母,玩家自己选择等级,只要能击中就可以拿到分数,这样既可以锻炼玩家的耐心,又可以练习打字母。等级分为九个等级,字母下落速度随数字的大小逐渐增加,等级是通过时间的间隔设置的。击中后会自动统计分数。功能:随机产生一组字符,横向或纵向以一定的速度通过屏幕中的某一显示范围。用户敲击显示范围中的字母,击中某一字母,及时的做出相应的标识。击中一个字符,成绩累加一个固定的分值。设计了一个合理的程序结束条件:定量200个字母。保存最近完成游戏的10个人的名字和成绩,并排序。各对象之间的联系:每个设计对象之间都是有联系的,比如说欢迎界面的代码中,插#pragmacomment(lib,"Winmm.lib"),导入winmm.lib库,有了它才可以支持对conio.h不是C标准库中的头文件,在Cstandardlibrary,ISOC和POSIX标准中均没有定conio是ConsoleInput/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函大部分DOS,Windows3.x,PharLap,DOSX,OS/2orWin32平台上的C编译器提供<time.h>日期和时间函数time_t和clock_t和size_t都是与long有同等意义的名字。本类别给出时间和日期处理函数,头文件time.h。程序本身十分简单,流程为欢迎界面-游戏界面-结束界面,结束就要按下“ESC”实现。从源代码中就可以看出key值的设定。整个程序的大体思想:欢迎界面上欢迎正文和图片设置,界面下方比较有心意的闪烁字设定。游戏界面随机字母srand(time(NULL))大小写1-26从屏幕上方出现,有合适的背景第四章.重点问题和难点问题的分析尝试用i=rand()%2,rand()函数返回0~32767之间的一个整数。通过控制键盘输入的产生任意小写字母或产生任意大写字母。显示字母,通过字母的显示和像素变换,实现动态随机下落。3、怎么实现游戏过程中分数的显示?5、怎么实现保存最好10次成绩?前的进行比较,冒泡排序,取前十分数输出。然后用冒泡排序将十次成绩排列出来。7、怎么实现让游戏者用自己的用户名登陆进行游戏?程序设计基础课程设计报告第6页第五章.系统实现本程序包括主要包括炫彩字的输出,音乐的导入,图片的导入,字母下落,下落的速度控制,计分,保存玩家记录等部分。1、其实现的核心部分是字母下落部分。字母下落的实现是这样的,先在图形界面打出一个字母,由于其背景是黑色的,延时一定时间后再在其下1个单位的地方打出第二个字母,这样就用第二个字母盖住了第一个字母连贯起来就感觉到字母是在下落。{i=rand()%2;//rand()函数返回0~32767之间的一个整数target=97+rand()%26;target=65+rand()%26;x=rand()%610;{outtextxy(x,y,target);//产生任意小写字母//产生任意大写字母//产生任意下落位置//设置字母的颜色//显示字母if(kbhit()){//获取用户按键字母if((key==target)||(key==target-32)|(key==target+{sprintf(s,"%d",score);setfont(30,0,"Arial");outtextxy(600,0,s);bar(x-10,y-10,x+35,y+50);//分数统计//把整型转换成字符型//设置字体//输出文字//输出分数//击中用黑矩形擦去break;elsebreak;elseif(key==27)//判断是否按了{break;break;}}//控制清除字母的时间也就是控制下落速度//控制清除字母的时间也就是控制下落速度程序设计基础课程设计报告bar(x,y,x+35,y+60);;//擦最下面的字符}num--;//计数}2、下落速度的控制,打印出第一个字母和第二个之间的延时的不同就实现了字母下落速度的不同。完成同样的动作,延时少的要花的时间少。Sleep(rank2);//控制清除字母的时间也就是控制下落速度Rank2由用户在键盘输入一个字符,并用下面的自定义函数转换为整型intrank_(charrank1){intrank2;switch(rank1)//判断字符,确定等级{case’0':rank2=11;break;case’1':rank2=10;break;case’2':rank2=9;break;case’3':rank2=8;break;case’4':rank2=7;break;case’5':rank2=6;break;case’6':rank2=5;break;case’7':rank2=4;break;case’8':rank2=3;break;case’9':rank2=2;break;default:rank2=15;break;returnrank2;}3、保存玩家信息。玩家信息包括两个方面,一是玩家昵称,二是玩家分数。玩家昵称需要玩家自己输入,玩家分数由玩家玩的情况决定。玩家昵称需要一个InputBox语句实现弹出一个对话框,要求玩家自己输入昵称。然后玩家的昵称和玩家的分数是一个结构体的两个部分。玩家的分数和玩家的昵称一一对应。以便到时候输出玩家的成绩。每局结束后,把该局玩家的成绩和历史玩家的成绩做一个排序,找出最大的10个玩家及其信息,并且存入记录的文件中去。文件的记录部分初始化为姓名··aa分数0。(1)定义结构体structplayer//自定义的结构体,并顺便定义一个结构体变量{charname[20];intscore_;(2)用文件指针比较并储存信息FILE*fp;//文件指针structplayert;程序设计基础课程设计报告//定义结构体变量t,冒泡法比较大小时用player[10].score=score;//把该局的分数赋给该局用户的结构体变量中for(i=0;i<10;i++){fread(player[i].name,20,1,fp)//打开二进制文件//读入记录中的成绩和姓名·ead(&player[i].score,4,1,fp);}fclose(fp);//关闭二进制文件for(j=0;j<10;j++)//冒泡法排序for(i=0;i<10-j;i++)if(player[i].score<player[i+1].score){t=player[i];player[i]=player[i+1];player[i+1]=t;}fp=fopen("记录.dat”,"wb");for(i=0;i<10;i++)//把排好序列的数据存入记录文件fwrite(&player[i].score,4,1,fp);}fclose(fp);(3)在游戏开始输出信息FILE*fp;//文件指针inta[10],j;charb[10][10];for(j=0;j<10;j++){fread(player[j].name,20,1,fp);fread(&player[j].score,4,l,fp);}fclose(fp);setfont(60,0,"Arial");outtextxy(250,0,"TOP10");for(j=0;j<10;·++)//打开文件//读取文件中的信息//关闭文件//设置字体//设置颜色//输出文字{sprintf(b[j],“%d”,player[j].score_);//把整型转换成字符型setfont(40,0,“Arial”);//设置字体outtextxy(420,50+40*j,b[j]);//输出分数outtextxy(120,50+40*j,player[j].name);//输出名字}4、炫彩字的实现。定义一个整型变量,用它表示颜色的。把该变量赋给于255(RGB()中最大是255),然后让该变量自减,自减的量度不能太小,否则不明显。当该变量小于0时,把该变量重新置为255,依此循环进行。就看到颜色的不断变化。setcolor(RGB(255,0,c-100));//设置颜色setfont(100,0,“WickendenCafeNDP”)//设置字体outtextxy(400,90,s);//输出数字setcolor(RGB(c,0,255))//设置颜色setfont(48,0,"黑体");//设置字体if(score==200)outtextxy(100,200,”全部击中!!”);//输出文字if(score>190)outtextxy(100,200,"不错!继续加油!");//输出文字outtextxy(100,200,"不要灰心!继续加油!");//输出文字c-=25;//控制变色的变量自减实现变色c=255;//控制颜色的变量小于0时,再把255赋给c5、音乐的导入的实现。首先声明pragmacomment(lib,"Winmm.lib")。然后在适当的位置载入音乐文件,再在适当的位置把音乐播放,并设置为循环播放。就实现了背景音乐。mciSendString("open\"res\\SleepA//载入音乐转化为mciSendString(T("playmymusicrepeat"),NULL,O,NULL);//播放音乐6、图片的导入。图片的导入要先定义一个图片的变量。把图片的信息存储到图片变量中,然后在在画图框中输出该图片即可。putimage(0,0,&img)//读取图片到img对象中//在坐标(0,0)位置显示第六章.系统的测试时间:2012年6月18日至2012年6月21日。第10页第10页基本上完全达到了当初设想游戏时所具有的功能,同时还附加了更多功能。(1)随机产生一组字符,横向或纵向以一定的速度通过屏幕中的某一显示范围。(4)设计一个合理的程序结束条件(指定一定的字母数)。(7)退出时询问是否重玩一局。(8)显示最终成绩(9)玩游戏时可以享受音乐的熏陶。(10)开启游戏时出现的游戏画面。经过对此游戏的详细的系统测试,得到以下游戏(1)游戏的运行速度一每秒0.3FPS(2)CPU占用率2%~5%(3)内存使用率20%~30%第11页程序设计基础课程设计报告第11页此游戏作为一款普通大众的小游戏,具有小巧、简便、美观等特点。对于此游戏经过多次修改,功能已在原有的基础上进一步改善,附加上了图片、音乐等外在因素。游戏者在游戏时可打发无聊时光,同时又可提高键盘熟练度,一举两得,不存在时间的浪费。而附加上的图片与音乐等又可让游戏者在游戏时不至于呈现乏味,随着柔和音乐的陶冶,让心情舒畅。此游戏者老少皆宜,不针对任何人群,儿童可以借助此游戏认识英文字母,为以后打下基础。中青年可以借助此游戏打发无聊时光,提高自己的电脑键盘熟练度,为工作时提高速度。老年者可以享受游戏的乐趣,在一生劳碌之后享受美好时光。经常性的出现游戏不能正常运行,运行过程中出现错误等。而同时又不能及时找出错误所在。以及一些技术性问题,如插入图片与音乐时的绝对路径与相对路径的问题。#include<conio.h>#include<graphics.h>#pragmacomment(lib,"Winmm.lib")//引用WindowsMultimediaAPI(ApplicationProgrammingInterfa//全局变量********整型的分数11全局变量*****字符型的分数structplayer//自定义的结构体,并顺便定义一个结构体变量/*******************函数声明***************************/{charrank1;//rank1接受从键盘输入的字符,根据字符判断等级intrank2=15;//控制延时时间,从控制速度intsign=1;/1当做标记,用于标记是否弹MessageBox对话框第12页程序设计基础课程设计报告第12页InputBox(player[10].name,20,"请输入玩家昵称");//以对话框形式获取用户输入函数rank2=rank_(rank1)HWNDwnd=GetHWnd();while(sign)if(MessageBox(wnd,”游戏结束!!!\n再来一局,挑战更高分数吧”,"询问"MB_YESNO|MB_ICONQUESTION)==IDYES)//消息框含有两个按钮:Yes和No**********问题标记图标出现在消息框{}}/******************记录本次成绩函数***************************/{structplayer_t;//定义结构体变量t,冒泡法比较大小时用player[10].score_=score;构体变量中f//把该局的分数赋给该局用户的结//读入记录中的成绩和姓名for(j=0;j<10;j++)第13页程序设计基础课程设计报告第13页for(i=0;i<10-j;i++)if(player[i].score_<player[i+1].score_)t=player[i]player[i]=player[i+1];player[i+1]=t;}fp=fopen("记录.dat","wb");for(i=0;i<10;i++){fwrite(player[i].name,20,1,fp);fwrite(&player[i].score_,4,1,fp);fclose(fp);//把排好序列的数据存入记录文件/******************欢迎界面函数***************************/voidwelcome()mciSendString("open\"res\lSleepAway.mp3\"aliasmymusic",NULL,0,NULL);//载入音乐转化为mciSendString(T("playmymusic//指向接收返回信息的缓冲区,为NULLinitgraph(640,480);IMAGEimg;loadimage(&img,"res\\00.jpg");指定一个回repeat"),NULL,0,NULL指定一个回时不返回信息缓冲区的大小//定义IMAGE对象//读取图片到img对象中putimage(0,0,&img);ch=getch();cleardevice();//在坐标(0,0)位置显示IMAGE对象//清屏/*******************游戏说明界面函数***************************/voidinstructions()setcolor(YELLOW);outtextxy(0,0,"游戏说明:");setcolor(outtextxy(0,58,"二、请按数字键选择游戏等级");第14页第14页outtextxy(0,86,"三、统计被击中的个数");//输出文字89");//输出文字{//kbhit()作用是判断是否有字母输入setfont(100,0,"WickendenCafeNDP");if(c<0)c=255;//控制颜色的变量小于0时,再把255赋给c//延时20毫秒//清屏/**************退出界面函数**********************************/cleardevice();//清屏outtextxy(104,70,playerecord_();setfont(100,0,"WickendenCafeNDP");第15页程序设计基础课程设计报告第15页if(score==200)outtextxy(100,200,"全部击中!!");//输出文字if(score>190)outtextxy(100,200,"不错!继续加油!");//输出文字outtextxy(100,200,"不要灰心!继续加油!");//输出文字if(c<0)Sleep(20);getch();//控制变色的变量自减实现变色//控制颜色的变量小于0时,再把255赋给c//延时20毫秒//提供给用户时需要等待输入后再退出/***********等级选择函数*****************************intrank_(charrank1)intrank2;switch(rank1){case'0:rank2=11;break;case'1':rank2=10;break;case'2':rank2=9;break;case'3':rank2=8;break;case'4':rank2=7;break;case'5':rank2=6;break;case'6':rank2=5;break;case'7':rank2=4;break;case'8':rank2=3;break;case'9':rank2=2;break;default:rank2=15;break;}returnrank2;}/****************显示记录函数*************/voidrecord(){charb[10][10];第16页第16页fread(player[i].name,20,1,fp);fread(&player[i].score_,4,1,fp);fclose(fp);setfont(60,0,"Arial");setcolor(RGB(250,250,0));outtextxy(250,0,"TOP10");for(j=0;j<10;j++)sprintf(b[j],"%d",player[i].score_);//把整型转换成字符型outtextxy(420,50+40*j,b[i]);outtextxy(120,50+40*j,player[i].name);//输出分数/******************游戏函数***************************/voidgame(intrank2)outtextxy(90,0,player[10].name);chartarget;charkey;x,y;flag=1;num=200;srand(time(NULL));setfillstyle(BLACK);setcolor(YELLOW);//目标字母/1用户的按键//字母的位置//随机时间种子设置第一个随机函数的值11用3条线规定一下工作区//用3条线规定一下工作区//用3条线规定一下工作区第17页程序设计基础课程设计报告第17页if(i)//rand(O函数返回0~32767之间的一个整数//产生任意小写字母target=65+rand)%26;//产生任意大写字母x=rand()%610;for(y=41;y<380;y++){setcolor(RGB(255,0,255));//设置字母的颜色//显示字母if(kbhit))key=getch();//获取用户按键score++:sprintf(s,"%d",score);bar(x-10,y-10,x+35,y+50);}break;if(key==27)//跳出循环,进行下一个字母{flag=0;//如果按ESC,退出游戏主循环break;}}bar(x,y,x+35,y+60);////控制清除字母的时间也就是控制下落速度擦最下面的字符}第18页第18页小结通过本次的C程序设计实训,我们对C语言程序设计有了进一步的深入了解,并能更加灵活地加以运用。C语言是一门很实用的计算机高专业上有所成就,首先必须牢牢掌握C语言,为自己以后的专业学习打下扎实的基础。C语断的上机操作运用所学知识,使知识记忆深刻,同时达到学以致用的目的;通过实践运用不仅能发现自己的不足之处,更能体会到C语言的无穷乐趣和好处。比如:能灵活地运用switch语句,数组的定义,函数的调用与使用,以及图形函数的使用等等。虽然对于C语言编程还有很多不明白的地方,但这几天的学习确实受益匪浅。我们小落和输入字母,最后经过我们自己的反复尝试,有些成功了有些失败了,外加了输入效果,存在着一些不足,但看着我们四天来的努力成果,我们还是很高兴的。转眼间,四天的实践课程圆满落幕,而我们对C语言的实践应用却刚刚拉开帷幕,我们更加期待,更加好奇。我们相信C语言对于我们日后专业发展大有裨益。在C语言的使用过(1)谭浩强著C程序设计(第四版)清华大学出版社(2)浙江树人大学信息科技学院《程序设计基础》(课程设计指导书(4)彭伟编著《单机片C语言程序设计实例100例》(5)陈朔鹰陈英主编,《C语言趣味程序百例精解》,北京理工大学出版社,1996年。(6)常玉龙等编写《TurboC2.0实用大全》,北京航空航天大学出版社,1994年9月。百度C语言吧/f?kw=c%D3%EF%D1%D4&fr=ala0第19页第19页课程设计计划书组长:2011080332219陈园芳组员:2011080332327李聚升2011080332322逯彩霞2011080332119乔继静2011080332129潘德槟日期:2012年6月17日选题为打字练习游戏我们组根据老师的推荐题目以及自己的编程能力和兴趣,选择了设计的打字练习游戏,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论