怎么改这个贪食蛇代码(c语言),有点变化,并能解释通就行。

发布网友 发布时间:2022-04-24 11:29

我来回答

2个回答

热心网友 时间:2023-10-11 05:46

我写好的,你看你要不要:

/*贪吃蛇*/

/**********************重要思想******************************************************/

//以二维数组为游戏界面。

//通过改变二维数组中指定元素的值实现对事物和蛇的显示和变化



#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#include<conio.h>



#define SHEAD '@'

#define SBODY '&'

#define FOOD '*'

/*************************************关键变量全局声明**********************************************/


const int L=20;

const int H=20;//定义界面的长 和 高

char view[20][20]={' '};//定义界面

int botton;//记录上下左右的操作

int length=1;//蛇的长度,默认为1只有蛇头(蛇头用@表示)

int end=0;//游戏结束条件,1是结束

int sbl=0;//定义蛇身的长度

int speed_time=300;//sleep(speed_time)

int speed_point=0;//用作速度增加提示

int pause_point=-1;//暂停标识,为1代表暂停


struct snake

{

int s_x;

int s_y;

int direction;//存蛇该节点运动的方向   上1  下2  左3  右4


}snake[20*20];


/*********************************函数声明**********************************************************/

void display();//界面显示主菜单

void instruct();//界面显示介绍

void runit();//游戏启动

void init_view();//游戏界面初始化。就是把二维数组的所有元素都赋值为空格,并显示出来

void Creat_food();//创建一个食物

void Get_button();//获取方向键

void start();

void move();

void Check_bound();

void Check_self();

void choose_diff();//选择难度



void display()

{

int i;

printf("********************贪吃蛇v2.0(第一版升级版)************************\n");

printf("1.游戏说明  \n");

printf("2.开始吧  \n");

printf("3.残忍的离开...  \n");

printf("----------------------------------------------------------\n");

printf("你要做什么呢:  ");

scanf("%d",&i);

switch(i)

{

case 1:instruct();break;

case 2:choose_diff();break;

case 3:exit(0);break;

default:

system("cls");

printf("都不知道你在说什么--\n");

display();

}

}


void instruct()

{

system("cls");

printf("------------------------------------------------------\n");

printf("游戏名称:贪吃蛇(v2.0)\n");

printf("版本:v2.0(功能实现版)");

printf("BY 申济铨\n");

printf("开发开始日期:2014-4-17\n");

printf("-------------------版本说明------------------------\n");

printf("1.游戏中可以暂停\n");

printf("2.游戏中蛇的移动速度回增加并有提示\n");

printf("3.实现难度选择\n");

//printf("4.截屏分享\n");

printf("4.为后续版本提供支持\n");

printf("输入回车以返回主菜单?");

if(getchar()=='\n');

while(getchar()=='\n')

{

system("cls");

display();

}

}


void choose_diff()

{

int c;

printf("----------------难度选择------------------------\n");

printf("1.初级\n");

printf("2.中级\n");

printf("3.高级\n");

printf("4.骨灰级\n");

printf("请输入序号:\n");

scanf("%d",&c);

while(c>4||c<1)

{

printf("不识数啊。。。重新输:\n");

scanf("%d",&c);

}

speed_time-=(50*(c-1));

runit();

}


void init_view()

{

int i=0;

int j=0;

printf("----------------------\n");

for(i;i<L;i++)

{

printf("|");

for(j;j<H;j++)

{

printf("%c",view[i][j]);

}

j=0;

printf("|");

if(i==L/2)

{

printf("   回车可以暂停!");

}

printf("\n");

}

printf("----------------------\n");


}


void Creat_food()

{

int x;

int y;

while(1)

{

x=rand()%(L-1);

y=rand()%(H-1);

if(view[x][y]==' ');

{

break;

}

}

view[x][y]=FOOD;

}


void Get_button()//前提是必须先读入一个字符

{

while(kbhit()!=0)

{

botton=getch();

switch (botton)

{

case 75:snake[0].direction=1;break;//上

case 77:snake[0].direction=2;break;//下

case 72:snake[0].direction=3;break;//左

case 80:snake[0].direction=4;break;//右

case 13:pause_point*=-1;

}

if(pause_point!=-1)//游戏暂停

{

pause_point*=-1;

system("pause");

}

}

}


