C语言课设报告连续击键游戏.docx
《C语言课设报告连续击键游戏.docx》由会员分享,可在线阅读,更多相关《C语言课设报告连续击键游戏.docx(11页珍藏版)》请在冰豆网上搜索。
C语言课设报告连续击键游戏
课程设计报告书
设计题目连续击键游戏
系别
专业计算机科学与技术
班级
姓名
指导教师
设计任务下达日期2011年12月24日
设计时间2011年12月26日至2010年12月30日
课程设计任务书
一、目的和意义
本课程设计是《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日
目录
一.课程设计目的:
2
二.课程设计原因2
三.课程设计思路以及方案3
1.基础思路3
2总体功能3
3.功能模块3
⑴宏定义(定义游戏级别)3
⑵外部变量声明3
⑶定义各模块函数4
四流程图4
五.主要功能说明手段5
六.未实现功能6
附录:
源代码8
一.课程设计目的:
熟练掌握条件语句、循环、数组、函数操作,将本课程所学的知识合理地运用于实践当中。
了解一些书上没有的函数及使用方法。
为以后的用C语言乃至其他设计语言解决实际问题打下了一个良好的基础。
二.课程设计原因
设计出类似于小时候在学习机上玩过的一种打字母和数字的简单小游戏,希望能重温一下自己小时候的游戏,以及能够用已经学到的关于c的知识进行编程,巩固一下学到的知识,并且学习一些在课堂上没有的函数或源文件。
三.课程设计思路以及方案
1.基础思路
.需要一个界面,能够选择关卡,起一个引导性的作用;
分四个模块进行,并定义每个模块的函数
voidInitGraphics();
voidInitGame();
voidPlayGame();
voidPlayGame();
voidmain()。
然后调用函数;
设计随机出现的字母或数字,设计背景颜色,设计得分程序,设计界面布局等。
2总体功能
能够像小游戏里面的进行简单的选关卡,记得分,进入界面,推出界面。
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;
定义各模块函数
/*图形初始化*/voidInitGraphics()
/*初始化游戏*/voidInitGame()
/*开始游戏*/voidPlayGame()
/*主函数*/voidmain()
四流程图
五.主要功能说明手段
1.设置图形的初始化,利用voidInitGraphics()
{intgdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"c:
\\tc");};
2.通过利用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])
{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语句后面的条件表达式来决定执行过程。
⑵数组:
一维数组元素的应用、赋值和越界检查。
一维数组声明的一般形式为:
类型标识符 数组名 [常量表达式];
数组元素是组成数组的基本单元。
一维数组赋值的方法有:
用赋值语句对数组元素逐个赋值;采用初始化赋值和动态赋值的方法。
为了不可避免不可预测的错误发生,在程序中最好还是加上数组越界检查程序代码,将数组越界的检查范围加在程序中,就可以确保程序执行的正确性。
因此,可以说数组的边界检验便是程序员的职责。
⑶函数:
1)、函数的定义。
函数定义的形式
1 传统的定义形式
[类型标识符]函数名([形参列表])
形参说明
{ 声明部分
语句/*功能实现部分*/
[return表达式;]
}
附录:
源代码
#include
#include
#include
/*定义游戏级别*/
#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};
intdelayTime;
/*图形初始化*/
voidInitGraphics()
{
intgdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"c:
\\tc");
}
/*初始化游戏*/
voidInitGame()
{
intgameGrade;
inti=15,m,l;
setbkcolor(GREEN);
cleandevice();
for(m=25;m<61;m++)
{
gotoxy(m,8);printf("*");
gotoxy(m,20);printf("*");
}
for(l=8;l<20;l++)
{
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:
grade4\n");
gameGrade=getch();
switch(gameGrade)
{
case'1':
delayTime=30000000;break;
case'2':
delayTime=20000000;break;
case'3':
delayTime=10000000;break;
case'4':
delayTime=5000000;break;
default:
delayTime=300000;break;
}
/*初始化ascKey数组*/
for(i=0;i<10;i++)ascKey[i]=48+i;
for(i=10;i<36;i++)ascKey[i]=55+i;
ascKey[i]=0;
cleardevice();
/*游戏界面初始化*/
for(i=1;i<81;i++)
{
gotoxy(i,3);printf("_");
gotoxy(i,20);printf("_");
}
gotoxy(30,2);printf("score:
");
}
voidPlayGame()
{
inti,j,x,key,score=0;
randomize();
while
(1)
{
gotoxy(40,2);printf("%d",score);
i=rand()%80;/*随机生成产生字符的位置*/
if(i==0)i=1;
x=rand()%36;/*随机生成一个字符*/
for(j=4;!
kbhit()&&j!
=20;j++)
{
gotoxy(i,j);printf("%c",ascKey[x]);gotoxy(i,j);
delay(delayTime);
if(score==WINSCORE)/*游戏胜利*/
{
cleardevice();
gotoxy(20,12);printf("YOUWIN");
delay(1000000);
exit
(1);
}
gotoxy(i,j);printf("");gotoxy(i,j);
}
if(j==20)/*超时相当于没有真确按键*/
{score--;continue;}
key=bioskey(0);/*接收键值*/
if(key==0x011b)/*如果是ESC则推出程序*/
break;
if(key==blosKey[x])/*命中则加分*/
{score++;continue;}
score--;/*没有命中则减分*/
}
}
intmain()
{
InitGraphics();
InitGame();
PlayGame();
closegraph();
return0;
}
参考文献:
[1]王敬华,林萍,陈静.C语言程序设计教程[M].北京:
清华大学出版社,2005.10:
141~167
[2]谭浩强.C程序设计语言[M],.北京:
机械工业出版社,2003.4:
205-256
[3]李邦几胡金桂王敬华.最新C语言实用教程[M].北京:
化学工业出版社,1996.3:
35~4366~97132~148
[4]李军民.新编C语言程序设计教程(第二版)[M].西安:
西安电子科技大学出版社,2005.08:
68~93148~171
[5]李文兵.TurboC及其应用开发,.北京:
电子工业出版社1994.1
[6](美)TonyGaddis著,周靖译.C++图形与游戏编程基础.北京:
清华大学出版社,2010.9