查看: 213|回复: 0
收起左侧

C++ 贪吃蛇游戏源码 146行

[复制链接]

个人资料

性别:

年龄:

状态: 单身

职业生涯

职位: 初级会员

交易币: 0 个

荣耀勋章

最佳新人活跃会员

发表于 2019-12-4 10:05:36 | 显示全部楼层 |阅读模式

20191204100247.png
源码如下:
  1. #include<iostream>
  2. #include<windows.h>
  3. #include<ctime>
  4. #include<cstdlib>
  5. #include<conio.h>
  6. #define N 21

  7. using namespace std;

  8. void gotoxy(int x,int y)//位置函数
  9. {
  10.     COORD pos;
  11.     pos.X=2*x;
  12.     pos.Y=y;
  13.     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
  14. }

  15. void color(int a)//颜色函数
  16. {
  17.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
  18. }

  19. void init(int apple[2])//初始化函数(初始化围墙、显示信息、苹果)
  20. {
  21.     int i,j;//初始化围墙
  22.     int wall[N+2][N+2]={{0}};
  23.     for(i=1;i<=N;i++)
  24.     {
  25.         for(j=1;j<=N;j++)
  26.             wall[i][j]=1;
  27.     }
  28.     color(11);
  29.     for(i=0;i<N+2;i++)
  30.     {
  31.         for(j=0;j<N+2;j++)
  32.         {
  33.             if(wall[i][j])
  34.                 cout<<"■";
  35.             else
  36.                 cout<<"□" ;
  37.         }
  38.         cout<<endl;
  39.     }
  40.     gotoxy(N+3,1);//显示信息
  41.     color(15);
  42.     cout<<"按 W S A D 移动方向"<<endl;
  43.     gotoxy(N+3,2);
  44.     color(15);
  45.     cout<<"按任意键暂停"<<endl;
  46.     gotoxy(N+3,3);
  47.     color(15);
  48.     cout<<"得分:"<<endl;
  49.     apple[0]=rand()%N+1;//苹果
  50.     apple[1]=rand()%N+1;
  51.     gotoxy(apple[0],apple[1]);
  52.     color(12);
  53.     cout<<"●"<<endl;
  54. }

  55. int main()
  56. {
  57.     system("cls");
  58.     int i,j;
  59.     int** snake=NULL;
  60.     int apple[2];
  61.     int score=0;
  62.     int tail[2];
  63.     int len=3;
  64.     char ch='p';
  65.     srand((unsigned)time(NULL));
  66.     init(apple);
  67.     snake=(int**)realloc(snake,sizeof(int*)*len);
  68.     for(i=0;i<len;i++)
  69.         snake[i]=(int*)malloc(sizeof(int)*2);
  70.     for(i=0;i<len;i++)
  71.     {
  72.         snake[i][0]=N/2;
  73.         snake[i][1]=N/2+i;
  74.         gotoxy(snake[i][0],snake[i][1]);
  75.         color(14);
  76.         cout<<"★"<<endl;
  77.     }
  78.     while(1)//进入消息循环
  79.     {
  80.         tail[0]=snake[len-1][0];
  81.         tail[1]=snake[len-1][1];
  82.         gotoxy(tail[0],tail[1]);
  83.         color(11);
  84.         cout<<"■"<<endl;
  85.         for(i=len-1;i>0;i--)
  86.         {
  87.             snake[i][0]=snake[i-1][0];
  88.             snake[i][1]=snake[i-1][1];
  89.             gotoxy(snake[i][0],snake[i][1]);
  90.             color(14);
  91.             cout<<"★"<<endl;
  92.         }
  93.         if(kbhit())
  94.         {
  95.             gotoxy(0,N+2);
  96.             ch=getch();
  97.         }
  98.         switch(ch)
  99.         {
  100.             case 'w':snake[0][1]--;break;
  101.             case 's':snake[0][1]++;break;
  102.             case 'a':snake[0][0]--;break;
  103.             case 'd':snake[0][0]++;break;
  104.             default: break;
  105.         }
  106.         gotoxy(snake[0][0],snake[0][1]);
  107.         color(14);
  108.         cout<<"★"<<endl;
  109.         Sleep(200-0.5*score);
  110.         if(snake[0][0]==apple[0]&&snake[0][1]==apple[1])//吃掉苹果后蛇分数加1,蛇长加1
  111.         {
  112.             score++;
  113.             len++;
  114.             snake=(int**)realloc(snake,sizeof(int*)*len);
  115.             snake[len-1]=(int*)malloc(sizeof(int)*2);
  116.             apple[0]=rand()%N+1;
  117.             apple[1]=rand()%N+1;
  118.             gotoxy(apple[0],apple[1]);
  119.             color(12);
  120.             cout<<"●"<<endl;
  121.             gotoxy(N+5,3);
  122.             color(20);
  123.             cout<<score<<endl;
  124.         }
  125.         if(snake[0][1]==0||snake[0][1]==N||snake[0][0]==0||snake[0][0]==N)//撞到围墙后失败
  126.         {
  127.             gotoxy(N/2,N/2);
  128.             color(30);
  129.             cout<<"失败!!!"<<endl;
  130.             system("cls");
  131.             cout<<"还想玩吗?(T/F)";
  132.             char tmp;
  133.             cin>>tmp;
  134.             if (tmp == 'T')
  135.                 main();
  136.             else
  137.                 return 0;
  138.         }
  139.     }
  140.     return 0;
  141. }
复制代码


回复 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|天马互联 ( 吉ICP备19000744号