课程设计报告书设计题目连续击键游戏系别专业计算机科学与技术班级姓名指导教师设计任务下达日期2011年12月24日设计时间2011年12月26日至2010年12月30日2课程设计任务书一、目的和意义本课程设计是《C语言程序设计》课程的后继教学环节,通过研究C语言中图形编程技术或者声音控制等其它方面的多媒体编程技术,一方面拓展学生在这些领域的C语言知识,另一方面使学生在运用所学理论知识进行实践开发,更好的培养学生综合学习能力和实践能力。本次课程设计学生可以根据喜好,可以利用复杂的数据类型实现成绩管理系统等小型的综合应用程序。二、题目(可从下面题目中任选一个)1、C语言的图形编程应用设计实现如菜单、图形的显示,再如动画和小游戏。2、简易电子琴模拟程序的实现为实现在键盘模拟电子琴设计的程序。由学生自行设计并且实现。3、成绩管理程序学生本人设计具体方案,然后改进和编码实现。三、课程设计报告书应包括的主要内容1、介绍概要的思路和设计方案,程序的总体功能和模块划分。2、主要算法的介绍及流程图,主要功能的实现手段的说明文档。3、对于有设想但最终未实现的功能的大致编程思路的阐述和设计过程中的启发。四、进度要求1、设计时间:2011年12月19日至2011年12月25日2、编写课程设计报告书:2011年12月26日至2011年12月29日3、提交报告及答辩时间:2011年12月30日专科四、进度要求1、设计时间:2011年12月26日至2011年12月28日2、编写课程设计报告书:2011年12月29日3、提交报告及答辩时间:2011年12月30日3目录一.课程设计目的:..............................................................4二.课程设计原因...............................................................4三.课程设计思路以及方案...................................................41.基础思路...........................................................................................42总体功能...........................................................................................43.功能模块...........................................................................................5⑴宏定义(定义游戏级别)........................................................5⑵外部变量声明............................................................................5⑶定义各模块函数........................................................................5四流程图..........................................................................6五.主要功能说明手段.........................................................6六.未实现功能..................................................................7附录:源代码...................................................................104一.课程设计目的:熟练掌握条件语句、循环、数组、函数操作,将本课程所学的知识合理地运用于实践当中。了解一些书上没有的函数及使用方法。为以后的用C语言乃至其他设计语言解决实际问题打下了一个良好的基础。二.课程设计原因设计出类似于小时候在学习机上玩过的一种打字母和数字的简单小游戏,希望能重温一下自己小时候的游戏,以及能够用已经学到的关于c的知识进行编程,巩固一下学到的知识,并且学习一些在课堂上没有的函数或源文件。三.课程设计思路以及方案1.基础思路⑴.需要一个界面,能够选择关卡,起一个引导性的作用;⑵分四个模块进行,并定义每个模块的函数①voidInitGraphics();②voidInitGame();③voidPlayGame();④voidPlayGame();⑤voidmain()。⑶然后调用函数;⑷设计随机出现的字母或数字,设计背景颜色,设计得分程序,设计界面布局等。2总体功能能够像小游戏里面的进行简单的选关卡,记得分,进5入界面,推出界面。3.功能模块⑴宏定义(定义游戏级别)#defineGRADE180/*级别1的延时*/#defineGRADE240/*级别2的延时*/#defineGRADE320/*级别3的延时*/#defineGRADE410/*级别4的延时*/#defineWINSCORE5000/*成功游戏的分数*/⑵外部变量声明charascKey[36];intblosKey[36]={0xb30,0x231,0x332,0x433,0x534,0x635,0x736,0x837,0x938,0xa39,0x1e61,0x3062,0x2e63,0x2064,0x1265,0x2166,0x2267,0x2368,0x246a,0x1769,0x256b,0x266c,0x326d,0x316e,0x186f,0x1970,0x1071,0x1372,0x1f73,0x1474,0x1675,0x2f76,0x1177,0x2d78,0x1579,0x2c7a};/*这些数字都是在bios中的键盘的编码*/intdelayTime;⑶定义各模块函数6①/*图形初始化*/voidInitGraphics()②/*初始化游戏*/voidInitGame()③/*开始游戏*/voidPlayGame()④/*主函数*/voidmain()四流程图五.主要功能说明手段1.设置图形的初始化,利用voidInitGraphics(){intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,c:\\tc);};开始输入界面输入文字围墙选择关卡进行游戏得到分数Youwinesc结束72.通过利用for函数与坐标函数gotoxy(,),绘制出游戏界面的边框“********************”;3.通过利用gotoxy函数,绘制出游戏界面中的文字和级别;4.通过利用setbkcolor()函数描绘出游戏界面的背景颜色;5.利用switch函数可以进行关卡的选择以至于部出现错误;6.利用randomize()函数和i=rand()%80以及x=rand()%36进行对围墙所在位置中能够随机出现的数字和字母的的生成;7.利用if(j==20)/*超时相当于没有真确按键*/{score--;continue;}key=bioskey(0);/*接收键值*/if(key==0x011b)/*如果是ESC则推出程序*/break;if(key==blosKey[x])/*命中则加分*/{score++;continue;}score--;/*没有命中则减分*/可以进行分数的加减,以便肯定最后的得分。六.未实现功能1.当击错键时以及击对键时的声音设置上网查找的声音设置可以用sound(hz)函数来进行,但是在编程时声音发布出来,不知道是什么原因,如下:if(key==blosKey[x])8{score++;Sound(27);nosound();delay(1000);continue;}score--;sound(30);nosound();delay(1000);2.实现字母与数字的不同颜色的转换。根据所找的资料,利用的是setcolor()函数,但是不知道如何运用这个函数。七.课程设计中涉及的知识点⑴循环语句:for语句循环。for语句是C语言中所提供的功能最强、使用最为灵活的一种循环语句。特别适用与循环次数固定而循环条件不确定的情况。for语句最主要的特点是:特别适合已知循环次数的循环语句。while语句while语句可以实现当型循环,通常用于能够确定的循环次数的循环控制。条件语句:if语句。if语句是C语言中的选择结构语句的主要形式,它根据if语句后面的条件表达式来决定执行过程。⑵数组:一维数组元素的应用、赋值和越界检查。一维数组声明的一般形式为:9类型标识符数组名[常量表达式];数组元素是组成数组的基本单元。一维数组赋值的方法有:用赋值语句对数组元素逐个赋值;采用初始化赋值和动态赋值的方法。为了不可避免不可预测的错误发生,在程序中最好还是加上数组越界检查程序代码,将数组越界的检查范围加在程序中,就可以确保程序执行的正确性。因此,可以说数组的边界检验便是程序员的职责。⑶函数:1)、函数的定义。函数定义的形式1传统的定义形式[类型标识符]函数名([形参列表])形参说明{声明部分语句/*功能实现部分*/[return表达式;]}10附录:源代码#includeconio.h#includestdlib.h#includegraphics.h/*定义游戏级别*/#defineGRADE180/*级别1的延时*/#defineGRADE240/*级别2的延时*/#defineGRADE320/*级别3的延时*/#defineGRADE410/*级别4的延时*/#defineWINSCORE5000/*成功游戏的分数*/charascKey[36];intblosKey[36]={0xb30,0x231,0x332,0x433,0x534,0x635,0x736,0x837,0x938,0xa39,0x1e61,0x3062,0x2e63,0x2064,0x1265,0x2166,0x2267,0x2368,0x246a,0x1769,0x256b,0x266c,0x326d,0x316e,0x186f,0x1970,0x1071,0x1372,0x1f73,0x1474,0x1675,0x112f76,0x1177,0x2d78,0x1579,0x2c7a};intdelayTime;/*图形初始化*/voidInitGraphics(){intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,c:\\tc);}/*初始化游戏*/voidInitGame(){intgameGrade;inti=15,m,l;setbkcolor(GREEN);cleandevice();for(m=25;m61;m++){gotoxy(m,8);printf(*);gotoxy(m,20);printf(*);}for(l=8;l20;l++)12{gotoxy(25,l);printf(*);gotoxy(60,l);printf(*);}gotoxy(27,10);printf(WELCOMETOTHEHITGAME\n);gotoxy(30,13);printf(pleasechoosethegrade:);gotoxy(36,i++);printf(1:grade1\n);gotoxy(36,i++);printf(2:grade2\n);gotoxy(36,i++);printf(3:grade3\n);gotoxy(36,i++);printf(4: