发布网友 发布时间: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