C语言课程设计_c语言课程设计
C语言课程设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言课程设计”。
C语言课程设计
飞机空战小游戏
一、实验环境
运行系统 WINDOWSXP 编程工具C++6.0 地点 程序设计与仿真实验室
桌号19电脑IP地址221.12.10.218
二、实验目的和要求 实验目的:
(1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作算法。
(2)使学生进一步掌握程序设计、编写、调试能力。(3)使学生了解软件开发的基本步骤和内容。
实验要求::飞机空战小游戏。功能要求:
1)有主菜单界面,能让用户选择开始、退出、难度等级、查看用户积分功能;
2)飞机能通过A、S、D、W或上下左右键控制移动方向,使用空格键发射子弹;
3)屏幕随机出现从上到下的敌方子弹; 4)当打中敌方子弹时,积分加1;
5)当敌方子弹打正飞机时,游戏结束,并提示用户是否保存记录(记录包括用户名及积分值),保存后退回到主菜单;
6)当选择主菜单中的“查看用户积分”选项时,进入第二级菜单,用户可查看全部用户积分记录,也可仅查看积分最高者,也可根据用户输入的用户名查看;(此处要求使用到链表,用于临时存储用户积分数据);(对链表的查找操作)
7)所有用户积分信息使用文件进行永久性保存; 8)用户选择“难度等级”,可设定游戏不同难度,难度越高,出现敌方子弹数目及间隔将增加。
三、实验内容和结果
系统总体设计:编写出c语言代码,运行程序,并调试程序,最终实现游戏的功能。本程序主要包含游戏控制函数、设置是否继续游戏函数、输出函数、子弹移动函数、敌机移动函数、设置函数、菜单函数等7个主要函数,包含了不同的功能,对原来的程序作出了很大的改进,用到的主要语句有if语句,for语句、while语句、printf语句、switch语句等等,添加了颜色函数。
系统模块设计:包含游戏控制函数、设置是否继续游戏函数、输出函数、子弹移动函数、敌机移动函数、设置函数、菜单函数等7个主要函数,其中是否继续游戏函数,菜单函数主要运用了SWITCH语句和If语句,子弹移动函数,敌机移动函数通过数组内各数值的变化来完成,设置函数主要用PRINTF和SCANF语句进行各项数值的设置,游戏控制函数使用if函数,kbhit()函数,switch函数组合控制数组中飞机进行的移动和图案的变换。最后用打印数组的方式打印出数组变换。最后运用SWITCH函数进行各项菜单内容的操作。
实验的测试和结果:
四、实验中的问题及心得
通过本次试验,使我对c语言有了更深一层次的了解,对for语句、while语句、printf语句、switch语句、颜色函数等等的了解及使用更加详细了一些,明白了这些语句的用法,明确了c语言的使用环境,功能。同时我了解到了一些方法来实现一些C语言作为一个基础性编程语言是我们在以后编程中不可或缺的语言,使用率肯定会进一步增高。掌握了c语言就相当于掌握了一门技术,同时c语言相对而言简单一些,更容易理解。自己虽然对这个小游戏进行一部分的改造,但是我也感觉这只是其中的很很小的一部分,肯定会有更加强大的功能等待着我们去改善。
同时,我也发现了自己很多的不足,需要进一步加强这一方面的学习,在数据结构链表的使用上还很欠缺,无法使用链表进行数据的读取和输入,还有在两个程序的连接上还有困难,对于头文件的理解不到位,链表的结构,定义,使用指针的方式„„这些都需要提高。这些技能的欠缺导致了在 这个小游戏中无法顺利完成有关用户名和记录的一些要求。„„
附录:程序清单
#include #include #include #include #define N 50 void run();//游戏控制函数 void continuegame();//设置是否继续游戏函数 void print(int [][N]);//输出函数
void movebul(int [][N]);//子弹移动函数 void movepla(int [][N]);//敌机移动函数 void setting(void);//设置函数 void menu();//菜单 int scr[50][N]={0},pl=9,width=15,speed=16,density=40,score=0,death=0,length=18,y=0,x=5,z=15,life=1,max=0;//全局变量:界面、我机初始位、界面宽度、敌机速度、敌机密度、得分、死亡,子弹,飞机,敌机初始图案,生命
char name[N];char first[N];void main(){ menu();getch();}
void print(int a[][N])//输出函数 { int i,j;system(“cls”);for(i=0;i
a[i][width-1]=4;
for(j=0;j
{
if(a[i][j]==0)printf(“ ”);
if((a[i][j]==1)&&(x
if((a[i][j]==2)&&(z
if((a[i][j]==3)&&(y
if(i==1&&j==width-1)printf(“总积分:%d”,score);//显示得分
if(i==2&&j==width-1)printf(“已经死亡了%d 次,剩余 %d 条命”,death,life-death);//右上角显示死亡次数
if(i==3&&j==width-1)printf(“普通按键:AD控制左右飞行”);
if(i==4&&j==width-1)printf(“ W 发射子弹”);if(i==5&&j==width-1)printf(“特殊按键:+-号加减敌机速度”);if(i==6&&j==width-1)printf(“ /*号单列敌机密度减小增大(均有限制)”);
if(i==7&&j==width-1)printf(“VIP按键:X键变化飞机图案,Y键变化敌机图案”);
if(i==8&&j==width-1)printf(“tZ键变化子弹图案,P键增加生命(均有限制)”);
if(i==9&&j==width-1)printf(“注意:向下移动后按其他方向键飞机显现”);
} printf(“n”);} }
void movebul(int a[][N]){
int i,j;for(i=0;i
{
if(i==0&&a[i][j]==2)
a[i][j]=0;
if(a[i][j]==2)
{
if(a[i-1][j]==3)//加分
{
score+=1;
printf(“7”);
}
a[i][j]=0,a[i-1][j]=2;
}
} } void movepla(int a[][N]){ int i,j;for(i=length-1;i>=0;i--)//从最后一行往上是为了避免把敌机直接冲出数组。
for(j=0;j
if(i==length-1&&a[i][j]==3)
a[i][j]=0;//消除敌机,在最低层
if(a[i][j]==3)a[i][j]=0,a[i+1][j]=3;//敌机移动
}
if(a[length-2][pl]==3&&a[length-1][pl]==1)death++;//死亡 }
void continuegame()//继续游戏
{ printf(“用户%s”,name);printf(“你的得分是%dn”,score);if(score==0)printf(“tttt 恭喜你刷新了最低记录na”,score);if((score>0)&&(score
printf(“tttt 回家再练 练吧na”,score);if(score>19)
printf(“tttt 你真厉害 na”,score);printf(“游戏结束n”);printf(“按y键继续游戏,空格键退出游戏(y/n)?n”);printf(“ttt”);switch(getch())//是否要继续游戏
{ case 'y': case 'Y':system(“cls”),death=0,score=0,life=1,x=5,y=0,z=15;menu();break;} }
void setting(void)//设置函数 { system(“cls”);//清屏
printf(“n 输入游戏界面的大小(默认3):1-10 ”);scanf(“%d”,&width);width=(width+1)*5;printf(“n 请输入敌机密度大小(默认3):1-5 ”);scanf(“%d”,&density);density=(7-density)*10;printf(“n 输入敌机的飞行速度大小(默认3):1-10 ”);scanf(“%d”,&speed);speed=(11-speed)*2;printf(“n 输入我机的生命(默认1):1-100 ”);scanf(“%d”,&life);printf(“n 输入飞机的图案(默认1):1-2 ”);scanf(“%d”,&x);x=x+4;printf(“n 输入子弹的图案(默认1):1-10 ”);scanf(“%d”,&z);z=z+14;printf(“n 输入敌机的图案(默认1):1-3 ”);scanf(“%d”,&y);y=y-1;} void run(){ int i=0,j=0,k=0,b=0;printf(“请输入用户名:”);scanf(“%s”,name);printf(“您的用户名是:%s”,name);if(getch()==27)setting();printf(“游戏说明:按AWSD控制我机左右飞行,空格键发射子弹n特殊按键:-号敌机减速,+号敌机加速n特殊按键:/号单列敌机密度减小,*号单列敌机密度增大n”);printf(“VIP按键:X键变化飞机图案,Y键变化敌机图案ntZ键变化子弹图案,P键增加生命n”);printf(“任意键开始游戏,esc键进入游戏设置n”);printf(“游戏时也可更改游戏设置任意键开始nn”);system(“color a”);//设置背景颜色
if(getch()==27)setting();scr[length-1][pl]=1;//我方飞机初始位置
scr[0][5]=3;while(death
{ if(kbhit())
switch(getch())//控制设置按键 {
case 'a':
case 'A':if(pl>0)
scr[length-1][pl]=0,scr[length-1][--pl]=1;break;
case 'd':
case 'D':if(pl
scr[length-1][pl]=0,scr[length-1][++pl]=1;break;case 'W':
case 'w':if(length>10)
{
scr[length-1][pl]=0,scr[length-2][pl]=1;
length=length-1;
};break;
case '+':if(speed>2)
{
speed=speed-2;
};break;
case '-':speed=speed+1;break;case '*':if(density>5)
{
density=density-5;
};break;
case '/':density=density+10;break;
case 'l':if(width
{
width=width+2;
};break;
case 's':if(length
{
scr[length-1][pl]=0;
length=length+1;
scr[length-1][pl]='5';
};break;
case ' ':scr[length-2][pl]=2;break;
case 'y':y=(y+1)%4;break;
case 'x':x=(x)%2+5;break;
case 'z':if(z
{
z=z+1;
}
else z=15;break;
case 'p':life=life+1;break;} if(++j%density==0)//控制生产敌机的速度
{
j=0;
srand(time(NULL));//产生随机数
scr[0][rand()%width]=3;
scr[rand()%3][rand()%(width+2)]=3;
scr[rand()%2][rand()%(width+1)]=3;
scr[rand()%4][rand()%(width+4)]=3;//生成随机敌方飞机
} if(++i%speed==0)//控制敌机移动速度,相对于子弹移动速度
movepla(scr);//飞机移动
movebul(scr);//子弹移动
print(scr);//绘制游戏画面
} if(score>=max){
max=score;
for(i=0;i
{
name[i]=first[i];
} } if(score
score=score;} continuegame();getch();}
void menu(){ printf(“n1:游戏设置n2:游戏说明n3:开始游戏n4:查看用户信息n5:退出游戏n”);
switch(getch()){
case '1': setting();menu();break;
case '2':printf(“游戏说明:按AWSD控制我机左右飞行,空格键发射子弹n特殊按键:-号敌机减速,+号敌机加速n特殊按键:/号单列敌机密度减小,*号单列敌机密度增大n”);printf(“VIP按键:X键变化飞机图案,Y键变化敌机图案ntZ键变化子弹图案,P键增加生命n”);printf(“ 任意键开始游戏,esc键进入游戏设置n”);printf(“ 游戏时也可更改游戏设置”);menu();break;
case '3':run();menu();break;
case '4':seerecord();menu();break;
case '5':exit(0);break;default:menu();break;}
} seerecord(){ printf(“最高纪录为%s,%d”,first[N],max);}