您好,欢迎访问三七文档
贪吃蛇#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#include<time.h>intx,y,a[100][2],b[2],N,M=3;intzb();voidcolor(intb);voidgotoxy(intx,inty);intang();intcs();voidhidden();intcf();int();intsss();intaaa();intddd();intshu();voidsj();voidsj(){inti;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("●");}voidcolor(intb)//颜色函数{HANDLEhConsole=GetStdHandle((STD_OUTPUT_HANDLE));SetConsoleTextAttribute(hConsole,b);}voidgotoxy(intx,inty)//指定坐标函数{COORDpos;pos.X=x;pos.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}intzb()//搞个方框{inti;intj=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++;return0;}intcs()//初始一条蛇{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);return0;}intang(){charc;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");return0;}intcf()//核心算法,记录前一位数组的值,即地址(屏幕位置){inti;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];};returni;}int(){inti,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':();break;case'a':aaa();break;case'd':ddd();break;};}}return0;}intsss(){inti,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;};}}return0;}intaaa(){inti,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':();break;case'a':aaa();break;case's':sss();break;};}}return0;}intddd(){inti,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':();break;case's':sss();break;case'd':ddd();break;};}}return0;}intpr()//打印方格{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();}return0;}voidhidden()//隐藏光标{CONSOLE_CURSOR_INFOcci;GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci);cci.bVisible=0;//赋1为显示,赋0为隐藏SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci);}intshu(){color(70);system("cls");gotoxy(30,11);printf("over!\n\n\n\n");exit(0);return0;}intmain(){color(53);system("cls");hidden();ang();zb();sj();cs();();return0;}
本文标题:贪吃蛇
链接地址:https://www.777doc.com/doc-3261622 .html