C语言程序课程设计实验报告.docx

上传人:b****2 文档编号:548138 上传时间:2023-04-29 格式:DOCX 页数:21 大小:176.05KB
下载 相关 举报
C语言程序课程设计实验报告.docx_第1页
第1页 / 共21页
C语言程序课程设计实验报告.docx_第2页
第2页 / 共21页
C语言程序课程设计实验报告.docx_第3页
第3页 / 共21页
C语言程序课程设计实验报告.docx_第4页
第4页 / 共21页
C语言程序课程设计实验报告.docx_第5页
第5页 / 共21页
C语言程序课程设计实验报告.docx_第6页
第6页 / 共21页
C语言程序课程设计实验报告.docx_第7页
第7页 / 共21页
C语言程序课程设计实验报告.docx_第8页
第8页 / 共21页
C语言程序课程设计实验报告.docx_第9页
第9页 / 共21页
C语言程序课程设计实验报告.docx_第10页
第10页 / 共21页
C语言程序课程设计实验报告.docx_第11页
第11页 / 共21页
C语言程序课程设计实验报告.docx_第12页
第12页 / 共21页
C语言程序课程设计实验报告.docx_第13页
第13页 / 共21页
C语言程序课程设计实验报告.docx_第14页
第14页 / 共21页
C语言程序课程设计实验报告.docx_第15页
第15页 / 共21页
C语言程序课程设计实验报告.docx_第16页
第16页 / 共21页
C语言程序课程设计实验报告.docx_第17页
第17页 / 共21页
C语言程序课程设计实验报告.docx_第18页
第18页 / 共21页
C语言程序课程设计实验报告.docx_第19页
第19页 / 共21页
C语言程序课程设计实验报告.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言程序课程设计实验报告.docx

《C语言程序课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《C语言程序课程设计实验报告.docx(21页珍藏版)》请在冰点文库上搜索。

C语言程序课程设计实验报告.docx

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//里面包含了很多BIOS和DOS调用函数

#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)运行结果

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2