贪吃蛇

来源:互联网 发布:c语言有返回值的函数 编辑:程序博客网 时间:2024/04/26 12:36

上传一个贪吃蛇的代码。

#include<iostream>#include<windows.h>#include<conio.h>#include<ctime>using namespace std; #define N 20int snake1[400][2]; //0 代表x坐标 1代表y坐标 int tail1[2]; //蛇尾 int food[2]; int Dir1 = 0;int score1=0;void gotoxy(int x,int y) {//位置函数  COORD pos;  pos.X=2*x; //一个符号两个字符 ,所以横坐标乘2   pos.Y=y;  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}void color(int a) {//颜色函数  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}void drawfood(int y) {srand((unsigned)time(NULL));  food[0]=rand()%N+1; //对22取余 保证食物在墙壁之内   food[1]=rand()%N+1;  gotoxy(food[0],food[1]);  color(y);  cout<<"●"<<endl;}int main() {  int len1=3;   int i,j;//初始化围墙  int wall[N+2][N+2]={{0}}; //初始化一个22*22的墙   color(11);  for(i=0;i<N+2;i++) {      for(j=0;j<N+2;j++) {      wall[i][j]=1;     if(wall[i][j])        cout<<"■"; //一个符号两个字符      }    cout<<endl;  }  gotoxy(N+2,1); //设置下面的提示语句的位置   cout<<"按w,s,a,d和5,2,1,3控制蛇的方向"<<endl;  char ch;  snake1[0][0]=1; //初始化蛇的位置   snake1[1][0]=1;  snake1[2][0]=1;  snake1[1][1]=1;  snake1[0][1]=1;  snake1[0][2]=1;  for(i=0;i<len1;i++) { //第一条蛇的坐标     gotoxy(snake1[i][0],snake1[i][1]);    color(20);    cout<<"★"<<endl;  }  drawfood(1); //生成食物     while(1) {   //  gotoxy(N+2,2);   // cout << snake1[len1-1][1] << endl;    tail1[0]=snake1[len1-1][0]; //蛇尾的横坐标     tail1[1]=snake1[len1-1][1]; //蛇尾的纵坐标        // cout << tail1[1] << endl;    gotoxy(tail1[0],tail1[1]); //     color(11);    cout<<"■"<<endl; //擦除蛇尾运行图像。     for(i=len1-1;i>0;i--) {      snake1[i][0]=snake1[i-1][0]; //每次把蛇头的上一个位置的坐标给蛇头的下下个位置       snake1[i][1]=snake1[i-1][1];       gotoxy(snake1[i][0],snake1[i][1]); //重新构造此时蛇的位置       color(14);      cout<<"★"<<endl;    }    if(kbhit()) {  //获取键盘输入的字符     gotoxy(N+3,2); //显示输入字符的位置       ch=getche();    }    switch(Dir1) {      case 5:snake1[0][1]--;break; //表示向上       case 2:snake1[0][1]++;break;  //表示向下       case 1:snake1[0][0]--;break;  //表示向左       case 3:snake1[0][0]++;break; //表示向右     }    if(Dir1!=5&&ch=='s') //键盘输入s 表示向下     Dir1=2;     else if(Dir1!=2&&ch=='w')    Dir1=5;    else if(Dir1!=1&&ch=='d')    Dir1=3;    else if(Dir1!=3&&ch=='a')    Dir1=1;    gotoxy(snake1[0][0],snake1[0][1]); //此时蛇头的位置     color(14);    cout<<"★"<<endl;    for(int j=0;j<len1;j++) {      if(snake1[j][0]==food[0]&&snake1[j][1]==food[1]) { //当蛇头碰见食物时         len1++; //蛇身加长一         score1++; //分数加一         drawfood(len1); //获取新的食物       }    }   if(snake1[0][0]==0||snake1[0][1]==0||snake1[0][0]==N+1||snake1[0][1]==N+1) //碰墙 则跳出循环      break;   gotoxy(N+3,4); //设置 输出"得分"这个字符的位置    color(12);   cout<<" 得分"<<endl; //输出    gotoxy(N+5,5); //  设置 得分的 位置    color(11);   cout<<score1<<endl; //输出    Sleep(300-score1); //控制蛇的速度   }return 0;}


0 0