搜索
查看: 2908|回复: 27
打印 上一主题 下一主题

[C/C++语言] 啊哈C gcc 可以运行的 贪食蛇 cpp

[复制链接]
跳转到指定楼层
楼主
 楼主| 发表于 2018-8-2 17:01:00 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式


  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <conio.h>
  5. #include <time.h>
  6. #include <windows.h>
  7. using namespace std;
  8. char a[20][21]={"####################",
  9.                 "#                  #",
  10.                 "#  o               #",
  11.                 "#  o               #",
  12.                 "#  o               #",
  13.                 "#                  #",
  14.                 "#     # #          #",
  15.                 "#     # #          #",
  16.                 "#     # #          #",
  17.                 "#    #   #         #",
  18.                 "#   #  *  #        #",
  19.                 "#    #   #         #",
  20.                 "#     # #          #",
  21.                 "#     # #          #",
  22.                 "#     # #          #",
  23.                 "#                  #",
  24.                 "#                  #",
  25.                 "#                  #",
  26.                 "#                  #",
  27.                 "####################"};
  28. int x[10001]={2,3,4},y[10001]={3,3,3},head=2,tail=0,gameover=0,score=0;
  29. int foodx=6,foody=6;
  30. char fx='s',t;
  31. void pmaze()
  32. {
  33.         system("cls");
  34.     printf("\nscore=%d\n",score);
  35.         for(int i=0;i<=19;i++)
  36.         {
  37.                 printf("%s\n",a[i]);
  38.         }
  39.    
  40. }
  41. void newfood()
  42. {
  43.         srand(time(NULL));
  44.     do
  45.     {
  46.                 foodx=rand()%18+1;
  47.                 foody=rand()%18+1;
  48.     }while(a[foodx][foody]!=' ');
  49.     a[foodx][foody]='*';
  50.         score += 10;
  51. }
  52. void move(){
  53.         int newx,newy,hx,hy;//newx,newy为新的蛇头坐标
  54.     hx = x[head]; hy = y[head];//hx,hy当前的蛇头坐标
  55.     //根据运动的方向来计算新的蛇头坐标
  56.         if(fx=='s') { newx = hx+1; newy = hy;}
  57.     if(fx=='w') { newx = hx-1; newy = hy;}
  58.         if(fx=='a') { newx = hx;   newy = hy-1;}
  59.     if(fx=='d') { newx = hx;   newy = hy+1;}
  60.     if(t=='s' && fx!='w') {fx=t;}
  61.     if(t=='w' && fx!='s') {fx=t;}
  62.         if(t=='a' && fx!='d') {fx=t;}
  63.     if(t=='d' && fx!='a') {fx=t;}
  64.     //将新的蛇头坐标 存储到数组中
  65.     if(a[newx][newy]=='#' || a[newx][newy]=='o' ){
  66.                 gameover=1;
  67.     }
  68.     if(a[newx][newy]==' '){
  69.                 head++;
  70.                 x[head]=newx;
  71.                 y[head]=newy;
  72.                 a[newx][newy] = 'o';
  73.         //删除蛇尾
  74.                 int tx,ty;//tx,ty为蛇尾坐标
  75.                 tx=x[tail];
  76.                 ty=y[tail];
  77.                 a[tx][ty]=' ';
  78.                 tail++;
  79.     }
  80.     if(a[newx][newy]=='*'){
  81.                 head++;
  82.                 x[head]=newx;
  83.                 y[head]=newy;
  84.                 a[newx][newy] = 'o';
  85.                 newfood();
  86.     }
  87.    
  88. }
  89. int main()
  90. {
  91.         //a[foodx][foody]='*';
  92.         while(1>0)//游戏主循环
  93.         {
  94.                 pmaze();//打印游戏界面
  95.         if(kbhit())//当键盘有敲击的时候
  96.         {
  97.                         t=getch();//游戏读入       
  98.         }
  99.         move();//
  100.         if(gameover==1)
  101.                 {
  102.                         break;
  103.                 }
  104.         Sleep(150);
  105.         }
  106.    
  107.     printf("Game over");
  108.     return 0;
  109. }
复制代码


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

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表