//还有暂停系统~
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <windows.h>#include <conio.h> //kbhit()函数头文件
#define N 21 //整个界面的长宽#define X 1 //判断0或1用
int fruit_x=0;//蛇果X坐标int fruit_y=0;//蛇果y坐标int top_x=0;//蛇头x坐标int top_y=0;//蛇头y坐标int tail_x=0;//蛇尾x坐标int tail_y=0;//蛇尾y坐标int body_length=0;//蛇身长int level=0;//递归深度int orient='w';//默认出发方向是往上int init_orient='w';//记录前一个方向,用在使用eating_fruit()前int snake_body_coord_x[N*N];//记录蛇的位置,snake_body_coord_x[0]就是蛇头的x坐标,以此类推int snake_body_coord_y[N*N];
int pic[N][N];//界面的二维数组
int random();void init_pic();void init_snake();void init_snake_top();void init_snake_body();void init_snake_tail();void init_fruit();void restart();void print_pic(); void snake_body_change();void eating_fruit();char forbid_rush_into_body_and_wall();void clear_current_pos();void set_current_pos();void move_snake();void find_fruit();void pause();int egg();
void main(){ printf("贪吃蛇可玩版2.0\n玩法介绍:W(上)S(下)A(左)D(右),不是方向键!\n此地图矩阵为20X20\n死法为围死自己包括用围墙\n"); printf("\n2.0版增加新功能:\n暂停游戏,按 P 即可暂停游戏,再开即再次按下;\n开启作弊系统,某个神秘按键能让你蛇身不吃果直接变长"); printf(",并且会在图上某处显示你作弊了的暗示\n\nPS:(1.0版的按方向键以外的键会导致游戏结束的BUG解决)\n"); system("pause"); srand((int)time(0)); init_pic(); init_snake(); print_pic(); restart();}
void clear_current_pos()//把蛇头蛇身蛇尾置为1即为空白{ int i=0; for(;i<body_length+2;i++) pic[snake_body_coord_y[i]][snake_body_coord_x[i]]=1;}
void set_current_pos()//把所有蛇身置为5,蛇头置为3,蛇尾置为4{ int i=1;
for(;i<=body_length;i++) pic[snake_body_coord_y[i]][snake_body_coord_x[i]]=5;
pic[snake_body_coord_y[0]][snake_body_coord_x[0]]=3; pic[snake_body_coord_y[body_length+1]][snake_body_coord_x[body_length+1]]=4;}
void move_snake()//整个蛇的移动,包括尾巴的移动{ int i; for(i=body_length+1;i>0;i--)//举例说明,尾巴的坐标值等于前一个蛇身的坐标值,也就是说已经移动了,同理可推 { snake_body_coord_y[i]=snake_body_coord_y[i-1]; snake_body_coord_x[i]=snake_body_coord_x[i-1]; }}
int random()//制造随机数,从1到N-1的整数{ int seed; seed=1+(int)((float)(N-2)*rand()/(RAND_MAX+1.0)); return seed;}
void init_pic()//初始化界面,设立围墙为0,里边空处为1{ int i,j; for(i=0;i<N;i++) for(j=0;j<N;j++) { if(i%N==0||i%N==N-1||j%N==0||j%N==N-1) { pic[i][j]=0; } else pic[i][j]=1; }}
void init_snake()//初始化蛇{ init_fruit(); init_snake_top(); init_snake_body(); init_snake_tail();}
void init_snake_top()//初始化蛇头,用整数3表示{ int i,j; i=random(); j=random(); while(1)//如果和蛇果位置一样或者位于边缘地带,重新要个位置 { if(pic[i][j]!=2&&pic[i][j]!=0&&i%(N-2)!=0&&i%(N-3)!=0) { pic[i][j]=3; break; } i=random(); j=random(); } top_x=j; top_y=i; snake_body_coord_x[0] = top_x; snake_body_coord_y[0] = top_y;}
void init_snake_body()//初始化蛇身,用整数5表示{ int i,j; for(i=1;i<N;i++) { for(j=1;j<N;j++) { if(pic[i][j]==3) { pic[i+1][j]=5; snake_body_coord_y[1] = i+1; snake_body_coord_x[1] = j; body_length++; return; } } }}
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <windows.h>#include <conio.h> //kbhit()函数头文件
#define N 21 //整个界面的长宽#define X 1 //判断0或1用
int fruit_x=0;//蛇果X坐标int fruit_y=0;//蛇果y坐标int top_x=0;//蛇头x坐标int top_y=0;//蛇头y坐标int tail_x=0;//蛇尾x坐标int tail_y=0;//蛇尾y坐标int body_length=0;//蛇身长int level=0;//递归深度int orient='w';//默认出发方向是往上int init_orient='w';//记录前一个方向,用在使用eating_fruit()前int snake_body_coord_x[N*N];//记录蛇的位置,snake_body_coord_x[0]就是蛇头的x坐标,以此类推int snake_body_coord_y[N*N];
int pic[N][N];//界面的二维数组
int random();void init_pic();void init_snake();void init_snake_top();void init_snake_body();void init_snake_tail();void init_fruit();void restart();void print_pic(); void snake_body_change();void eating_fruit();char forbid_rush_into_body_and_wall();void clear_current_pos();void set_current_pos();void move_snake();void find_fruit();void pause();int egg();
void main(){ printf("贪吃蛇可玩版2.0\n玩法介绍:W(上)S(下)A(左)D(右),不是方向键!\n此地图矩阵为20X20\n死法为围死自己包括用围墙\n"); printf("\n2.0版增加新功能:\n暂停游戏,按 P 即可暂停游戏,再开即再次按下;\n开启作弊系统,某个神秘按键能让你蛇身不吃果直接变长"); printf(",并且会在图上某处显示你作弊了的暗示\n\nPS:(1.0版的按方向键以外的键会导致游戏结束的BUG解决)\n"); system("pause"); srand((int)time(0)); init_pic(); init_snake(); print_pic(); restart();}
void clear_current_pos()//把蛇头蛇身蛇尾置为1即为空白{ int i=0; for(;i<body_length+2;i++) pic[snake_body_coord_y[i]][snake_body_coord_x[i]]=1;}
void set_current_pos()//把所有蛇身置为5,蛇头置为3,蛇尾置为4{ int i=1;
for(;i<=body_length;i++) pic[snake_body_coord_y[i]][snake_body_coord_x[i]]=5;
pic[snake_body_coord_y[0]][snake_body_coord_x[0]]=3; pic[snake_body_coord_y[body_length+1]][snake_body_coord_x[body_length+1]]=4;}
void move_snake()//整个蛇的移动,包括尾巴的移动{ int i; for(i=body_length+1;i>0;i--)//举例说明,尾巴的坐标值等于前一个蛇身的坐标值,也就是说已经移动了,同理可推 { snake_body_coord_y[i]=snake_body_coord_y[i-1]; snake_body_coord_x[i]=snake_body_coord_x[i-1]; }}
int random()//制造随机数,从1到N-1的整数{ int seed; seed=1+(int)((float)(N-2)*rand()/(RAND_MAX+1.0)); return seed;}
void init_pic()//初始化界面,设立围墙为0,里边空处为1{ int i,j; for(i=0;i<N;i++) for(j=0;j<N;j++) { if(i%N==0||i%N==N-1||j%N==0||j%N==N-1) { pic[i][j]=0; } else pic[i][j]=1; }}
void init_snake()//初始化蛇{ init_fruit(); init_snake_top(); init_snake_body(); init_snake_tail();}
void init_snake_top()//初始化蛇头,用整数3表示{ int i,j; i=random(); j=random(); while(1)//如果和蛇果位置一样或者位于边缘地带,重新要个位置 { if(pic[i][j]!=2&&pic[i][j]!=0&&i%(N-2)!=0&&i%(N-3)!=0) { pic[i][j]=3; break; } i=random(); j=random(); } top_x=j; top_y=i; snake_body_coord_x[0] = top_x; snake_body_coord_y[0] = top_y;}
void init_snake_body()//初始化蛇身,用整数5表示{ int i,j; for(i=1;i<N;i++) { for(j=1;j<N;j++) { if(pic[i][j]==3) { pic[i+1][j]=5; snake_body_coord_y[1] = i+1; snake_body_coord_x[1] = j; body_length++; return; } } }}