void runit()

{

int sx,sy;

int i,j;

for(i=0;i<H;i++)//界面初始化

{

for(j=0;j<L;j++)

{

view[H][L]=' ';

}

}

system("cls");

srand(time(0));

sx=rand()%(L-1);

sy=rand()%(H-1);

snake[0].s_x=sx;

snake[0].s_y=sy;

snake[0].direction=1;//默认假设蛇头向上运动

view[sx][sy]=SHEAD;

Creat_food();

init_view();

printf("任意方向键开始!\n");

getch();//先读一个字符,骗他,不然执行到Get_button()的时候跳过去按默认值执行,为了让程序一开始不自动动

}



/******************************关键的3个函数*******************************************/

void Check_bound()

{

if((snake[0].s_x<0)||(snake[0].s_x>=H))

{

end=1;

}

if((snake[0].s_y<0)||(snake[0].s_y>=L))

{

end=1;

}

}

void Check_self()

{

if(view[snake[0].s_x][snake[0].s_y]==SBODY)//结束条件。全局变量。作用在start函数。

{

end=1;

}

}


void move()

{

int i=1;

int tmp_x=snake[sbl].s_x;

int tmp_y=snake[sbl].s_y;

int x_0=snake[0].s_x;

int y_0=snake[0].s_y;

view[snake[0].s_x][snake[0].s_y]=' ';

switch(snake[0].direction)//判断蛇移动的方向并改变蛇头位置

{

case 1:snake[0].s_y-=1;break;

case 2:snake[0].s_y+=1;break;

case 3:snake[0].s_x-=1;break;

case 4:snake[0].s_x+=1;break;

}

Check_bound();

Check_self();

if(end==1)

{

printf("你死了\n");

return ;

}

if(view[snake[0].s_x][snake[0].s_y]==FOOD)

{

length++;

sbl+=1;

snake[sbl].direction=snake[0].direction;

snake[sbl].s_x=x_0;

snake[sbl].s_y=y_0;

view[snake[sbl].s_x][snake[sbl].s_y]=SBODY;

Creat_food();

}

else

{

if(sbl!=0)

{

if(sbl==1)

{

view[snake[1].s_x][snake[1].s_y]=' ';

snake[1].s_x=x_0;

snake[1].s_y=y_0;

view[snake[1].s_x][snake[1].s_y]=SBODY;

}

else

{view[snake[1].s_x][snake[1].s_y]=' ';

for(i;i<sbl;i++)

{

snake[i].s_x=snake[i+1].s_x;

snake[i].s_y=snake[i+1].s_y;

view[snake[i].s_x][snake[i].s_y]=SBODY;

}

snake[sbl].s_x=x_0;

snake[sbl].s_y=y_0;

view[snake[sbl].s_x][snake[sbl].s_y]=SBODY;

}

}

else

{

view[snake[sbl].s_x][snake[sbl].s_y]=' ';


}

}

view[snake[0].s_x][snake[0].s_y]=SHEAD;


}



void start()

{

int i=0;//后续版本使用

int j=0;

while(1)

{

_sleep(speed_time-5*(length/5));

if(speed_point!=(length/5))

{

speed_point=(length/5);

printf("速度增加了哦!\n");

_sleep(1000);

}

Get_button();

move();

if(end==1)

{

system("cls");

printf("死得好!!\n");

printf("再见!!\n");

_sleep(2000);

for(i=0;i<L;i++)

{

for(j=0;j<H;j++)

{

view[i][j]=' ';

}

}

for(i=0;i<length;i++)

{

snake[i].s_x=0;

snake[i].s_y=0;

}

length=0;

sbl=0;

end=0;

speed_time=300;

display();



}

system("cls");

init_view();

printf("任意方向键开始!");

}



}


int main()

{

display();

start();

return 0;

}


热心网友 时间:2023-10-11 05:46

我有一份之前也是知道答题的贪食蛇代码,你要不要。。追问太好了,要要要,992141548 qq e-mail

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com