西京c语言课程设计报告Word文件下载.docx
《西京c语言课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《西京c语言课程设计报告Word文件下载.docx(14页珍藏版)》请在冰点文库上搜索。
![西京c语言课程设计报告Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-4/28/b251c77b-9bf5-4e81-8f23-f5ff5cd3af13/b251c77b-9bf5-4e81-8f23-f5ff5cd3af131.gif)
1.数组元素为结构体的数组应用
2.全局变量应用
3.按键处理
4.数组元素与蛇食物对应关系
5.图形方式
课程设计内容
设计一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。
游戏要有开始部分,运行部分,结束部分(实际上开始部分与运行部分是一体的)。
程序开始
程序运行
程序结束
课程设计简要操作步骤
1.画出项目流程图(如下图)
2.写出主函数的整个运行过程
3.整理函数运行过程中所需要的函数及定义
如:
(1).矩形图形函数rectangle()
4.定义各函数,分配功能
voidInit(void);
图形驱动
voidGameOver(void);
游戏结束
voidGamePlay(void);
游戏过程
voidPrScore(void);
输出成绩
5.各函数的编辑
开始画面函数(画围墙)
游戏过程函数(蛇移动的算法蛇吃食物的算法按键算法等)
游戏结束及成绩输出函数
6.定义与各函数的整合嵌入
7.编译调试
8.完成实验报告
课程设计心得体会
通过此程序,我做成了一个完整的小产品。
使我熟悉了面向程序设计的方法步骤。
这次程序设计,我遇到了一个全新的库函数,我通过自己查看库函数源文件,了解了程序的用法并进行了应用。
以此我可以通过发散思维对以后其他的程序所设计到的新的库文件也找到了入手点进而可以编写新的程序。
课程设计评语及成绩
评语
成绩
指导教师
(签名)
2013年6月日
附件:
(源程序)
//********************************************************
//作者:
测控1301李春江
//功能:
贪吃蛇
//运行环境:
vc++6.0
//日期:
2014.6.17
//**************************************************
#include<
windows.h>
stdlib.h>
time.h>
stdio.h>
string.h>
conio.h>
#defineN21
intapple[3];
charscore[3];
chartail[3];
voidgotoxy(intx,inty)//输出坐标
{
COORDpos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
voidcolor(intb)//颜色函数
HANDLEhConsole=GetStdHandle((STD_OUTPUT_HANDLE));
SetConsoleTextAttribute(hConsole,b);
intBlock(charhead[2])//判断出界
if((head[0]<
1)||(head[0]>
N)||(head[1]<
1)||(head[1]>
N))
return1;
return0;
intEat(charsnake[2])//吃了苹果
if((snake[0]==apple[0])&
&
(snake[1]==apple[1]))
{
apple[0]=apple[1]=apple[2]=0;
gotoxy(N+44,10);
color(13);
printf("
%d"
score[0]*10);
color(11);
}
voidDraw(char**snake,intlen)//蛇移动
if(apple[2]){
gotoxy(apple[1]*2,apple[0]);
color(12);
★"
);
gotoxy(tail[1]*2,tail[0]);
if(tail[2])
{color(14);
●"
else
■"
gotoxy(snake[0][1]*2,snake[0][0]);
color(14);
putchar('
\n'
char**Move(char**snake,chardirx,int*len)//控制方向
inti,full=Eat(snake[0]);
memcpy(tail,snake[(*len)-1],2);
for(i=(*len)-1;
i>
0;
--i)
memcpy(snake[i],snake[i-1],2);
switch(dirx)
{
case'
w'
:
W'
--snake[0][0];
break;
s'
S'
++snake[0][0];
a'
A'
--snake[0][1];
d'
D'
++snake[0][1];
default:
;
}
if(full)
snake=(char**)realloc(snake,sizeof(char*)*((*len)+1));
snake[(*len)]=(char*)malloc(sizeof(char)*2);
memcpy(snake[(*len)],tail,2);
++(*len);
++score[0];
if(score[3]<
16)
++score[3];
tail[2]=1;
tail[2]=0;
returnsnake;
voidinit(charplate[N+2][N+2],char***snake_x,int*len)//初始化
inti,j;
char**snake=NULL;
*len=3;
score[0]=score[3]=3;
snake=(char**)realloc(snake,sizeof(char*)*(*len));
for(i=0;
i<
*len;
++i)
snake[i]=(char*)malloc(sizeof(char)*2);
3;
++i)
snake[i][0]=N/2+1;
snake[i][1]=N/2+1+i;
for(i=1;
=N;
for(j=1;
j<
++j)
plate[i][j]=1;
apple[0]=rand()%N+1;
apple[1]=rand()%N+1;
apple[2]=1;
N+2;
gotoxy(0,i);
for(j=0;
switch(plate[i][j])
case0:
printf("
□"
color(11);
continue;
case1:
(*len);
gotoxy(snake[i][1]*2,snake[i][0]);
*snake_x=snake;
voidManual()
gotoxy(N+30,2);
color(10);
按WSAD移动方向"
gotoxy(N+30,4);
按space键暂停"
gotoxy(N+30,8);
历史最高分为:
"
gotoxy(N+44,8);
score[1]*10);
gotoxy(N+30,12);
你现在得分为:
0"
intFile_in()//取记录的分数
FILE*fp;
if((fp=fopen("
C:
\\tcs.txt"
"
a+"
))==NULL)
gotoxy(N+18,N+2);
文件不能打开\n"
exit(0);
if((score[1]=fgetc(fp))!
=EOF);
else
score[1]=0;
intFile_out()//存数据
if(score[1]>
score[0])
{gotoxy(10,10);
puts("
失败了笨蛋"
gotoxy(0,N+2);
w+"
if(fputc(--score[0],fp)==EOF)
输出失败\n"
gotoxy(10,10);
张力丹我爱你"
voidFree(char**snake,intlen)//释放空间
inti;
len;
free(snake[i]);
free(snake);
intmain(void)
intlen;
charch='
g'
;
chara[N+2][N+2]={{0}};
char**snake;
srand((unsigned)time(NULL));
File_in();
init(a,&
snake,&
len);
Manual();
while(ch!
=0x1B)//按ESC结束
Draw(snake,len);
if(!
apple[2]){
Sleep(200-score[3]*10);
setbuf(stdin,NULL);
if(kbhit())
gotoxy(0,N+2);
ch=getche();
snake=Move(snake,ch,&
if(Block(snake[0])==1)
gotoxy(N+2,N+2);
你输了"
File_out();
Free(snake,len);
getche();
}