C语言课程设计贪吃蛇源代码

  • 格式:docx
  • 大小:14.82 KB
  • 文档页数:9

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言程序贪吃蛇代码

#include

#include

#include

#include

#include

#define N 21

FILE *fp;

int S;

void boundary(void);//开始界面

void end(void); //结束

void gotoxy(int x,int y)//位置函数

{

COORD pos;

pos.X=x;

pos.Y=y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); }

void color(int a)//颜色函数

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);

}

void init(int food[2])//初始化函数(初始化围墙、显示信息、苹果)

{

system("cls");

int i,j;//初始化围墙

int wall[N+2][N+2]={{0}};//初始化围墙的二维数组

for(i=1;i<=N;i++)

{

for(j=1;j<=N;j++)

wall[i][j]=1;

}

color(10);

for(i=0;i

{

for(j=0;j

{

if(wall[i][j])

printf(" ");

else printf("#") ;

}

printf("\n") ;

}

gotoxy(N+3,3);//显示信息

color(14);

printf("\t\t按a,b,c,d改变方向\n");

gotoxy(N+3,1);

color(14);

printf("\t\t按任意键暂停,按1返回,按2退出\n"); gotoxy(N+5,3);

color(14);

printf("score:\n");

food[0]=rand()%N+1;//随机出现食物

food[1]=rand()%N+1;

gotoxy(food[0],food[1]);

color(12);

printf("*\n");

}

void play()//具体玩的过程

{

system("cls");

int i,j;

int** snake=NULL;//定义蛇的二维指针

int food[2];//食物的数组,food[0]代表横坐标,food[1]代表纵坐标

int score=0;//为得分

int tail[2];//此数组为了记录蛇的头的坐标

int node=3;//蛇的节数

char ch='p';

srand((unsigned)time(NULL));//随机数发生器的初始化函数

init(food);

snake=(int**)realloc(snake,sizeof(int*)*node);//改变snake所指内存区域的大小为node长度

for(i=0;i

snake[i]=(int*)malloc(sizeof(int)*2);

for(i=0;i

{

snake[i][0]=N/2;

snake[i][1]=N/2+i;

gotoxy(snake[i][0],snake[i][1]);

color(14);

printf("*\n");

}

while(1)//进入消息循环

{

gotoxy(5,0);

color(10);

printf("#");

gotoxy(0,5);

color(10);

printf("#");

gotoxy(0,7);

color(10);

printf("#");

gotoxy(0,9);

color(10);

printf("#");

tail[0]=snake[node-1][0];//将蛇的后一节坐标赋给tail数组

tail[1]=snake[node-1][1];

gotoxy(tail[0],tail[1]);

color(0);

printf(" ");

for(i=node-1;i>0;i--)//蛇想前移动的关键算法,后一节的占据前一节的地址坐标{

snake[i][0]=snake[i-1][0];

snake[i][1]=snake[i-1][1];

gotoxy(snake[i][0],snake[i][1]);

color(14);

printf("*\n");

}

if(kbhit())//捕捉输入信息

gotoxy(0,N+2);

ch=getche();

}

switch(ch)

{

case 'w':snake[0][1]--;break;

case 's':snake[0][1]++;break;

case 'a':snake[0][0]--;break;

case 'd':snake[0][0]++;break;

case '1':boundary() ;break;

case '2':end();break;

default: break;

}

gotoxy(snake[0][0],snake[0][1]);

color(14);

printf("*\n");

Sleep(abs(200-0.5*score));//使随着分数的增长蛇的移动速度越来越快

if(snake[0][0]==food[0]&&snake[0][1]==food[1])//吃掉食物后蛇分数加1,蛇长加1 {

score++;//分数增加

S=score;

node++;//节数增加

snake=(int**)realloc(snake,sizeof(int*)*node);

snake[node-1]=(int*)malloc(sizeof(int)*2);

food[0]=rand()%N+1;//产生随机数且要在围墙内部