贪吃蛇
五年级 记叙文 4309字 220人浏览 毛子毛晨晨

贪吃蛇

#include <stdio.h> #include <stdlib.h>

#include <string.h>

#include <windows.h>

#include <time.h>

int x,y,a[100][2],b[2],N,M=3;

int zb();

void color(int b);

void gotoxy(int x,int y);

int ang();

int cs();

void hidden();

int cf();

int www();

int sss();

int aaa();

int ddd();

int shu();

void sj();

void sj()

{

int i;

srand((unsigned)time(NULL)); //随机函数

b[0]= rand() % 74; //取得一个在0到74的随机数

b[1]=rand() % 22;

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

{

if(b[0]==a[i][0]&&b[1]==a[i][1]||b[0]==0||b[0]==1||b[1]==1||b[1]==0)

{

b[0]=abs(b[0]-10);

b[1]=abs(b[1]-10);

if(b[0]==a[i][0]&&b[1]==a[i][1]||b[0]==0||b[0]==1||b[1]==1||b[1]==0) //两次判断,减少错误出现

{

b[0]=abs(b[0]-16); //abs()是绝对值函数

b[1]=abs(b[1]-11);

if(b[0]==a[i][0]&&b[1]==a[i][1]||b[0]==0||b[0]==1||b[1]==1||b[1]==0) //3次判断,减少错误出现

{

b[0]=abs(b[0]-20); //abs()是绝对值函数

b[1]=abs(b[1]-5);

sj(); //递归

};

};

};

}

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

color(60);

printf("●");

}

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

{

HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ; SetConsoleTextAttribute(hConsole,b) ;

}

void gotoxy(int x,int y) //指定坐标函数

{ COORD pos;

pos.X = x;

pos.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }

int zb() //搞个方框

{

int i;

int j=20,k=0,m=25;

color(j);

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

printf("△");

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

{

gotoxy(0,i);printf("△");

};

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

{

gotoxy(76,i);printf("△"); };

gotoxy(0,23);

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

printf("△");

j=j+50;

k++;

return 0;

}

int cs() //初始一条蛇 {

color(5);

a[0][0]=20;

a[0][1]=14;

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

printf("■");

a[1][0]=20;

a[1][1]=13;

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

printf("■");

a[2][0]=20;

a[2][1]=12;

gotoxy(a[2][0],a[2][1]);

printf("■");

Sleep(300);

return 0;

}

int ang()

{

char c;

color(70);

gotoxy(34,7);printf("请选择难度"); gotoxy(34,9);printf("S级难度"); gotoxy(34,11);printf("A级难度"); gotoxy(34,13);printf("B级难度"); gotoxy(34,15);printf("C级难度"); switch(c=getch())

{

case 's' :N=260;break;

case 'a' :N=200;break;

case 'b' :N=100;break;

case 'c' :N=50;break;

default:ang();break;

}

color(53); //先刷色,再清屏

system("cls");

return 0;

}

int cf() //核心算法,记录前一位数组的值,即地址(屏幕位置)

{

int i;

x=a[0][0];

y=a[0][1];

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

{

a[i][0]=a[i+1][0];

a[i][1]=a[i+1][1];

};

return i;

}

int www()

{

int i,c;

while(a[M-1][1]>0) //核心算法,往上一格 {

i=cf();

a[M-1][1]=a[i-2][1]-

1;

a[M-1][0]=a[i-2][0];

if(a[M-1][1]==0) shu(); //碰到边框退出

pr();

if(kbhit()) // kbhit ()检测有没有按键的触动 {

switch(c=getch())

{

case 'w': www();break;

case 'a': aaa();break;

case 'd': ddd();break; };

}

}

return 0;

}

int sss()

{

int i,c;

while(a[M-1][1]<23) {

i=cf();

a[M-1][1]=a[i-2][1]+1; a[M-1][0]=a[i-2][0];

if(a[M-1][1]==23) shu(); pr();

if(kbhit())

{

switch(c=getch())

{

case 'a': aaa();break; case 's': sss();break; case 'd': ddd();break; };

}

}

return 0;

}

int aaa()

{

int i,c;

while(a[M-1][0]>0) {

i=cf();

a[M-1][1]=a[i-2][1];

a[M-1][0]=a[i-2][0]-2;

if(a[M-1][0]==0) shu(); pr();

if(kbhit())

{

switch(c=getch())

{

case 'w': www();break; case 'a': aaa();break; case 's': sss();break; };

}

}

return 0;

}

int ddd()

{

int i,c;

while(a[M-1][0]<76)

{

i=cf();

a[M-1][1]=a[i-2][1];

a[M-1][0]=a[i-2][0]+2;

if(a[M-1][0]>74) shu();

pr();

if(kbhit())

{

switch(c=getch())

{

case 'w': www();break; case 's': sss();break; case 'd': ddd();break; };

}

}

return 0;

}

int pr() //打印方格 {

color(5);

gotoxy(a[M-1][0],a[M-1][1]);

printf("■");

gotoxy(x,y);

color(53);

printf(" ");

Sleep(300-N); //控制打印速度

if(b[0]==a[M-1][0]&&b[1]==a[M-1][1]||b[0]-1==a[M-1][0]&&b[1]==a[M-1][1]||b[0]+1==a[M-1][0]&&b[1]==a[M-1]

[1])//判断有没有吃到苹果

{

M=M+1;

a[M-1][0]=b[0];

a[M-1][1]=b[1];

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

color(5);

printf("■");

sj();

}

return 0;

}

void hidden()//隐藏光标

{

CONSOLE_CURSOR_INFO cci;

GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci); cci.bVisible=0;//赋1为显示,赋0为隐藏

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci); }

int shu()

{

color(70);

system("cls");

gotoxy(30,11);

printf("over!\n\n\n\n");

exit(0);

return 0;

}

int main()

{

color(53);

system("cls"); hidden();

ang();

zb();

sj();

cs();

www();

return 0;

}