C语言程序课程设计实验报告.docx
- 文档编号:14429729
- 上传时间:2023-04-23
- 格式:DOCX
- 页数:21
- 大小:176.05KB
C语言程序课程设计实验报告.docx
《C语言程序课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《C语言程序课程设计实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
C语言程序课程设计实验报告
实训一贪吃蛇游戏
一、实训目的和要求
根据老师布置的任务,对项目进行需求分析;确定数据结构和算法;画流程图或N-S图并形成相关文档。
根据算法编写程序并且调试程序直到程序通过。
本程序实现的主要技巧在二维数组的应用上。
目的是通过游戏程序增加编程的兴趣,提高编程水平。
二、主要仪器设备
安装了Windows操作系统、TurboC或VisualC++的计算机。
三、实训内容和原理
贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。
四、实训小结
1、功能描述
2、总体设计
(1)功能模块设计
图形驱动功能模块:
图形结束功能模块:
开始画面模块:
游戏过程模块:
(a)食物出现:
初始化界面及蛇的出现
非
是
(b)蛇的自增及死亡:
条件一:
撞到自己条件二:
撞到墙
是
非
非
输出成绩模块:
(2)数据结构设计
structFood
{
intx;
inty;
intyes;
}food;
x表示食物的横坐标;
y表示食物的纵坐标;
yes用来判断是否要出现食物。
structSnake
{
intx[N];
inty[N];
intnode;
intdirection;
intlife;
}snake;
node表示蛇的节数;direction表示蛇移动方向
life表示蛇的生命,其中0活着,1死亡
(3)函数功能描述
1)函数名称:
Init
函数原型:
voidInit(void);
函数实现的的功能:
图形驱动
2)函数名称:
Close
函数原型:
voidClose(void)
函数实现的的功能:
图形结束
3)函数名称:
DrawK
函数原型:
voidDrawK(void);
函数实现的的功能:
开始画面
4)函数名称:
Gameplay
函数原型:
voidGamePlay(void)
函数实现的的功能:
游戏的具体过程
5)函数名称:
Gameover
函数原型:
voidGameOver(void);
函数实现的的功能:
游戏结束
6)函数名称:
prScore
函数原型:
voidPrScore(void)
函数实现的的功能:
输出成绩
3、程序实现
(1)源码分析
#defineN200
#include
#include
#include
#defineLEFT0x4b00
#defineRIGHT0x4d00
#defineDOWN0x5000//
#defineUP0x4800
#defineESC0x011b
inti,key;
intscore=0;/*得分*/
intgamespeed=50000;/*游戏速度自己调整*/
structFood
{
intx;/*食物的横坐标*/
inty;/*食物的纵坐标*/
intyes;/*判断是否要出现食物的变量*/
}food;/*食物的结构体*/
structSnake
{
intx[N];
inty[N];
intnode;/*蛇的节数*/
intdirection;/*蛇移动方向*/
intlife;/*蛇的生命,0活着,1死亡*/
}snake;
voidInit(void);/*图形驱动*/
voidClose(void);/*图形结束*/
voidDrawK(void);/*开始画面*/
voidGameOver(void);/*结束游戏*/
voidGamePlay(void);/*玩游戏具体过程*/
voidPrScore(void);/*输出成绩*/
/*主函数*/
voidmain(void)
{
Init();/*图形驱动*/
DrawK();/*开始画面*/
GamePlay();/*玩游戏具体过程*/
Close();/*图形结束*/
}
/*图形驱动*/
voidInit(void)
{
intgd=DETECT,gm;/*initgraph(&gd,&gm,"c:
\\tc");*/
initgraph(&gd,&gm,"D:
\ProgramFiles\WINYES\TC20H");
//可以更换TC的位置,initgraph表示图形模式的初始化
DETECT系统自动检测图形适配器的最高分辩率模式,并装入相应的图形驱动程序
cleardevice();//清除图形屏幕
}
/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
voidDrawK(void)
{
/*setbkcolor(LIGHTGREEN);*///设置背景色
setcolor(11);//设置前景色
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/
*/voidfarsetlinestyle(intlinestyle,unsignedpattern,intwidth);
for(i=50;i<=600;i+=10)/*画围墙*/
{
rectangle(i,40,i+10,49);/*上边*///画矩形
rectangle(i,451,i+10,460);/*下边*/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10);/*左边*/
rectangle(601,i,610,i+10);/*右边*/
}
}
/*玩游戏具体过程*/
voidGamePlay(void)
{
randomize();/*随机数发生器*/
food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/
snake.life=0;/*活着*/
snake.direction=1;/*方向往右*/
snake.x[0]=100;snake.y[0]=100;/*蛇头*/
snake.x[1]=110;snake.y[1]=100;
snake.node=2;/*节数*/
PrScore();/*输出得分*/
while
(1)/*可以重复玩游戏,压ESC键结束*/
{
while(!
kbhit())/*在没有按键的情况下,蛇自己移动身体*/
//kbhit()检查当前是否有键盘输入,若有,则输入一个非0的数;否则返回哦;
{
if(food.yes==1)/*需要出现新食物*/
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!
=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
food.x++;
while(food.y%10!
=0)
food.y++;
food.yes=0;/*画面上有食物了*/
}
if(food.yes==0)/*画面上有食物了就要显示*/
{setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
//构造函数Rectangle(intx,inty,intwidth,intheight)
}
for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/
{
snake.x[i]=snake.x[i-1];//从最后一个往前移
snake.y[i]=snake.y[i-1];
}
/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/
switch(snake.direction)
{
case1:
snake.x[0]+=10;break;
case2:
snake.x[0]-=10;break;
case3:
snake.y[0]-=10;break;
case4:
snake.y[0]+=10;break;
}
for(i=3;i 第三节不可能拐过来*/ {if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) { GameOver();/*显示失败*/ snake.life=1;//死亡 break; } } if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55|| snake.y[0]>455)/*蛇是否撞到墙壁*/ {GameOver();/*本次游戏结束*/ snake.life=1;/*蛇死*/} if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/break; if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/ { setcolor(0);/*把画面上的食物东西去掉*/ rectangle(food.x,food.y,food.x+10,food.y-10); snake.x[snake.node]=-20;snake.y[snake.node]=-20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node++;/*蛇的身体长一节*/ food.yes=1;/*画面上需要出现新的食物*/ score+=10; PrScore();/*输出新得分*/ }setcolor(4);/*画出蛇*/ for(i=0;i rectangle(snake.x[i],snake.y[i],snake.x[i]+10, snake.y[i]-10); delay(gamespeed); setcolor(0);/*用黑色去除蛇的的最后一节*/ rectangle(snake.x[snake.node-1],snake.y[snake.node-1], snake.x[snake.node-1]+10,snake.y[snake.node-1]-10); }/*endwhile(! kbhit)*/ if(snake.life==1)/*如果蛇死就跳出循环*/ break; key=bioskey(0);/*接收按键*/ if(key==ESC)/*按ESC键退出*/ break; else if(key==UP&&snake.direction! =4) /*判断是否往相反的方向移动*/ snake.direction=3; else if(key==RIGHT&&snake.direction! =2)snake.direction=1; else if(key==LEFT&&snake.direction! =1) snake.direction=2; else if(key==DOWN&&snake.direction! =3) snake.direction=4; }/*endwhile (1)*/ } /*游戏结束*/ voidGameOver(void) { cleardevice(); PrScore(); setcolor(RED); settextstyle(0,0,4);//设置字符的显示风格 outtextxy(200,200,"GAMEOVER");//在当前位置输出一个文本字符串 getch(); } /*输出成绩*/ voidPrScore(void) {charstr[10]; setfillstyle(SOLID_FILL,YELLOW);//设置当前填充模式和填充颜色 bar(50,15,220,35);//画一个二为条形图 setcolor(6); settextstyle(0,0,2); sprintf(str,"score: %d",score); outtextxy(55,20,str); } /*图形结束*/ voidClose(void) {getch(); closegraph();} (2)运行结果 实训二学生成绩管理系统 一、实训目的和要求 利用单链表结构实现学生成绩管理,了解数据库管理的基本功能,掌握C语言中的结构体、指针、函数、文件操作等知识,是一个C语言知识的综合应用。 注意其中的难点,指针变量作函数参数、函数值为指向结构体的指针及单链表机构的应用等知识。 二、主要仪器设备 安装了Windows操作系统、TurboC或VisualC++的计算机。 三、实训内容和原理 设计一个学生成绩管理系统,该系统使用单链表结构管理学生成绩,具有输入记录、查询记录、更新记录、统计记录及输出记录等功能。 四、实训小结 1、功能描述 2、总体设计 (1)功能模块设计 (2)数据结构设计 (3)函数功能描述 3、程序实现 (1)源码分析 (2)运行结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 课程设计 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)