中南大学电信C语言飞机大战实验报告资料.docx
- 文档编号:17828870
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:19
- 大小:138.42KB
中南大学电信C语言飞机大战实验报告资料.docx
《中南大学电信C语言飞机大战实验报告资料.docx》由会员分享,可在线阅读,更多相关《中南大学电信C语言飞机大战实验报告资料.docx(19页珍藏版)》请在冰点文库上搜索。
中南大学电信C语言飞机大战实验报告资料
C语言课程设计报告
题目C语言飞机大战
学生姓名
学号
指导教师
学院信息科学与工程学院
专业班级电子信息工程2班
完成时间
程序框图
按任意键进入游戏
结束
第三章系统具体实现
运用C语言编写系统,就是程序模块化设计,编写一个个模块或者可以说是函数,主函数通过调用一个个特定的模块或函数来实现系统中某一特定的功能,模块化的程序设计主要是通过设计函数和函数的调用来实现的。
下面是对程序中各个主要函数的具体分析。
第四章程序设计总结
算法主要思想以及用到的新知识
算法设计:
首先是用户操作界面,提示用户如何进行游戏操作,然后进入游戏界面,即飞机大战游戏界面
主要函数是:
1.//背景函数(用户操作函数)
通过printf函数实现
2.//隐藏光标函数和//控制台光标定位函数
只需要调用函数即可
3.刷新游戏界面函数
4.//游戏最初界面函数
5.//设置玩家飞机位置函数
6.//移动玩家的位置函数
7.随机产生敌军飞机
8.飞机下落
9.英雄飞机发子弹函数
10.子弹移动函数
11.消除子弹函数
12.计分函数
13.玩家死亡检测函数
利用数组实现游戏界面,利用链表保存发送子弹的位置
源代码
#include
#include
#include
#include
#include
#defineg_back_x20
#defineg_back_y20
voidbackground();//背景函数(用户操作函数)
voidhide();//隐藏光标函数
voidgame_background();//刷新游戏界面函数
voidgame_background1();//游戏最初界面函数
voidsetposition(intj,inti);//控制台光标定位函数
voidset_player_direction();//设置玩家飞机位置函数
voidmove_plane();//移动玩家的位置函数
voidproduce_air();//随机产生敌军飞机
voidair_down();//飞机下落
voidair_shot(intx,inty);//英雄飞机发子弹函数
voidshot_move();//子弹移动函数
voiddelete_(structNode*ptemp);//消除子弹函数
voidscore();//计分函数
intdeath();//玩家死亡检测函数
charg_back[g_back_x][g_back_y]=
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
};
//定义全局变量用来保存玩家飞机的位置
intplayer_x=17;
intplayer_y=10;
intnC=0;
//定义结构体
structNode
{
intx;
inty;
structNode*pnext;
};
structNode*pHead=NULL;
structNode*pEnd=NULL;
//主函数
intmain()
{
//调用背景函数(用户操作函数)
background();
//不显示光标
hide();
//调用函数以实现按键进入游戏界面
_getch();
//清屏函数
system("cls");
//调用游戏界面函数
game_background1();
unsignedintnCount=0;
intnn=1;
while
(1)
{
move_plane();
shot_move();
if(nCount%8==0)
{
air_down();
}
//system("cls");
if(nn)
{
nn=death();
}
elsebreak;
game_background();
nCount++;
Sleep(100);
}
printf("\n\n玩家死亡\n");
system("pause");
}
//隐藏光标函数
voidhide()
{
//不显示光标
CONSOLE_CURSOR_INFOcur_info={1,0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cur_info);
}
//背景函数(用户操作函数)
voidbackground()
{
printf("\n");
printf("\t\twelcometoplaneworld\n");
printf("\t\twasdisDirectionkey\n");
printf("\t\t按任意键开始游戏\n");
}
//游戏最初界面函数
voidgame_background1()
{
inti=0;
intj=0;
//兼容性背景
charstrback[g_back_x][g_back_y*2+2]={0};
//调用设置玩家飞机的位置
set_player_direction();
for(i=0;i { for(j=0;j { switch(g_back[i][j]) { case0: strcat(strback[i],""); break; case1: strcat(strback[i],"■"); break; case2: strcat(strback[i],"士"); break; } } } for(i=0;i { printf("%s\n",strback[i]); } } //控制台光标定位函数 voidsetposition(intj,inti) { COORDrd; rd.X=j*2; rd.Y=i; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),rd); } //游戏刷新界面函数 voidgame_background() { inti=0; intj=0; //调用设置玩家飞机的位置 set_player_direction(); for(i=1;i<(g_back_x-1);i++) { for(j=1;j<(g_back_y-1);j++) { //控制台光标定位函数 setposition(j,i); switch(g_back[i][j]) { case0: printf(""); break; case1: printf("■"); break; case2: printf("士"); break; case3: printf("干"); break; case4: printf("^^"); break; } } } } //设置玩家飞机位置 voidset_player_direction() { g_back[player_x][player_y]=2; } //移动玩家的位置函数 voidmove_plane() { //移动玩家的位置,使用GetAsyncKeyState函数 /*GetAsyncKeyState函数作用是检测按键是否按下 以此来控制飞机的移动 */ if(GetAsyncKeyState('W')&&(player_x>1)) { g_back[player_x][player_y]=0; player_x--; } if(GetAsyncKeyState('A')&&(player_y>1)) { g_back[player_x][player_y]=0; player_y--; } if(GetAsyncKeyState('S')&&(player_x { g_back[player_x][player_y]=0; player_x++; } if(GetAsyncKeyState('D')&&player_y { g_back[player_x][player_y]=0; player_y++; } if(GetAsyncKeyState(VK_SPACE)&1) { air_shot(player_x,player_y); } } //随机产生敌军飞机 voidproduce_air() { intj,i,k; for(k=1;k { g_back[1][k]=0; } srand((unsignedint)time(0)); for(i=1;i { j=rand()%8; if(j==0) { g_back[1][i]=3; } } } //飞机下落 voidair_down() { inti,j; intk; for(i=g_back_x-2;i>1;i--) { for(j=1;j { if((g_back[i-1][j]==2)||(g_back[i-1][j]==4)) continue; g_back[i][j]=g_back[i-1][j]; } } produce_air(); } //英雄飞机发子弹函数 voidair_shot(intx,inty) { structNode*ptemp=(structNode*)malloc(sizeof(structNode)); ptemp->x=x; ptemp->y=y; ptemp->pnext=NULL; if(pEnd==NULL) { pHead=ptemp; } else { pEnd->pnext=ptemp; } pEnd=ptemp; } //子弹移动函数 voidshot_move() { structNode*ptemp=pHead; structNode*ptemp1=pHead; structNode*pt=pHead; inti; intk; while(ptemp1! =NULL) { ptemp=ptemp1; i=ptemp->x; if(i>1) { g_back[ptemp->x][ptemp->y]=0; (ptemp->x)--; g_back[ptemp->x][ptemp->y]=4; } if(i==1) { g_back[ptemp->x][ptemp->y]=0; ptemp->x=0; ptemp->y=0; delete_(ptemp); ptemp1=pHead; continue; } if(g_back[ptemp->x-1][ptemp->y]==3) { g_back[ptemp->x-1][ptemp->y]=0; g_back[ptemp->x+1][ptemp->y]=0; //if(g_back[ptemp->x-1][ptemp->y]==3) //{ nC++; score(); //g_back[ptemp->x][ptemp->y]=0; delete_(ptemp); ptemp1=pHead; continue; //} } ptemp1=ptemp1->pnext; while(i==0&&ptemp1) { ptemp1=ptemp1->pnext; ptemp=ptemp1; if(ptemp) i=ptemp->x; } } } //消除子弹函数 voiddelete_(structNode*ptemp) { if(ptemp==NULL||pHead==NULL) { return; } if(pHead==pEnd) { if(ptemp==pHead) { free(pHead); pHead=NULL; pEnd=NULL; } } elseif(pHead->pnext==pEnd)//双结点 { if(pHead==ptemp)//删除尾结点 { free(pHead); pHead=pEnd; pEnd->pnext=NULL; } elseif(pEnd==ptemp) { free(pEnd); pEnd=pHead; pEnd->pnext=NULL; } } else { if(pHead==ptemp)//删除头结点 { structNode*pt=pHead; pHead=pHead->pnext; free(pt); } elseif(pEnd==ptemp) { structNode*pT=pHead; while(pT) { if(pT->pnext==ptemp) { pEnd=pT; //pT->pnext=ptemp->pnext; pT->pnext=NULL; free(ptemp); } pT=pT->pnext; } } else { //找到删除节点的前一个 structNode*pTemp=pHead; while(pTemp) { if(pTemp->pnext==ptemp) { pTemp->pnext=ptemp->pnext;//1837879447 free(ptemp); } pTemp=pTemp->pnext; } } } } //玩家死亡检测函数 intdeath() { if(g_back[player_x][player_y]==3) { g_back[player_x][player_y]=0; return0; } else{return1;} } //计分函数 voidscore() { setposition(21,15); printf("计分: %d",nC*10); } 参考文献 .崔久、蒋欣主编的《由浅入深学C语言》电子工业出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中南 大学 电信 语言 飞机 大战 实验 报告 资料
![提示](https://static.bingdoc.com/images/bang_tan.gif)