贪吃蛇

上传一个贪吃蛇的代码。

#include<iostream>
#include<windows.h>
#include<conio.h>
#include<ctime>
using namespace std; 
#define N 20
int 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;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值